From 42fae277ae5ebe794fc070bf38482a919eb661fc Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 25 十一月 2020 14:36:02 +0800
Subject: [PATCH] 2020-11-25

---
 src/menu/components/chart/antv-bar/chartcompile/index.jsx                          |    9 
 src/menu/components/card/table-card/index.jsx                                      |    2 
 src/menu/components/search/main-search/wrapsetting/settingform/index.jsx           |   25 +
 src/templates/treepageconfig/index.jsx                                             |    4 
 src/templates/modalconfig/index.jsx                                                |   19 -
 src/menu/searchcomponent/index.jsx                                                 |    2 
 src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx              |    2 
 src/templates/sharecomponent/settingcomponent/settingform/index.jsx                |    4 
 src/menu/components/tabs/tabsetting/index.jsx                                      |    2 
 src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx  |   29 +
 src/views/menudesign/index.jsx                                                     |   20 
 src/templates/formtabconfig/settingform/index.jsx                                  |   20 +
 src/menu/components/card/cardcellcomponent/index.jsx                               |   15 +
 src/store/reducer.js                                                               |   11 
 src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx     |   20 +
 src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx |   20 +
 src/store/action-type.js                                                           |    3 
 src/templates/calendarconfig/index.jsx                                             |   19 -
 src/templates/subtableconfig/index.jsx                                             |   30 -
 src/menu/components/card/data-card/index.jsx                                       |    2 
 src/menu/components/chart/antv-pie/index.jsx                                       |    2 
 src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx            |    2 
 src/menu/modelsource/option.jsx                                                    |    2 
 src/menu/components/card/data-card/wrapsetting/settingform/index.jsx               |   25 +
 src/menu/components/card/prop-card/index.jsx                                       |    2 
 src/menu/components/table/normal-table/index.jsx                                   |   25 +
 src/menu/components/tabs/antv-tabs/index.jsx                                       |    3 
 src/templates/sharecomponent/treesettingcomponent/index.jsx                        |    2 
 src/templates/sharecomponent/settingcomponent/index.jsx                            |    4 
 src/components/header/index.jsx                                                    |    9 
 src/templates/formtabconfig/index.jsx                                              |   36 +-
 src/menu/actioncomponent/formconfig.jsx                                            |    6 
 src/templates/comtableconfig/index.jsx                                             |   60 ---
 src/menu/actioncomponent/index.jsx                                                 |   15 +
 src/templates/sharecomponent/searchcomponent/index.jsx                             |   25 -
 src/templates/zshare/editcomponent/index.jsx                                       |    2 
 src/menu/components/chart/antv-bar/index.jsx                                       |    2 
 src/menu/components/table/normal-table/index.scss                                  |    6 
 src/templates/sharecomponent/columncomponent/index.jsx                             |   17 -
 src/store/action.js                                                                |    9 
 src/api/index.js                                                                   |    5 
 src/menu/components/card/data-card/wrapsetting/index.jsx                           |    4 
 src/templates/sharecomponent/settingcalcomponent/index.jsx                         |    2 
 src/index.js                                                                       |    9 
 src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx                     |   15 
 src/templates/comtableconfig/menuform/index.jsx                                    |   12 
 src/templates/zshare/formconfig.jsx                                                |   69 ++++
 src/menu/components/chart/antv-pie/chartcompile/index.jsx                          |    5 
 src/menu/datasource/verifycard/settingform/index.jsx                               |   22 +
 src/menu/components/search/main-search/index.jsx                                   |    6 
 src/menu/components/card/cardcellcomponent/formconfig.jsx                          |    2 
 src/menu/components/search/main-search/wrapsetting/index.jsx                       |    2 
 src/templates/sharecomponent/actioncomponent/index.jsx                             |   38 +-
 src/menu/modalconfig/index.jsx                                                     |   15 -
 src/menu/components/tabs/tabsetting/settingform/index.jsx                          |   25 +
 src/templates/sharecomponent/chartgroupcomponent/index.jsx                         |    3 
 56 files changed, 407 insertions(+), 339 deletions(-)

diff --git a/src/api/index.js b/src/api/index.js
index 8d1b215..b6024f5 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -56,7 +56,7 @@
   return Promise.reject(error)
 })
 
-const setCurrentUrl = () => {
+const setCurrentUrl = (res) => {
   if (!!(window.history && window.history.pushState)) {
     if (window.location.href.indexOf('paramsmain') > -1) {
       let _href = window.location.href.split('#')
@@ -64,6 +64,7 @@
     }
 
     sessionStorage.clear()
+    sessionStorage.setItem('loginError', JSON.stringify({request: res.config ? res.config.data : '', response: JSON.stringify(res.data)}))
     window.history.replaceState(null, null, window.location.href.split('#')[0] + '#/login')
     window.location.reload()
   }
@@ -77,7 +78,7 @@
       response.data.ErrCode = 'E'
       return Promise.resolve(response.data)
     } else {
-      setCurrentUrl()
+      setCurrentUrl(response)
     }
   } else {
     return Promise.resolve(response.data)
diff --git a/src/components/header/index.jsx b/src/components/header/index.jsx
index 7d2eb82..c41a04f 100644
--- a/src/components/header/index.jsx
+++ b/src/components/header/index.jsx
@@ -15,7 +15,6 @@
   resetState,
   resetEditState,
   resetEditLevel,
-  initPermission,
   modifyDataManager,
   initActionPermission,
   initMenuPermission,
@@ -473,7 +472,8 @@
             _permFuncField = _permFuncField.sort()
           }
 
-          this.props.initPermission(_sysRoles, _permFuncField)
+          sessionStorage.setItem('sysRoles', JSON.stringify(_sysRoles))
+          sessionStorage.setItem('permFuncField', JSON.stringify(_permFuncField))
         }
       })
     }
@@ -844,9 +844,7 @@
     editState: state.editState,
     editLevel: state.editLevel,
     permAction: state.permAction,
-    sysRoles: state.sysRoles,
-    memberLevel: state.memberLevel,
-    permFuncField: state.permFuncField
+    memberLevel: state.memberLevel
   }
 }
 
@@ -859,7 +857,6 @@
     resetEditState: (state) => dispatch(resetEditState(state)),
     resetEditLevel: (level) => dispatch(resetEditLevel(level)),
     initActionPermission: (permAction) => dispatch(initActionPermission(permAction)),
-    initPermission: (sysRoles, permFuncField) => dispatch(initPermission(sysRoles, permFuncField)),
     initMenuPermission: (permMenus) => dispatch(initMenuPermission(permMenus)),
     modifyDataManager: (dataManager) => dispatch(modifyDataManager(dataManager)),
     resetState: () => dispatch(resetState()),
diff --git a/src/index.js b/src/index.js
index 5d93fdd..9cdc192 100644
--- a/src/index.js
+++ b/src/index.js
@@ -43,7 +43,16 @@
   )
 }
 
+
+if (sessionStorage.getItem('loginError')) {
+  try {
+    let res = JSON.parse(sessionStorage.getItem('loginError'))
+    console.info(res.request)
+    console.info(res.response)
+  } catch {}
+}
 sessionStorage.removeItem('isEditState')
+sessionStorage.removeItem('loginError')
 
 // fetch(`./${process.env.NODE_ENV === 'production' ? 'build/' : ''}options.json`)
 fetch(`./options.json`)
diff --git a/src/menu/actioncomponent/formconfig.jsx b/src/menu/actioncomponent/formconfig.jsx
index de09940..9461434 100644
--- a/src/menu/actioncomponent/formconfig.jsx
+++ b/src/menu/actioncomponent/formconfig.jsx
@@ -8,10 +8,10 @@
  * @param {*} card           缂栬緫鎸夐挳
  * @param {*} functip        鐢熸垚瀛樺偍杩囩▼鎻愮ず
  * @param {*} setting        缁勪欢閰嶇疆
- * @param {*} permFuncField  瀛樺偍杩囩▼鍙敤鐨勫紑濮嬪瓧娈�
+ * @param {*} usefulFields   瀛樺偍杩囩▼鍙敤鐨勫紑濮嬪瓧娈�
  * @param {*} type           鎸夐挳绫诲瀷锛岀敤浜庡尯鍒嗗彲閫夌殑鎵撳紑鏂瑰紡
  */
-export function getActionForm (card, functip, setting, permFuncField = [], type, menulist = [], modules = []) {
+export function getActionForm (card, functip, setting, usefulFields, type, menulist = [], modules = []) {
   let opentypes = [
     {
       value: 'pop',
@@ -138,7 +138,7 @@
       label: Formdict['header.form.innerFunc'],
       initVal: card.innerFunc || '',
       tooltip: functip,
-      fields: permFuncField,
+      fields: usefulFields,
       tooltipClass: 'middle',
       required: false,
       readonly: false
diff --git a/src/menu/actioncomponent/index.jsx b/src/menu/actioncomponent/index.jsx
index 4e070de..14507c5 100644
--- a/src/menu/actioncomponent/index.jsx
+++ b/src/menu/actioncomponent/index.jsx
@@ -160,7 +160,18 @@
   handleAction = (card) => {
     const { menu, config } = this.props
 
-    let ableField = menu.permFuncField ? menu.permFuncField.join(', ') : ''
+    let usefulFields = sessionStorage.getItem('permFuncField')
+    if (usefulFields) {
+      try {
+        usefulFields = JSON.parse(usefulFields)
+      } catch {
+        usefulFields = []
+      }
+    } else {
+      usefulFields = []
+    }
+
+    let ableField = usefulFields.join(', ')
     let functip = <div>
       <p style={{marginBottom: '5px'}}>{this.state.dict['model.tooltip.func.innerface'].replace('@ableField', ableField)}</p>
       <p>{this.state.dict['model.tooltip.func.outface']}</p>
@@ -196,7 +207,7 @@
     this.setState({
       visible: true,
       card: card,
-      formlist: getActionForm(card, functip, config.setting, menu.permFuncField, this.props.type, menulist, modules)
+      formlist: getActionForm(card, functip, config.setting, usefulFields, this.props.type, menulist, modules)
     })
   }
 
diff --git a/src/menu/components/card/cardcellcomponent/formconfig.jsx b/src/menu/components/card/cardcellcomponent/formconfig.jsx
index cfb5189..b0fc153 100644
--- a/src/menu/components/card/cardcellcomponent/formconfig.jsx
+++ b/src/menu/components/card/cardcellcomponent/formconfig.jsx
@@ -6,8 +6,6 @@
 /**
  * @description 鑾峰彇鎸夐挳琛ㄥ崟閰嶇疆淇℃伅
  * @param {*} card           缂栬緫鎸夐挳
- * @param {*} setting        缁勪欢閰嶇疆
- * @param {*} permFuncField  瀛樺偍杩囩▼鍙敤鐨勫紑濮嬪瓧娈�
  * @param {*} type           鎸夐挳绫诲瀷锛岀敤浜庡尯鍒嗗彲閫夌殑鎵撳紑鏂瑰紡
  */
 export function getCardCellForm (card, type) {
diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx
index 36d0659..8faa4f7 100644
--- a/src/menu/components/card/cardcellcomponent/index.jsx
+++ b/src/menu/components/card/cardcellcomponent/index.jsx
@@ -244,7 +244,18 @@
   handleAction = (card) => {
     const { menu, cards } = this.props
 
-    let ableField = menu.permFuncField ? menu.permFuncField.join(', ') : ''
+    let usefulFields = sessionStorage.getItem('permFuncField')
+    if (usefulFields) {
+      try {
+        usefulFields = JSON.parse(usefulFields)
+      } catch {
+        usefulFields = []
+      }
+    } else {
+      usefulFields = []
+    }
+
+    let ableField = usefulFields.join(', ')
     let functip = <div>
       <p style={{marginBottom: '5px'}}>{this.state.dict['model.tooltip.func.innerface'].replace('@ableField', ableField)}</p>
       <p>{this.state.dict['model.tooltip.func.outface']}</p>
@@ -279,7 +290,7 @@
     this.setState({
       actvisible: true,
       card: card,
-      formlist: getActionForm(card, functip, cards.setting, menu.permFuncField, 'card', menulist, modules)
+      formlist: getActionForm(card, functip, cards.setting, usefulFields, 'card', menulist, modules)
     })
   }
 
diff --git a/src/menu/components/card/data-card/index.jsx b/src/menu/components/card/data-card/index.jsx
index e0ae543..409cf2c 100644
--- a/src/menu/components/card/data-card/index.jsx
+++ b/src/menu/components/card/data-card/index.jsx
@@ -193,7 +193,7 @@
       <div className="menu-data-card-edit-box" style={{...card.style, minHeight: card.wrap.minHeight}}>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
-            {menu ? <WrapComponent sysRoles={menu.sysRoles} MenuType={menu.MenuType} config={card} updateConfig={this.updateComponent} /> : null}
+            {menu ? <WrapComponent MenuType={menu.MenuType} config={card} updateConfig={this.updateComponent} /> : null}
             <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
             <Icon className="close" title="鍒犻櫎缁勪欢" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
             <SettingComponent config={card} updateConfig={this.updateComponent} />
diff --git a/src/menu/components/card/data-card/wrapsetting/index.jsx b/src/menu/components/card/data-card/wrapsetting/index.jsx
index 505a4a7..bd9c89a 100644
--- a/src/menu/components/card/data-card/wrapsetting/index.jsx
+++ b/src/menu/components/card/data-card/wrapsetting/index.jsx
@@ -12,7 +12,6 @@
   static propTpyes = {
     config: PropTypes.any,
     MenuType: PropTypes.any,
-    sysRoles: PropTypes.array,
     updateConfig: PropTypes.func
   }
 
@@ -52,7 +51,7 @@
   }
 
   render () {
-    const { config, sysRoles, MenuType } = this.props
+    const { config, MenuType } = this.props
     const { visible, dict, wrap } = this.state
 
     return (
@@ -74,7 +73,6 @@
             wrap={wrap}
             config={config}
             MenuType={MenuType}
-            sysRoles={sysRoles || []}
             inputSubmit={this.verifySubmit}
             wrappedComponentRef={(inst) => this.verifyRef = inst}
           />
diff --git a/src/menu/components/card/data-card/wrapsetting/settingform/index.jsx b/src/menu/components/card/data-card/wrapsetting/settingform/index.jsx
index 60d2469..0de3f34 100644
--- a/src/menu/components/card/data-card/wrapsetting/settingform/index.jsx
+++ b/src/menu/components/card/data-card/wrapsetting/settingform/index.jsx
@@ -7,11 +7,29 @@
 class SettingForm extends Component {
   static propTpyes = {
     MenuType: PropTypes.any,     // 鑿滃崟绫诲瀷
-    sysRoles: PropTypes.array,   // 瑙掕壊鍒楄〃
     dict: PropTypes.object,      // 瀛楀吀椤�
     config: PropTypes.object,    // 鍗$墖琛屼俊鎭�
     wrap: PropTypes.object,      // 鏁版嵁婧愰厤缃�
     inputSubmit: PropTypes.func  // 鍥炶溅浜嬩欢
+  }
+
+  state = {
+    roleList: []
+  }
+
+  UNSAFE_componentWillMount () {
+    let roleList = sessionStorage.getItem('sysRoles')
+    if (roleList) {
+      try {
+        roleList = JSON.parse(roleList)
+      } catch {
+        roleList = []
+      }
+    } else {
+      roleList = []
+    }
+
+    this.setState({roleList})
   }
 
   handleConfirm = () => {
@@ -36,8 +54,9 @@
   }
 
   render() {
-    const { wrap, config, sysRoles, MenuType } = this.props
+    const { wrap, config, MenuType } = this.props
     const { getFieldDecorator } = this.props.form
+    const { roleList } = this.state
 
     const formItemLayout = {
       labelCol: {
@@ -199,7 +218,7 @@
                     mode="multiple"
                     filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
                   >
-                    {sysRoles.map(option =>
+                    {roleList.map(option =>
                       <Select.Option key={option.uuid} value={option.value}>{option.text}</Select.Option>
                     )}
                   </Select>
diff --git a/src/menu/components/card/prop-card/index.jsx b/src/menu/components/card/prop-card/index.jsx
index ce18d75..9288996 100644
--- a/src/menu/components/card/prop-card/index.jsx
+++ b/src/menu/components/card/prop-card/index.jsx
@@ -229,7 +229,7 @@
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
             <Icon className="plus" title="娣诲姞鍗$墖" onClick={this.addCard} type="plus" />
-            {menu ? <WrapComponent config={card} sysRoles={menu.sysRoles} MenuType={menu.MenuType} updateConfig={this.updateComponent} /> : null}
+            {menu ? <WrapComponent config={card} MenuType={menu.MenuType} updateConfig={this.updateComponent} /> : null}
             <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
             <Icon className="close" title="鍒犻櫎缁勪欢" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
             {card.wrap.datatype !== 'static' ? <SettingComponent config={card} updateConfig={this.updateComponent} /> : null}
diff --git a/src/menu/components/card/table-card/index.jsx b/src/menu/components/card/table-card/index.jsx
index fd79a3f..cc606ed 100644
--- a/src/menu/components/card/table-card/index.jsx
+++ b/src/menu/components/card/table-card/index.jsx
@@ -262,7 +262,7 @@
           <div className="mk-popover-control">
             <Icon className="plus" title="娣诲姞鍗$墖" onClick={this.addCard} type="plus" />
             <Icon className="plus" title="娣诲姞鎼滅储" onClick={this.addSearch} type="plus-circle" />
-            {menu ? <WrapComponent config={card} sysRoles={menu.sysRoles} MenuType={menu.MenuType} updateConfig={this.updateComponent} /> : null}
+            {menu ? <WrapComponent config={card} MenuType={menu.MenuType} updateConfig={this.updateComponent} /> : null}
             <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
             <Icon className="close" title="鍒犻櫎缁勪欢" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
             {card.wrap.datatype !== 'static' ? <SettingComponent config={card} updateConfig={this.updateComponent} /> : null}
diff --git a/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx b/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
index 9b14404..71194ee 100644
--- a/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
@@ -8,8 +8,17 @@
  * @param {object} card       // 鍥捐〃瀵硅薄
  * @param {Array}  columns    // 鏄剧ず鍒�
  */
-export function getBaseForm (card, sysRoles = [], MenuType) {
-  let _sysRoles = sysRoles.map(item => ({...item, field: item.value, label: item.text}))
+export function getBaseForm (card, MenuType) {
+  let roleList = sessionStorage.getItem('sysRoles')
+  if (roleList) {
+    try {
+      roleList = JSON.parse(roleList)
+    } catch {
+      roleList = []
+    }
+  } else {
+    roleList = []
+  }
 
   return [
     {
@@ -56,7 +65,7 @@
       multi: true,
       required: false,
       forbid: MenuType === 'billPrint',
-      options: _sysRoles
+      options: roleList
     }
   ]
 }
diff --git a/src/menu/components/chart/antv-bar/chartcompile/index.jsx b/src/menu/components/chart/antv-bar/chartcompile/index.jsx
index 283faf1..de83451 100644
--- a/src/menu/components/chart/antv-bar/chartcompile/index.jsx
+++ b/src/menu/components/chart/antv-bar/chartcompile/index.jsx
@@ -19,7 +19,6 @@
     MenuType: PropTypes.any,
     dict: PropTypes.object,
     plot: PropTypes.object,
-    sysRoles: PropTypes.array,
     config: PropTypes.object,
     plotchange: PropTypes.func
   }
@@ -148,7 +147,7 @@
   }
 
   showDrawer = () => {
-    const { config, sysRoles, MenuType } = this.props
+    const { config, MenuType } = this.props
 
     let fieldName = {}
     config.columns.forEach(col => {
@@ -168,7 +167,7 @@
       datatype: config.plot.datatype || 'query',
       fieldName: fieldName,
       plot: fromJS(config.plot).toJS(),
-      baseFormlist: getBaseForm(config.plot, sysRoles, MenuType),
+      baseFormlist: getBaseForm(config.plot, MenuType),
       formlist: getOptionForm(config.plot, config.columns, MenuType)
     })
   }
@@ -266,8 +265,8 @@
               })(
                 <Select mode={item.multi ? 'multiple' : ''}>
                   {item.options.map((option, index) =>
-                    <Select.Option key={index} value={option.field}>
-                      {option.label}
+                    <Select.Option key={index} value={option.field || option.value}>
+                      {option.label || option.text}
                     </Select.Option>
                   )}
                 </Select>
diff --git a/src/menu/components/chart/antv-bar/index.jsx b/src/menu/components/chart/antv-bar/index.jsx
index f07c014..a2efa3a 100644
--- a/src/menu/components/chart/antv-bar/index.jsx
+++ b/src/menu/components/chart/antv-bar/index.jsx
@@ -856,7 +856,7 @@
           <div className="mk-popover-control">
             {menu && menu.MenuType !== 'billPrint' ? <Icon className="plus" title="娣诲姞鎼滅储" onClick={this.addSearch} type="plus-circle" /> : null}
             {menu && menu.MenuType !== 'billPrint' ? <Icon className="plus" title="娣诲姞鎸夐挳" onClick={this.addButton} type="plus-square" /> : null}
-            {menu ? <ChartCompileForm config={card} sysRoles={menu.sysRoles} MenuType={menu.MenuType} dict={this.state.dict} plotchange={this.updateComponent}/> : null}
+            {menu ? <ChartCompileForm config={card} MenuType={menu.MenuType} dict={this.state.dict} plotchange={this.updateComponent}/> : null}
             <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
             <Icon className="close" title="delete" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
             <SettingComponent config={card} updateConfig={this.updateComponent}/>
diff --git a/src/menu/components/chart/antv-pie/chartcompile/index.jsx b/src/menu/components/chart/antv-pie/chartcompile/index.jsx
index 790cfc2..e54f4a5 100644
--- a/src/menu/components/chart/antv-pie/chartcompile/index.jsx
+++ b/src/menu/components/chart/antv-pie/chartcompile/index.jsx
@@ -20,7 +20,6 @@
     MenuType: PropTypes.any,
     dict: PropTypes.object,
     plot: PropTypes.object,
-    sysRoles: PropTypes.array,
     config: PropTypes.object,
     plotchange: PropTypes.func
   }
@@ -53,13 +52,13 @@
   }
 
   showDrawer = () => {
-    const { config, sysRoles, MenuType } = this.props
+    const { config, MenuType } = this.props
 
     this.setState({
       visible: true,
       view: 'normal',
       plot: fromJS(config.plot).toJS(),
-      baseFormlist: getBaseForm(config.plot, sysRoles, MenuType),
+      baseFormlist: getBaseForm(config.plot, MenuType),
       formlist: getOptionForm(config.plot, config.columns)
     })
   }
diff --git a/src/menu/components/chart/antv-pie/index.jsx b/src/menu/components/chart/antv-pie/index.jsx
index 82d6720..e65d64a 100644
--- a/src/menu/components/chart/antv-pie/index.jsx
+++ b/src/menu/components/chart/antv-pie/index.jsx
@@ -426,7 +426,7 @@
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
             {menu && menu.MenuType !== 'billPrint' ? <Icon className="plus" title="娣诲姞鎼滅储" onClick={this.addSearch} type="plus-circle" /> : null}
-            {menu ? <ChartCompileForm config={card} sysRoles={menu.sysRoles} MenuType={menu.MenuType} dict={this.state.dict} plotchange={this.updateComponent}/> : null}
+            {menu ? <ChartCompileForm config={card} MenuType={menu.MenuType} dict={this.state.dict} plotchange={this.updateComponent}/> : null}
             <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
             <Icon className="close" title="delete" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
             <SettingComponent config={card} updateConfig={this.updateComponent}/>
diff --git a/src/menu/components/search/main-search/index.jsx b/src/menu/components/search/main-search/index.jsx
index 982ab49..53be372 100644
--- a/src/menu/components/search/main-search/index.jsx
+++ b/src/menu/components/search/main-search/index.jsx
@@ -142,7 +142,6 @@
    * @description 鎼滅储鏉′欢缂栬緫锛岃幏鍙栨悳绱㈡潯浠惰〃鍗曚俊鎭�
    */
   handleSearch = (cell) => {
-    const { menu } = this.props
     const { card } = this.state
     let linkableFields = []
 
@@ -158,7 +157,7 @@
     this.setState({
       visible: true,
       editcard: cell,
-      formlist: getSearchForm(cell, menu.sysRoles, linkableFields)
+      formlist: getSearchForm(cell, linkableFields)
     })
   }
 
@@ -339,7 +338,6 @@
   }
 
   render() {
-    const { menu } = this.props
     const { dict, card, visible, sqlVerifing } = this.state
 
     return (
@@ -354,7 +352,7 @@
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
             <Icon className="plus" title="娣诲姞" onClick={this.addSearch} type="plus" />
-            <WrapComponent config={card} sysRoles={menu ? menu.sysRoles : []} updateConfig={this.updateComponent}/>
+            <WrapComponent config={card} updateConfig={this.updateComponent}/>
             <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
             <Icon className="close" title="delete" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
           </div>
diff --git a/src/menu/components/search/main-search/wrapsetting/index.jsx b/src/menu/components/search/main-search/wrapsetting/index.jsx
index f2bc03d..08c3f72 100644
--- a/src/menu/components/search/main-search/wrapsetting/index.jsx
+++ b/src/menu/components/search/main-search/wrapsetting/index.jsx
@@ -10,7 +10,6 @@
 
 class DataSource extends Component {
   static propTpyes = {
-    sysRoles: PropTypes.any,       // 瑙掕壊鍒楄〃
     config: PropTypes.any,
     updateConfig: PropTypes.func
   }
@@ -70,7 +69,6 @@
           <SettingForm
             dict={dict}
             wrap={wrap}
-            sysRoles={this.props.sysRoles || []}
             inputSubmit={this.verifySubmit}
             wrappedComponentRef={(inst) => this.verifyRef = inst}
           />
diff --git a/src/menu/components/search/main-search/wrapsetting/settingform/index.jsx b/src/menu/components/search/main-search/wrapsetting/settingform/index.jsx
index 03954cf..9d728db 100644
--- a/src/menu/components/search/main-search/wrapsetting/settingform/index.jsx
+++ b/src/menu/components/search/main-search/wrapsetting/settingform/index.jsx
@@ -8,12 +8,27 @@
   static propTpyes = {
     dict: PropTypes.object,      // 瀛楀吀椤�
     wrap: PropTypes.object,      // 鏁版嵁婧愰厤缃�
-    sysRoles: PropTypes.array,   // 瑙掕壊鍒楄〃
     inputSubmit: PropTypes.func  // 鍥炶溅浜嬩欢
   }
 
   state = {
-    float: this.props.wrap.float
+    float: this.props.wrap.float,
+    roleList: []
+  }
+
+  UNSAFE_componentWillMount () {
+    let roleList = sessionStorage.getItem('sysRoles')
+    if (roleList) {
+      try {
+        roleList = JSON.parse(roleList)
+      } catch {
+        roleList = []
+      }
+    } else {
+      roleList = []
+    }
+
+    this.setState({roleList})
   }
 
   handleConfirm = () => {
@@ -38,9 +53,9 @@
   }
 
   render() {
-    const { wrap, sysRoles } = this.props
+    const { wrap } = this.props
     const { getFieldDecorator } = this.props.form
-    const { float } = this.state
+    const { float, roleList } = this.state
 
     const formItemLayout = {
       labelCol: {
@@ -132,7 +147,7 @@
                     mode="multiple"
                     filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
                   >
-                    {sysRoles.map(option =>
+                    {roleList.map(option =>
                       <Select.Option key={option.uuid} value={option.value}>{option.text}</Select.Option>
                     )}
                   </Select>
diff --git a/src/menu/components/table/normal-table/index.jsx b/src/menu/components/table/normal-table/index.jsx
index b30ea71..4f408e0 100644
--- a/src/menu/components/table/normal-table/index.jsx
+++ b/src/menu/components/table/normal-table/index.jsx
@@ -4,18 +4,20 @@
 import { is, fromJS } from 'immutable'
 import { Icon, Popover, Modal } from 'antd'
 
-import asyncComponent from '@/utils/asyncComponent'
+// import asyncComponent from '@/utils/asyncComponent'
 import asyncIconComponent from '@/utils/asyncIconComponent'
 
 import MKEmitter from '@/utils/events.js'
 import Utils from '@/utils/utils.js'
 import zhCN from '@/locales/zh-CN/model.js'
 import enUS from '@/locales/en-US/model.js'
+
+import SearchComponent from '@/templates/sharecomponent/searchcomponent'
 import './index.scss'
 
 const SettingComponent = asyncIconComponent(() => import('@/menu/datasource'))
 // const WrapComponent = asyncIconComponent(() => import('../data-card/wrapsetting'))
-const SearchComponent = asyncComponent(() => import('@/menu/searchcomponent'))
+// const SearchComponent = asyncComponent(() => import('@/menu/searchcomponent'))
 
 const { confirm } = Modal
 
@@ -241,11 +243,24 @@
     MKEmitter.emit('addSearch', card.uuid, newcard)
   }
 
+  /**
+   * @description 鏇存柊鎼滅储鏉′欢閰嶇疆淇℃伅
+   */
+  updatesearch = (config) => {
+    this.setState({
+      card: config
+    })
+  }
+
   render() {
     const { card } = this.state
 
     return (
-      <div className="menu-table-card-edit-box" style={{...card.style, height: card.wrap.height}}>
+      <div className="menu-normal-table-edit-box" style={{...card.style, height: card.wrap.height}}>
+        <SearchComponent
+          config={card}
+          updatesearch={this.updatesearch}
+        />
         <div className="table-header" style={card.headerStyle}>
           <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
             <div className="mk-popover-control">
@@ -254,13 +269,13 @@
           } trigger="hover">
             <span className="table-title">{card.wrap.title || ''}</span>
           </Popover>
-          <SearchComponent config={card} updatesearch={this.updateComponent}/>
+          {/* <SearchComponent config={card} updatesearch={this.updateComponent}/> */}
         </div>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
             <Icon className="plus" title="娣诲姞鍗$墖" onClick={this.addCard} type="plus" />
             <Icon className="plus" title="娣诲姞鎼滅储" onClick={this.addSearch} type="plus-circle" />
-            {/* {menu ? <WrapComponent config={card} sysRoles={menu.sysRoles} MenuType={menu.MenuType} updateConfig={this.updateComponent} /> : null} */}
+            {/* {menu ? <WrapComponent config={card} MenuType={menu.MenuType} updateConfig={this.updateComponent} /> : null} */}
             <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
             <Icon className="close" title="鍒犻櫎缁勪欢" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
             {card.wrap.datatype !== 'static' ? <SettingComponent config={card} updateConfig={this.updateComponent} /> : null}
diff --git a/src/menu/components/table/normal-table/index.scss b/src/menu/components/table/normal-table/index.scss
index 88da58c..6ca24a0 100644
--- a/src/menu/components/table/normal-table/index.scss
+++ b/src/menu/components/table/normal-table/index.scss
@@ -1,4 +1,4 @@
-.menu-table-card-edit-box {
+.menu-normal-table-edit-box {
   position: relative;
   box-sizing: border-box;
   background: #ffffff;
@@ -82,11 +82,11 @@
     }
   }
 }
-.menu-table-card-edit-box::after {
+.menu-normal-table-edit-box::after {
   display: block;
   content: ' ';
   clear: both;
 }
-.menu-table-card-edit-box:hover {
+.menu-normal-table-edit-box:hover {
   box-shadow: 0px 0px 2px #e8e8e8;
 }
diff --git a/src/menu/components/tabs/antv-tabs/index.jsx b/src/menu/components/tabs/antv-tabs/index.jsx
index 598c98a..e5b9733 100644
--- a/src/menu/components/tabs/antv-tabs/index.jsx
+++ b/src/menu/components/tabs/antv-tabs/index.jsx
@@ -227,7 +227,6 @@
   }
 
   render() {
-    const { menu } = this.props
     const { tabs, dict, labelvisible, editab } = this.state
 
     return (
@@ -253,7 +252,7 @@
             <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
               <div className="mk-popover-control">
                 <Icon className="plus" title="娣诲姞鏍囩" type="plus" onClick={this.tabAdd} />
-                <SettingComponent config={tabs} sysRoles={menu ? menu.sysRoles : []} updateConfig={this.updateComponent} />
+                <SettingComponent config={tabs} updateConfig={this.updateComponent} />
                 <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
                 <Icon className="close" title="delete" type="delete" onClick={() => this.props.deletecomponent(tabs.uuid)} />
               </div>
diff --git a/src/menu/components/tabs/tabsetting/index.jsx b/src/menu/components/tabs/tabsetting/index.jsx
index 956e4b0..b913fc8 100644
--- a/src/menu/components/tabs/tabsetting/index.jsx
+++ b/src/menu/components/tabs/tabsetting/index.jsx
@@ -11,7 +11,6 @@
 class DataSource extends Component {
   static propTpyes = {
     config: PropTypes.any,
-    sysRoles: PropTypes.any,       // 瑙掕壊鍒楄〃
     updateConfig: PropTypes.func
   }
 
@@ -70,7 +69,6 @@
           <SettingForm
             dict={dict}
             setting={setting}
-            sysRoles={this.props.sysRoles || []}
             inputSubmit={this.verifySubmit}
             wrappedComponentRef={(inst) => this.verifyRef = inst}
           />
diff --git a/src/menu/components/tabs/tabsetting/settingform/index.jsx b/src/menu/components/tabs/tabsetting/settingform/index.jsx
index c82dd8c..6362d5a 100644
--- a/src/menu/components/tabs/tabsetting/settingform/index.jsx
+++ b/src/menu/components/tabs/tabsetting/settingform/index.jsx
@@ -8,11 +8,27 @@
   static propTpyes = {
     dict: PropTypes.object,       // 瀛楀吀椤�
     setting: PropTypes.object,    // 鏁版嵁婧愰厤缃�
-    sysRoles: PropTypes.array,    // 瑙掕壊鍒楄〃
     inputSubmit: PropTypes.func   // 鍥炶溅浜嬩欢
   }
 
-  state = {}
+  state = {
+    roleList: []
+  }
+
+  UNSAFE_componentWillMount () {
+    let roleList = sessionStorage.getItem('sysRoles')
+    if (roleList) {
+      try {
+        roleList = JSON.parse(roleList)
+      } catch {
+        roleList = []
+      }
+    } else {
+      roleList = []
+    }
+
+    this.setState({roleList})
+  }
 
   handleConfirm = () => {
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
@@ -36,8 +52,9 @@
   }
 
   render() {
-    const { setting, sysRoles } = this.props
+    const { setting } = this.props
     const { getFieldDecorator } = this.props.form
+    const { roleList } = this.state
 
     const formItemLayout = {
       labelCol: {
@@ -131,7 +148,7 @@
                     mode="multiple"
                     filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
                   >
-                    {sysRoles.map(option =>
+                    {roleList.map(option =>
                       <Select.Option key={option.uuid} value={option.value}>{option.text}</Select.Option>
                     )}
                   </Select>
diff --git a/src/menu/datasource/verifycard/settingform/index.jsx b/src/menu/datasource/verifycard/settingform/index.jsx
index 66c48d5..3cfed31 100644
--- a/src/menu/datasource/verifycard/settingform/index.jsx
+++ b/src/menu/datasource/verifycard/settingform/index.jsx
@@ -22,6 +22,7 @@
     interType: this.props.setting.interType || 'system',
     laypage: this.props.setting.laypage || 'true',
     modules: [],
+    usefulFields: [],
     useMSearch: this.props.setting.useMSearch || 'false',
     supModule: this.props.setting.supModule || []
   }
@@ -39,7 +40,18 @@
       label: '鏃�'
     })
 
-    this.setState({modules})
+    let usefulFields = sessionStorage.getItem('permFuncField')
+    if (usefulFields) {
+      try {
+        usefulFields = JSON.parse(usefulFields)
+      } catch {
+        usefulFields = []
+      }
+    } else {
+      usefulFields = []
+    }
+
+    this.setState({modules, usefulFields})
   }
 
   getModules = (components, selfId) => {
@@ -180,7 +192,7 @@
   render() {
     const { setting, menu, columns, config } = this.props
     const { getFieldDecorator } = this.props.form
-    const { interType, modules, useMSearch, laypage, supModule } = this.state
+    const { interType, modules, useMSearch, laypage, supModule, usefulFields } = this.state
 
     const formItemLayout = {
       labelCol: {
@@ -196,9 +208,9 @@
     let tooltip = null
     let rules = []
 
-    if (menu.permFuncField && menu.permFuncField.length > 0) {
-      tooltip = '寮�澶村彲鐢ㄥ瓧绗︼細' + menu.permFuncField.join(', ')
-      let str = '^(' + menu.permFuncField.join('|') + ')'
+    if (usefulFields.length > 0) {
+      tooltip = '寮�澶村彲鐢ㄥ瓧绗︼細' + usefulFields.join(', ')
+      let str = '^(' + usefulFields.join('|') + ')'
       let _patten = new RegExp(str + formRule.func.innerPattern + '$', 'g')
 
       rules.push({
diff --git a/src/menu/modalconfig/index.jsx b/src/menu/modalconfig/index.jsx
index cb8a9eb..da88ec3 100644
--- a/src/menu/modalconfig/index.jsx
+++ b/src/menu/modalconfig/index.jsx
@@ -177,7 +177,7 @@
    * 3銆佽缃紪杈戝弬鏁伴」-formlist
    */
   handleForm = (_card) => {
-    const { componentConfig, menu } = this.props
+    const { componentConfig } = this.props
     let card = fromJS(_card).toJS()
 
     const { config } = this.state
@@ -238,21 +238,10 @@
       card.linkSubField = card.linkSubField.filter(item => fields.includes(item))
     }
 
-    let roleList = []
-    if (menu.sysRoles && menu.sysRoles.length > 0) {
-      roleList = menu.sysRoles.map(role => {
-        return {
-          uuid: role.uuid,
-          field: role.value,
-          label: role.text
-        }
-      })
-    }
-
     this.setState({
       visible: true,
       card: card,
-      formlist: getModalForm(card, _inputfields, _linkableFields, _linksupFields, !!this.props.editTab, roleList)
+      formlist: getModalForm(card, _inputfields, _linkableFields, _linksupFields, !!this.props.editTab)
     })
   }
 
diff --git a/src/menu/modelsource/option.jsx b/src/menu/modelsource/option.jsx
index c40e0f3..d6bf059 100644
--- a/src/menu/modelsource/option.jsx
+++ b/src/menu/modelsource/option.jsx
@@ -22,8 +22,8 @@
   { type: 'menu', url: Mainsearch, component: 'search', subtype: 'mainsearch', title: '鎼滅储鏉′欢', width: 24, forbid: ['billPrint'] },
   { type: 'menu', url: card1, component: 'card', subtype: 'datacard', title: '鏁版嵁鍗�', config: `[{"uuid":"160135809128212dm7i29fim9ksto9od","setting":{"width":6},"style":{"paddingTop":"15px","marginTop":"4px","paddingRight":"15px","marginRight":"8px","marginLeft":"8px","backgroundColor":"rgba(255, 255, 255, 1)","borderColor":"#e8e8e8","paddingLeft":"15px","marginBottom":"4px","borderWidth":"1px","paddingBottom":"10px"},"backStyle":{},"elements":[{"datatype":"static","width":12,"marks":null,"height":1,"value":"鍏冲崟","style":{},"prefix":"","postfix":"","format":"","eleType":"text","uuid":"160231860159931untbea62sgokunc5s"},{"datatype":"static","width":12,"marks":null,"style":{"color":"rgba(250, 219, 20, 1)","textAlign":"right"},"btnstyle":{},"eleType":"icon","icon":"question-circle","field":"","uuid":"1602318768361nv8ql4t47sgcsn88b0u"},{"datatype":"static","width":24,"marks":null,"height":1,"innerHeight":36,"value":"100","style":{"fontSize":"24px","fontWeight":"500","color":"rgba(0, 0, 0, 1)"},"prefix":"","btnstyle":{},"postfix":"","format":"","eleType":"text","uuid":"1602318817884v70gtgb65ubnm8mbcvv"},{"color":"#1890ff","width":24,"marks":null,"maxValue":100,"style":{"color":"rgba(250, 140, 22, 1)","paddingTop":"20px","paddingBottom":"10px"},"btnstyle":{},"eleType":"slider","field":"int1","uuid":"16023188871233rkktuvpp1h077igrsu"},{"eleType":"splitline","width":24,"color":"#e8e8e8","uuid":"1602320017038n31bk9o831ggug0tu0b","marks":null,"style":{"marginTop":"10px","marginBottom":"10px"},"btnstyle":{}},{"datatype":"static","width":12,"marks":null,"height":1,"value":"100","style":{"marginTop":"6px"},"prefix":"鍏冲崟","btnstyle":{},"postfix":"","format":"","eleType":"text","uuid":"1602320061243drd7lf3agvn04kgr175"}],"backElements":[]}]` },
   { type: 'menu', url: card2, component: 'card', subtype: 'propcard', title: '灞炴�у崱', config: `[{"uuid":"1603681387259qaqf1127f72esmtchge","setting":{"width":6,"type":"simple"},"style":{"paddingTop":"15px","marginTop":"8px","paddingRight":"15px","marginRight":"8px","marginLeft":"8px","borderColor":"#e8e8e8","paddingLeft":"15px","marginBottom":"8px","borderWidth":"1px","paddingBottom":"15px"},"backStyle":{},"elements":[{"datatype":"static","width":12,"marks":null,"height":1,"value":"瓒呮椂宸ュ崟","style":{"color":"rgba(67, 67, 67, 0.51)"},"prefix":"","postfix":"","format":"","eleType":"text","uuid":"1603681402945qnkgm7q8cng65evn5ev"},{"eleType":"icon","datatype":"static","width":12,"icon":"question-circle","tooltip":"瓒呮椂宸ュ崟","uuid":"1603681473384i2crkbtofg4pu76k06a","marks":null,"style":{"textAlign":"right","color":"rgba(250, 219, 20, 1)"}},{"datatype":"static","width":24,"marks":null,"height":1,"innerHeight":36,"value":"100","style":{"fontSize":"24px","color":"rgba(0, 0, 0, 1)"},"prefix":"","postfix":"","format":"","eleType":"number","uuid":"1603681539870d704ufqf98kc6t7537t"},{"color":"rgba(250, 219, 20, 1)","datatype":"static","width":24,"marks":null,"maxValue":100,"value":50,"style":{"paddingTop":"10px","paddingBottom":"10px"},"eleType":"slider","uuid":"1603683067556mvupau0odvrtv45u7o8"},{"eleType":"splitline","width":24,"color":"#e8e8e8","uuid":"1603683117981t9k55k8an430fuppmci","marks":null,"style":{"paddingTop":"5px","paddingBottom":"5px"}},{"datatype":"static","width":12,"marks":null,"height":1,"value":"100","style":{"color":"rgba(0, 0, 0, 0.65)","marginTop":"10px"},"prefix":"瓒呮椂宸ュ崟  ","postfix":"","format":"","eleType":"text","uuid":"1603683136553uvsmkfohkft9idbfkhu"}],"backElements":[]}]` },
+  { 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: NormalTable, component: 'table', subtype: 'normaltable', title: '琛ㄦ牸', width: 12 },
   { type: 'menu', url: line, component: 'line', subtype: 'line', title: '鎶樼嚎鍥�' },
   { type: 'menu', url: line1, component: 'line', subtype: 'line1', title: '闃舵鎶樼嚎鍥�' },
   { type: 'menu', url: bar, component: 'bar', subtype: 'bar', title: '鏌辩姸鍥�' },
diff --git a/src/menu/searchcomponent/index.jsx b/src/menu/searchcomponent/index.jsx
index 327004c..51b2634 100644
--- a/src/menu/searchcomponent/index.jsx
+++ b/src/menu/searchcomponent/index.jsx
@@ -114,7 +114,7 @@
     this.setState({
       visible: true,
       card: card,
-      formlist: getSearchForm(card, this.props.menu.sysRoles, linkableFields)
+      formlist: getSearchForm(card, linkableFields)
     })
   }
 
diff --git a/src/store/action-type.js b/src/store/action-type.js
index c636928..a9386d6 100644
--- a/src/store/action-type.js
+++ b/src/store/action-type.js
@@ -34,9 +34,6 @@
 // 鍒濆鍖栨寜閽潈闄�
 export const INIT_ACTIONPERMISSION = 'INIT_ACTIONPERMISSION'
 
-// 鍒濆鍖栬鑹插垪琛ㄥ強鍒涘缓瀛樺偍杩囩▼鍙敤瀛楁
-export const INIT_PERMISSION = 'INIT_PERMISSION'
-
 // 鍒濆鍖栬彍鍗曟潈闄�
 export const INIT_MENUPERMISSION = 'INIT_MENUPERMISSION'
 
diff --git a/src/store/action.js b/src/store/action.js
index 946142b..e37227b 100644
--- a/src/store/action.js
+++ b/src/store/action.js
@@ -86,15 +86,6 @@
   }
 }
 
-// 鍒濆鍖栬鑹插垪琛ㄥ強鍒涘缓瀛樺偍杩囩▼鍙敤瀛楁
-export const initPermission = (sysRoles, permFuncField) => {
-  return {
-    type: user.INIT_PERMISSION,
-    sysRoles: sysRoles,
-    permFuncField: permFuncField
-  }
-}
-
 // 鍒濆鍖栬彍鍗曟潈闄�
 export const initMenuPermission = (permMenus) => {
   return {
diff --git a/src/store/reducer.js b/src/store/reducer.js
index 63fe9bb..16613ce 100644
--- a/src/store/reducer.js
+++ b/src/store/reducer.js
@@ -28,8 +28,6 @@
   permRoles: [],        // 鐢ㄦ埛瑙掕壊鍒楄〃
   permAction: {},       // 鐢ㄦ埛鎸夐挳鏉冮檺
   permMenus: {},        // 鐢ㄦ埛涓夌骇鑿滃崟鏉冮檺
-  permFuncField: [],    // 绯荤粺妯″潡
-  sysRoles: [],         // 绯荤粺瑙掕壊鍒楄〃
   dataManager: false,   // 鏁版嵁绠$悊鍛�
   memberLevel: _level,  // 浼氬憳绛夌骇
   customMenu: null      // 缂栬緫涓殑鑿滃崟锛堣嚜瀹氫箟椤甸潰锛�
@@ -112,13 +110,6 @@
         ...state,
         permAction: action.permAction
       }
-    case Type.INIT_PERMISSION:
-      // 鍒濆鍖栬鑹插垪琛ㄥ強鍒涘缓瀛樺偍杩囩▼鍙敤瀛楁
-      return {
-        ...state,
-        sysRoles: action.sysRoles,
-        permFuncField: action.permFuncField
-      }
     case Type.INIT_MENUPERMISSION:
     // 鍒濆鍖栦笁绾ц彍鍗曟潈闄�
       return {
@@ -154,8 +145,6 @@
         editState: false,
         editLevel: null,
         permAction: {},
-        permFuncField: [],
-        sysRoles: [],
         permMenus: {},
         customMenu: null
       }
diff --git a/src/templates/calendarconfig/index.jsx b/src/templates/calendarconfig/index.jsx
index d0ebf5a..5929c3f 100644
--- a/src/templates/calendarconfig/index.jsx
+++ b/src/templates/calendarconfig/index.jsx
@@ -52,7 +52,6 @@
     originConfig: null,      // 鍘熼厤缃�
     tabviews: [],            // 鎵�鏈夋爣绛鹃〉
     activeKey: '0',          // 榛樿灞曞紑鍩烘湰淇℃伅
-    pasteContent: null,      // 绮樿创鍐呭
     openEdition: '',         // 缂栬緫鐗堟湰鏍囪锛岄槻姝㈠浜烘搷浣�
     mockdata: [],            // 娴嬭瘯鏁版嵁
   }
@@ -687,13 +686,12 @@
         config: res.config
       })
     } else if (res.type === 'paste') {
-      this.setState({
-        pasteContent: res.content
-      }, () => {
-        this.setState({
-          pasteContent: null
-        })
-      })
+      let config = fromJS(this.state.config).toJS()
+      if (res.content.copyType === 'search') {
+        config.search.push(res.content)
+      }
+
+      this.setState({config})
     }
   }
 
@@ -795,14 +793,11 @@
                 config={config}
                 MenuID={menu.MenuID}
                 tableFields={this.state.tableFields}
-                permFuncField={this.props.permFuncField}
                 updateConfig={this.updateconfig}
               />
               <SearchComponent
                 menu={{MenuID: menu.MenuID, MenuName: config.MenuName}}
                 config={config}
-                pasteContent={this.state.pasteContent}
-                sysRoles={this.props.sysRoles}
                 updatesearch={this.updatesearch}
               />
               <div className="calendar-wrap">
@@ -838,8 +833,6 @@
 
 const mapStateToProps = (state) => {
   return {
-    sysRoles: state.sysRoles,
-    permFuncField: state.permFuncField,
     memberLevel: state.memberLevel
   }
 }
diff --git a/src/templates/comtableconfig/index.jsx b/src/templates/comtableconfig/index.jsx
index 0dee3c7..d637149 100644
--- a/src/templates/comtableconfig/index.jsx
+++ b/src/templates/comtableconfig/index.jsx
@@ -59,7 +59,6 @@
     thawButtons: [],         // 宸查�夋嫨瑕佽В鍐荤殑鎸夐挳
     activeKey: '0',          // 榛樿灞曞紑鍩烘湰淇℃伅
     chartview: null,         // 褰撳墠瑙嗗浘
-    pasteContent: null,      // 绮樿创閰嶇疆淇℃伅
     openEdition: ''          // 缂栬緫鐗堟湰鏍囪锛岄槻姝㈠浜烘搷浣�
   }
 
@@ -902,7 +901,7 @@
         MenuNo: config.MenuNo,
         ParentId: config.ParentId,
         fstMenuId: config.fstMenuId,
-        supMenuList: submenu ? submenu.options : []
+        supMenuList: submenu ? submenu.children : []
       }
 
       // 鑿滃崟淇℃伅楠岃瘉閫氳繃鍚庯紝璺宠浆瀛愰厤缃〉闈�
@@ -1107,50 +1106,24 @@
    * @description 缂栬緫鍔熻兘瀹屾垚鏇存柊锛屽寘鎷В鍐绘寜閽�佺矘璐淬�佹浛鎹㈢瓑
    */
   editConfig = (res) => {
+    
+
     if (res.type === 'thaw') {
       this.setState({
         thawButtons: res.thawButtons,
         config: res.config
       })
     } else if (res.type === 'paste') {
-      this.setState({
-        pasteContent: res.content
-      }, () => {
-        this.setState({
-          pasteContent: null
-        })
-      })
-    } else if (res.type === 'replace') {
       let config = fromJS(this.state.config).toJS()
-
-      if (res.repType === 'field') {
-        let origin = res.origin.toLowerCase()
-        let value = res.value
-
-        config.search = config.search.map(item => {
-          if (item.field && item.field.toLowerCase() === origin) {
-            item.field = value
-          } else if (item.datefield && item.datefield.toLowerCase() === origin) {
-            item.datefield = value
-          }
-          return item
-        })
-        config.columns = config.columns.map(item => {
-          if (item.field && item.field.toLowerCase() === origin) {
-            item.field = value
-          } else if (item.nameField && item.nameField.toLowerCase() === origin) {
-            item.nameField = value
-          }
-          return item
-        })
+      if (res.content.copyType === 'search') {
+        config.search.push(res.content)
+      } else if (res.content.copyType === 'action') {
+        config.action.push(res.content)
+      } else if (res.content.copyType === 'columns' && res.content.columns && res.content.columns.length > 0) {
+        config.columns = config.columns.filter(col => !col.origin)
+        config.columns = [...config.columns, ...res.content.columns]
       }
-
-      notification.success({
-        top: 92,
-        message: '鏇挎崲鎴愬姛銆�',
-        duration: 2
-      })
-      this.setState({ config })
+      this.setState({config})
     }
   }
 
@@ -1347,21 +1320,16 @@
               <SettingComponent
                 config={config}
                 MenuID={this.props.menu.MenuID}
-                permFuncField={this.props.permFuncField}
                 updatesetting={this.updateconfig}
               />
               <SearchComponent
-                menu={{MenuID: this.props.menu.MenuID, MenuName: config.MenuName}}
                 config={config}
-                pasteContent={this.state.pasteContent}
-                sysRoles={this.props.sysRoles}
                 updatesearch={this.updatesearch}
               />
               <div className="chart-view" style={{position: 'relative'}}>
                 {/* 瑙嗗浘缁� 鏉冮檺 浼氬憳绛夌骇20+ */}
                 {this.props.memberLevel >= 20 ? <ChartGroupComponent
                   config={config}
-                  sysRoles={this.props.sysRoles}
                   updatechartgroup={this.updatechartgroup}
                 /> : null}
                 {config.charts.map(item => {
@@ -1376,16 +1344,12 @@
                           menu={{ MenuID: this.props.menu.MenuID, MenuName: config.MenuName, MenuNo: config.MenuNo, fstMenuList: this.props.menu.fstMenuList }}
                           config={config}
                           tabs={this.state.tabviews}
-                          pasteContent={this.state.pasteContent}
-                          usefulFields={this.props.permFuncField}
                           setSubConfig={(_btn) => this.setSubConfig(_btn, 'button')}
                           updateaction={this.updateaction}
                         />
                         <ColumnComponent
                           config={config}
                           menu={this.props.menu}
-                          sysRoles={this.props.sysRoles}
-                          pasteContent={this.state.pasteContent}
                           updatecolumn={this.updateconfig}
                         />
                       </Col>
@@ -1447,8 +1411,6 @@
 
 const mapStateToProps = (state) => {
   return {
-    sysRoles: state.sysRoles,
-    permFuncField: state.permFuncField,
     memberLevel: state.memberLevel
   }
 }
diff --git a/src/templates/comtableconfig/menuform/index.jsx b/src/templates/comtableconfig/menuform/index.jsx
index c428598..e8a2261 100644
--- a/src/templates/comtableconfig/menuform/index.jsx
+++ b/src/templates/comtableconfig/menuform/index.jsx
@@ -21,17 +21,9 @@
   UNSAFE_componentWillMount () {
     const { menu } = this.props
 
-    let supList = []
-    if (menu.supMenuList && menu.supMenuList.length > 0) {
-      supList = menu.supMenuList
-    } else if (menu.fstMenuList && menu.FstId) {
-      let _menu = menu.fstMenuList.filter(cell => cell.MenuID === menu.FstId)[0]
-      supList = _menu ? _menu.children : []
-    }
-
     this.setState({
-      menulist: menu.fstMenuList,
-      submenulist: supList
+      menulist: menu.fstMenuList || [],
+      submenulist: menu.supMenuList || []
     })
   }
 
diff --git a/src/templates/formtabconfig/index.jsx b/src/templates/formtabconfig/index.jsx
index 627a566..6ccf8df 100644
--- a/src/templates/formtabconfig/index.jsx
+++ b/src/templates/formtabconfig/index.jsx
@@ -478,21 +478,10 @@
       })
     }
 
-    let roleList = []
-    if (this.props.sysRoles && this.props.sysRoles.length > 0) {
-      roleList = this.props.sysRoles.map(role => {
-        return {
-          uuid: role.uuid,
-          field: role.value,
-          label: role.text
-        }
-      })
-    }
-
     this.setState({
       modaltype: 'search',
       card: card,
-      formlist: getModalForm(card, _inputfields, _linkableFields, _linksupFields, false, roleList).map(item => {
+      formlist: getModalForm(card, _inputfields, _linkableFields, _linksupFields, false).map(item => {
         if (item.key === 'type') {
           item.options = item.options.filter(option => !['switch', 'checkbox', 'radio', 'checkcard', 'hint'].includes(option.value))
         }
@@ -502,7 +491,18 @@
   }
 
   handleAction = (card) => {
-    let ableField = this.props.permFuncField.join(', ')
+    let usefulFields = sessionStorage.getItem('permFuncField')
+    if (usefulFields) {
+      try {
+        usefulFields = JSON.parse(usefulFields)
+      } catch {
+        usefulFields = []
+      }
+    } else {
+      usefulFields = []
+    }
+
+    let ableField = usefulFields.join(', ')
     let functip = <div>
       <p style={{marginBottom: '5px'}}>{this.state.dict['model.tooltip.func.innerface'].replace('@ableField', ableField)}</p>
       <p>{this.state.dict['model.tooltip.func.outface']}</p>
@@ -511,7 +511,7 @@
     this.setState({
       modaltype: 'actionEdit',
       card: card,
-      formlist: getActionForm(card, functip, this.state.config, this.props.permFuncField)
+      formlist: getActionForm(card, functip, this.state.config, usefulFields)
     })
   }
 
@@ -2073,7 +2073,6 @@
             menu={this.props.menu}
             config={this.state.config}
             inputSubmit={this.settingSave}
-            usefulFields={this.props.permFuncField}
             wrappedComponentRef={(inst) => this.settingRef = inst}
           />
         </Modal>
@@ -2130,11 +2129,8 @@
   }
 }
 
-const mapStateToProps = (state) => {
-  return {
-    sysRoles: state.sysRoles,
-    permFuncField: state.permFuncField
-  }
+const mapStateToProps = () => {
+  return {}
 }
 
 const mapDispatchToProps = () => {
diff --git a/src/templates/formtabconfig/settingform/index.jsx b/src/templates/formtabconfig/settingform/index.jsx
index a807e3d..9a407ea 100644
--- a/src/templates/formtabconfig/settingform/index.jsx
+++ b/src/templates/formtabconfig/settingform/index.jsx
@@ -12,13 +12,13 @@
     dict: PropTypes.object, // 瀛楀吀椤�
     menu: PropTypes.object,
     config: PropTypes.object,
-    usefulFields: PropTypes.array,
     inputSubmit: PropTypes.any     // 鍥炶溅鎻愪氦浜嬩欢
   }
 
   state = {
     interType: (this.props.config.setting && this.props.config.setting.interType) || 'inner',
     columns: null,
+    usefulFields: [],
     interReadonly: false,
   }
 
@@ -51,12 +51,24 @@
       })
     }
 
+    let usefulFields = sessionStorage.getItem('permFuncField')
+    if (usefulFields) {
+      try {
+        usefulFields = JSON.parse(usefulFields)
+      } catch {
+        usefulFields = []
+      }
+    } else {
+      usefulFields = []
+    }
+
     this.setState({
       columns: _columns,
       setting: _setting,
       interType: _setting.interType || 'inner',
       interReadonly: _setting.sysInterface === 'true',
-      datatype: _setting.datatype || 'maintable'
+      datatype: _setting.datatype || 'maintable',
+      usefulFields
     })
   }
 
@@ -154,9 +166,9 @@
   }
 
   render() {
-    const { dict, usefulFields, menu } = this.props
+    const { dict, menu } = this.props
     const { getFieldDecorator } = this.props.form
-    const { interType, setting, datatype } = this.state
+    const { interType, setting, datatype, usefulFields } = this.state
 
     const formItemLayout = {
       labelCol: {
diff --git a/src/templates/modalconfig/index.jsx b/src/templates/modalconfig/index.jsx
index 04b0365..85f7f06 100644
--- a/src/templates/modalconfig/index.jsx
+++ b/src/templates/modalconfig/index.jsx
@@ -436,21 +436,10 @@
       card.linkSubField = card.linkSubField.filter(item => fields.includes(item))
     }
 
-    let roleList = []
-    if (this.props.sysRoles && this.props.sysRoles.length > 0) {
-      roleList = this.props.sysRoles.map(role => {
-        return {
-          uuid: role.uuid,
-          field: role.value,
-          label: role.text
-        }
-      })
-    }
-
     this.setState({
       visible: true,
       card: card,
-      formlist: getModalForm(card, _inputfields, _linkableFields, _linksupFields, !!this.props.editTab, roleList)
+      formlist: getModalForm(card, _inputfields, _linkableFields, _linksupFields, !!this.props.editTab)
     })
   }
 
@@ -1311,10 +1300,8 @@
   }
 }
 
-const mapStateToProps = (state) => {
-  return {
-    sysRoles: state.sysRoles
-  }
+const mapStateToProps = () => {
+  return {}
 }
 
 const mapDispatchToProps = () => {
diff --git a/src/templates/sharecomponent/actioncomponent/index.jsx b/src/templates/sharecomponent/actioncomponent/index.jsx
index 11d168b..a0190f0 100644
--- a/src/templates/sharecomponent/actioncomponent/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/index.jsx
@@ -28,8 +28,6 @@
     type: PropTypes.string,          // 鑿滃崟绫诲瀷锛屼富琛ㄦ垨瀛愯〃
     menu: PropTypes.object,          // 鑿滃崟淇℃伅锛堣彍鍗昳d锛岃彍鍗曞弬鏁帮紝鑿滃崟鍚嶇О锛�
     config: PropTypes.object,        // 鑿滃崟閰嶇疆淇℃伅
-    pasteContent: PropTypes.object,  // 绮樿创閰嶇疆淇℃伅
-    usefulFields: PropTypes.array,   // 鑷畾涔夊嚱鏁板彲鐢ㄥ瓧娈�
     tabs: PropTypes.array,           // 鎵�鏈夋爣绛�
     setSubConfig: PropTypes.func,    // 璁剧疆瀛愰厤缃俊鎭�
     updateaction: PropTypes.func     // 鑿滃崟閰嶇疆鏇存柊
@@ -61,10 +59,12 @@
   UNSAFE_componentWillReceiveProps (nextProps) {
     const { actionlist } = this.state
 
-    if (nextProps.pasteContent && nextProps.pasteContent.copyType === 'action') {
-      this.setState({actionlist: [...actionlist, nextProps.pasteContent]})
-      this.handleAction(nextProps.pasteContent)
-    } else if (!is(fromJS(nextProps.config.action), fromJS(this.props.config.action)) && !is(fromJS(nextProps.config.action), fromJS(actionlist))) {
+    if (!is(fromJS(nextProps.config.action), fromJS(this.props.config.action)) && !is(fromJS(nextProps.config.action), fromJS(actionlist))) {
+      let len = nextProps.config.action.length
+      let item = nextProps.config.action[len - 1]
+      if (item.copyType && item.focus) {
+        this.handleAction(item)
+      }
       this.setState({actionlist: fromJS(nextProps.config.action).toJS()})
     }
   }
@@ -138,7 +138,19 @@
    */
   handleAction = (card) => {
     const { menu } = this.props
-    let ableField = this.props.usefulFields.join(', ')
+
+    let usefulFields = sessionStorage.getItem('permFuncField')
+    if (usefulFields) {
+      try {
+        usefulFields = JSON.parse(usefulFields)
+      } catch {
+        usefulFields = []
+      }
+    } else {
+      usefulFields = []
+    }
+
+    let ableField = usefulFields.join(', ')
     let functip = <div>
       <p style={{marginBottom: '5px'}}>{this.state.dict['model.tooltip.func.innerface'].replace('@ableField', ableField)}</p>
       <p>{this.state.dict['model.tooltip.func.outface']}</p>
@@ -172,7 +184,7 @@
     this.setState({
       visible: true,
       card: card,
-      formlist: getActionForm(card, functip, this.props.config, this.props.usefulFields, this.props.type, menulist, this.state.printTemps)
+      formlist: getActionForm(card, functip, this.props.config, usefulFields, this.props.type, menulist, this.state.printTemps)
     })
   }
 
@@ -180,18 +192,18 @@
    * @description 鍙栨秷淇濆瓨锛屽鏋滃厓绱犱负鏂版坊鍏冪礌锛屽垯浠庡簭鍒椾腑鍒犻櫎
    */
   editModalCancel = () => {
-    const { card } = this.state
+    const { config } = this.props
+    const { card, actionlist } = this.state
 
     if (card.focus) {
-      let actionlist = fromJS(this.state.actionlist).toJS()
-
-      actionlist = actionlist.filter(item => item.uuid !== card.uuid)
+      let _actionlist = actionlist.filter(item => item.uuid !== card.uuid)
 
       this.setState({
         card: null,
-        actionlist: actionlist,
+        actionlist: _actionlist,
         visible: false
       })
+      this.props.updateaction({...config, action: _actionlist})
     } else {
       this.setState({
         card: null,
diff --git a/src/templates/sharecomponent/chartgroupcomponent/index.jsx b/src/templates/sharecomponent/chartgroupcomponent/index.jsx
index 1ba31d0..8596cd8 100644
--- a/src/templates/sharecomponent/chartgroupcomponent/index.jsx
+++ b/src/templates/sharecomponent/chartgroupcomponent/index.jsx
@@ -17,7 +17,6 @@
 class ChartGroupComponent extends Component {
   static propTpyes = {
     config: PropTypes.object,         // 鑿滃崟閰嶇疆淇℃伅
-    sysRoles: PropTypes.array,        // 瑙掕壊鍒楄〃锛岄粦鍚嶅崟浣跨敤
     updatechartgroup: PropTypes.func  // 鍥捐〃鏇存柊
   }
 
@@ -148,7 +147,7 @@
     this.setState({
       card: item,
       modaltype: _type,
-      formlist: getChartViewForm(item, this.props.sysRoles, _columns, actions, extraActions)
+      formlist: getChartViewForm(item, _columns, actions, extraActions)
     })
   }
 
diff --git a/src/templates/sharecomponent/columncomponent/index.jsx b/src/templates/sharecomponent/columncomponent/index.jsx
index a1e0242..b24f1db 100644
--- a/src/templates/sharecomponent/columncomponent/index.jsx
+++ b/src/templates/sharecomponent/columncomponent/index.jsx
@@ -20,8 +20,6 @@
   static propTpyes = {
     menu: PropTypes.object,          // 涓夌骇鑿滃崟淇℃伅
     config: PropTypes.object,        // 閰嶇疆淇℃伅
-    pasteContent: PropTypes.object,  // 绮樿创閰嶇疆淇℃伅
-    sysRoles: PropTypes.array,       // 瑙掕壊鍒楄〃锛屾潈闄愬垎閰�
     updatecolumn: PropTypes.func     // 鏇存柊
   }
 
@@ -50,18 +48,7 @@
     const { config } = this.props
     const { columnlist } = this.state
 
-    if (
-      nextProps.pasteContent &&
-      nextProps.pasteContent.columns &&
-      nextProps.pasteContent.copyType === 'columns' &&
-      nextProps.pasteContent.columns.length > 0
-    ) {
-      if (columnlist.filter(col => !col.origin).length === 0) {
-        this.setState({columnlist: nextProps.pasteContent.columns}, () => {
-          this.props.updatecolumn({...config, columns: nextProps.pasteContent.columns})
-        })
-      }
-    } else if (!is(fromJS(nextProps.config.columns), fromJS(config.columns)) && !is(fromJS(nextProps.config.columns), fromJS(columnlist))) {
+    if (!is(fromJS(nextProps.config.columns), fromJS(config.columns)) && !is(fromJS(nextProps.config.columns), fromJS(columnlist))) {
       this.setState({columnlist: fromJS(nextProps.config.columns).toJS()})
     }
   }
@@ -117,7 +104,7 @@
       this.setState({
         modaltype: 'columns',
         card: card,
-        formlist: getColumnForm(card, this.props.sysRoles, menulist)
+        formlist: getColumnForm(card, menulist)
       })
     } else {
       this.setState({
diff --git a/src/templates/sharecomponent/searchcomponent/index.jsx b/src/templates/sharecomponent/searchcomponent/index.jsx
index 6c70ffb..73306fc 100644
--- a/src/templates/sharecomponent/searchcomponent/index.jsx
+++ b/src/templates/sharecomponent/searchcomponent/index.jsx
@@ -18,10 +18,7 @@
 
 class SearchComponent extends Component {
   static propTpyes = {
-    menu: PropTypes.object,          // 褰撳墠鑿滃崟淇℃伅
     config: PropTypes.object,        // 閰嶇疆淇℃伅
-    pasteContent: PropTypes.object,  // 绮樿创閰嶇疆淇℃伅
-    sysRoles: PropTypes.array,       // 瑙掕壊鍒楄〃锛岄粦鍚嶅崟
     updatesearch: PropTypes.func     // 鏇存柊
   }
 
@@ -48,10 +45,12 @@
   UNSAFE_componentWillReceiveProps (nextProps) {
     const { searchlist } = this.state
 
-    if (nextProps.pasteContent && nextProps.pasteContent.copyType === 'search') {
-      this.setState({searchlist: [...searchlist, nextProps.pasteContent]})
-      this.handleSearch(nextProps.pasteContent)
-    } else if (!is(fromJS(nextProps.config.search), fromJS(this.props.config.search)) && !is(fromJS(nextProps.config.search), fromJS(searchlist))) {
+    if (!is(fromJS(nextProps.config.search), fromJS(this.props.config.search)) && !is(fromJS(nextProps.config.search), fromJS(searchlist))) {
+      let len = nextProps.config.search.length
+      let item = nextProps.config.search[len - 1]
+      if (item.copyType && item.focus) {
+        this.handleSearch(item)
+      }
       this.setState({searchlist: fromJS(nextProps.config.search).toJS()})
     }
   }
@@ -91,7 +90,7 @@
     this.setState({
       visible: true,
       card: card,
-      formlist: getSearchForm(card, this.props.sysRoles, linkableFields)
+      formlist: getSearchForm(card, linkableFields)
     })
   }
 
@@ -99,18 +98,18 @@
    * @description 鍙栨秷淇濆瓨锛屽鏋滃厓绱犱负鏂版坊鍏冪礌锛屽垯浠庡簭鍒椾腑鍒犻櫎
    */
   editModalCancel = () => {
-    const { card } = this.state
+    const { config } = this.props
+    const { card, searchlist } = this.state
 
     if (card.focus) {
-      let searchlist = fromJS(this.state.searchlist).toJS()
-
-      searchlist = searchlist.filter(item => item.uuid !== card.uuid)
+      let _searchlist = searchlist.filter(item => item.uuid !== card.uuid)
 
       this.setState({
         card: null,
-        searchlist: searchlist,
+        searchlist: _searchlist,
         visible: false
       })
+      this.props.updatesearch({...config, search: _searchlist})
     } else {
       this.setState({
         card: null,
diff --git a/src/templates/sharecomponent/settingcalcomponent/index.jsx b/src/templates/sharecomponent/settingcalcomponent/index.jsx
index 10a1a46..2f641c6 100644
--- a/src/templates/sharecomponent/settingcalcomponent/index.jsx
+++ b/src/templates/sharecomponent/settingcalcomponent/index.jsx
@@ -13,7 +13,6 @@
     config: PropTypes.any,
     MenuID: PropTypes.string,
     tableFields: PropTypes.any,
-    permFuncField: PropTypes.any,
     updateConfig: PropTypes.func
   }
 
@@ -78,7 +77,6 @@
             dict={dict}
             config={config}
             tableFields={this.props.tableFields}
-            permFuncField={this.props.permFuncField}
             menuId={this.props.config.uuid}
             searches={config.search}
             wrappedComponentRef={(inst) => this.verifyRef = inst}
diff --git a/src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx b/src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx
index 2cc9b20..ebe803d 100644
--- a/src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx
+++ b/src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx
@@ -22,7 +22,6 @@
   static propTpyes = {
     dict: PropTypes.object,          // 瀛楀吀椤�
     tableFields: PropTypes.any,      // 鏁版嵁婧愪俊鎭�
-    permFuncField: PropTypes.any,    // 鏁版嵁婧愪俊鎭�
     config: PropTypes.object,        // 鏁版嵁婧愪俊鎭�
     menuId: PropTypes.string,        // 鑿滃崟Id
     searches: PropTypes.array,       // 鎼滅储鏉′欢
@@ -338,7 +337,6 @@
             <SettingForm
               menuId={this.props.menuId}
               dict={this.props.dict}
-              permFuncField={this.props.permFuncField}
               columns={columns}
               setting={setting}
               scripts={scripts}
diff --git a/src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx b/src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx
index 913df71..da7e7b1 100644
--- a/src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx
+++ b/src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx
@@ -13,7 +13,6 @@
   static propTpyes = {
     dict: PropTypes.object,       // 瀛楀吀椤�
     menuId: PropTypes.string,     // 鑿滃崟Id
-    permFuncField: PropTypes.any, // 鑿滃崟Id
     setting: PropTypes.object,    // 鏁版嵁婧愰厤缃�
     columns: PropTypes.array,     // 鍒楄缃�
     scripts: PropTypes.array,     // 鑷畾涔夎剼鏈�
@@ -21,6 +20,24 @@
 
   state = {
     interType: this.props.setting.interType || 'system',
+    usefulFields: []
+  }
+
+  UNSAFE_componentWillMount() {
+    let usefulFields = sessionStorage.getItem('permFuncField')
+    if (usefulFields) {
+      try {
+        usefulFields = JSON.parse(usefulFields)
+      } catch {
+        usefulFields = []
+      }
+    } else {
+      usefulFields = []
+    }
+
+    this.setState({
+      usefulFields
+    })
   }
 
   handleConfirm = () => {
@@ -123,9 +140,9 @@
   }
 
   render() {
-    const { setting, permFuncField } = this.props
+    const { setting } = this.props
     const { getFieldDecorator } = this.props.form
-    const { interType } = this.state
+    const { interType, usefulFields } = this.state
 
     const formItemLayout = {
       labelCol: {
@@ -141,9 +158,9 @@
     let tooltip = null
     let rules = []
 
-    if (permFuncField && permFuncField.length > 0) {
-      tooltip = '寮�澶村彲鐢ㄥ瓧绗︼細' + permFuncField.join(', ')
-      let str = '^(' + permFuncField.join('|') + ')'
+    if (usefulFields.length > 0) {
+      tooltip = '寮�澶村彲鐢ㄥ瓧绗︼細' + usefulFields.join(', ')
+      let str = '^(' + usefulFields.join('|') + ')'
       let _patten = new RegExp(str + formRule.func.innerPattern + '$', 'g')
 
       rules.push({
diff --git a/src/templates/sharecomponent/settingcomponent/index.jsx b/src/templates/sharecomponent/settingcomponent/index.jsx
index ca71c7b..c96f5c3 100644
--- a/src/templates/sharecomponent/settingcomponent/index.jsx
+++ b/src/templates/sharecomponent/settingcomponent/index.jsx
@@ -19,7 +19,6 @@
     mainsearch: PropTypes.any,       // 涓昏〃鐨勬悳绱㈡潯浠讹紝褰撳瓙琛ㄨ缃帴鏀朵富琛ㄦ潯浠舵椂鏈夋晥
     MenuID: PropTypes.string,        // 鑿滃崟ID
     config: PropTypes.object,        // 鑿滃崟閰嶇疆淇℃伅
-    permFuncField: PropTypes.array,  // 瀛樺偍杩囩▼鍙敤寮�澶村瓧娈�
     updatesetting: PropTypes.func
   }
 
@@ -131,7 +130,7 @@
   }
 
   render() {
-    const { config, permFuncField } = this.props
+    const { config } = this.props
     const { dict, visible, search, menu } = this.state
 
     return (
@@ -158,7 +157,6 @@
             menu={menu}
             config={config}
             search={search}
-            permFuncField={permFuncField}
             wrappedComponentRef={(inst) => this.settingRef = inst}
           />
         </Modal>
diff --git a/src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx b/src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx
index 93db0bd..c37066a 100644
--- a/src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx
+++ b/src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx
@@ -14,7 +14,6 @@
     type: PropTypes.string,       // 鑿滃崟绫诲瀷锛宮ain鎴杝ubtable
     dict: PropTypes.object,       // 瀛楀吀椤�
     menu: PropTypes.object,       // 鑿滃崟淇℃伅
-    permFuncField: PropTypes.any, // 瀛樺偍杩囩▼鍙敤寮�濮嬪瓧绗�
     setting: PropTypes.object,    // 鏁版嵁婧愰厤缃�
     columns: PropTypes.array,     // 鍒楄缃�
     scripts: PropTypes.array,     // 鑷畾涔夎剼鏈�
@@ -27,14 +26,25 @@
   }
 
   UNSAFE_componentWillMount () {
-    const { setting, permFuncField } = this.props
+    const { setting } = this.props
 
+    let usefulFields = sessionStorage.getItem('permFuncField')
+    if (usefulFields) {
+      try {
+        usefulFields = JSON.parse(usefulFields)
+      } catch {
+        usefulFields = []
+      }
+    } else {
+      usefulFields = []
+    }
+    
     let tooltip = null
     let rules = []
 
-    if (permFuncField && permFuncField.length > 0) {
-      tooltip = '寮�澶村彲鐢ㄥ瓧绗︼細' + permFuncField.join(', ')
-      let str = '^(' + permFuncField.join('|') + ')'
+    if (usefulFields.length > 0) {
+      tooltip = '寮�澶村彲鐢ㄥ瓧绗︼細' + usefulFields.join(', ')
+      let str = '^(' + usefulFields.join('|') + ')'
       let _patten = new RegExp(str + formRule.func.innerPattern + '$', 'g')
 
       rules.push({
diff --git a/src/templates/sharecomponent/settingcomponent/settingform/index.jsx b/src/templates/sharecomponent/settingcomponent/settingform/index.jsx
index 7755636..55002a4 100644
--- a/src/templates/sharecomponent/settingcomponent/settingform/index.jsx
+++ b/src/templates/sharecomponent/settingcomponent/settingform/index.jsx
@@ -18,7 +18,6 @@
     dict: PropTypes.object,         // 瀛楀吀椤�
     menu: PropTypes.object,         // 鑿滃崟淇℃伅
     config: PropTypes.object,       // 椤甸潰閰嶇疆淇℃伅
-    permFuncField: PropTypes.array, // 鑷畾涔夊嚱鏁板彲鐢ㄥ瓧娈�
     search: PropTypes.array         // 鎼滅储鏉′欢
   }
 
@@ -378,7 +377,7 @@
   }
 
   render() {
-    const { config, menu, dict, permFuncField } = this.props
+    const { config, menu, dict } = this.props
     const { loading, activeKey, setting, defaultSql, columns, scripts } = this.state
 
     return (
@@ -393,7 +392,6 @@
               columns={columns}
               setting={setting}
               scripts={scripts}
-              permFuncField={permFuncField}
               wrappedComponentRef={(inst) => this.settingForm = inst}
             />
           </TabPane>
diff --git a/src/templates/sharecomponent/treesettingcomponent/index.jsx b/src/templates/sharecomponent/treesettingcomponent/index.jsx
index 70a2779..9f99261 100644
--- a/src/templates/sharecomponent/treesettingcomponent/index.jsx
+++ b/src/templates/sharecomponent/treesettingcomponent/index.jsx
@@ -12,7 +12,6 @@
   static propTpyes = {
     MenuID: PropTypes.string,        // 鑿滃崟ID
     config: PropTypes.object,        // 鑿滃崟閰嶇疆淇℃伅
-    permFuncField: PropTypes.array,  // 瀛樺偍杩囩▼鍙敤寮�澶村瓧娈�
     updatesetting: PropTypes.func
   }
 
@@ -92,7 +91,6 @@
             config={config}
             menu={this.state.menu}
             inputSubmit={this.settingSave}
-            permFuncField={this.props.permFuncField}
             wrappedComponentRef={(inst) => this.settingRef = inst}
           />
         </Modal>
diff --git a/src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx b/src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx
index 02acde2..0e2884c 100644
--- a/src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx
+++ b/src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx
@@ -13,7 +13,6 @@
   static propTpyes = {
     dict: PropTypes.object,       // 瀛楀吀椤�
     menu: PropTypes.object,       // 鑿滃崟淇℃伅
-    permFuncField: PropTypes.any, // 瀛樺偍杩囩▼鍙敤寮�濮嬪瓧绗�
     setting: PropTypes.object,    // 鏁版嵁婧愰厤缃�
     inputSubmit: PropTypes.func   // 瑙﹀彂鎻愪氦
   }
@@ -25,14 +24,25 @@
   }
 
   UNSAFE_componentWillMount () {
-    const { setting, permFuncField } = this.props
+    const { setting } = this.props
 
+    let usefulFields = sessionStorage.getItem('permFuncField')
     let tooltip = null
     let rules = []
 
-    if (permFuncField && permFuncField.length > 0) {
-      tooltip = '寮�澶村彲鐢ㄥ瓧绗︼細' + permFuncField.join(', ')
-      let str = '^(' + permFuncField.join('|') + ')'
+    if (usefulFields) {
+      try {
+        usefulFields = JSON.parse(usefulFields)
+      } catch {
+        usefulFields = []
+      }
+    } else {
+      usefulFields = []
+    }
+
+    if (usefulFields.length > 0) {
+      tooltip = '寮�澶村彲鐢ㄥ瓧绗︼細' + usefulFields.join(', ')
+      let str = '^(' + usefulFields.join('|') + ')'
       let _patten = new RegExp(str + formRule.func.innerPattern + '$', 'g')
 
       rules.push({
diff --git a/src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx b/src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx
index badfe77..33a5f76 100644
--- a/src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx
+++ b/src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx
@@ -18,7 +18,6 @@
     dict: PropTypes.object,         // 瀛楀吀椤�
     menu: PropTypes.object,         // 鑿滃崟淇℃伅
     config: PropTypes.object,       // 椤甸潰閰嶇疆淇℃伅
-    permFuncField: PropTypes.array, // 瀛樺偍杩囩▼鍙敤瀛楁
     inputSubmit: PropTypes.any      // 鍥炶溅鎻愪氦浜嬩欢
   }
 
@@ -243,7 +242,6 @@
               menu={menu}
               dict={this.props.dict}
               setting={setting}
-              permFuncField={this.props.permFuncField}
               inputSubmit={this.props.inputSubmit}
               wrappedComponentRef={(inst) => this.settingForm = inst}
             />
diff --git a/src/templates/subtableconfig/index.jsx b/src/templates/subtableconfig/index.jsx
index 6cdd3a1..a5e680a 100644
--- a/src/templates/subtableconfig/index.jsx
+++ b/src/templates/subtableconfig/index.jsx
@@ -63,7 +63,6 @@
     thawButtons: [],         // 宸查�夋嫨瑕佽В鍐荤殑鎸夐挳
     activeKey: '0',          // 榛樿灞曞紑鍩烘湰淇℃伅
     chartview: null,         // 褰撳墠瑙嗗浘
-    pasteContent: null,      // 绮樿创鍐呭
     openEdition: ''          // 缂栬緫鐗堟湰鏍囪锛岄槻姝㈠浜烘搷浣�
   }
 
@@ -922,13 +921,17 @@
         config: res.config
       })
     } else if (res.type === 'paste') {
-      this.setState({
-        pasteContent: res.content
-      }, () => {
-        this.setState({
-          pasteContent: null
-        })
-      })
+      let config = fromJS(this.state.config).toJS()
+      if (res.content.copyType === 'search') {
+        config.search.push(res.content)
+      } else if (res.content.copyType === 'action') {
+        config.action.push(res.content)
+      } else if (res.content.copyType === 'columns' && res.content.columns && res.content.columns.length > 0) {
+        config.columns = config.columns.filter(col => !col.origin)
+        config.columns = [...config.columns, ...res.content.columns]
+      }
+
+      this.setState({config})
     }
   }
 
@@ -1099,21 +1102,16 @@
                 config={config}
                 mainsearch={!this.props.editSubTab && this.props.editTab.mainsearch ? this.props.editTab.mainsearch : ''}
                 MenuID={config.uuid}
-                permFuncField={this.props.permFuncField}
                 updatesetting={this.updateconfig}
               />
               <SearchComponent
-                menu={{MenuID: config.uuid, MenuName: config.tabName}}
                 config={config}
-                pasteContent={this.state.pasteContent}
-                sysRoles={this.props.sysRoles}
                 updatesearch={this.updatesearch}
               />
               <div className="chart-view" style={{position: 'relative'}}>
                 {/* 瑙嗗浘缁� 鏉冮檺 浼氬憳绛夌骇20+ */}
                 {this.props.memberLevel >= 20 ? <ChartGroupComponent
                   config={config}
-                  sysRoles={this.props.sysRoles}
                   updatechartgroup={this.updatechartgroup}
                 /> : null}
                 {config.charts.map(item => {
@@ -1128,16 +1126,12 @@
                           menu={{MenuID: config.uuid, MenuName: config.tabName, MenuNo: config.tabNo, fstMenuList: this.props.menu.fstMenuList}}
                           config={config}
                           tabs={this.state.tabviews}
-                          pasteContent={this.state.pasteContent}
-                          usefulFields={this.props.permFuncField}
                           setSubConfig={this.setSubConfig}
                           updateaction={this.updateaction}
                         />
                         <ColumnComponent
                           config={config}
                           menu={this.props.menu}
-                          sysRoles={this.props.sysRoles}
-                          pasteContent={this.state.pasteContent}
                           updatecolumn={this.updateconfig}
                         />
                       </Col>
@@ -1191,8 +1185,6 @@
 
 const mapStateToProps = (state) => {
   return {
-    sysRoles: state.sysRoles,
-    permFuncField: state.permFuncField,
     memberLevel: state.memberLevel
   }
 }
diff --git a/src/templates/treepageconfig/index.jsx b/src/templates/treepageconfig/index.jsx
index 991ad20..4b887e6 100644
--- a/src/templates/treepageconfig/index.jsx
+++ b/src/templates/treepageconfig/index.jsx
@@ -45,7 +45,6 @@
     delTabs: [],             // 鍒犻櫎鏍囩鍒楄〃
     tabviews: [],            // 鎵�鏈夋爣绛鹃〉
     activeKey: '0',          // 榛樿灞曞紑鍩烘湰淇℃伅
-    pasteContent: null,      // 绮樿创閰嶇疆淇℃伅
     openEdition: ''          // 缂栬緫鐗堟湰鏍囪锛岄槻姝㈠浜烘搷浣�
   }
 
@@ -798,7 +797,6 @@
                   <TreeSettingComponent
                     config={config}
                     MenuID={this.props.menu.MenuID}
-                    permFuncField={this.props.permFuncField}
                     updatesetting={this.updateconfig}
                   />
                   <Card
@@ -867,8 +865,6 @@
 
 const mapStateToProps = (state) => {
   return {
-    sysRoles: state.sysRoles,
-    permFuncField: state.permFuncField,
     memberLevel: state.memberLevel
   }
 }
diff --git a/src/templates/zshare/editcomponent/index.jsx b/src/templates/zshare/editcomponent/index.jsx
index 8d4083f..7d7268f 100644
--- a/src/templates/zshare/editcomponent/index.jsx
+++ b/src/templates/zshare/editcomponent/index.jsx
@@ -164,6 +164,7 @@
             res.type = 'date'
           }
         }
+        res.copyType = 'search'
 
         this.setState({
           pasteVisible: false
@@ -207,6 +208,7 @@
             res.type = 'date'
           }
         }
+        res.copyType = 'form'
 
         if (_config.groups.length > 0) {
           _config.groups.forEach(group => {
diff --git a/src/templates/zshare/formconfig.jsx b/src/templates/zshare/formconfig.jsx
index 46ceaa8..a5d10b9 100644
--- a/src/templates/zshare/formconfig.jsx
+++ b/src/templates/zshare/formconfig.jsx
@@ -284,10 +284,20 @@
 /**
  * @description 鑾峰彇鎼滅储鏉′欢琛ㄥ崟閰嶇疆淇℃伅
  * @param {object} card           // 鎼滅储鏉′欢瀵硅薄
- * @param {Array}  roleList       // 瑙掕壊鍒楄〃
  * @param {Array}  linkableFields // 鍙叧鑱斿瓧娈�
  */
-export function getSearchForm (card, roleList, linkableFields) {
+export function getSearchForm (card, linkableFields) {
+  let roleList = sessionStorage.getItem('sysRoles')
+  if (roleList) {
+    try {
+      roleList = JSON.parse(roleList)
+    } catch {
+      roleList = []
+    }
+  } else {
+    roleList = []
+  }
+
   return [
     {
       type: 'text',
@@ -602,10 +612,10 @@
  * @param {*} card           缂栬緫鎸夐挳
  * @param {*} functip        鐢熸垚瀛樺偍杩囩▼鎻愮ず
  * @param {*} config         椤甸潰閰嶇疆
- * @param {*} permFuncField  瀛樺偍杩囩▼鍙敤鐨勫紑濮嬪瓧娈�
+ * @param {*} usefulFields   瀛樺偍杩囩▼鍙敤鐨勫紑濮嬪瓧娈�
  * @param {*} type           鎸夐挳绫诲瀷锛岀敤浜庡尯鍒嗗彲閫夌殑鎵撳紑鏂瑰紡
  */
-export function getActionForm (card, functip, config, permFuncField, type, menulist = [], printTemps = []) {
+export function getActionForm (card, functip, config, usefulFields, type, menulist = [], printTemps = []) {
   let opentypes = [
     {
       value: 'pop',
@@ -753,7 +763,7 @@
       label: Formdict['header.form.innerFunc'],
       initVal: card.innerFunc || '',
       tooltip: functip,
-      fields: permFuncField,
+      fields: usefulFields,
       tooltipClass: 'middle',
       required: card.intertype === 'inner',
       readonly: false
@@ -1055,10 +1065,20 @@
 /**
  * @description 鑾峰彇鏄剧ず鍒楄〃鍗曢厤缃俊鎭�
  * @param {object} card       // 鎼滅储鏉′欢瀵硅薄
- * @param {Array}  roleList   // 瑙掕壊鍒楄〃-榛戝悕鍗�
  * @param {Array}  menulist   // 鑿滃崟鍒楄〃-鐢ㄤ簬瀛楁閫忚
  */
-export function getColumnForm (card, roleList = [], menulist = []) {
+export function getColumnForm (card, menulist = []) {
+  let roleList = sessionStorage.getItem('sysRoles')
+  if (roleList) {
+    try {
+      roleList = JSON.parse(roleList)
+    } catch {
+      roleList = []
+    }
+  } else {
+    roleList = []
+  }
+
   return [
     {
       type: 'text',
@@ -1341,12 +1361,22 @@
 /**
  * @description 鑾峰彇鍥捐〃瑙嗗浘澶栭儴閰嶇疆琛ㄥ崟
  * @param {object} card         // 鎼滅储鏉′欢瀵硅薄
- * @param {Array}  roleList     // 瑙掕壊鍒楄〃-榛戝悕鍗�
  * @param {Array}  columns      // 鏄剧ず鍒�
  * @param {Array}  actions      // 鎸夐挳缁別xcel
  * @param {Array}  extraActions // 甯歌鎸夐挳
  */
-export function getChartViewForm (card, roleList = [], _columns, actions, extraActions) {
+export function getChartViewForm (card, _columns, actions, extraActions) {
+  let roleList = sessionStorage.getItem('sysRoles')
+  if (roleList) {
+    try {
+      roleList = JSON.parse(roleList)
+    } catch {
+      roleList = []
+    }
+  } else {
+    roleList = []
+  }
+
   let _charts = [{
     value: 'line',
     text: '鎶樼嚎鍥�'
@@ -1787,9 +1817,26 @@
  * @param {*} linkableFields  // 鍙叧鑱旇〃鍗�
  * @param {*} linksupFields   // 涓婄骇琛ㄥ崟
  * @param {*} subtable        // 鏄惁涓哄瓙琛ㄨ〃鍗�
- * @param {*} roleList        // 瑙掕壊鍒楄〃-榛戝悕鍗�
  */
-export function getModalForm (card, inputfields, linkableFields, linksupFields, subtable = false, roleList = []) {
+export function getModalForm (card, inputfields, linkableFields, linksupFields, subtable = false) {
+  let roleList = sessionStorage.getItem('sysRoles')
+  if (roleList) {
+    try {
+      roleList = JSON.parse(roleList)
+      roleList = roleList.map(role => {
+        return {
+          uuid: role.uuid,
+          field: role.value,
+          label: role.text
+        }
+      })
+    } catch {
+      roleList = []
+    }
+  } else {
+    roleList = []
+  }
+  
   let _openType = []
   let _fieldlength = 50
 
diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx
index 5b7d7aa..49ff781 100644
--- a/src/views/menudesign/index.jsx
+++ b/src/views/menudesign/index.jsx
@@ -14,7 +14,7 @@
 import antdEnUS from 'antd/es/locale/en_US'
 import antdZhCN from 'antd/es/locale/zh_CN'
 import asyncComponent from '@/utils/asyncComponent'
-import { modifyCustomMenu, initPermission } from '@/store/action'
+import { modifyCustomMenu } from '@/store/action'
 
 import './index.scss'
 
@@ -91,10 +91,13 @@
   closeView = () => {
     const { oriConfig, config } = this.state
 
+    if (!config) {
+      window.close()
+      return
+    }
+
     let _config = fromJS(config).toJS()
     delete _config.fstMenuList
-    delete _config.permFuncField
-    delete _config.sysRoles
     delete _config.tableFields
 
     if (!is(fromJS(oriConfig), fromJS(_config))) {
@@ -260,8 +263,6 @@
 
     let _config = fromJS(config).toJS()
     delete _config.fstMenuList
-    delete _config.permFuncField
-    delete _config.sysRoles
     delete _config.tableFields
 
     let param = {
@@ -411,10 +412,8 @@
           _permFuncField = _permFuncField.sort()
         }
 
-        let config = {...this.state.config, sysRoles: _sysRoles, permFuncField: _permFuncField}
-
-        this.setState({config})
-        this.props.modifyCustomMenu(config)
+        sessionStorage.setItem('sysRoles', JSON.stringify(_sysRoles))
+        sessionStorage.setItem('permFuncField', JSON.stringify(_permFuncField))
       }
     })
   }
@@ -576,8 +575,7 @@
 
 const mapDispatchToProps = (dispatch) => {
   return {
-    modifyCustomMenu: (customMenu) => dispatch(modifyCustomMenu(customMenu)),
-    initPermission: (sysRoles, permFuncField) => dispatch(initPermission(sysRoles, permFuncField))
+    modifyCustomMenu: (customMenu) => dispatch(modifyCustomMenu(customMenu))
   }
 }
 

--
Gitblit v1.8.0