From 5891206952e2ff63e87aed2f47df5324b019d32e Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 25 十月 2022 00:39:38 +0800
Subject: [PATCH] 2022-10-25

---
 src/views/menudesign/index.jsx |  176 ++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 109 insertions(+), 67 deletions(-)

diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx
index 510bace..0d73df8 100644
--- a/src/views/menudesign/index.jsx
+++ b/src/views/menudesign/index.jsx
@@ -4,7 +4,7 @@
 import { is, fromJS } from 'immutable'
 import moment from 'moment'
 import HTML5Backend from 'react-dnd-html5-backend'
-import { ConfigProvider, notification, Modal, Collapse, Card, Switch, Button, Typography } from 'antd'
+import { ConfigProvider, notification, Modal, Collapse, Card, Switch, Button, Typography, Spin } from 'antd'
 import { DoubleLeftOutlined, DoubleRightOutlined, EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons'
 import html2canvas from 'html2canvas'
 import md5 from 'md5'
@@ -12,10 +12,9 @@
 import Api from '@/api'
 import options from '@/store/options.js'
 import Utils, { setGLOBFuncs } from '@/utils/utils.js'
-// import antdEnUS from 'antd/es/locale/en_US'
 import antdZhCN from 'antd/es/locale/zh_CN'
 import MKEmitter from '@/utils/events.js'
-import MenuUtils from '@/utils/utils-custom.js'
+import MenuUtils, { getTables } from '@/utils/utils-custom.js'
 import asyncComponent from '@/utils/asyncComponent'
 
 import '@/assets/css/design.scss'
@@ -28,6 +27,7 @@
 
 const MenuForm = asyncComponent(() => import('./menuform'))
 const HomeForm = asyncComponent(() => import('./homeform'))
+const PopView = asyncComponent(() => import('./popview'))
 const Header = asyncComponent(() => import('@/menu/header'))
 const MenuShell = asyncComponent(() => import('@/menu/menushell'))
 const PrintMenuForm = asyncComponent(() => import('./printmenuform'))
@@ -68,7 +68,8 @@
     comloading: false,
     settingshow: true,
     eyeopen: false,
-    modalStatus: false       // 寮圭獥鏄惁寮�鍚紝鍒ゆ柇ctrl+s鏄惁鍙敤
+    view: '',
+    popConfig: null,
   }
 
   UNSAFE_componentWillMount() {
@@ -106,7 +107,6 @@
 
   componentDidMount () {
     MKEmitter.addListener('delButtons', this.delButtons)
-    MKEmitter.addListener('modalStatus', this.modalStatus)
     MKEmitter.addListener('copyButtons', this.copyButtons)
     MKEmitter.addListener('changePopview', this.initPopview)
     MKEmitter.addListener('triggerMenuSave', this.triggerMenuSave)
@@ -145,10 +145,23 @@
       let _shortcut = `${preKey}+${keyCode}`
 
       if (_shortcut === 'ctrl+83') {
-        if (this.state.modalStatus) {
+        let modals = document.querySelectorAll('.mk-pop-modal')
+        let msg = null
+        for (let i = 0; i < modals.length; i++) {
+          if (msg) {
+            break
+          }
+
+          let node = modals[i].querySelector('.mk-com-name')
+
+          if (node) {
+            msg = node.innerText
+          }
+        }
+        if (msg) {
           notification.warning({
             top: 92,
-            message: '璇蜂繚瀛�' + this.state.modalStatus,
+            message: '璇蜂繚瀛�' + msg,
             duration: 5
           })
           return false
@@ -175,15 +188,10 @@
       return
     }
     MKEmitter.removeListener('delButtons', this.delButtons)
-    MKEmitter.removeListener('modalStatus', this.modalStatus)
     MKEmitter.removeListener('copyButtons', this.copyButtons)
     MKEmitter.removeListener('changePopview', this.initPopview)
     MKEmitter.removeListener('triggerMenuSave', this.triggerMenuSave)
     MKEmitter.removeListener('updateCustomComponent', this.updateCustomComponent)
-  }
-
-  modalStatus = (val) => {
-    this.setState({modalStatus: val})
   }
 
   triggerMenuSave = () => {
@@ -235,41 +243,39 @@
   }
 
   getAppPictures = () => {
-    if (sessionStorage.getItem('app_videos') || sessionStorage.getItem('app_pictures')) return
+    if (sessionStorage.getItem('app_pictures')) return
     
-    Api.getSystemConfig({
+    let deffers = []
+    let param = {
       func: 's_url_db_adduptdel',
       PageIndex: 0,  // 0 浠h〃鍏ㄩ儴
       PageSize: 0,   // 0 浠h〃鍏ㄩ儴
-      typecharone: 'image',
       type: 'search'
-    }).then(res => {
-      if (res.status) {
-        sessionStorage.setItem('app_pictures', JSON.stringify(res.data || []))
-      }
+    }
+    deffers = [new Promise(resolve => {
+      setTimeout(() => {
+        Api.getSystemConfig({...param, typecharone: 'image'}).then(res => {
+          resolve(res.data)
+        })
+      }, 500)
+    }), new Promise(resolve => {
+      setTimeout(() => {
+        Api.getSystemConfig({...param, typecharone: 'video'}).then(res => {
+          resolve(res.data)
+        })
+      }, 1000)
+    }), new Promise(resolve => {
+      setTimeout(() => {
+        Api.getSystemConfig({...param, typecharone: 'color'}).then(res => {
+          resolve(res.data)
+        })
+      }, 1500)
+    })]
 
-      Api.getSystemConfig({
-        func: 's_url_db_adduptdel',
-        PageIndex: 0,  // 0 浠h〃鍏ㄩ儴
-        PageSize: 0,   // 0 浠h〃鍏ㄩ儴
-        typecharone: 'video',
-        type: 'search'
-      }).then(res => {
-        if (res.status) {
-          sessionStorage.setItem('app_videos', JSON.stringify(res.data || []))
-        }
-      })
-      Api.getSystemConfig({
-        func: 's_url_db_adduptdel',
-        PageIndex: 0,  // 0 浠h〃鍏ㄩ儴
-        PageSize: 0,   // 0 浠h〃鍏ㄩ儴
-        typecharone: 'color',
-        type: 'search'
-      }).then(res => {
-        if (res.status) {
-          sessionStorage.setItem('app_colors', JSON.stringify(res.data || []))
-        }
-      })
+    Promise.all(deffers).then(response => {
+      sessionStorage.setItem('app_pictures', JSON.stringify(response[0] || []))
+      sessionStorage.setItem('app_videos', JSON.stringify(response[1] || []))
+      sessionStorage.setItem('app_colors', JSON.stringify(response[2] || []))
     })
   }
 
@@ -330,22 +336,30 @@
   }
 
   initPopview = (card, btn) => {
-    const { oriConfig, config } = this.state
-
-    if (!is(fromJS(oriConfig), fromJS(config))) {
-      notification.warning({
-        top: 92,
-        message: '閰嶇疆宸蹭慨鏀癸紝璇蜂繚瀛橈紒',
-        duration: 5
-      })
-      return
-    }
+    const { config } = this.state
 
     let _btn = fromJS(btn).toJS()
-    _btn.MenuName = config.MenuName + '-' + card.name + '-' + btn.label
-    _btn.ParentMenuID = config.uuid
 
-    this.props.history.push('/popdesign/' + window.btoa(window.encodeURIComponent((JSON.stringify(_btn)))))
+    if (_btn.config) {
+      _btn.config.uuid = _btn.uuid
+      _btn.config.MenuID = _btn.uuid
+      _btn.config.ParentId = card.uuid
+    } else {
+      _btn.config = {
+        uuid: _btn.uuid,
+        MenuID: _btn.uuid,
+        ParentId: card.uuid,
+        enabled: false,
+        MenuName: btn.label,
+        tables: config.tables || [],
+        Template: 'CustomPage',
+        components: [],
+        viewType: 'popview',
+        style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
+      }
+    }
+
+    this.setState({view: 'popview', popConfig: _btn})
   }
 
   closeView = () => {
@@ -391,7 +405,7 @@
 
         if (!config) {
           config = {
-            version: 1.0,
+            version: 2.0,
             uuid: MenuId,
             MenuID: MenuId,
             parentId: ParentId,
@@ -437,11 +451,19 @@
         config.open_edition = result.open_edition || ''
         window.GLOB.urlFields = config.urlFields || []
 
-        this.setState({
-          oriConfig: config,
-          config: fromJS(config).toJS()
-        })
-        window.GLOB.customMenu = config
+        // if (config.version !== 2.0) {
+        //   this.setState({
+        //     oriConfig: fromJS(config).toJS(),
+        //     comloading: true
+        //   })
+        //   this.updatePage(config)
+        // } else {
+          this.setState({
+            oriConfig: fromJS(config).toJS(),
+            config: config
+          })
+          window.GLOB.customMenu = config
+        // }
       } else {
         notification.warning({
           top: 92,
@@ -450,6 +472,26 @@
         })
       }
     })
+  }
+
+  updatePage = (config) => {
+    let popBtns = []
+
+    let traversal = (components) => {
+      components.forEach(item => {
+        if (item.type === 'tabs') {
+          item.subtabs.forEach(tab => {
+            traversal(tab.components)
+          })
+        } else if (item.type === 'group') {
+          traversal(item.components)
+        } else if (item.type !== 'search') {
+          item.$tables = getTables(item, popBtns)
+        }
+      })
+    }
+
+    traversal(config.components)
   }
 
   getMenuMessage = (delButtons, tbs) => {
@@ -1054,11 +1096,11 @@
   }
 
   render () {
-    const { activeKey, comloading, MenuType, MenuId, config, settingshow, ParentId, menuloading, customComponents, eyeopen } = this.state
+    const { view, activeKey, comloading, MenuType, MenuId, config, settingshow, ParentId, menuloading, customComponents, eyeopen } = this.state
 
     return (
       <ConfigProvider locale={_locale}>
-        <div className={'pc-menu-view ' + (MenuType || '')}>
+        {view !== 'popview' ? <div className={'pc-menu-view ' + (MenuType || '')}>
           <Header />
           <DndProvider backend={HTML5Backend}>
             <div className="menu-body">
@@ -1125,15 +1167,15 @@
                     <Button type="default" onClick={this.closeView}>鍏抽棴</Button>
                   </div>
                 } style={{ width: '100%' }}>
-                  {config && !comloading ? <MenuShell menu={config} handleList={this.updateConfig} /> : null}
+                  {config && !comloading ? <MenuShell menu={config} handleList={this.updateConfig} /> : <Spin className="loading-config" size="large" />}
                 </Card>
               </div>
             </div>
           </DndProvider>
-          <StyleController />
-          <StyleCombController />
-          <ModalController />
-        </div>
+        </div> : <PopView btn={this.state.popConfig}/>}
+        <ModalController />
+        <StyleController />
+        <StyleCombController />
       </ConfigProvider>
     )
   }

--
Gitblit v1.8.0