From 2ae980243b7ad705dea575eadcfc4cf4e24073bd Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 17 五月 2022 22:57:19 +0800
Subject: [PATCH] Merge branch 'master' into positec

---
 src/views/pcdesign/index.jsx |  151 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 145 insertions(+), 6 deletions(-)

diff --git a/src/views/pcdesign/index.jsx b/src/views/pcdesign/index.jsx
index b71d127..c574d3e 100644
--- a/src/views/pcdesign/index.jsx
+++ b/src/views/pcdesign/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'
@@ -29,6 +29,7 @@
 const PopviewController = asyncComponent(() => import('@/menu/popview'))
 const Versions = asyncComponent(() => import('@/menu/versions'))
 const MenuShell = asyncComponent(() => import('@/pc/menushell'))
+const ViewNodes = asyncComponent(() => import('@/menu/viewnodes'))
 const SourceWrap = asyncComponent(() => import('@/pc/modulesource'))
 const CreateView = asyncComponent(() => import('@/pc/createview'))
 const BgController = asyncComponent(() => import('@/pc/bgcontroller'))
@@ -75,7 +76,8 @@
     customComponents: [],
     settingshow: sessionStorage.getItem('settingshow') !== 'false',
     controlshow: sessionStorage.getItem('controlshow') !== 'false',
-    comloading: false
+    comloading: false,
+    eyeopen: false
   }
 
   UNSAFE_componentWillMount() {
@@ -691,6 +693,7 @@
         return item
       })
       sessionStorage.setItem('appMenus', JSON.stringify(menus))
+      sessionStorage.setItem('allMenus', JSON.stringify(res.menus || []))
     })
   }
 
@@ -911,6 +914,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,
@@ -923,6 +928,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,
@@ -934,6 +941,8 @@
             })
             card.backElements && card.backElements.forEach(cell => {
               if (cell.eleType !== 'button') return
+              if (cell.hidden === 'true') return
+
               this.checkBtn(cell)
               m.children.push({
                 key: cell.uuid,
@@ -948,6 +957,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,
@@ -961,6 +972,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,
@@ -990,6 +1003,8 @@
           })
         } else if (item.type === 'table' && (item.subtype === 'normaltable' || item.subtype === 'editable')) {
           item.action && item.action.forEach(btn => {
+            if (btn.hidden === 'true') return
+
             this.checkBtn(btn)
             m.children.push({
               key: btn.uuid,
@@ -1002,6 +1017,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,
@@ -1057,6 +1074,121 @@
     }
   }
 
+  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 === 'login') {
+          if (item.wrap.linkmenu && menuObj[item.wrap.linkmenu]) {
+            menus.push(menuObj[item.wrap.linkmenu])
+          }
+        } 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
+  }
+
   submitConfig = () => {
     const { delButtons, copyButtons, thawButtons } = this.state
     let config = fromJS(this.state.config).toJS()
@@ -1086,6 +1218,10 @@
 
       let roleParam = this.getMenuMessage()
 
+      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',
@@ -1102,7 +1238,8 @@
         menus_rolelist: window.btoa(window.encodeURIComponent(JSON.stringify(roleParam))),
         open_edition: config.open_edition,
         LText: '',
-        LTexttb: ''
+        LTexttb: '',
+        menus_used_list
       }
 
       param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
@@ -1762,7 +1899,7 @@
   }
 
   render () {
-    const { localedict, loading, visible, popBtn, comloading, activeKey, settingshow, controlshow, dict, MenuId, config, menuloading, customComponents } = this.state
+    const { localedict, loading, visible, popBtn, comloading, activeKey, settingshow, controlshow, dict, MenuId, config, menuloading, customComponents, eyeopen } = this.state
 
     return (
       <ConfigProvider locale={localedict}>
@@ -1812,9 +1949,10 @@
                 <Button type="primary" id="save-config" onClick={this.submitConfig} 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}/>
@@ -1823,11 +1961,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 ? <MenuShell menu={config} handleList={this.updateConfig} /> : null}
             </div>
           </DndProvider> : null}

--
Gitblit v1.8.0