From c8e680b315ce010905f6b0409d3156218abfe056 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 11 三月 2021 19:03:31 +0800
Subject: [PATCH] 2021-03-11

---
 src/pc/components/navbar/normal-navbar/index.jsx                         |    7 
 src/pc/modulesource/option.jsx                                           |    3 
 src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx           |   40 ++
 src/menu/components/carousel/prop-card/index.scss                        |    5 
 src/views/pcdesign/menuform/index.jsx                                    |    4 
 src/utils/utils-custom.js                                                |   16 +
 src/menu/components/card/cardcellcomponent/elementform/index.jsx         |    4 
 src/pc/menushell/index.jsx                                               |    2 
 src/assets/mobimg/carousel1.png                                          |    0 
 src/menu/components/tabs/tabcomponents/index.jsx                         |    2 
 src/templates/menuconfig/editthdmenu/index.jsx                           |    2 
 src/views/pcdesign/index.scss                                            |   10 
 src/tabviews/zshare/actionList/normalbutton/index.jsx                    |  108 ++++---
 src/views/menudesign/index.jsx                                           |    2 
 src/menu/modulesource/option.jsx                                         |    3 
 src/index.js                                                             |    3 
 src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx           |   40 ++
 src/assets/mobimg/carousel.png                                           |    0 
 src/menu/components/card/cardcellcomponent/index.jsx                     |    2 
 src/views/pcdesign/index.jsx                                             |  257 +++++++++++++++--
 src/templates/modalconfig/settingform/index.jsx                          |    7 
 src/menu/datasource/verifycard/settingform/index.jsx                     |    2 
 src/pc/components/navbar/normal-navbar/linksetting/linkform/index.jsx    |   12 
 src/pc/components/navbar/normal-navbar/menusetting/menuform/index.jsx    |   12 
 src/menu/components/share/actioncomponent/index.jsx                      |    2 
 src/tabviews/zshare/actionList/printbutton/index.jsx                     |  106 ++++---
 src/menu/components/card/cardcellcomponent/formconfig.jsx                |  120 ++++---
 src/pc/components/navbar/normal-navbar/wrapsetting/settingform/index.jsx |   14 
 src/menu/menushell/index.jsx                                             |    2 
 29 files changed, 541 insertions(+), 246 deletions(-)

diff --git a/src/assets/mobimg/carousel.png b/src/assets/mobimg/carousel.png
index 58750da..ec67284 100644
--- a/src/assets/mobimg/carousel.png
+++ b/src/assets/mobimg/carousel.png
Binary files differ
diff --git a/src/assets/mobimg/carousel1.png b/src/assets/mobimg/carousel1.png
new file mode 100644
index 0000000..09e1a4b
--- /dev/null
+++ b/src/assets/mobimg/carousel1.png
Binary files differ
diff --git a/src/index.js b/src/index.js
index 4f87b72..d83cf4f 100644
--- a/src/index.js
+++ b/src/index.js
@@ -67,7 +67,7 @@
   })
   .then(config => {
     if (!config) return
-    
+
     let GLOB = {}
     GLOB.appId = config.appId || ''
     GLOB.lineColor = config.lineColor || ''
@@ -77,7 +77,6 @@
       GLOB.externalDatabase = config.externalDatabase ? `[${config.externalDatabase}]..` : ''
     } else {
       GLOB.externalDatabase = null
-
     }
 
     // 鍙湁涓氬姟绯荤粺鎵嶅彲浠ヨ缃负姝e紡绯荤粺
diff --git a/src/menu/components/card/cardcellcomponent/elementform/index.jsx b/src/menu/components/card/cardcellcomponent/elementform/index.jsx
index c116d50..2f0f75c 100644
--- a/src/menu/components/card/cardcellcomponent/elementform/index.jsx
+++ b/src/menu/components/card/cardcellcomponent/elementform/index.jsx
@@ -104,9 +104,9 @@
         if (link === 'dynamic' || link === 'static' || link === 'custom') {
           _options.push('linkurl', 'joint')
         } else if (link === 'page') {
-          _options.push('copyMenuId', 'joint')
+          _options.push('copyMenuId', 'joint', 'open')
         } else if (link === 'linkpage') {
-          _options.push('linkmenu', 'joint')
+          _options.push('linkmenu', 'joint', 'open')
         }
       }
     } else if (eleType === 'icon') {
diff --git a/src/menu/components/card/cardcellcomponent/formconfig.jsx b/src/menu/components/card/cardcellcomponent/formconfig.jsx
index 2552a71..0e1c9f3 100644
--- a/src/menu/components/card/cardcellcomponent/formconfig.jsx
+++ b/src/menu/components/card/cardcellcomponent/formconfig.jsx
@@ -150,60 +150,6 @@
       ]
     },
     {
-      type: 'radio',
-      key: 'link',
-      label: '閾炬帴',
-      initVal: card.link || '',
-      tooltip: '鍔ㄦ�佸湴鍧�涓虹粦瀹氬瓧娈靛�笺��',
-      required: false,
-      forbid: isApp,
-      options: [
-        { value: '', text: '鏃�' },
-        { value: 'dynamic', text: '鍔ㄦ��' },
-        { value: 'static', text: '闈欐��' }
-      ]
-    },
-    {
-      type: 'select',
-      key: 'link',
-      label: '閾炬帴',
-      initVal: card.link || '',
-      required: false,
-      forbid: !isApp,
-      options: [
-        { value: '', text: '鏃�' },
-        { value: 'page', text: '鑿滃崟' },
-        { value: 'linkpage', text: '鍏宠仈鑿滃崟' },
-        { value: 'custom', text: '閾炬帴' }
-      ]
-    },
-    {
-      type: 'select',
-      key: 'linkmenu',
-      label: '鍏宠仈鑿滃崟',
-      initVal: card.linkmenu || '',
-      required: true,
-      forbid: !isApp,
-      options: appMenus
-    },
-    {
-      type: 'select',
-      key: 'copyMenuId',
-      label: '澶嶅埗鑿滃崟',
-      initVal: card.copyMenuId || '',
-      required: false,
-      forbid: !isApp,
-      options: appMenus
-    },
-    {
-      type: 'select',
-      key: 'linkurl',
-      label: '閾炬帴鍦板潃',
-      initVal: card.linkurl || '',
-      required: true,
-      options: []
-    },
-    {
       type: 'select',
       key: 'format',
       label: '鏍煎紡鍖�',
@@ -364,6 +310,64 @@
     },
     {
       type: 'radio',
+      key: 'link',
+      label: '閾炬帴',
+      initVal: card.link || '',
+      tooltip: '鍔ㄦ�佸湴鍧�涓虹粦瀹氬瓧娈靛�笺��',
+      required: false,
+      forbid: isApp,
+      options: [
+        { value: '', text: '鏃�' },
+        { value: 'dynamic', text: '鍔ㄦ��' },
+        { value: 'static', text: '闈欐��' }
+      ]
+    },
+    {
+      type: 'select',
+      key: 'link',
+      label: '閾炬帴',
+      initVal: card.link || '',
+      required: false,
+      forbid: !isApp,
+      options: [
+        { value: '', text: '鏃�' },
+        { value: 'page', text: '鑿滃崟' },
+        { value: 'linkpage', text: '鍏宠仈鑿滃崟' },
+        { value: 'custom', text: '閾炬帴' }
+      ]
+    },
+    {
+      type: 'select',
+      key: 'linkmenu',
+      label: '鍏宠仈鑿滃崟',
+      initVal: card.linkmenu || '',
+      required: true,
+      forbid: !isApp,
+      options: appMenus
+    },
+    {
+      type: 'radio',
+      key: 'open',
+      label: '鎵撳紑鏂瑰紡',
+      initVal: card.open || 'blank',
+      required: false,
+      forbid: !isApp,
+      options: [
+        { value: 'blank', text: '鏂伴〉闈�' },
+        { value: 'self', text: '褰撳墠椤甸潰' }
+      ]
+    },
+    {
+      type: 'select',
+      key: 'copyMenuId',
+      label: '澶嶅埗鑿滃崟',
+      initVal: card.copyMenuId || '',
+      required: false,
+      forbid: !isApp,
+      options: appMenus
+    },
+    {
+      type: 'radio',
       key: 'joint',
       label: Formdict['model.form.paramJoint'],
       initVal: card.joint || 'true',
@@ -376,6 +380,14 @@
         text: Formdict['model.false']
       }]
     },
+    {
+      type: 'select',
+      key: 'linkurl',
+      label: '閾炬帴鍦板潃',
+      initVal: card.linkurl || '',
+      required: true,
+      options: []
+    },
   ]
 
   return forms
diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx
index c37edfa..5be4d5e 100644
--- a/src/menu/components/card/cardcellcomponent/index.jsx
+++ b/src/menu/components/card/cardcellcomponent/index.jsx
@@ -11,7 +11,7 @@
 import { getActionForm } from '@/menu/components/share/actioncomponent/formconfig'
 
 import MKEmitter from '@/utils/events.js'
-import MenuUtils from '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import ElementForm from './elementform'
 import DragElement from './dragaction'
 import './index.scss'
diff --git a/src/menu/components/carousel/prop-card/index.scss b/src/menu/components/carousel/prop-card/index.scss
index a53e20c..c4bbe92 100644
--- a/src/menu/components/carousel/prop-card/index.scss
+++ b/src/menu/components/carousel/prop-card/index.scss
@@ -47,6 +47,11 @@
       width: 5px;
     }
   }
+  .ant-carousel {
+    .slick-dots li button {
+      background: #1890ff;
+    }
+  }
   
   .card-item:hover {
     box-shadow: 0px 0px 2px #1890ff;
diff --git a/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx b/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
index 459e98e..29d0d30 100644
--- a/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
@@ -8,10 +8,25 @@
  * @param {object} card       // 鍥捐〃瀵硅薄
  */
 export function getBaseForm (card) {
-  let menulist = sessionStorage.getItem('fstMenuList')
+  let isApp = sessionStorage.getItem('appType') === 'pc'
+  let menulist = null
+
+  if (isApp) {
+    menulist = sessionStorage.getItem('appMenus')
+  } else {
+    menulist = sessionStorage.getItem('fstMenuList')
+  }
+
   if (menulist) {
     try {
       menulist = JSON.parse(menulist)
+      if (isApp) {
+        menulist = menulist.map(item => {
+          item.value = item.MenuID
+          item.text = item.MenuName
+          return item
+        })
+      }
     } catch {
       menulist = []
     }
@@ -83,7 +98,30 @@
       initVal: card.linkmenu || [],
       tooltip: '鍦ㄤ娇鐢ㄦ煴褰㈠浘涓旀湭鍚敤鑷畾涔夎缃椂鏈夋晥銆�',
       required: false,
+      forbid: isApp,
       options: menulist
+    },
+    {
+      type: 'select',
+      key: 'linkmenu',
+      label: '鍏宠仈鑿滃崟',
+      initVal: card.linkmenu || '',
+      tooltip: '鍙屽嚮楗煎浘锛屼細鎵撳紑鍏宠仈鐨勮彍鍗曘��',
+      required: false,
+      forbid: !isApp,
+      options: menulist
+    },
+    {
+      type: 'radio',
+      key: 'open',
+      label: '鎵撳紑鏂瑰紡',
+      initVal: card.open || 'blank',
+      required: false,
+      forbid: !isApp,
+      options: [
+        { value: 'blank', text: '鏂扮獥鍙�' },
+        { value: 'self', text: '褰撳墠绐楀彛' }
+      ]
     }
   ]
 }
diff --git a/src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx b/src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx
index d32684c..6c4e322 100644
--- a/src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx
@@ -8,10 +8,25 @@
  * @param {object} card       // 鍥捐〃瀵硅薄
  */
 export function getBaseForm (card) {
-  let menulist = sessionStorage.getItem('fstMenuList')
+  let isApp = sessionStorage.getItem('appType') === 'pc'
+  let menulist = null
+
+  if (isApp) {
+    menulist = sessionStorage.getItem('appMenus')
+  } else {
+    menulist = sessionStorage.getItem('fstMenuList')
+  }
+
   if (menulist) {
     try {
       menulist = JSON.parse(menulist)
+      if (isApp) {
+        menulist = menulist.map(item => {
+          item.value = item.MenuID
+          item.text = item.MenuName
+          return item
+        })
+      }
     } catch {
       menulist = []
     }
@@ -83,7 +98,30 @@
       initVal: card.linkmenu || [],
       tooltip: '鍙屽嚮楗煎浘锛屼細鎵撳紑鍏宠仈鐨勮彍鍗曘��',
       required: false,
+      forbid: isApp,
       options: menulist
+    },
+    {
+      type: 'select',
+      key: 'linkmenu',
+      label: '鍏宠仈鑿滃崟',
+      initVal: card.linkmenu || '',
+      tooltip: '鍙屽嚮楗煎浘锛屼細鎵撳紑鍏宠仈鐨勮彍鍗曘��',
+      required: false,
+      forbid: !isApp,
+      options: menulist
+    },
+    {
+      type: 'radio',
+      key: 'open',
+      label: '鎵撳紑鏂瑰紡',
+      initVal: card.open || 'blank',
+      required: false,
+      forbid: !isApp,
+      options: [
+        { value: 'blank', text: '鏂扮獥鍙�' },
+        { value: 'self', text: '褰撳墠绐楀彛' }
+      ]
     }
   ]
 }
diff --git a/src/menu/components/share/actioncomponent/index.jsx b/src/menu/components/share/actioncomponent/index.jsx
index e42041d..e83c9bd 100644
--- a/src/menu/components/share/actioncomponent/index.jsx
+++ b/src/menu/components/share/actioncomponent/index.jsx
@@ -12,7 +12,7 @@
 
 import MKEmitter from '@/utils/events.js'
 import ActionForm from './actionform'
-import MenuUtils from '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import CreateFunc from '@/templates/zshare/createfunc'
 import DragElement from './dragaction'
 import './index.scss'
diff --git a/src/menu/components/tabs/tabcomponents/index.jsx b/src/menu/components/tabs/tabcomponents/index.jsx
index 60a625c..7a913bc 100644
--- a/src/menu/components/tabs/tabcomponents/index.jsx
+++ b/src/menu/components/tabs/tabcomponents/index.jsx
@@ -6,7 +6,7 @@
 
 import Utils from '@/utils/utils.js'
 import MKEmitter from '@/utils/events.js'
-import MenuUtils from '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import Card from './card'
 import './index.scss'
 
diff --git a/src/menu/datasource/verifycard/settingform/index.jsx b/src/menu/datasource/verifycard/settingform/index.jsx
index a000237..bc1d2b9 100644
--- a/src/menu/datasource/verifycard/settingform/index.jsx
+++ b/src/menu/datasource/verifycard/settingform/index.jsx
@@ -4,7 +4,7 @@
 
 import { formRule } from '@/utils/option.js'
 import Utils from '@/utils/utils.js'
-import MenuUtils from '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import CodeMirror from '@/templates/zshare/codemirror'
 import './index.scss'
 
diff --git a/src/menu/menushell/index.jsx b/src/menu/menushell/index.jsx
index fc5d648..5f65129 100644
--- a/src/menu/menushell/index.jsx
+++ b/src/menu/menushell/index.jsx
@@ -6,7 +6,7 @@
 
 import Utils from '@/utils/utils.js'
 import MKEmitter from '@/utils/events.js'
-import MenuUtils from '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import Card from './card'
 import './index.scss'
 
diff --git a/src/menu/modulesource/option.jsx b/src/menu/modulesource/option.jsx
index 1996e96..112abf9 100644
--- a/src/menu/modulesource/option.jsx
+++ b/src/menu/modulesource/option.jsx
@@ -15,6 +15,7 @@
 import Pie2 from '@/assets/mobimg/nightingale.png'
 import Mainsearch from '@/assets/mobimg/mainsearch.png'
 import Carousel from '@/assets/mobimg/carousel.png'
+import Carousel1 from '@/assets/mobimg/carousel1.png'
 
 // 缁勪欢閰嶇疆淇℃伅
 export const menuOptions = [
@@ -23,7 +24,7 @@
   { type: 'menu', url: card1, component: 'card', subtype: 'datacard', title: '鏁版嵁鍗�', width: 24 },
   { type: 'menu', url: card2, component: 'card', subtype: 'propcard', title: '灞炴�у崱', width: 24 },
   { type: 'menu', url: Carousel, component: 'carousel', subtype: 'datacard', title: '杞挱-鍔ㄦ�佹暟鎹�', width: 24, forbid: ['billPrint'] },
-  { type: 'menu', url: Carousel, component: 'carousel', subtype: 'propcard', title: '杞挱-闈欐�佹暟鎹�', width: 24, forbid: ['billPrint'] },
+  { type: 'menu', url: Carousel1, component: 'carousel', subtype: 'propcard', title: '杞挱-闈欐�佹暟鎹�', width: 24, forbid: ['billPrint'] },
   { type: 'menu', url: NormalTable, component: 'table', subtype: 'normaltable', title: '甯哥敤琛�', width: 24 },
   { type: 'menu', url: TableCard, component: 'table', subtype: 'tablecard', title: '琛ㄦ牸', width: 12 },
   { type: 'menu', url: line, component: 'line', subtype: 'line', title: '鎶樼嚎鍥�', width: 24 },
diff --git a/src/pc/components/navbar/normal-navbar/index.jsx b/src/pc/components/navbar/normal-navbar/index.jsx
index f9522ac..a59fb4c 100644
--- a/src/pc/components/navbar/normal-navbar/index.jsx
+++ b/src/pc/components/navbar/normal-navbar/index.jsx
@@ -13,8 +13,6 @@
 const WrapComponent = asyncIconComponent(() => import('./wrapsetting'))
 const MenuComponent = asyncIconComponent(() => import('./menusetting'))
 const LinkComponent = asyncIconComponent(() => import('./linksetting'))
-const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent'))
-const UserComponent = asyncIconComponent(() => import('@/menu/components/share/usercomponent'))
 
 const { SubMenu } = Menu
 
@@ -141,8 +139,11 @@
 
   changeMenu = (menu) => {
     MKEmitter.emit('changeEditMenu', {
+      fixed: menu.property === 'menu',
       MenuID: menu.property === 'linkmenu' ? menu.linkMenuId : menu.MenuID,
       copyMenuId: menu.property === 'menu' ? menu.copyMenuId : '',
+      MenuNo: menu.MenuNo,
+      MenuName: menu.name,
     })
   }
 
@@ -169,9 +170,7 @@
             <MenuComponent config={card} updateConfig={this.updateComponent} />
             <LinkComponent config={card} updateConfig={this.updateComponent} />
             <WrapComponent config={card} updateConfig={this.updateComponent} />
-            <CopyComponent type="normalnarbar" card={card}/>
             <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
-            <UserComponent config={card}/>
             <Icon className="close" title="鍒犻櫎缁勪欢" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
           </div>
         } trigger="hover">
diff --git a/src/pc/components/navbar/normal-navbar/linksetting/linkform/index.jsx b/src/pc/components/navbar/normal-navbar/linksetting/linkform/index.jsx
index a07f0a8..7fc5a87 100644
--- a/src/pc/components/navbar/normal-navbar/linksetting/linkform/index.jsx
+++ b/src/pc/components/navbar/normal-navbar/linksetting/linkform/index.jsx
@@ -14,7 +14,6 @@
 
   state = {
     property: this.props.menu.property || 'link',
-    linkIntId: this.props.menu.linkIntId || '',
     appMenus: [],
   }
 
@@ -47,9 +46,6 @@
     return new Promise((resolve, reject) => {
       this.props.form.validateFieldsAndScroll((err, values) => {
         if (!err) {
-          if (values.linkmenuid) {
-            values.linkIntId = this.state.linkIntId || ''
-          }
           resolve(values)
         } else {
           reject(err)
@@ -70,10 +66,6 @@
     let val = e.target.value
 
     this.setState({property: val})
-  }
-
-  changeLinkMenu = (val, { props }) => {
-    this.setState({linkIntId: props.intid})
   }
 
   render() {
@@ -157,8 +149,8 @@
                   message: '璇烽�夋嫨鍏宠仈鑿滃崟!'
                 }]
               })(
-                <Select onChange={this.changeLinkMenu}>
-                  {appMenus.map(item => (<Select.Option key={item.MenuID} intid={item.menuid_int} value={item.MenuID}>{item.MenuName}</Select.Option>))}
+                <Select>
+                  {appMenus.map(item => (<Select.Option key={item.MenuID} value={item.MenuID}>{item.MenuName}</Select.Option>))}
                 </Select>
               )}
             </Form.Item>
diff --git a/src/pc/components/navbar/normal-navbar/menusetting/menuform/index.jsx b/src/pc/components/navbar/normal-navbar/menusetting/menuform/index.jsx
index aa849da..fad6b76 100644
--- a/src/pc/components/navbar/normal-navbar/menusetting/menuform/index.jsx
+++ b/src/pc/components/navbar/normal-navbar/menusetting/menuform/index.jsx
@@ -14,7 +14,6 @@
 
   state = {
     property: this.props.menu.property || 'menu',
-    linkIntId: this.props.menu.linkIntId || '',
     appMenus: [],
   }
 
@@ -47,9 +46,6 @@
     return new Promise((resolve, reject) => {
       this.props.form.validateFieldsAndScroll((err, values) => {
         if (!err) {
-          if (values.linkmenuid) {
-            values.linkIntId = this.state.linkIntId || ''
-          }
           resolve(values)
         } else {
           reject(err)
@@ -70,10 +66,6 @@
     let val = e.target.value
 
     this.setState({property: val})
-  }
-
-  changeLinkMenu = (val, { props }) => {
-    this.setState({linkIntId: props.intid})
   }
 
   render() {
@@ -184,8 +176,8 @@
                   message: '璇烽�夋嫨鍏宠仈鑿滃崟!'
                 }]
               })(
-                <Select onChange={this.changeLinkMenu}>
-                  {appMenus.map(item => (<Select.Option key={item.MenuID} intid={item.menuid_int} value={item.MenuID}>{item.MenuName}</Select.Option>))}
+                <Select>
+                  {appMenus.map(item => (<Select.Option key={item.MenuID} value={item.MenuID}>{item.MenuName}</Select.Option>))}
                 </Select>
               )}
             </Form.Item>
diff --git a/src/pc/components/navbar/normal-navbar/wrapsetting/settingform/index.jsx b/src/pc/components/navbar/normal-navbar/wrapsetting/settingform/index.jsx
index 9361e39..b5d097d 100644
--- a/src/pc/components/navbar/normal-navbar/wrapsetting/settingform/index.jsx
+++ b/src/pc/components/navbar/normal-navbar/wrapsetting/settingform/index.jsx
@@ -16,8 +16,7 @@
   }
 
   state = {
-    appMenus: [],
-    logointid: this.props.wrap.linkIntId || ''
+    appMenus: []
   }
 
   UNSAFE_componentWillMount () {
@@ -36,17 +35,10 @@
   }
 
   handleConfirm = () => {
-    const { logointid } = this.state
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
     return new Promise((resolve, reject) => {
       this.props.form.validateFieldsAndScroll((err, values) => {
         if (!err) {
-          values.linkIntId = ''
-
-          if (values.logolink && logointid) {
-            values.linkIntId = logointid
-          }
-
           resolve(values)
         } else {
           reject(err)
@@ -67,7 +59,6 @@
     const { wrap } = this.props
     const { getFieldDecorator } = this.props.form
     const { appMenus } = this.state
-
     const formItemLayout = {
       labelCol: {
         xs: { span: 24 },
@@ -156,12 +147,11 @@
                 })(
                   <Select
                     showSearch
-                    onChange={(val, { props }) => this.setState({logointid: props.intid})}
                     filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
                   >
                     <Select.Option key="empty" intid={''} value={''}>鏃�</Select.Option>
                     {appMenus.map(option =>
-                      <Select.Option key={option.MenuID} intid={option.menuid_int} value={option.MenuID}>{option.MenuName}</Select.Option>
+                      <Select.Option key={option.MenuID} value={option.MenuID}>{option.MenuName}</Select.Option>
                     )}
                   </Select>
                 )}
diff --git a/src/pc/menushell/index.jsx b/src/pc/menushell/index.jsx
index f8e35be..7dac00b 100644
--- a/src/pc/menushell/index.jsx
+++ b/src/pc/menushell/index.jsx
@@ -6,7 +6,7 @@
 
 import Utils from '@/utils/utils.js'
 import MKEmitter from '@/utils/events.js'
-import MenuUtils from '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import Card from './card'
 import './index.scss'
 
diff --git a/src/pc/modulesource/option.jsx b/src/pc/modulesource/option.jsx
index 2627a6c..c6b167e 100644
--- a/src/pc/modulesource/option.jsx
+++ b/src/pc/modulesource/option.jsx
@@ -16,6 +16,7 @@
 import Mainsearch from '@/assets/mobimg/mainsearch.png'
 import Navbar from '@/assets/mobimg/navbar.png'
 import Carousel from '@/assets/mobimg/carousel.png'
+import Carousel1 from '@/assets/mobimg/carousel1.png'
 
 // 缁勪欢閰嶇疆淇℃伅
 export const menuOptions = [
@@ -25,7 +26,7 @@
   { type: 'menu', url: card1, component: 'card', subtype: 'datacard', title: '鏁版嵁鍗�', width: 24 },
   { type: 'menu', url: card2, component: 'card', subtype: 'propcard', title: '灞炴�у崱', width: 24 },
   { type: 'menu', url: Carousel, component: 'carousel', subtype: 'datacard', title: '杞挱-鍔ㄦ�佹暟鎹�', width: 24 },
-  { type: 'menu', url: Carousel, component: 'carousel', subtype: 'propcard', title: '杞挱-闈欐�佹暟鎹�', width: 24 },
+  { type: 'menu', url: Carousel1, component: 'carousel', subtype: 'propcard', title: '杞挱-闈欐�佹暟鎹�', width: 24 },
   { type: 'menu', url: NormalTable, component: 'table', subtype: 'normaltable', title: '甯哥敤琛�', width: 24 },
   { type: 'menu', url: TableCard, component: 'table', subtype: 'tablecard', title: '琛ㄦ牸', width: 12 },
   { type: 'menu', url: line, component: 'line', subtype: 'line', title: '鎶樼嚎鍥�', width: 24 },
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index 7c56bbe..fc44aa9 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -197,9 +197,14 @@
     } else if (btn.OpenType === 'pop') {
       this.updateStatus('start')
 
+      let modal = this.state.btnconfig
+      if (!modal && btn.modal) {
+        modal = this.handleModelConfig(btn.modal)
+      }
+
       this.setState({
         tabledata: data,
-        btnconfig: btn.modal ? btn.modal : this.state.btnconfig
+        btnconfig: modal
       }, () => {
         this.improveAction()
       })
@@ -1397,6 +1402,57 @@
     })
   }
 
+  handleModelConfig = (config) => {
+    let roleId = sessionStorage.getItem('role_id') || '' // 瑙掕壊ID
+    if (config.groups.length > 0) {
+      config.groups.forEach(group => {
+        group.sublist = group.sublist.map(cell => {
+          // 鏁版嵁婧恠ql璇彞锛岄澶勭悊锛� 鏉冮檺榛戝悕鍗曞瓧娈佃缃负闅愯棌琛ㄥ崟
+          if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(cell.type) && cell.resourceType === '1') {
+            let _option = Utils.getSelectQueryOptions(cell)
+
+            // 澶栬仈鏁版嵁搴撴浛鎹�
+            if (window.GLOB.externalDatabase !== null) {
+              _option.sql = _option.sql.replace(/@db@/ig, window.GLOB.externalDatabase)
+            }
+
+            cell.data_sql = Utils.formatOptions(_option.sql)
+            cell.base_sql = window.btoa(window.encodeURIComponent(_option.sql))
+            cell.arr_field = _option.field
+          }
+
+          // 瀛楁鏉冮檺榛戝悕鍗�
+          if (!cell.blacklist || cell.blacklist.length === 0) return cell
+          if (cell.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
+            cell.hidden = 'true'
+          }
+
+          return cell
+        })
+      })
+    } else {
+      config.fields = config.fields.map(cell => {
+        // 鏁版嵁婧恠ql璇彞锛岄澶勭悊锛屾潈闄愰粦鍚嶅崟瀛楁璁剧疆涓洪殣钘忚〃鍗�
+        if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(cell.type) && cell.resourceType === '1') {
+          let _option = Utils.getSelectQueryOptions(cell)
+
+          cell.data_sql = Utils.formatOptions(_option.sql)
+          cell.base_sql = window.btoa(window.encodeURIComponent(_option.sql))
+          cell.arr_field = _option.field
+        }
+
+        // 瀛楁鏉冮檺榛戝悕鍗�
+        if (!cell.blacklist || cell.blacklist.length === 0) return cell
+        if (cell.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
+          cell.hidden = 'true'
+        }
+
+        return cell
+      })
+    }
+    return config
+  }
+
   /**
    * @description 鑾峰彇鎸夐挳閰嶇疆淇℃伅
    */
@@ -1443,54 +1499,8 @@
           })
           this.updateStatus('over')
         } else {
-          let roleId = sessionStorage.getItem('role_id') || '' // 瑙掕壊ID
-          if (_LongParam.groups.length > 0) {
-            _LongParam.groups.forEach(group => {
-              group.sublist = group.sublist.map(cell => {
-                // 鏁版嵁婧恠ql璇彞锛岄澶勭悊锛� 鏉冮檺榛戝悕鍗曞瓧娈佃缃负闅愯棌琛ㄥ崟
-                if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(cell.type) && cell.resourceType === '1') {
-                  let _option = Utils.getSelectQueryOptions(cell)
-
-                  // 澶栬仈鏁版嵁搴撴浛鎹�
-                  if (window.GLOB.externalDatabase !== null) {
-                    _option.sql = _option.sql.replace(/@db@/ig, window.GLOB.externalDatabase)
-                  }
-
-                  cell.data_sql = Utils.formatOptions(_option.sql)
-                  cell.base_sql = window.btoa(window.encodeURIComponent(_option.sql))
-                  cell.arr_field = _option.field
-                }
-
-                // 瀛楁鏉冮檺榛戝悕鍗�
-                if (!cell.blacklist || cell.blacklist.length === 0) return cell
-                if (cell.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
-                  cell.hidden = 'true'
-                }
-
-                return cell
-              })
-            })
-          } else {
-            _LongParam.fields = _LongParam.fields.map(cell => {
-              // 鏁版嵁婧恠ql璇彞锛岄澶勭悊锛屾潈闄愰粦鍚嶅崟瀛楁璁剧疆涓洪殣钘忚〃鍗�
-              if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(cell.type) && cell.resourceType === '1') {
-                let _option = Utils.getSelectQueryOptions(cell)
-
-                cell.data_sql = Utils.formatOptions(_option.sql)
-                cell.base_sql = window.btoa(window.encodeURIComponent(_option.sql))
-                cell.arr_field = _option.field
-              }
-
-              // 瀛楁鏉冮檺榛戝悕鍗�
-              if (!cell.blacklist || cell.blacklist.length === 0) return cell
-              if (cell.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
-                cell.hidden = 'true'
-              }
-
-              return cell
-            })
-          }
-
+          _LongParam = this.handleModelConfig(_LongParam)
+          
           this.setState({
             btnconfig: _LongParam
           }, () => {
diff --git a/src/tabviews/zshare/actionList/printbutton/index.jsx b/src/tabviews/zshare/actionList/printbutton/index.jsx
index a778431..33b5643 100644
--- a/src/tabviews/zshare/actionList/printbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -140,9 +140,14 @@
 
     if (btn.execMode === 'pop') {
       this.updateStatus('start')
+      let modal = this.state.btnconfig
+      if (!modal && btn.modal) {
+        modal = this.handleModelConfig(btn.modal)
+      }
+
       this.setState({
         tabledata: data,
-        btnconfig: btn.modal ? btn.modal : this.state.btnconfig
+        btnconfig: modal
       }, () => {
         this.improveAction()
       })
@@ -1022,6 +1027,57 @@
     })
   }
 
+  handleModelConfig = (config) => {
+    let roleId = sessionStorage.getItem('role_id') || '' // 瑙掕壊ID
+    if (config.groups.length > 0) {
+      config.groups.forEach(group => {
+        group.sublist = group.sublist.map(cell => {
+          // 鏁版嵁婧恠ql璇彞锛岄澶勭悊锛� 鏉冮檺榛戝悕鍗曞瓧娈佃缃负闅愯棌琛ㄥ崟
+          if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(cell.type) && cell.resourceType === '1') {
+            let _option = Utils.getSelectQueryOptions(cell)
+
+            // 澶栬仈鏁版嵁搴撴浛鎹�
+            if (window.GLOB.externalDatabase !== null) {
+              _option.sql = _option.sql.replace(/@db@/ig, window.GLOB.externalDatabase)
+            }
+
+            cell.data_sql = Utils.formatOptions(_option.sql)
+            cell.base_sql = window.btoa(window.encodeURIComponent(_option.sql))
+            cell.arr_field = _option.field
+          }
+
+          // 瀛楁鏉冮檺榛戝悕鍗�
+          if (!cell.blacklist || cell.blacklist.length === 0) return cell
+          if (cell.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
+            cell.hidden = 'true'
+          }
+
+          return cell
+        })
+      })
+    } else {
+      config.fields = config.fields.map(cell => {
+        // 鏁版嵁婧恠ql璇彞锛岄澶勭悊锛屾潈闄愰粦鍚嶅崟瀛楁璁剧疆涓洪殣钘忚〃鍗�
+        if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(cell.type) && cell.resourceType === '1') {
+          let _option = Utils.getSelectQueryOptions(cell)
+
+          cell.data_sql = Utils.formatOptions(_option.sql)
+          cell.base_sql = window.btoa(window.encodeURIComponent(_option.sql))
+          cell.arr_field = _option.field
+        }
+
+        // 瀛楁鏉冮檺榛戝悕鍗�
+        if (!cell.blacklist || cell.blacklist.length === 0) return cell
+        if (cell.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
+          cell.hidden = 'true'
+        }
+
+        return cell
+      })
+    }
+    return config
+  }
+
   /**
    * @description 鑾峰彇鎸夐挳閰嶇疆淇℃伅
    */
@@ -1068,53 +1124,7 @@
           })
           this.updateStatus('over')
         } else {
-          let roleId = sessionStorage.getItem('role_id') || '' // 瑙掕壊ID
-          if (_LongParam.groups.length > 0) {
-            _LongParam.groups.forEach(group => {
-              group.sublist = group.sublist.map(cell => {
-                // 鏁版嵁婧恠ql璇彞锛岄澶勭悊
-                if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(cell.type) && cell.resourceType === '1') {
-                  let _option = Utils.getSelectQueryOptions(cell)
-
-                  // 澶栬仈鏁版嵁搴撴浛鎹�
-                  if (window.GLOB.externalDatabase !== null) {
-                    _option.sql = _option.sql.replace(/@db@/ig, window.GLOB.externalDatabase)
-                  }
-
-                  cell.data_sql = Utils.formatOptions(_option.sql)
-                  cell.base_sql = window.btoa(window.encodeURIComponent(_option.sql))
-                  cell.arr_field = _option.field
-                }
-
-                // 瀛楁鏉冮檺榛戝悕鍗�
-                if (!cell.blacklist || cell.blacklist.length === 0) return cell
-                if (cell.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
-                  cell.hidden = 'true'
-                }
-
-                return cell
-              })
-            })
-          } else {
-            _LongParam.fields = _LongParam.fields.map(cell => {
-              // 鏁版嵁婧恠ql璇彞锛岄澶勭悊
-              if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(cell.type) && cell.resourceType === '1') {
-                let _option = Utils.getSelectQueryOptions(cell)
-
-                cell.data_sql = Utils.formatOptions(_option.sql)
-                cell.base_sql = window.btoa(window.encodeURIComponent(_option.sql))
-                cell.arr_field = _option.field
-              }
-
-              // 瀛楁鏉冮檺榛戝悕鍗�
-              if (!cell.blacklist || cell.blacklist.length === 0) return cell
-              if (cell.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
-                cell.hidden = 'true'
-              }
-
-              return cell
-            })
-          }
+          _LongParam = this.handleModelConfig(_LongParam)
 
           this.setState({
             btnconfig: _LongParam
diff --git a/src/templates/menuconfig/editthdmenu/index.jsx b/src/templates/menuconfig/editthdmenu/index.jsx
index 98f19d2..f73271f 100644
--- a/src/templates/menuconfig/editthdmenu/index.jsx
+++ b/src/templates/menuconfig/editthdmenu/index.jsx
@@ -21,7 +21,7 @@
 import MenuForm from './menuform'
 import TransferForm from '@/templates/zshare/basetransferform'
 import Utils from '@/utils/utils.js'
-import MenuUtils from '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import DragElement from '../menuelement'
 import asyncLoadComponent from '@/utils/asyncLoadComponent'
 import './index.scss'
diff --git a/src/templates/modalconfig/settingform/index.jsx b/src/templates/modalconfig/settingform/index.jsx
index e4c44a3..7183cad 100644
--- a/src/templates/modalconfig/settingform/index.jsx
+++ b/src/templates/modalconfig/settingform/index.jsx
@@ -13,7 +13,8 @@
   }
 
   state = {
-    fields: null
+    fields: null,
+    appType: sessionStorage.getItem('appType')
   }
 
   UNSAFE_componentWillMount () {
@@ -65,7 +66,7 @@
 
   render() {
     const { config, dict } = this.props
-    const { fields } = this.state
+    const { fields, appType } = this.state
     const { getFieldDecorator } = this.props.form
 
     const formItemLayout = {
@@ -161,7 +162,7 @@
               )}
             </Form.Item>
           </Col>
-          {!this.props.isSubTab ? <Col span={12}>
+          {!this.props.isSubTab && appType !== 'pc' ? <Col span={12}>
             <Form.Item label="鎸傝浇瀵硅薄">
               {getFieldDecorator('container', {
                 initialValue: config.setting.container || 'tab'
diff --git a/src/menu/utils/menuUtils.js b/src/utils/utils-custom.js
similarity index 94%
rename from src/menu/utils/menuUtils.js
rename to src/utils/utils-custom.js
index 0a705c7..e991da4 100644
--- a/src/menu/utils/menuUtils.js
+++ b/src/utils/utils-custom.js
@@ -183,7 +183,7 @@
           getUuids(c)
         })
       } else {
-        if (item.action && item.action.length) {
+        if (item.action && item.action.length > 0) {
           item.action.forEach(act => {
             if (!act.origin) {
               uuids.push(act.uuid)
@@ -198,6 +198,14 @@
               }
             })
             _card.backElements && _card.backElements.forEach(cell => {
+              if (cell.eleType === 'button') {
+                uuids.push(cell.uuid)
+              }
+            })
+          })
+        } else if (item.type === 'carousel') {
+          item.subcards.forEach(_card => {
+            _card.elements && _card.elements.forEach(cell => {
               if (cell.eleType === 'button') {
                 uuids.push(cell.uuid)
               }
@@ -248,6 +256,10 @@
    */
   static resetConfig = (components) => {
     return components.map(item => {
+      if (item.type === 'navbar') {
+        return item
+      }
+
       item.uuid = this.getuuid()
 
       if (item.type === 'tabs') {
@@ -268,7 +280,7 @@
           return cell
         })
         item.components = this.resetConfig(item.components)
-      } else if (item.type === 'card' || (item.type === 'table' && item.subtype === 'tablecard')) {
+      } else if (item.type === 'card' || item.type === 'carousel' || (item.type === 'table' && item.subtype === 'tablecard')) {
         item.subcards.forEach(card => {
           card.uuid = this.getuuid()
           if (card.elements) {
diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx
index 07d3ad2..c71f7a2 100644
--- a/src/views/menudesign/index.jsx
+++ b/src/views/menudesign/index.jsx
@@ -15,7 +15,7 @@
 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 '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import asyncComponent from '@/utils/asyncComponent'
 import { modifyCustomMenu } from '@/store/action'
 
diff --git a/src/views/pcdesign/index.jsx b/src/views/pcdesign/index.jsx
index 0f54908..515a08f 100644
--- a/src/views/pcdesign/index.jsx
+++ b/src/views/pcdesign/index.jsx
@@ -5,7 +5,7 @@
 import { is, fromJS } from 'immutable'
 import moment from 'moment'
 import HTML5Backend from 'react-dnd-html5-backend'
-import { ConfigProvider, notification, Modal, Collapse, Switch, Button, Icon } from 'antd'
+import { ConfigProvider, notification, Modal, Collapse, Switch, Button, Icon, message, Spin } from 'antd'
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
@@ -14,7 +14,7 @@
 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 '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import asyncComponent from '@/utils/asyncComponent'
 import { modifyCustomMenu } from '@/store/action'
 
@@ -48,6 +48,7 @@
   state = {
     localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS,
     dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
+    loading: true,
     MenuId: '',
     MenuName: '',
     MenuNo: '',
@@ -76,7 +77,7 @@
         sessionStorage.setItem('link_type', param.link_type || 'true')
         sessionStorage.setItem('role_type', param.role_type || 'true')
         sessionStorage.setItem('login_types', param.login_types || 'true')
-        
+
         this.setState({
           localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS,
           dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
@@ -86,7 +87,7 @@
         this.setState({
           MenuId: param.MenuID
         }, () => {
-          this.getMenuParam()
+          this.getMenuParam(param)
         })
       }
     } catch {
@@ -141,16 +142,28 @@
   changeEditMenu = (menu) => {
     const { oriConfig, config } = this.state
 
-    if (!is(fromJS(oriConfig), fromJS(config))) {
+    if (!oriConfig || !is(fromJS(oriConfig), fromJS(config))) {
       notification.warning({
         top: 92,
-        message: '閰嶇疆宸蹭慨鏀癸紝璇蜂繚瀛橈紒',
+        message: '閰嶇疆淇℃伅鏈繚瀛橈紒',
         duration: 5
       })
       return
     }
 
-    this.props.history.push('/pcdesign/' + window.btoa(window.encodeURIComponent(JSON.stringify({MenuID: menu.MenuID, copyMenuId: menu.copyMenuId || '', type: 'view'}))))
+    let param = {
+      MenuID: menu.MenuID,
+      copyMenuId: menu.copyMenuId || '',
+      type: 'view'
+    }
+
+    if (menu.fixed && menu.MenuNo && menu.MenuName) {
+      param.fixed = true
+      param.MenuNo = menu.MenuNo
+      param.MenuName = menu.MenuName
+    }
+
+    this.props.history.push('/pcdesign/' + window.btoa(window.encodeURIComponent(JSON.stringify(param))))
   }
 
   getAppMessage = () => {
@@ -213,11 +226,13 @@
             })
           } else {
             sessionStorage.setItem('appViewList', JSON.stringify(appViewList))
+            sessionStorage.setItem('appHomeId', homeId)
             this.props.history.replace('/pcdesign/' + window.btoa(window.encodeURIComponent(JSON.stringify({MenuID: homeId, type: 'view'}))))
           }
         })
       } else {
         sessionStorage.setItem('appViewList', JSON.stringify(appViewList))
+        sessionStorage.setItem('appHomeId', homeId)
         this.props.history.replace('/pcdesign/' + window.btoa(window.encodeURIComponent(JSON.stringify({MenuID: homeId, type: 'view'}))))
       }
     })
@@ -329,10 +344,10 @@
   initPopview = (card, btn) => {
     const { oriConfig, config } = this.state
 
-    if (!is(fromJS(oriConfig), fromJS(config))) {
+    if (!oriConfig || !is(fromJS(oriConfig), fromJS(config))) {
       notification.warning({
         top: 92,
-        message: '閰嶇疆宸蹭慨鏀癸紝璇蜂繚瀛橈紒',
+        message: '閰嶇疆淇℃伅鏈繚瀛橈紒',
         duration: 5
       })
       return
@@ -354,9 +369,9 @@
       return
     }
 
-    if (!is(fromJS(oriConfig), fromJS(config))) {
+    if (!oriConfig || !is(fromJS(oriConfig), fromJS(config))) {
       confirm({
-        title: '閰嶇疆宸蹭慨鏀癸紝鏀惧純淇濆瓨鍚楋紵',
+        title: '閰嶇疆淇℃伅鏈繚瀛橈紝纭畾鍏抽棴鍚楋紵',
         content: '',
         onOk() {
           window.close()
@@ -368,7 +383,7 @@
     }
   }
 
-  getMenuParam = () => {
+  getMenuParam = (urlParam) => {
     const { MenuId } = this.state
 
     let param = {
@@ -379,8 +394,19 @@
     }
 
     Api.getSystemConfig(param).then(result => {
-      if (result.status) {
+      if (!result.status) {
+        notification.warning({
+          top: 92,
+          message: result.message,
+          duration: 5
+        })
+        this.setState({loading: false})
+        return
+      } else if (!result.LongParam && urlParam.copyMenuId) {
+        this.getCopyParam(urlParam)
+      } else {
         let config = null
+        let isCreate = false
 
         try {
           config = result.LongParam ? JSON.parse(window.decodeURIComponent(window.atob(result.LongParam))) : null
@@ -390,6 +416,7 @@
         }
 
         if (!config) {
+          isCreate = true
           config = {
             version: 1.0,
             uuid: MenuId,
@@ -411,6 +438,12 @@
         config.MenuID = MenuId
         config.open_edition = result.open_edition || ''
 
+        if (urlParam.fixed) {
+          config.fixed = true
+          config.MenuName = urlParam.MenuName
+          config.MenuNo = urlParam.MenuNo
+        }
+
         let indeComs = []
         config.components.forEach(item => {
           if (item.type === 'navbar') {
@@ -420,23 +453,21 @@
 
         if (indeComs.length === 0) {
           this.setState({
-            oriConfig: config,
+            oriConfig: isCreate ? null : config,
             config: fromJS(config).toJS(),
+            loading: false
           })
   
           this.props.modifyCustomMenu(config)
         } else {
-          this.jointComponents(config, indeComs)
+          this.jointComponents(config, indeComs, isCreate)
         }
-      } else {
-        notification.warning({
-          top: 92,
-          message: result.message,
-          duration: 5
-        })
       }
     })
+    this.getAppMenus()
+  }
 
+  getAppMenus = () => {
     let _param = {
       func: 's_get_app_menus',
       TypeCharOne: sessionStorage.getItem('kei_no'),
@@ -466,7 +497,90 @@
     })
   }
 
-  jointComponents = (config, indeComs) => {
+  getCopyParam = (urlParam) => {
+    const { MenuId } = this.state
+
+    let param = {
+      func: 'sPC_Get_LongParam',
+      TypeCharOne: sessionStorage.getItem('kei_no'),
+      typename: 'pc',
+      MenuID: urlParam.copyMenuId
+    }
+
+    Api.getSystemConfig(param).then(result => {
+      if (!result.status) {
+        notification.warning({
+          top: 92,
+          message: result.message,
+          duration: 5
+        })
+        this.setState({loading: false})
+        return
+      } else if (!result.LongParam) {
+        notification.warning({
+          top: 92,
+          message: '鏈煡璇㈠埌澶嶅埗鑿滃崟閰嶇疆淇℃伅锛�',
+          duration: 5
+        })
+      }
+
+      let config = null
+
+      try {
+        config = result.LongParam ? JSON.parse(window.decodeURIComponent(window.atob(result.LongParam))) : null
+      } catch (e) {
+        console.warn('Parse Failure')
+        config = null
+      }
+
+      
+      if (!config) {
+        config = {
+          version: 1.0,
+          uuid: MenuId,
+          MenuID: MenuId,
+          Template: 'webPage',
+          enabled: false,
+          MenuName: '',
+          MenuNo: '',
+          tables: [],
+          components: [],
+          viewType: 'menu',
+          style: {
+            backgroundColor: '#ffffff', backgroundImage: '', paddingLeft: '20px', paddingRight: '20px'
+          }
+        }
+      } else {
+        config.components = MenuUtils.resetConfig(config.components)
+        message.success('澶嶅埗鎴愬姛锛屼繚瀛樺悗鐢熸晥銆�')
+      }
+      
+      config.uuid = MenuId
+      config.MenuID = MenuId
+      config.open_edition = ''
+
+      let indeComs = []
+      config.components.forEach(item => {
+        if (item.type === 'navbar') {
+          indeComs.push(fromJS(item).toJS())
+        }
+      })
+
+      if (indeComs.length === 0) {
+        this.setState({
+          oriConfig: null,
+          config: fromJS(config).toJS(),
+          loading: false
+        })
+
+        this.props.modifyCustomMenu(config)
+      } else {
+        this.jointComponents(config, indeComs, true)
+      }
+    })
+  }
+
+  jointComponents = (config, indeComs, isCreate) => {
     let deffers = indeComs.map(item => {
       return new Promise(resolve => {
         Api.getSystemConfig({
@@ -483,7 +597,6 @@
               message: res.message,
               duration: 5
             })
-            return
           }
           
           resolve(res)
@@ -531,8 +644,9 @@
       }
 
       this.setState({
-        oriConfig: fromJS(config).toJS(),
-        config: config
+        oriConfig: isCreate ? null : fromJS(config).toJS(),
+        config: config,
+        loading: false
       })
 
       this.props.modifyCustomMenu(config)
@@ -648,6 +762,11 @@
         message: '璇峰畬鍠勮彍鍗曞熀鏈俊鎭紒',
         duration: 5
       })
+      sessionStorage.setItem('settingshow', 'true')
+      this.setState({
+        settingshow: true,
+        activeKey: 'basedata'
+      })
       return
     }
 
@@ -750,7 +869,7 @@
                 LText: '',
                 LTexttb: ''
               }
-  
+
               _param.LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(item)))
               _param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
               _param.secretkey = Utils.encrypt('', _param.timestamp)
@@ -901,13 +1020,12 @@
         if (!res) return
 
         if (delButtons.length === 0) {
-          return {
-            status: true
-          }
+          return { status: true, nonexec: true }
         } else {
+          let appHomeId = sessionStorage.getItem('appHomeId')
           let _param = {
             func: 'sPC_MainMenu_Del',
-            MenuID: delButtons.join(',')
+            MenuID: delButtons.filter(id => id !== appHomeId).join(',')
           }
           return Api.getSystemConfig(_param)
         }
@@ -920,13 +1038,13 @@
             duration: 5
           })
           return false
+        } else if (!res.nonexec) { // 鎵ц鍒犻櫎鍚庡埛鏂拌彍鍗曞垪琛�
+          this.getAppMenus()
         }
 
         let ids = thawButtons.filter(item => btnIds.indexOf(item) !== -1)
         if (ids.length === 0) {
-          return {
-            status: true
-          }
+          return { status: true }
         } else {
           return Api.getSystemConfig({
             func: 'sPC_MainMenu_ReDel',
@@ -1191,14 +1309,19 @@
   refreshView = () => {
     const { oriConfig, config } = this.state
 
-    if (!is(fromJS(oriConfig), fromJS(config))) {
+    if (!oriConfig || !is(fromJS(oriConfig), fromJS(config))) {
       notification.warning({
         top: 92,
-        message: '閰嶇疆宸蹭慨鏀癸紝璇蜂繚瀛橈紒',
+        message: '閰嶇疆淇℃伅鏈繚瀛橈紒',
         duration: 5
       })
       return
     }
+
+    // Api.getSystemConfig({
+    //   func: 'sPC_MainMenu_Del',
+    //   MenuID: '1614740497468ku800sbg853vupf65v4'
+    // })
 
     sessionStorage.removeItem('sysRoles')
     sessionStorage.removeItem('permFuncField')
@@ -1208,12 +1331,73 @@
     window.location.reload()
   }
 
+  setHomeView = () => {
+    const { oriConfig, config } = this.state
+
+    if (!oriConfig || !is(fromJS(oriConfig), fromJS(config))) {
+      notification.warning({
+        top: 92,
+        message: '閰嶇疆淇℃伅鏈繚瀛橈紒',
+        duration: 5
+      })
+      return
+    }
+
+    let param = {
+      func: 's_kei_link_keyids_addupt',
+      BID: sessionStorage.getItem('appId'),
+      exec_type: 'y',
+      LText: ''
+    }
+
+    let appViewList = sessionStorage.getItem('appViewList')
+    appViewList = appViewList ? JSON.parse(appViewList) : []
+    appViewList = appViewList.filter(item => item.keys_type !== 'index')
+
+    appViewList.unshift({
+      appkey: window.GLOB.appkey || '',
+      bid: sessionStorage.getItem('appId') || '',
+      kei_no: sessionStorage.getItem('kei_no') || '',
+      keys_id: config.MenuID,
+      keys_type: 'index',
+      remark: config.MenuName
+    })
+
+    param.LText = appViewList.map(item => `select '${item.keys_id}','${item.keys_type}','${item.kei_no}','${item.appkey}','${item.bid}','${sessionStorage.getItem('CloudUserID')}','${item.remark}'`)
+    param.LText = param.LText.join(' union all ')
+    param.LText = Utils.formatOptions(param.LText)
+
+    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
+    param.secretkey = Utils.encrypt('', param.timestamp)
+
+    confirm({
+      title: '纭畾璁剧疆鏈〉闈负棣栭〉鍚楋紵',
+      content: '',
+      onOk() {
+        Api.getSystemConfig(param).then(result => {
+          if (!result.status) {
+            notification.warning({
+              top: 92,
+              message: result.message,
+              duration: 5
+            })
+          } else {
+            sessionStorage.setItem('appHomeId', config.MenuID)
+            sessionStorage.setItem('appViewList', JSON.stringify(appViewList))
+          }
+        })
+      },
+      onCancel() {}
+    })
+  }
+
   render () {
-    const { localedict, activeKey, settingshow, controlshow, dict, MenuId, config, menuloading, customComponents } = this.state
+    const { localedict, loading, activeKey, settingshow, controlshow, dict, MenuId, config, menuloading, customComponents } = this.state
 
     return (
       <ConfigProvider locale={localedict}>
         <div className={'mk-pc-view '} id="mk-menu-design-view">
+          {loading ? <Spin className="view-spin" size="large" /> : null}
           <DndProvider backend={HTML5Backend}>
             <div className={'menu-setting ' + (!settingshow ? 'hidden' : '')}>
               <div className="draw">
@@ -1259,6 +1443,7 @@
               <SysInterface config={config} updateConfig={this.updateConfig}/>
               <PictureController/>
               <Quotecomponent config={config} updateConfig={this.updateConfig}/>
+              <Button className="mk-border-green" icon="home" onClick={this.setHomeView}>璁句负棣栭〉</Button>
               <Button className="mk-border-danger" icon="redo" onClick={this.refreshView}>寮哄埗鍒锋柊</Button>
               <Button type="default" onClick={this.closeView}>{dict['mob.return']}</Button>
             </div>
diff --git a/src/views/pcdesign/index.scss b/src/views/pcdesign/index.scss
index e6c8091..01fc2a0 100644
--- a/src/views/pcdesign/index.scss
+++ b/src/views/pcdesign/index.scss
@@ -1,6 +1,16 @@
 .mk-pc-view {
   background: #000;
   min-height: 100vh;
+
+  >.view-spin {
+    position: absolute;
+    z-index: 3;
+    left: calc(50% - 16px);
+    top: calc(50vh - 70px);
+  }
+  .modal-form-board {
+    padding-top: 0;
+  }
   .menu-setting {
     position: fixed;
     left: 0;
diff --git a/src/views/pcdesign/menuform/index.jsx b/src/views/pcdesign/menuform/index.jsx
index cedb3a5..2335bcf 100644
--- a/src/views/pcdesign/menuform/index.jsx
+++ b/src/views/pcdesign/menuform/index.jsx
@@ -69,7 +69,7 @@
                     message: dict['mob.required.input'] + dict['mob.menu'] + dict['mob.name'] + '!'
                   }
                 ]
-              })(<Input placeholder="" autoComplete="off" onChange={this.changeName}/>)}
+              })(<Input placeholder="" disabled={!!(config.fixed && config.MenuName)} autoComplete="off" onChange={this.changeName}/>)}
             </Form.Item>
           </Col>
           <Col span={24}>
@@ -82,7 +82,7 @@
                     message: dict['mob.required.input'] + dict['mob.menu'] + dict['mob.param'] + '!'
                   }
                 ]
-              })(<Input placeholder="" autoComplete="off" onChange={this.changeNo}/>)}
+              })(<Input placeholder="" disabled={!!(config.fixed && config.MenuName)} autoComplete="off" onChange={this.changeNo}/>)}
             </Form.Item>
           </Col>
           <Col span={24}>

--
Gitblit v1.8.0