From 4cd93a0c0525a22ec8798e51096fa5bfd448bde0 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期一, 09 一月 2023 19:30:13 +0800
Subject: [PATCH] 2023-01-09

---
 src/menu/components/timeline/normal-timeline/options.jsx                |    2 
 src/menu/datasource/verifycard/utils.jsx                                |    2 
 src/views/mobdesign/popview/index.scss                                  |    4 
 src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx          |    2 
 src/menu/components/tree/antd-tree/options.jsx                          |    2 
 src/menu/components/editor/braft-editor/options.jsx                     |    2 
 src/menu/components/table/normal-table/options.jsx                      |    2 
 src/mob/components/tabs/antv-tabs/options.jsx                           |    3 
 src/menu/components/card/balcony/options.jsx                            |    2 
 src/menu/components/form/simple-form/options.jsx                        |    2 
 src/menu/components/chart/antv-scatter/chartcompile/formconfig.jsx      |    2 
 src/views/mobdesign/popview/menuform/index.jsx                          |   98 ++++++++
 src/menu/components/table/edit-table/options.jsx                        |    2 
 src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx   |    3 
 src/menu/components/chart/antv-dashboard/chartcompile/formconfig.jsx    |    2 
 src/menu/components/form/step-form/options.jsx                          |    2 
 src/templates/sharecomponent/settingcomponent/settingform/index.jsx     |    3 
 src/menu/components/code/sandbox/options.jsx                            |    2 
 src/menu/components/iframe/options.jsx                                  |    2 
 src/views/mobdesign/index.jsx                                           |  130 ++++++++++
 src/menu/datasource/verifycard/index.jsx                                |    6 
 src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx   |    3 
 src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx      |    3 
 src/views/mobdesign/popview/menuform/index.scss                         |    0 
 src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx          |    2 
 src/menu/components/carousel/data-card/options.jsx                      |    2 
 src/menu/components/card/data-card/options.jsx                          |    4 
 src/views/pcdesign/index.jsx                                            |    2 
 src/templates/modalconfig/settingform/index.jsx                         |    2 
 src/templates/zshare/formconfig.jsx                                     |    2 
 src/menu/components/share/actioncomponent/formconfig.jsx                |   61 +++-
 src/views/mobdesign/popview/index.jsx                                   |  306 +++++++++++++++++++++++++
 src/mob/modulesource/index.jsx                                          |    6 
 src/menu/components/tabs/antv-tabs/options.jsx                          |    2 
 src/menu/components/chart/chart-custom/chartcompile/formconfig.jsx      |    2 
 src/menu/components/group/normal-group/options.jsx                      |    2 
 src/menu/pastecontroller/index.jsx                                      |    6 
 src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx |    3 
 src/mob/components/menubar/normal-menubar/options.jsx                   |    3 
 src/menu/components/chart/antv-G6/chartcompile/formconfig.jsx           |    2 
 src/menu/components/share/actioncomponent/actionform/index.jsx          |    6 
 src/templates/sharecomponent/searchcomponent/settingform/index.jsx      |    2 
 src/menu/components/search/main-search/options.jsx                      |    4 
 43 files changed, 633 insertions(+), 67 deletions(-)

diff --git a/src/menu/components/card/balcony/options.jsx b/src/menu/components/card/balcony/options.jsx
index 46f7bec..86b84f5 100644
--- a/src/menu/components/card/balcony/options.jsx
+++ b/src/menu/components/card/balcony/options.jsx
@@ -257,7 +257,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/card/data-card/options.jsx b/src/menu/components/card/data-card/options.jsx
index 04a516b..49358f7 100644
--- a/src/menu/components/card/data-card/options.jsx
+++ b/src/menu/components/card/data-card/options.jsx
@@ -149,7 +149,7 @@
       options: [
         {value: 'page', label: '椤电爜'},
         {value: 'switch', label: '宸﹀彸鍒囨崲', forbid: appType === 'mob' || subtype === 'tablecard'},
-        {value: 'slide', label: '婊戝姩鍔犺浇', forbid: appType !== 'mob'},
+        {value: 'slide', label: '婊戝姩鍔犺浇', forbid: appType !== 'mob' || sessionStorage.getItem('editMenuType') === 'popview'},
         {value: 'more', label: '鏌ョ湅鏇村'},
       ],
       controlFields: [
@@ -499,7 +499,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/carousel/data-card/options.jsx b/src/menu/components/carousel/data-card/options.jsx
index a29facc..e6ac38e 100644
--- a/src/menu/components/carousel/data-card/options.jsx
+++ b/src/menu/components/carousel/data-card/options.jsx
@@ -211,7 +211,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/chart/antv-G6/chartcompile/formconfig.jsx b/src/menu/components/chart/antv-G6/chartcompile/formconfig.jsx
index b5f74db..aa28f53 100644
--- a/src/menu/components/chart/antv-G6/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/antv-G6/chartcompile/formconfig.jsx
@@ -87,7 +87,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx b/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
index f26a458..2620f88 100644
--- a/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
@@ -87,7 +87,7 @@
         {value: 'true', text: '鍚敤'},
         {value: 'false', text: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'select',
diff --git a/src/menu/components/chart/antv-dashboard/chartcompile/formconfig.jsx b/src/menu/components/chart/antv-dashboard/chartcompile/formconfig.jsx
index 61a1508..f1d676e 100644
--- a/src/menu/components/chart/antv-dashboard/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/antv-dashboard/chartcompile/formconfig.jsx
@@ -61,7 +61,7 @@
         {value: 'true', text: '鍚敤'},
         {value: 'false', text: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'select',
diff --git a/src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx b/src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx
index 7c34a71..ce67f2a 100644
--- a/src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx
@@ -119,7 +119,7 @@
         {value: 'true', text: '鍚敤'},
         {value: 'false', text: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'select',
diff --git a/src/menu/components/chart/antv-scatter/chartcompile/formconfig.jsx b/src/menu/components/chart/antv-scatter/chartcompile/formconfig.jsx
index 45f9942..8b2f4f4 100644
--- a/src/menu/components/chart/antv-scatter/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/antv-scatter/chartcompile/formconfig.jsx
@@ -61,7 +61,7 @@
         {value: 'true', text: '鍚敤'},
         {value: 'false', text: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'select',
diff --git a/src/menu/components/chart/chart-custom/chartcompile/formconfig.jsx b/src/menu/components/chart/chart-custom/chartcompile/formconfig.jsx
index 11c362b..2434abd 100644
--- a/src/menu/components/chart/chart-custom/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/chart-custom/chartcompile/formconfig.jsx
@@ -72,7 +72,7 @@
         {value: 'true', text: '鍚敤'},
         {value: 'false', text: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'select',
diff --git a/src/menu/components/code/sandbox/options.jsx b/src/menu/components/code/sandbox/options.jsx
index de03409..55c0cde 100644
--- a/src/menu/components/code/sandbox/options.jsx
+++ b/src/menu/components/code/sandbox/options.jsx
@@ -71,7 +71,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/editor/braft-editor/options.jsx b/src/menu/components/editor/braft-editor/options.jsx
index 0cf69e3..9e7094f 100644
--- a/src/menu/components/editor/braft-editor/options.jsx
+++ b/src/menu/components/editor/braft-editor/options.jsx
@@ -99,7 +99,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/form/simple-form/options.jsx b/src/menu/components/form/simple-form/options.jsx
index 889190a..760d969 100644
--- a/src/menu/components/form/simple-form/options.jsx
+++ b/src/menu/components/form/simple-form/options.jsx
@@ -179,7 +179,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'cascader',
diff --git a/src/menu/components/form/step-form/options.jsx b/src/menu/components/form/step-form/options.jsx
index 4011d4e..48f3daf 100644
--- a/src/menu/components/form/step-form/options.jsx
+++ b/src/menu/components/form/step-form/options.jsx
@@ -130,7 +130,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'cascader',
diff --git a/src/menu/components/group/normal-group/options.jsx b/src/menu/components/group/normal-group/options.jsx
index 168bc3b..0d128ce 100644
--- a/src/menu/components/group/normal-group/options.jsx
+++ b/src/menu/components/group/normal-group/options.jsx
@@ -109,7 +109,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'radio',
diff --git a/src/menu/components/iframe/options.jsx b/src/menu/components/iframe/options.jsx
index 8a54190..b6e8ca6 100644
--- a/src/menu/components/iframe/options.jsx
+++ b/src/menu/components/iframe/options.jsx
@@ -120,7 +120,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/search/main-search/options.jsx b/src/menu/components/search/main-search/options.jsx
index e72fbb2..880a5a7 100644
--- a/src/menu/components/search/main-search/options.jsx
+++ b/src/menu/components/search/main-search/options.jsx
@@ -54,7 +54,7 @@
     {
       type: 'radio',
       field: 'drawerPlacement',
-      label: '鎶藉眽鏂瑰悜',
+      label: '寮瑰嚭鏂瑰悜',
       initval: wrap.drawerPlacement || 'right',
       required: false,
       options: [
@@ -129,7 +129,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/share/actioncomponent/actionform/index.jsx b/src/menu/components/share/actioncomponent/actionform/index.jsx
index 6641525..5c0a14c 100644
--- a/src/menu/components/share/actioncomponent/actionform/index.jsx
+++ b/src/menu/components/share/actioncomponent/actionform/index.jsx
@@ -18,7 +18,7 @@
   exec: ['label', 'OpenType', 'intertype', 'Ot', 'show', 'swipe', 'icon', 'class', 'color', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'anchors', 'width', 'openmenu', 'refreshTab', 'hidden'],
   excelIn: ['label', 'Ot', 'OpenType', 'intertype', 'show', 'icon', 'class', 'color', 'sheet', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'width', 'hidden'],
   excelOut: ['label', 'OpenType', 'intertype', 'show', 'icon', 'class', 'color', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'pagination', 'search', 'width', 'hidden'],
-  popview: ['label', 'Ot', 'OpenType', 'show', 'icon', 'class', 'color', 'popClose', 'width', 'display', 'ratio', 'syncComponent', 'clickouter', 'hidden'],
+  popview: ['label', 'Ot', 'OpenType', 'show', 'icon', 'class', 'color', 'popClose', 'width', 'display', 'ratio', 'syncComponent', 'clickouter', 'maskStyle', 'closeButton', 'hidden'],
   tab: ['label', 'Ot', 'OpenType', 'show', 'icon', 'class', 'color', 'linkmenu', 'width', 'hidden'],
   innerpage: ['label', 'Ot', 'OpenType', 'pageTemplate', 'show', 'swipe', 'icon', 'class', 'color', 'width', 'hidden'],
   funcbutton: ['label', 'OpenType', 'funcType', 'show', 'swipe', 'icon', 'class', 'color', 'width', 'hidden'],
@@ -356,7 +356,9 @@
     } else if (openType === 'popview') {
       reOptions.Ot = requireOptions.filter(op => ['notRequired', 'requiredSgl'].includes(op.value))
 
-      if (this.record.display === 'drawer') {
+      if (appType === 'mob') {
+        shows.push('placement')
+      } else if (this.record.display === 'drawer') {
         shows.push('placement')
       }
       if (this.record.popClose === 'grid') {
diff --git a/src/menu/components/share/actioncomponent/formconfig.jsx b/src/menu/components/share/actioncomponent/formconfig.jsx
index efedf7a..ab5b23b 100644
--- a/src/menu/components/share/actioncomponent/formconfig.jsx
+++ b/src/menu/components/share/actioncomponent/formconfig.jsx
@@ -126,7 +126,7 @@
     }
   }
   if (appType === 'mob') {
-    opentypes = opentypes.filter(item => ['pop', 'prompt', 'exec', 'excelOut', 'innerpage', 'funcbutton'].includes(item.value))
+    opentypes = opentypes.filter(item => ['pop', 'prompt', 'exec', 'excelOut', 'popview', 'innerpage', 'funcbutton'].includes(item.value))
     funTypes = [
       { value: 'print', text: '鏍囩鎵撳嵃' },
       { value: 'scan', text: '鎵爜' },
@@ -829,23 +829,13 @@
       }, {
         value: 'drawer',
         text: '鎶藉眽'
-      }]
-    },
-    {
-      type: 'number',
-      key: 'ratio',
-      min: 1,
-      max: 3000,
-      precision: 0,
-      label: '姣斾緥',
-      initVal: card.ratio || 85,
-      tooltip: '妯℃�佹鎴栨娊灞夌殑瀹藉害锛屽皬浜�100涓虹獥鍙e搴︼紙鎴栭珮搴︼級鐧惧垎姣旓紝澶т簬100涓哄儚绱犲�笺��',
-      required: true
+      }],
+      forbid: appType === 'mob',
     },
     {
       type: 'radio',
       key: 'placement',
-      label: '鎶藉眽鏂瑰悜',
+      label: '寮瑰嚭鏂瑰悜',
       initVal: card.placement || 'right',
       required: false,
       options: [{
@@ -863,6 +853,17 @@
       }]
     },
     {
+      type: 'number',
+      key: 'ratio',
+      min: 1,
+      max: 3000,
+      precision: 0,
+      label: '姣斾緥',
+      initVal: card.ratio || 85,
+      tooltip: '妯℃�佹鎴栨娊灞夌殑瀹藉害锛屽皬浜�100涓虹獥鍙e搴︼紙鎴栭珮搴︼級鐧惧垎姣旓紝澶т簬100涓哄儚绱犲�笺��',
+      required: true
+    },
+    {
       type: 'radio',
       key: 'clickouter',
       label: '鐐瑰嚮钂欏眰',
@@ -875,6 +876,36 @@
         value: 'close',
         text: '鍏抽棴'
       }]
+    },
+    {
+      type: 'radio',
+      key: 'maskStyle',
+      label: '钂欏眰鏍峰紡',
+      initVal: card.maskStyle || 'default',
+      required: false,
+      options: [{
+        value: 'default',
+        text: '榛樿'
+      }, {
+        value: 'transparent',
+        text: '閫忔槑'
+      }],
+      forbid: appType !== 'mob'
+    },
+    {
+      type: 'radio',
+      key: 'closeButton',
+      label: '鍏抽棴鎸夐挳',
+      initVal: card.closeButton || 'false',
+      required: false,
+      options: [{
+        value: 'false',
+        text: '闅愯棌'
+      }, {
+        value: 'true',
+        text: '鏄剧ず'
+      }],
+      forbid: appType !== 'mob'
     },
     {
       type: 'radio',
@@ -1678,7 +1709,7 @@
     {
       type: 'radio',
       key: 'placement',
-      label: '鎶藉眽鏂瑰悜',
+      label: '寮瑰嚭鏂瑰悜',
       initVal: card.placement || 'right',
       required: false,
       options: [{
diff --git a/src/menu/components/table/edit-table/options.jsx b/src/menu/components/table/edit-table/options.jsx
index 565be7f..d04ef9a 100644
--- a/src/menu/components/table/edit-table/options.jsx
+++ b/src/menu/components/table/edit-table/options.jsx
@@ -277,7 +277,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/table/normal-table/options.jsx b/src/menu/components/table/normal-table/options.jsx
index 827f3c6..b876e95 100644
--- a/src/menu/components/table/normal-table/options.jsx
+++ b/src/menu/components/table/normal-table/options.jsx
@@ -296,7 +296,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/tabs/antv-tabs/options.jsx b/src/menu/components/tabs/antv-tabs/options.jsx
index be2cd65..798a655 100644
--- a/src/menu/components/tabs/antv-tabs/options.jsx
+++ b/src/menu/components/tabs/antv-tabs/options.jsx
@@ -237,7 +237,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/timeline/normal-timeline/options.jsx b/src/menu/components/timeline/normal-timeline/options.jsx
index fac7a50..8d0ddb9 100644
--- a/src/menu/components/timeline/normal-timeline/options.jsx
+++ b/src/menu/components/timeline/normal-timeline/options.jsx
@@ -140,7 +140,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/components/tree/antd-tree/options.jsx b/src/menu/components/tree/antd-tree/options.jsx
index 462aa86..54e81d2 100644
--- a/src/menu/components/tree/antd-tree/options.jsx
+++ b/src/menu/components/tree/antd-tree/options.jsx
@@ -131,7 +131,7 @@
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
       ],
-      forbid: !appType
+      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
       type: 'multiselect',
diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx
index 23ae166..4962810 100644
--- a/src/menu/datasource/verifycard/index.jsx
+++ b/src/menu/datasource/verifycard/index.jsx
@@ -433,13 +433,9 @@
       if (_loading) {
         notification.warning({
           top: 92,
-          message: '瀛樺湪鏈繚瀛樿剼鏈紝璇风偣鍑荤‘瀹氫繚瀛橈紝鎴栫偣鍑诲彇娑堟斁寮冧慨鏀癸紒',
+          message: '瀛樺湪鏈繚瀛樿剼鏈紒',
           duration: 5
         })
-        this.setState({
-          loading: false
-        })
-        return
       }
 
       this.setState({
diff --git a/src/menu/datasource/verifycard/utils.jsx b/src/menu/datasource/verifycard/utils.jsx
index 06c8b82..6296192 100644
--- a/src/menu/datasource/verifycard/utils.jsx
+++ b/src/menu/datasource/verifycard/utils.jsx
@@ -132,7 +132,7 @@
 
     let _search = defSearch
 
-    if (setting.queryType === 'statistics' && _dataresource) {
+    if (_dataresource) {
       _regoptions.forEach(item => {
         _dataresource = _dataresource.replace(item.reg, '0')
       })
diff --git a/src/menu/pastecontroller/index.jsx b/src/menu/pastecontroller/index.jsx
index 800bec8..5c6dcd7 100644
--- a/src/menu/pastecontroller/index.jsx
+++ b/src/menu/pastecontroller/index.jsx
@@ -62,7 +62,11 @@
     let options = ['tabs', 'timeline', 'datacard', 'propcard', 'mainsearch', 'simpleform', 'stepform', 'tabform', 'balcony', 'group', 'normaltable', 'tablecard', 'line', 'bar', 'pie', 'dashboard', 'scatter', 'iframe', 'sandbox']
 
     if (appType === 'mob') {
-      options.push('menubar', 'topbar')
+      if (sessionStorage.getItem('editMenuType') !== 'popview') {
+        options.push('menubar', 'topbar')
+      } else {
+        options.push('menubar')
+      }
     } else {
       options.push('editable', 'antvG6')
     }
diff --git a/src/mob/components/menubar/normal-menubar/options.jsx b/src/mob/components/menubar/normal-menubar/options.jsx
index 0cdd7bc..6415abb 100644
--- a/src/mob/components/menubar/normal-menubar/options.jsx
+++ b/src/mob/components/menubar/normal-menubar/options.jsx
@@ -74,7 +74,8 @@
       options: [
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
-      ]
+      ],
+      forbid: sessionStorage.getItem('editMenuType') === 'popview'
     },
   ]
 
diff --git a/src/mob/components/tabs/antv-tabs/options.jsx b/src/mob/components/tabs/antv-tabs/options.jsx
index 664d749..21005e5 100644
--- a/src/mob/components/tabs/antv-tabs/options.jsx
+++ b/src/mob/components/tabs/antv-tabs/options.jsx
@@ -185,7 +185,8 @@
       options: [
         {value: 'true', label: '鍚敤'},
         {value: 'false', label: '绂佺敤'},
-      ]
+      ],
+      forbid: sessionStorage.getItem('editMenuType') === 'popview'
     },
   ]
 
diff --git a/src/mob/modulesource/index.jsx b/src/mob/modulesource/index.jsx
index 2ee0d7e..debf9c8 100644
--- a/src/mob/modulesource/index.jsx
+++ b/src/mob/modulesource/index.jsx
@@ -16,7 +16,7 @@
   }
 
   UNSAFE_componentWillMount () {
-    const { components } = this.props
+    const { components, viewType } = this.props
     let options = []
     
     if (components) {
@@ -29,6 +29,10 @@
       }
     }
 
+    if (viewType === 'popview') {
+      options = options.filter(item => !['topbar', 'navbar', 'login', 'officialAccount'].includes(item.component))
+    }
+
     this.setState({
       menuOptions: options
     })
diff --git a/src/templates/modalconfig/settingform/index.jsx b/src/templates/modalconfig/settingform/index.jsx
index 4404212..e3b7b22 100644
--- a/src/templates/modalconfig/settingform/index.jsx
+++ b/src/templates/modalconfig/settingform/index.jsx
@@ -256,7 +256,7 @@
             </Form.Item>
           </Col> : null}
           {display === 'drawer' ? <Col span={12}>
-            <Form.Item label="鎶藉眽鏂瑰悜">
+            <Form.Item label="寮瑰嚭鏂瑰悜">
               {getFieldDecorator('placement', {
                 initialValue: placement
               })(
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
index d3bc305..6fe2b7c 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
@@ -868,10 +868,9 @@
       if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))) {
         notification.warning({
           top: 92,
-          message: '瀛樺湪鏈繚瀛樿剼鏈紝璇风偣鍑荤‘瀹氫繚瀛橈紝鎴栫偣鍑诲彇娑堟斁寮冧慨鏀癸紒',
+          message: '瀛樺湪鏈繚瀛樿剼鏈紒',
           duration: 5
         })
-        return
       }
 
       this.setState({loading: true})
diff --git a/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx
index b7d47e3..832945f 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx
@@ -554,10 +554,9 @@
       if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))) {
         notification.warning({
           top: 92,
-          message: '瀛樺湪鏈繚瀛樿剼鏈紝璇风偣鍑荤‘瀹氫繚瀛橈紝鎴栫偣鍑诲彇娑堟斁寮冧慨鏀癸紒',
+          message: '瀛樺湪鏈繚瀛樿剼鏈紒',
           duration: 5
         })
-        return
       }
 
       this.setState({loading: true})
diff --git a/src/templates/sharecomponent/searchcomponent/settingform/index.jsx b/src/templates/sharecomponent/searchcomponent/settingform/index.jsx
index 584dfb4..a131ad6 100644
--- a/src/templates/sharecomponent/searchcomponent/settingform/index.jsx
+++ b/src/templates/sharecomponent/searchcomponent/settingform/index.jsx
@@ -89,7 +89,7 @@
             <Form.Item label={
               <Tooltip placement="topLeft" title="鎶藉眽灞曞紑鐨勬柟鍚戙��">
                 <QuestionCircleOutlined className="mk-form-tip" />
-                鎶藉眽鏂瑰悜
+                寮瑰嚭鏂瑰悜
               </Tooltip>
             }>
               {getFieldDecorator('drawerPlacement', {
diff --git a/src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx b/src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx
index 66977c5..1280859 100644
--- a/src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx
+++ b/src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx
@@ -182,10 +182,9 @@
       if (_loading) {
         notification.warning({
           top: 92,
-          message: '瀛樺湪鏈繚瀛樿剼鏈紝璇风偣鍑荤‘瀹氫繚瀛橈紝鎴栫偣鍑诲彇娑堟斁寮冧慨鏀癸紒',
+          message: '瀛樺湪鏈繚瀛樿剼鏈紒',
           duration: 5
         })
-        return
       }
 
       this.setState({loading: true})
diff --git a/src/templates/sharecomponent/settingcomponent/settingform/index.jsx b/src/templates/sharecomponent/settingcomponent/settingform/index.jsx
index 3ed654e..5e8df8d 100644
--- a/src/templates/sharecomponent/settingcomponent/settingform/index.jsx
+++ b/src/templates/sharecomponent/settingcomponent/settingform/index.jsx
@@ -363,10 +363,9 @@
     if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))) {
       notification.warning({
         top: 92,
-        message: '瀛樺湪鏈繚瀛樿剼鏈紝璇风偣鍑荤‘瀹氫繚瀛橈紝鎴栫偣鍑诲彇娑堟斁寮冧慨鏀癸紒',
+        message: '瀛樺湪鏈繚瀛樼殑鑴氭湰锛�',
         duration: 5
       })
-      return
     }
 
     if (activeKey === 'setting') {
diff --git a/src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx b/src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx
index bc1225f..31c37e5 100644
--- a/src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx
+++ b/src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx
@@ -212,10 +212,9 @@
       if (_loading) {
         notification.warning({
           top: 92,
-          message: '瀛樺湪鏈繚瀛樿剼鏈紝璇风偣鍑荤‘瀹氫繚瀛橈紝鎴栫偣鍑诲彇娑堟斁寮冧慨鏀癸紒',
+          message: '瀛樺湪鏈繚瀛樿剼鏈紒',
           duration: 5
         })
-        return
       }
       this.setState({loading: true})
       this.sqlverify(() => { // 楠岃瘉鎴愬姛
diff --git a/src/templates/zshare/formconfig.jsx b/src/templates/zshare/formconfig.jsx
index 35d68f3..dc8dbdd 100644
--- a/src/templates/zshare/formconfig.jsx
+++ b/src/templates/zshare/formconfig.jsx
@@ -1447,7 +1447,7 @@
     {
       type: 'radio',
       key: 'placement',
-      label: '鎶藉眽鏂瑰悜',
+      label: '寮瑰嚭鏂瑰悜',
       initVal: card.placement || 'right',
       required: false,
       options: [{
diff --git a/src/views/mobdesign/index.jsx b/src/views/mobdesign/index.jsx
index a3f934b..1091b21 100644
--- a/src/views/mobdesign/index.jsx
+++ b/src/views/mobdesign/index.jsx
@@ -45,6 +45,7 @@
 const StyleCombController = asyncComponent(() => import('@/menu/stylecombcontroller'))
 const StyleCombControlButton = asyncComponent(() => import('@/menu/stylecombcontrolbutton'))
 const TableComponent = asyncComponent(() => import('@/templates/sharecomponent/tablecomponent'))
+const PopView = asyncComponent(() => import('./popview'))
 
 sessionStorage.setItem('isEditState', 'true')
 sessionStorage.setItem('editMenuType', 'menu') // 缂栬緫鑿滃崟绫诲瀷
@@ -73,6 +74,7 @@
     comloading: false,
     adapters: [],
     viewType: 'menu',
+    view: '',
     eyeopen: false,
     needUpdate: false
   }
@@ -140,6 +142,7 @@
       document.getElementById('mk-mob-design-view').innerHTML = '<div style="text-align: center; font-size: 30px; margin-top: 40vh; height: 100vh; background: #fff;">鏈簲鐢ㄦ病鏈塒C绔〉闈㈢殑缂栬緫鏉冮檺锛岃鑱旂郴绠$悊鍛橈紒</div>'
       return
     }
+    MKEmitter.addListener('changePopview', this.initPopview)
     MKEmitter.addListener('triggerMenuSave', this.submitConfig)
     MKEmitter.addListener('changeEditMenu', this.changeEditMenu)
     setTimeout(() => {
@@ -210,8 +213,129 @@
     this.setState = () => {
       return
     }
+    MKEmitter.removeListener('changePopview', this.initPopview)
     MKEmitter.removeListener('triggerMenuSave', this.submitConfig)
     MKEmitter.removeListener('changeEditMenu', this.changeEditMenu)
+  }
+
+  initPopview = (card, btn) => {
+    const { config } = this.state
+
+    if (!this.checkBase()) {
+      return
+    }
+
+    let _btn = fromJS(btn).toJS()
+
+    if (_btn.config) {
+      _btn.config.uuid = _btn.uuid
+      _btn.config.MenuID = _btn.uuid
+      _btn.config.ParentId = card.uuid
+      _btn.config.MenuName = _btn.label
+    } 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})
+  }
+
+  closePop = () => {
+    const {config} = this.state
+
+    sessionStorage.setItem('editMenuType', 'menu')
+
+    window.GLOB.urlFields = config.urlFields || []
+    window.GLOB.customMenu = config
+
+    this.setState({view: '', popConfig: null})
+  }
+
+  submitPopConfig = (btnconfig) => {
+    let parents = {[btnconfig.ParentId]: true}
+    let popbtns = {[btnconfig.uuid]: fromJS(btnconfig).toJS()}
+    let config = fromJS(this.state.config).toJS()
+
+    config.components = this.setPopView(config.components, parents, popbtns)
+
+    this.setState({ config }, () => {
+      this.submitConfig()
+    })
+  }
+
+  setPopView = (components, parents, popbtns) => {
+    return components.map(item => {
+      if (item.type === 'tabs') {
+        item.subtabs.forEach(tab => {
+          tab.components = this.setPopView(tab.components, parents, popbtns)
+        })
+      } else if (item.type === 'group') {
+        item.components = this.setPopView(item.components, parents, popbtns)
+      } else if (parents[item.uuid]) {
+        this.setpopConfig(item, popbtns)
+      }
+      return item
+    })
+  }
+
+  setpopConfig = (config, popbtns) => {
+    config.subcards && config.subcards.forEach(item => {
+      item.elements.forEach(cell => {
+        if (cell.eleType !== 'button') return
+        if (cell.OpenType === 'popview' && popbtns[cell.uuid]) {
+          cell.config = popbtns[cell.uuid]
+        }
+      })
+    })
+
+    config.cols && config.cols.forEach(col => {
+      if (col.type === 'action') {
+        col.elements.forEach(cell => {
+          if (cell.OpenType === 'popview' && popbtns[cell.uuid]) {
+            cell.config = popbtns[cell.uuid]
+          }
+        })
+      }
+    })
+
+    config.elements && config.elements.forEach(cell => {
+      if (cell.eleType !== 'button') return
+      if (cell.OpenType === 'popview' && popbtns[cell.uuid]) {
+        cell.config = popbtns[cell.uuid]
+      }
+    })
+  
+    config.action && config.action.forEach(cell => {
+      if (cell.OpenType === 'popview' && popbtns[cell.uuid]) {
+        cell.config = popbtns[cell.uuid]
+      }
+    })
+
+    config.$tables = getTables(config)
+  }
+
+  checkBase = () => {
+    const { config } = this.state
+
+    if (!config.MenuName || !config.MenuNo) {
+      notification.warning({
+        top: 92,
+        message: '璇峰畬鍠勮彍鍗曞熀鏈俊鎭紒',
+        duration: 5
+      })
+      return false
+    }
+    return true
   }
 
   getSmStemp = () => {
@@ -1868,7 +1992,7 @@
 
 
   render () {
-    const { viewType, comloading, loading, settingshow, controlshow, activeKey, MenuId, config, menuloading, adapters, eyeopen, needUpdate } = this.state
+    const { view, viewType, comloading, loading, settingshow, controlshow, activeKey, MenuId, config, menuloading, adapters, eyeopen, needUpdate } = this.state
 
     return (
       <ConfigProvider locale={antdZhCN}>
@@ -1876,7 +2000,7 @@
           <Header/>
           {loading ? <Spin className="view-spin" size="large" /> : null}
           <DndProvider backend={HTML5Backend}>
-            <div className={'menu-setting ' + (!settingshow ? 'hidden' : '')}>
+            {view !== 'popview' ? <><div className={'menu-setting ' + (!settingshow ? 'hidden' : '')}>
               <div className="draw">
                 {settingshow ? <DoubleLeftOutlined onClick={() => {this.setState({settingshow: false})}} /> : null}
                 {!settingshow ? <DoubleRightOutlined onClick={() => {this.setState({settingshow: true})}} /> : null}
@@ -1947,7 +2071,7 @@
               {config && !comloading ? <div className="mob-shell" style={{width: window.GLOB.shellWidth, height: window.GLOB.shellHeight}}>
                 <MobShell menu={config} handleList={this.updateConfig} />
               </div> : null}
-            </div>
+            </div></> : <PopView btn={this.state.popConfig} save={this.submitPopConfig} cancel={this.closePop}/>}
           </DndProvider>
           <StyleController />
           <StyleCombController />
diff --git a/src/views/mobdesign/popview/index.jsx b/src/views/mobdesign/popview/index.jsx
new file mode 100644
index 0000000..7cb6973
--- /dev/null
+++ b/src/views/mobdesign/popview/index.jsx
@@ -0,0 +1,306 @@
+import React, { Component } from 'react'
+import { is, fromJS } from 'immutable'
+import PropTypes from 'prop-types'
+import { notification, Modal, Collapse, Switch, Button } from 'antd'
+import { DoubleLeftOutlined, DoubleRightOutlined, EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons'
+
+import MKEmitter from '@/utils/events.js'
+import asyncComponent from '@/utils/asyncComponent'
+
+import './index.scss'
+
+const { Panel } = Collapse
+const { confirm } = Modal
+
+const MenuForm = asyncComponent(() => import('./menuform'))
+const MobShell = asyncComponent(() => import('@/mob/mobshell'))
+const SourceWrap = asyncComponent(() => import('@/mob/modulesource'))
+const Modulecell = asyncComponent(() => import('@/menu/modulecell'))
+const BgController = asyncComponent(() => import('@/pc/bgcontroller'))
+const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
+const PasteController = asyncComponent(() => import('@/menu/pastecontroller'))
+const StyleCombControlButton = asyncComponent(() => import('@/menu/stylecombcontrolbutton'))
+const TableComponent = asyncComponent(() => import('@/templates/sharecomponent/tablecomponent'))
+
+class PopViewDesign extends Component {
+  static propTpyes = {
+    btn: PropTypes.object,
+    save: PropTypes.func,
+    cancel: PropTypes.func
+  }
+
+  state = {
+    menuloading: false,
+    oriConfig: null,
+    config: null,
+    comloading: false,
+    settingshow: true,
+    controlshow: true,
+    eyeopen: false
+  }
+
+  UNSAFE_componentWillMount() {
+    const { btn } = this.props
+    sessionStorage.setItem('editMenuType', 'popview')
+
+    let config = fromJS(btn.config).toJS()
+
+    window.GLOB.urlFields = []               // url鍙橀噺
+    window.GLOB.customMenu = config          // 淇濆瓨鑿滃崟淇℃伅
+
+    this.setState({config: config, oriConfig: fromJS(config).toJS()})
+  }
+
+  componentDidMount () {
+    MKEmitter.addListener('completeSave', this.completeSave)
+    MKEmitter.addListener('triggerMenuSave', this.submitConfig)
+  }
+
+  shouldComponentUpdate (nextProps, nextState) {
+    return !is(fromJS(this.state), fromJS(nextState))
+  }
+
+  /**
+   * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊
+   */
+  componentWillUnmount () {
+    this.setState = () => {
+      return
+    }
+    MKEmitter.removeListener('completeSave', this.completeSave)
+    MKEmitter.removeListener('triggerMenuSave', this.submitConfig)
+  }
+
+  closeView = () => {
+    const { oriConfig, config } = this.state
+
+    if (!is(fromJS(oriConfig), fromJS(config))) {
+      const _this = this
+
+      confirm({
+        title: '閰嶇疆宸蹭慨鏀癸紝鏀惧純淇濆瓨鍚楋紵',
+        content: '',
+        onOk() {
+          _this.props.cancel()
+        },
+        onCancel() {}
+      })
+    } else {
+      this.props.cancel()
+    }
+  }
+
+  getMenuMessage = (config) => {
+    let tbs = []
+
+    let traversal = (components) => {
+      components.forEach(item => {
+        if (item.$tables) {
+          tbs.push(...item.$tables)
+        }
+        if (item.type === 'tabs') {
+          item.subtabs.forEach(tab => {
+            traversal(tab.components)
+          })
+        } else if (item.type === 'group') {
+          traversal(item.components)
+        }
+      })
+    }
+
+    traversal(config.components)
+
+    config.$tables = Array.from(new Set(tbs))
+  }
+
+  completeSave = () => {
+    this.setState({
+      oriConfig: fromJS(this.state.config).toJS(),
+      menuloading: false
+    })
+  }
+
+  submitConfig = () => {
+    let config = fromJS(this.state.config).toJS()
+
+    if (config.cacheUseful === 'true' && !config.cacheTime) {
+      notification.warning({
+        top: 92,
+        message: '璇峰畬鍠勭紦瀛樿缃紒',
+        duration: 5
+      })
+      return
+    }
+
+    if (config.enabled && this.verifyConfig()) {
+      config.enabled = false
+    }
+
+    this.getMenuMessage(config)
+
+    this.setState({
+      config: config,
+      menuloading: true
+    })
+
+    window.GLOB.customMenu = config
+
+    this.props.save(fromJS(config).toJS())
+  }
+
+  onEnabledChange = () => {
+    const { config } = this.state
+
+    if (!config.enabled && this.verifyConfig(true)) {
+      return
+    }
+
+    this.setState({
+      config: {...config, enabled: !config.enabled}
+    })
+  }
+
+  verifyConfig = (show) => {
+    const { config } = this.state
+    let error = ''
+
+    let check = (components) => {
+      components.forEach(item => {
+        if (error) return
+        if (item.type === 'tabs') {
+          item.subtabs.forEach(tab => {
+            check(tab.components)
+          })
+          return
+        } else if (item.type === 'group') {
+          check(item.components)
+          return
+        } else if (!item.errors || item.errors.length === 0) {
+          return
+        }
+        
+        item.errors.forEach(err => {
+          if (err.level !== 0 || error) return
+          error = `缁勪欢銆�${item.name}銆�${err.detail}`
+        })
+      })
+    }
+
+    check(config.components)
+
+    if (show && error) {
+      notification.warning({
+        top: 92,
+        message: error,
+        duration: 5
+      })
+    }
+
+    return error
+  }
+
+  // 鏇存柊閰嶇疆淇℃伅
+  updateConfig = (config) => {
+    this.setState({
+      config: config
+    })
+
+    window.GLOB.customMenu = config
+  }
+
+  resetConfig = (config) => {
+    this.setState({
+      config,
+      comloading: true
+    }, () => {
+      this.setState({
+        comloading: false
+      })
+    })
+
+    window.GLOB.customMenu = config
+  }
+
+  /**
+   * @description 鏇存柊甯哥敤琛ㄤ俊鎭紝蹇嵎娣诲姞鍚庢洿鏂伴厤缃俊鎭�
+   */
+  updatetable = (config) => {
+    this.setState({ config })
+
+    window.GLOB.customMenu = config
+  }
+
+  insert = (item) => {
+    let config = fromJS(this.state.config).toJS()
+
+    config.components.push(item)
+
+    this.setState({config})
+
+    window.GLOB.customMenu = config
+    
+    notification.success({
+      top: 92,
+      message: '绮樿创鎴愬姛锛�',
+      duration: 2
+    })
+  }
+
+  render () {
+    const { settingshow, controlshow, comloading, config, menuloading, eyeopen } = this.state
+
+    return (
+      <div className="mob-poper-view">
+        <div className={'menu-setting ' + (!settingshow ? 'hidden' : '')}>
+          <div className="draw">
+            {settingshow ? <DoubleLeftOutlined onClick={() => {this.setState({settingshow: false})}} /> : null}
+            {!settingshow ? <DoubleRightOutlined onClick={() => {this.setState({settingshow: true})}} /> : null}
+          </div>
+          <div className="pc-setting-tools">
+            <Collapse accordion defaultActiveKey="component" bordered={false}>
+              {/* 鍩烘湰淇℃伅 */}
+              <Panel header="鍩烘湰淇℃伅" forceRender className="basedata" key="basedata">
+                {/* 鑿滃崟淇℃伅 */}
+                <MenuForm config={config} updateConfig={this.updateConfig}/>
+                {/* 琛ㄥ悕娣诲姞 */}
+                <TableComponent config={config} updatetable={this.updateConfig}/>
+              </Panel>
+              {/* 缁勪欢娣诲姞 */}
+              <Panel header="缁勪欢" className="component" key="component">
+                <SourceWrap viewType="popview"/>
+              </Panel>
+              <Panel header="鍏冪礌" key="element">
+                <Modulecell />
+              </Panel>
+              <Panel header={'椤甸潰鏍峰紡'} key="background">
+                <BgController config={config} updateConfig={this.updateConfig} />
+              </Panel>
+            </Collapse>
+          </div>
+        </div>
+        <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}
+          </div>
+          <div className="wrap">
+            <Button type="primary" onClick={this.submitConfig} id="save-config" loading={menuloading}>淇濆瓨</Button>
+            <Switch className="big" checkedChildren="鍚�" unCheckedChildren="鍋�" checked={config && config.enabled} onChange={this.onEnabledChange} />
+            <Button className="mk-border-purple" onClick={() => this.setState({eyeopen: !eyeopen})}>{!eyeopen ? <EyeOutlined /> : <EyeInvisibleOutlined />} 缁勪欢鍚�</Button>
+            <PasteController insert={this.insert} />
+            <StyleCombControlButton menu={config} />
+            <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
+            <Button type="default" onClick={this.closeView}>杩斿洖</Button>
+          </div>
+        </div>
+        <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}
+        </div>
+      </div>
+    )
+  }
+}
+
+export default PopViewDesign
\ No newline at end of file
diff --git a/src/views/mobdesign/popview/index.scss b/src/views/mobdesign/popview/index.scss
new file mode 100644
index 0000000..16eb312
--- /dev/null
+++ b/src/views/mobdesign/popview/index.scss
@@ -0,0 +1,4 @@
+.mob-poper-view {
+  background: #000;
+  min-height: 100vh;
+}
\ No newline at end of file
diff --git a/src/views/mobdesign/popview/menuform/index.jsx b/src/views/mobdesign/popview/menuform/index.jsx
new file mode 100644
index 0000000..a925865
--- /dev/null
+++ b/src/views/mobdesign/popview/menuform/index.jsx
@@ -0,0 +1,98 @@
+import React, {Component} from 'react'
+import PropTypes from 'prop-types'
+import { Form, Row, Col, Radio, Tooltip, InputNumber } from 'antd'
+import { QuestionCircleOutlined } from '@ant-design/icons'
+
+// import './index.scss'
+
+class CustomMenuForm extends Component {
+  static propTpyes = {
+    config: PropTypes.object,
+    updateConfig: PropTypes.func
+  }
+  
+  changeCacheDay = (val) => {
+    if (typeof(val) !== 'number') {
+      val = ''
+    }
+    this.props.updateConfig({...this.props.config, cacheTime: val})
+  }
+
+  selectChange = (key, value) => {
+    const { config } = this.props
+
+    if (key === 'cacheUseful') {
+      this.props.updateConfig({...config, cacheUseful: value})
+    } else if (key === 'timeUnit') {
+      this.props.updateConfig({...config, timeUnit: value})
+    }
+  }
+
+  render() {
+    const { config } = this.props
+    const { getFieldDecorator } = this.props.form
+    const formItemLayout = {
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 8 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      }
+    }
+
+    return (
+      <Form {...formItemLayout}>
+        <Row>
+          <Col span={24}>
+            <Form.Item label={
+              <Tooltip placement="topLeft" title="瀵逛簬涓嶇粡甯告�у彉鍔ㄧ殑淇℃伅锛岀紦瀛樻暟鎹湁鍔╀簬鎻愰珮鏌ヨ鏁堢巼銆�">
+                <QuestionCircleOutlined className="mk-form-tip" />
+                缂撳瓨鏁版嵁
+              </Tooltip>
+            }>
+              {getFieldDecorator('cacheUseful', {
+                initialValue: config.cacheUseful || 'false'
+              })(
+                <Radio.Group onChange={(e) => {this.selectChange('cacheUseful', e.target.value)}}>
+                  <Radio value="true">浣跨敤</Radio>
+                  <Radio value="false">涓嶄娇鐢�</Radio>
+                </Radio.Group>
+              )}
+            </Form.Item>
+          </Col>
+          {config.cacheUseful === 'true' ? <Col span={24}>
+            <Form.Item label="鍗曚綅">
+              {getFieldDecorator('timeUnit', {
+                initialValue: config.timeUnit || 'day'
+              })(
+                <Radio.Group onChange={(e) => {this.selectChange('timeUnit', e.target.value)}}>
+                  <Radio value="day">澶�</Radio>
+                  <Radio value="hour">灏忔椂</Radio>
+                </Radio.Group>
+              )}
+            </Form.Item>
+          </Col> : null}
+          {config.cacheUseful === 'true' ? <Col span={24}>
+            <Form.Item label="鏃堕暱">
+              {getFieldDecorator('cacheTime', {
+                initialValue: config.cacheTime,
+                rules: [
+                  {
+                    required: true,
+                    message: '璇疯緭鍏ユ椂闀�!'
+                  }
+                ]
+              })(
+                <InputNumber min={1} max={config.timeUnit !== 'hour' ? 7 : 23} precision={0} onChange={this.changeCacheDay}/>
+              )}
+            </Form.Item>
+          </Col> : null}
+        </Row>
+      </Form>
+    )
+  }
+}
+
+export default Form.create()(CustomMenuForm)
\ No newline at end of file
diff --git a/src/views/mobdesign/popview/menuform/index.scss b/src/views/mobdesign/popview/menuform/index.scss
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/views/mobdesign/popview/menuform/index.scss
diff --git a/src/views/pcdesign/index.jsx b/src/views/pcdesign/index.jsx
index 400aee2..15ac6d8 100644
--- a/src/views/pcdesign/index.jsx
+++ b/src/views/pcdesign/index.jsx
@@ -1686,7 +1686,7 @@
     return (
       <ConfigProvider locale={antdZhCN}>
         <DndProvider backend={HTML5Backend}>
-          {view !== 'popview' ?<div className={'mk-pc-view '} id="mk-pc-design-view">
+          {view !== 'popview' ? <div className={'mk-pc-view '} id="mk-pc-design-view">
             {loading ? <Spin className="view-spin" size="large" /> : null}
             <div className={'menu-setting ' + (!settingshow ? 'hidden' : '')}>
               <div className="draw">

--
Gitblit v1.8.0