From fb3ec146a9e1444ece749d0bcf232a554e933fb0 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 17 五月 2022 22:56:16 +0800
Subject: [PATCH] Merge branch 'develop'

---
 src/views/mobdesign/index.jsx |  202 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 195 insertions(+), 7 deletions(-)

diff --git a/src/views/mobdesign/index.jsx b/src/views/mobdesign/index.jsx
index 98854e4..f2fdb32 100644
--- a/src/views/mobdesign/index.jsx
+++ b/src/views/mobdesign/index.jsx
@@ -6,7 +6,7 @@
 import moment from 'moment'
 import HTML5Backend from 'react-dnd-html5-backend'
 import { ConfigProvider, notification, Modal, Collapse, Switch, Button, message, Spin, Typography } from 'antd'
-import { DoubleLeftOutlined, DoubleRightOutlined, HomeOutlined, LoginOutlined, RedoOutlined, ArrowLeftOutlined } from '@ant-design/icons'
+import { DoubleLeftOutlined, DoubleRightOutlined, HomeOutlined, LoginOutlined, RedoOutlined, ArrowLeftOutlined, EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons'
 
 import Api from '@/api'
 import Utils, { setGLOBFuncs } from '@/utils/utils.js'
@@ -30,6 +30,7 @@
 const CreateView = asyncComponent(() => import('@/pc/createview'))
 const Transfer = asyncComponent(() => import('@/pc/transfer'))
 const Versions = asyncComponent(() => import('@/menu/versions'))
+const ViewNodes = asyncComponent(() => import('@/menu/viewnodes'))
 const SourceWrap = asyncComponent(() => import('@/mob/modulesource'))
 const BgController = asyncComponent(() => import('@/pc/bgcontroller'))
 const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
@@ -73,7 +74,8 @@
     controlshow: true,
     comloading: false,
     adapters: [],
-    viewType: 'menu'
+    viewType: 'menu',
+    eyeopen: false
   }
 
   UNSAFE_componentWillMount() {
@@ -124,6 +126,7 @@
           viewType: /^userbind/.test(param.MenuID) ? 'userbind' : 'menu'
         }, () => {
           this.getMenuParam(param)
+          this.getRelationMenus()
         })
       }
     } catch (e) {
@@ -570,6 +573,29 @@
     this.getAppMenus()
   }
 
+  getRelationMenus = () => {
+    const { MenuId } = this.state
+    
+    let param = {
+      func: 's_get_menu_used_list',
+      TypeCharOne: sessionStorage.getItem('kei_no'),
+      typename: sessionStorage.getItem('typename'),
+      par_menuid: MenuId,
+      // used_menuid: MenuId
+    }
+
+    Api.getSystemConfig(param).then(result => {
+      if (!result.status) {
+        notification.warning({
+          top: 92,
+          message: result.message,
+          duration: 5
+        })
+        return
+      }
+    })
+  }
+
   setUserBindMenu = (config, result) => {
     const { MenuId } = this.state
     let isCreate = !config
@@ -691,6 +717,7 @@
         return item
       })
       sessionStorage.setItem('appMenus', JSON.stringify(menus))
+      sessionStorage.setItem('allMenus', JSON.stringify(res.menus || []))
     })
   }
 
@@ -911,6 +938,8 @@
           return null
         } else if (item.type === 'card' || (item.type === 'table' && item.subtype === 'tablecard')) {
           item.action && item.action.forEach(btn => {
+            if (btn.hidden === 'true') return
+
             this.checkBtn(btn)
             m.children.push({
               key: btn.uuid,
@@ -920,6 +949,8 @@
           item.subcards.forEach(card => {
             card.elements && card.elements.forEach(cell => {
               if (cell.eleType !== 'button') return
+              if (cell.hidden === 'true') return
+
               this.checkBtn(cell)
               m.children.push({
                 key: cell.uuid,
@@ -931,6 +962,8 @@
           item.subcards.forEach(card => {
             card.elements && card.elements.forEach(cell => {
               if (cell.eleType !== 'button') return
+              if (cell.hidden === 'true') return
+
               this.checkBtn(cell)
               m.children.push({
                 key: cell.uuid,
@@ -941,6 +974,8 @@
         } else if (item.type === 'balcony') {
           item.elements && item.elements.forEach(cell => {
             if (cell.eleType !== 'button') return
+            if (cell.hidden === 'true') return
+
             this.checkBtn(cell)
             m.children.push({
               key: cell.uuid,
@@ -967,6 +1002,8 @@
           })
         } else if (item.type === 'table' && item.subtype === 'normaltable') {
           item.action && item.action.forEach(btn => {
+            if (btn.hidden === 'true') return
+
             this.checkBtn(btn)
             m.children.push({
               key: btn.uuid,
@@ -976,6 +1013,8 @@
           item.cols && item.cols.forEach(col => {
             if (col.type !== 'action') return
             col.elements.forEach(btn => {
+              if (btn.hidden === 'true') return
+
               this.checkBtn(btn)
               m.children.push({
                 key: btn.uuid,
@@ -994,6 +1033,148 @@
     let trees = traversal(config.components)
 
     return trees
+  }
+
+  getSubMenus = () => {
+    const { config } = this.state
+    let menus = []
+    let menuObj = {}
+    let allMenus = JSON.parse(sessionStorage.getItem('allMenus'))
+
+    allMenus.forEach(item => {
+      menuObj[item.MenuID] = item
+    })
+
+    let traversal = (components) => {
+      components.forEach(item => {
+        if (item.type === 'topbar') {
+          if (item.wrap.linkmenu && menuObj[item.wrap.linkmenu]) {
+            menus.push(menuObj[item.wrap.linkmenu])
+          }
+          if (item.wrap.menus) {
+            item.wrap.menus.forEach(m => {
+              if (!menuObj[m.menu]) return
+
+              menus.push(menuObj[m.menu])
+            })
+          }
+        } else if (item.type === 'login') {
+          if (item.wrap.linkmenu && menuObj[item.wrap.linkmenu]) {
+            menus.push(menuObj[item.wrap.linkmenu])
+          }
+        } else if (item.type === 'menubar' && item.subtype !== 'commonbar') {
+          item.subMenus.forEach(m => {
+            if (m.setting.type === 'menu') {
+              if (menuObj[m.uuid]) {
+                menus.push(menuObj[m.uuid])
+              } else {
+                menus.push({
+                  MenuID: m.uuid,
+                  MenuName: m.setting.name,
+                  MenuNo: m.setting.MenuNo
+                })
+              }
+            } else if (m.setting.type === 'linkmenu' && menuObj[m.setting.linkMenuId]) {
+              menus.push(menuObj[m.setting.linkMenuId])
+            }
+          })
+        } else if (item.type === 'tabs') {
+          item.subtabs.forEach(tab => {
+            traversal(tab.components)
+          })
+        } else if (item.type === 'group') {
+          traversal(item.components)
+        } else if (item.type === 'card' || (item.type === 'table' && item.subtype === 'tablecard')) {
+          item.action && item.action.forEach(btn => {
+            if (btn.linkmenu && menuObj[btn.linkmenu]) {
+              menus.push(menuObj[btn.linkmenu])
+            } else if (btn.openmenu && menuObj[btn.openmenu]) {
+              menus.push(menuObj[btn.openmenu])
+            }
+          })
+          item.subcards.forEach(card => {
+            if (card.setting.click === 'menu' && menuObj[card.setting.menu]) {
+              menus.push(menuObj[card.setting.menu])
+            } else if (card.setting.click === 'menus' && card.menus) {
+              card.menus.forEach(m => {
+                if (menuObj[m.menu]) {
+                  menus.push(menuObj[m.menu])
+                }
+              })
+            }
+            card.elements && card.elements.forEach(cell => {
+              if (cell.eleType !== 'button') return
+
+              if (cell.linkmenu && menuObj[cell.linkmenu]) {
+                menus.push(menuObj[cell.linkmenu])
+              } else if (cell.openmenu && menuObj[cell.openmenu]) {
+                menus.push(menuObj[cell.openmenu])
+              }
+            })
+          })
+        } else if (item.type === 'carousel' || item.type === 'timeline') {
+          item.subcards.forEach(card => {
+            if (card.setting.click === 'menu' && menuObj[card.setting.menu]) {
+              menus.push(menuObj[card.setting.menu])
+            }
+            card.elements && card.elements.forEach(cell => {
+              if (cell.eleType !== 'button') return
+
+              if (cell.linkmenu && menuObj[cell.linkmenu]) {
+                menus.push(menuObj[cell.linkmenu])
+              } else if (cell.openmenu && menuObj[cell.openmenu]) {
+                menus.push(menuObj[cell.openmenu])
+              }
+            })
+          })
+        } else if (item.type === 'balcony') {
+          item.elements && item.elements.forEach(cell => {
+            if (cell.eleType !== 'button') return
+
+            if (cell.linkmenu && menuObj[cell.linkmenu]) {
+                menus.push(menuObj[cell.linkmenu])
+              } else if (cell.openmenu && menuObj[cell.openmenu]) {
+                menus.push(menuObj[cell.openmenu])
+              }
+          })
+        } else if (item.type === 'form') {
+          item.subcards.forEach(m => {
+            if (m.subButton && m.subButton.linkmenu && menuObj[m.subButton.linkmenu]) {
+              menus.push(menuObj[m.subButton.linkmenu])
+            }
+          })
+        } else if (item.type === 'table' && item.subtype === 'normaltable') {
+          item.action && item.action.forEach(btn => {
+            if (btn.linkmenu && menuObj[btn.linkmenu]) {
+              menus.push(menuObj[btn.linkmenu])
+            } else if (btn.openmenu && menuObj[btn.openmenu]) {
+              menus.push(menuObj[btn.openmenu])
+            }
+          })
+          item.cols && item.cols.forEach(col => {
+            if (col.type !== 'action') return
+            col.elements.forEach(btn => {
+              if (btn.linkmenu && menuObj[btn.linkmenu]) {
+                menus.push(menuObj[btn.linkmenu])
+              } else if (btn.openmenu && menuObj[btn.openmenu]) {
+                menus.push(menuObj[btn.openmenu])
+              }
+            })
+          })
+        }
+      })
+    }
+
+    traversal(config.components)
+
+    let map = new Map()
+    menus = menus.filter(m => {
+      if (map.has(m.MenuID)) return false
+      map.set(m.MenuID, true)
+      return true
+    })
+
+    return menus
   }
 
   checkBtn = (btn) => {
@@ -1147,6 +1328,10 @@
         config = this.getMiniStyle(config)
       }
 
+      let subMenus = this.getSubMenus()
+      let menus_used_list = subMenus.map(m => `'${config.uuid}','${config.MenuName || ''}','${config.MenuNo || ''}','${m.MenuID}','${m.MenuName}'`).join(';')
+      menus_used_list = window.btoa(window.encodeURIComponent(menus_used_list || 'del'))
+
       let param = {
         func: 'sPC_TrdMenu_AddUpt',
         FstID: 'mk_app',
@@ -1163,7 +1348,8 @@
         open_edition: config.open_edition,
         menus_rolelist: window.btoa(window.encodeURIComponent(JSON.stringify(roleParam))),
         LText: '',
-        LTexttb: ''
+        LTexttb: '',
+        menus_used_list
       }
 
       param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
@@ -1714,7 +1900,7 @@
 
 
   render () {
-    const { viewType, localedict, comloading, loading, settingshow, controlshow, activeKey, dict, MenuId, config, menuloading, customComponents, adapters } = this.state
+    const { viewType, localedict, comloading, loading, settingshow, controlshow, activeKey, dict, MenuId, config, menuloading, customComponents, adapters, eyeopen } = this.state
 
     return (
       <ConfigProvider locale={localedict}>
@@ -1757,7 +1943,7 @@
                 </Collapse>
               </div>
             </div>
-            <div className={'menu-control ' + (!controlshow ? 'hidden' : '')}>
+            <div className={'menu-control' + (!controlshow ? ' hidden' : '')}>
               <div className="draw">
                 {controlshow ? <DoubleRightOutlined onClick={() => {this.setState({controlshow: false})}}/> : null}
                 {!controlshow ? <DoubleLeftOutlined onClick={() => {this.setState({controlshow: true})}}/> : null}
@@ -1766,9 +1952,10 @@
                 <Button type="primary" onClick={this.submitConfig} id="save-config" loading={menuloading}>{dict['mob.save']}</Button>
                 <Switch className="big" checkedChildren={dict['mob.enable']} unCheckedChildren={dict['mob.disable']} checked={config && config.enabled} onChange={this.onEnabledChange} />
                 <ArrowLeftOutlined title="鍚庨��" className="back-view" onClick={this.backView}/>
+                <Button className="mk-border-purple" onClick={() => this.setState({eyeopen: !eyeopen})}>{!eyeopen ? <EyeOutlined /> : <EyeInvisibleOutlined />} 缁勪欢鍚�</Button>
                 <CreateView resetmenu={this.getAppMenus} />
                 <PasteController insert={this.insert} />
-                <StyleCombControlButton menu={config} />
+                <ViewNodes config={config} MenuId={MenuId}/>
                 <SysInterface config={config} updateConfig={this.updateConfig}/>
                 <PictureController/>
                 <Quotecomponent config={config} updateConfig={this.updateConfig}/>
@@ -1777,11 +1964,12 @@
                 <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
                 <Transfer MenuID={MenuId} />
                 <Versions MenuId={MenuId} open_edition={config ? config.open_edition : ''}/>
+                <StyleCombControlButton menu={config} />
                 <Button className="mk-border-danger" onClick={this.refreshView}><RedoOutlined /> 寮哄埗鍒锋柊</Button>
                 <Button type="default" onClick={this.closeView}>鍏抽棴</Button>
               </div>
             </div>
-            <div className={'menu-body menu-view' + (menuloading ? 'saving' : '')}>
+            <div className={'menu-body menu-view' + (menuloading ? ' saving' : '') + (eyeopen ? ' eye-open' : '')}>
               {config && !comloading ? <div className="mob-shell" style={{width: window.GLOB.shellWidth, height: window.GLOB.shellHeight}}>
                 <MobShell menu={config} handleList={this.updateConfig} />
               </div> : null}

--
Gitblit v1.8.0