From 4edbf8871d037354662c6683add27808c471948b Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 29 四月 2020 18:39:24 +0800
Subject: [PATCH] 2020-04-29

---
 src/templates/comtableconfig/index.jsx | 1585 +++++----------------------------------------------------
 1 files changed, 156 insertions(+), 1,429 deletions(-)

diff --git a/src/templates/comtableconfig/index.jsx b/src/templates/comtableconfig/index.jsx
index c3135c9..d9ecd7e 100644
--- a/src/templates/comtableconfig/index.jsx
+++ b/src/templates/comtableconfig/index.jsx
@@ -4,41 +4,33 @@
 import { is, fromJS } from 'immutable'
 import { DndProvider } from 'react-dnd'
 import HTML5Backend from 'react-dnd-html5-backend'
-import { Button, Card, Modal, Collapse, notification, Spin, Select, List, Icon, Empty, Switch, Tooltip, message } from 'antd'
+import { Button, Card, Modal, Collapse, notification, Spin, Icon, Switch, Tooltip } from 'antd'
 import moment from 'moment'
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
-import options from '@/store/options.js'
 import zhCN from '@/locales/zh-CN/model.js'
 import enUS from '@/locales/en-US/model.js'
-import { getSearchForm, getActionForm, getColumnForm } from '@/templates/zshare/formconfig'
-import { queryTableSql } from '@/utils/option.js'
 
-import ActionForm from './actionform'
+import TableComponent from '@/templates/sharecomponent/tablecomponent'
+import FieldsComponent from '@/templates/sharecomponent/fieldscomponent'
+// import ChartGroupComponent from '@/templates/sharecomponent/chartgroupcomponent'
+import SearchComponent from '@/templates/sharecomponent/searchcomponent'
+import ActionComponent from '@/templates/sharecomponent/actioncomponent'
+import ColumnComponent from '@/templates/sharecomponent/columncomponent'
+
 import SettingForm from './settingform'
 import TabForm from '@/templates/zshare/tabform'
-import SearchForm from '@/templates/zshare/searchform'
-import ColumnForm from '@/templates/zshare/columnform'
-import DragElement from '@/templates/zshare/dragelement'
-import ColspanForm from '@/templates/zshare/colspanform'
-import GridBtnForm from '@/templates/zshare/gridbtnform'
-import EditCard from '@/templates/zshare/editcard'
-import VerifyCard from '@/templates/zshare/verifycard'
-import VerifyCardExcelIn from '@/templates/zshare/verifycardexcelin'
-import VerifyCardExcelOut from '@/templates/zshare/verifycardexcelout'
-import VerifyCardPrint from '@/templates/zshare/verifycardprint'
 import MenuForm from '@/templates/zshare/menuform'
 import TabDragElement from '@/templates/zshare/tabdragelement'
 import EditComponent from '@/templates/zshare/editcomponent'
-import SourceElement from '@/templates/zshare/dragelement/source'
+import SourceElement from '@/templates/zshare/dragsource'
 import CreateFunc from '@/templates/zshare/createfunc'
 import CreateInterface from '@/templates/zshare/createinterface'
 import Source from './source'
 import './index.scss'
 
 const { Panel } = Collapse
-const { Option } = Select
 const { confirm } = Modal
 const CommonDict = (!localStorage.getItem('lang') || localStorage.getItem('lang') === 'zh-CN') ? zhCN : enUS
 
@@ -53,9 +45,7 @@
   state = {
     dict: CommonDict,        // 瀛楀吀
     config: null,            // 椤甸潰閰嶇疆
-    tableVisible: false,     // 鏁版嵁琛ㄥ瓧娈垫ā鎬佹
-    addType: '',             // 娣诲姞绫诲瀷-鎼滅储鏉′欢鎴栨樉绀哄垪
-    tableColumns: [],        // 琛ㄦ牸鏄剧ず鍒�
+    tableFields: [],         // 琛ㄦ牸鏄剧ず鍒�
     fields: null,            // 鎼滅储鏉′欢鍙婃樉绀哄垪锛屽彲閫夊瓧娈�
     menuformlist: null,      // 鍩烘湰淇℃伅琛ㄥ崟瀛楁
     formlist: null,          // 鎼滅储鏉′欢銆佹寜閽�佹樉绀哄垪琛ㄥ崟瀛楁
@@ -72,13 +62,12 @@
     originActions: null,     // 鍘熷鎸夐挳淇℃伅锛屼娇鐢ㄥ凡鏈夌敤鎴锋ā鏉�
     delActions: [],          // 鍒犻櫎鎸夐挳鍒楄〃
     copyActions: [],         // 澶嶅埗鎸夐挳缁�
-    showColumnName: false,   // 鏄剧ず鍒楀瓧娈靛悕鎺у埗
     tabviews: [],            // 鎵�鏈夋爣绛鹃〉
-    profileVisible: false,   // 楠岃瘉淇℃伅妯℃�佹
     optionLibs: null,        // 鑷畾涔変笅鎷夐�夐」搴�
     thawButtons: [],         // 宸查�夋嫨瑕佽В鍐荤殑鎸夐挳
     activeKey: '0',          // 榛樿灞曞紑鍩烘湰淇℃伅
-    sqlVerifing: false       // sql楠岃瘉
+    sqlVerifing: false,      // sql楠岃瘉
+    pasteContent: null       // 绮樿创閰嶇疆淇℃伅
   }
 
   /**
@@ -243,98 +232,6 @@
    * 3銆佽幏鍙栨墍鏈夋爣绛鹃〉淇℃伅
    */
   componentDidMount () {
-    let param = {
-      func: 'sPC_Get_SelectedList',
-      LText: queryTableSql,
-      obj_name: 'data',
-      arr_field: 'TbName,Remark'
-    }
-
-    param.LText = Utils.formatOptions(param.LText)
-    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
-    param.secretkey = Utils.encrypt(param.LText, param.timestamp)
-
-    Api.getSystemConfig(param).then(res => {
-      if (res.status) {
-        this.setState({
-          tables: res.data
-        })
-      } else {
-        notification.warning({
-          top: 92,
-          message: res.message,
-          duration: 5
-        })
-      }
-    })
-
-    let deffers = this.state.selectedTables.map(item => {
-      return new Promise(resolve => {
-        Api.getSystemConfig({func: 'sPC_Get_FieldName', TBName: item.TbName}).then(res => {
-          res.TBName = item.TbName
-          resolve(res)
-        })
-      })
-    })
-    Promise.all(deffers).then(response => {
-      let _columns = []
-      response.forEach(res => {
-        if (res.status) {
-          let tabmsg = {
-            tableName: res.TBName,
-            columns: res.FDName.map(item => {
-              let _type = item.FieldType.toLowerCase()
-              let _decimal = 0
-              if (/^nvarchar/.test(_type)) {
-                _type = 'text'
-              } else if (/^int/.test(_type)) {
-                _type = 'number'
-              } else if (/^decimal/.test(_type)) {
-                _decimal = _type.split(',')[1]
-                _decimal = parseInt(_decimal)
-                if (_decimal > 4) {
-                  _decimal = 4
-                }
-                _type = 'number'
-              } else if (/^decimal/.test(_type)) {
-                _decimal = _type.split(',')[1]
-                _decimal = parseInt(_decimal)
-                if (_decimal > 4) {
-                  _decimal = 4
-                }
-                _type = 'number'
-              } else if (/^datetime/.test(_type)) {
-                _type = 'datetime'
-              } else if (/^date/.test(_type)) {
-                _type = 'date'
-              } else {
-                _type = 'text'
-              }
-  
-              return {
-                field: item.FieldName,
-                label: item.FieldDec,
-                type: _type,
-                datatype: _type,
-                decimal: _decimal
-              }
-            })
-          }
-          _columns.push(tabmsg)
-        } else {
-          notification.warning({
-            top: 92,
-            message: res.message,
-            duration: 5
-          })
-        }
-      })
-
-      this.setState({
-        tableColumns: _columns
-      })
-    })
-
     Api.getSystemConfig({func: 'sPC_Get_UserTemp', TypeCharTwo: 'tab'}).then(res => {
       if (res.status) {
         this.setState({
@@ -413,144 +310,14 @@
   handleList = (type, list, card) => {
     const { config } = this.state
 
-    if (type === 'tabs') { // 鏍囩椤佃皟鏁撮『搴忔垨娣诲姞鍏冪礌
-      if (list.length > config[card.groupId].length) {
-        list = list.filter(item => !item.origin)
-        this.handleTab(card)
-      }
-
-      this.setState({config: {...config, [card.groupId]: list}})
-    } else {
-      if (list.length > config[type].length) {
-        list = list.filter(item => !item.origin)
-        if (type === 'search') {
-          this.handleSearch(card)
-        } else if (type === 'action') {
-          this.handleAction(card)
-        } else if (type === 'columns') {
-          this.handleColumn(card)
-        }
-      }
-
-      this.setState({
-        config: {...config, [type]: list }
-      })
+    if (list.length > config[card.groupId].length) {
+      list = list.filter(item => !item.origin)
+      this.handleTab(card)
     }
+
+    this.setState({config: {...config, [card.groupId]: list}})
   }
-
-  /**
-   * @description 鎼滅储鏉′欢缂栬緫锛岃幏鍙栨悳绱㈡潯浠惰〃鍗曚俊鎭�
-   */
-  handleSearch = (card) => {
-    this.setState({
-      modaltype: 'search',
-      card: card,
-      formlist: getSearchForm(card, this.props.sysRoles)
-    })
-  }
-
-  /**
-   * @description 鎸夐挳缂栬緫锛岃幏鍙栨寜閽〃鍗曚俊鎭�
-   */
-  handleAction = (card, type) => {
-    let ableField = this.props.permFuncField.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>
-    </div>
-
-    this.setState({
-      modaltype: type === 'copy' ? 'actionCopy' : 'actionEdit',
-      card: card,
-      formlist: getActionForm(card, functip, this.state.config, this.props.permFuncField)
-    })
-  }
-
-  /**
-   * @description 鏄剧ず鍒椾笌鍚堝苟鍒楃紪杈戯紝鑾峰彇琛ㄥ崟淇℃伅
-   */
-  handleColumn = (card) => {
-    const { menu } = this.props
-
-    if (card.type !== 'colspan') {
-      let menulist = menu.fstMenuList.map(item => {
-        return {
-          value: item.MenuID,
-          label: item.text,
-          isLeaf: false
-        }
-      })
-
-      if ((card.type === 'text' || card.type === 'number') && card.linkmenu && card.linkmenu.length > 0) {
-        let _param = {
-          func: 'sPC_Get_FunMenu',
-          ParentID: card.linkmenu[0],
-          systemType: options.systemType,
-          debug: 'Y'
-        }
-
-        this.setState({
-          loading: true
-        })
-    
-        Api.getSystemConfig(_param).then(result => {
-          if (result.status) {
-            menulist = menulist.map(item => {
-              if (item.value === card.linkmenu[0]) {
-                item.children = result.data.map(item => {
-                  let submenu = {
-                    value: item.ParentID,
-                    label: item.MenuNameP,
-                    children: item.FunMenu.map(cell => {
-                      return {
-                        value: cell.MenuID,
-                        label: cell.MenuName,
-                        MenuID: cell.MenuID,
-                        MenuName: cell.MenuName,
-                        MenuNo: cell.MenuNo,
-                        Ot: cell.Ot,
-                        PageParam: cell.PageParam,
-                        LinkUrl: cell.LinkUrl,
-                        disabled: cell.MenuID === menu.MenuID
-                      }
-                    })
-                  }
-
-                  return submenu
-                })
-              }
-              return item
-            })
-          } else {
-            notification.warning({
-              top: 92,
-              message: result.message,
-              duration: 5
-            })
-          }
-
-          this.setState({
-            loading: false,
-            modaltype: 'columns',
-            card: card,
-            formlist: getColumnForm(card, this.props.sysRoles, menulist)
-          })
-        })
-      } else {
-        this.setState({
-          modaltype: 'columns',
-          card: card,
-          formlist: getColumnForm(card, this.props.sysRoles, menulist)
-        })
-      }
-    } else {
-      this.setState({
-        modaltype: 'colspan',
-        card: card
-      })
-    }
-  }
-
+  
   /**
    * @description 鏍囩缂栬緫锛岀瓫閫夊彲閫夌殑涓嬬骇鏍囩涓庡凡鍏宠仈鐨勪笅绾ф爣绛�
    */
@@ -693,383 +460,38 @@
   }
 
   /**
-   * @description 鎿嶄綔鍒楃紪杈�
-   */
-  handleGridBtn = () => {
-    this.setState({
-      modaltype: 'gridbtn'
-    })
-  }
-
-  /**
-   * @description 鎼滅储銆佹寜閽�佹樉绀哄垪淇敼鍚庢彁浜や繚瀛�
-   * 1銆佹悳绱㈡潯浠朵繚瀛�
-   * 2銆佹寜閽寘鎷甯哥紪杈戝拰澶嶅埗锛屽鍒舵椂,鏈熬娣诲姞,濡傛寜閽负琛ㄥ崟锛堜繚瀛樿嚦鏁版嵁搴擄級锛屽鍒舵寜閽甶d瀛樹簬澶嶅埗鍒楄〃锛堢偣鍑讳笉淇濆瓨鏃跺垹闄わ級
-   * 3銆佸鎸夐挳浣嶇疆璁剧疆涓鸿〃鏍硷紝鍒欎慨鏀规搷浣滃垪鏄剧ず鐘舵��
+   * @description 鏍囩淇敼鍚庢彁浜や繚瀛�
    */
   handleSubmit = () => {
-    const { menu } = this.props
-    const { config, card, modaltype, optionLibs } = this.state
-
-    if (modaltype === 'search') {
-      this.searchFormRef.handleConfirm().then(res => {
-        if ( // 鏇存柊涓嬫媺瀛楀吀
-          (res.type === 'select' || res.type === 'multiselect' || res.type === 'link') &&
-          res.resourceType === '0' &&
-          res.options && res.options.length > 0
-        ) {
-          optionLibs.set(menu.MenuID + res.uuid, {
-            uuid: menu.MenuID + res.uuid,
-            label: res.label,
-            parname: menu.MenuName,
-            type: 'search',
-            options: res.options
-          })
-        }
-
-        let fieldrepet = false // 瀛楁閲嶅
-        let labelrepet = false // 鎻愮ず鏂囧瓧閲嶅
-
-        let _search = config.search.map(item => {
-          if (item.uuid !== res.uuid && res.field && item.field) {
-            if (item.field === res.field) {
-              fieldrepet = true
-            } else if (item.label === res.label) {
-              labelrepet = true
-            }
-          }
-
-          if (item.uuid === res.uuid) {
-            return res
-          } else {
-            return item
-          }
-        })
-
-        if (fieldrepet) {
-          notification.warning({
-            top: 92,
-            message: '瀛楁宸插瓨鍦紒',
-            duration: 5
-          })
-          return
-        } else if (labelrepet) {
-          notification.warning({
-            top: 92,
-            message: '鍚嶇О宸插瓨鍦紒',
-            duration: 5
-          })
-          return
-        }
-
-        _search = _search.filter(item => !item.origin)
-
-        if ((res.type === 'select' || res.type === 'multiselect' || res.type === 'link') && res.resourceType === '1' && /\s/.test(res.dataSource)) {
-          this.setState({
-            sqlVerifing: true
-          })
-  
-          let param = {
-            func: 's_debug_sql',
-            LText: res.dataSource
-          }
-          param.LText = Utils.formatOptions(param.LText)
-          param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
-          param.secretkey = Utils.encrypt(param.LText, param.timestamp)
-  
-          if (window.GLOB.mainSystemApi && res.database === 'sso') {
-            param.rduri = window.GLOB.mainSystemApi
-          }
-          
-          Api.getLocalConfig(param).then(result => {
-            if (result.status) {
-              this.setState({
-                sqlVerifing: false,
-                config: {...config, search: _search},
-                optionLibs: optionLibs,
-                modaltype: ''
-              })
-            } else {
-              this.setState({sqlVerifing: false})
-              
-              Modal.error({
-                title: result.message
-              })
-            }
-          })
+    const { config } = this.state
+    this.tabsFormRef.handleConfirm().then(res => {
+      let _tabgroup = config[res.groupId].map(item => {
+        if (item.uuid === res.uuid) {
+          return res
         } else {
-          this.setState({
-            config: {...config, search: _search},
-            optionLibs: optionLibs,
-            modaltype: ''
-          })
+          return item
         }
       })
-    } else if (modaltype === 'actionEdit' || modaltype === 'actionCopy') {
-      this.actionFormRef.handleConfirm().then(res => {
-        let _action = config.action.map(item => {
-          if (item.uuid === res.uuid) {
-            return res
-          } else {
-            return item
-          }
-        })
-        _action = _action.filter(item => !item.origin)
+      _tabgroup = _tabgroup.filter(item => !item.origin)
 
-        if (modaltype === 'actionCopy') {
-          _action.push(res)
-        }
-
-        // 澶嶅埗鎸夐挳鍓嶅悗鐨嗕负琛ㄥ崟鏃讹紝澶嶅埗琛ㄥ崟閰嶇疆淇℃伅锛宨d瀛樹簬澶嶅埗鍒楄〃
-        if (res.OpenType === 'pop' && card.originCard && card.originCard.OpenType === 'pop') {
-          Api.getSystemConfig({
-            func: 'sPC_Get_LongParam',
-            MenuID: card.originCard.uuid
-          }).then(result => {
-            if (result.status && result.LongParam) {
-              let _LongParam = ''
-
-              // 瑙f瀽閰嶇疆锛屼慨鏀规ā鎬佹鏍囬鍚嶇О
-              if (result.LongParam) {
-                try {
-                  _LongParam = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam)))
-                } catch (e) {
-                  console.warn('Parse Failure')
-                  _LongParam = ''
-                }
-              }
-              if (_LongParam && _LongParam.type === 'Modal') {
-                try {
-                  _LongParam.setting.title = res.label
-                  _LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(_LongParam)))
-                } catch {
-                  console.warn('Stringify Failure')
-                  _LongParam = ''
-                }
-              } else {
-                _LongParam = ''
-              }
-
-              let param = {
-                func: 'sPC_ButtonParam_AddUpt',
-                ParentID: menu.MenuID,
-                MenuID: res.uuid,
-                MenuNo: menu.MenuNo,
-                Template: 'Modal',
-                MenuName: res.label,
-                PageParam: JSON.stringify({Template: 'Modal'}),
-                LongParam: _LongParam
-              }
-              Api.getSystemConfig(param).then(response => {
-                if (!response.status) {
-                  notification.warning({
-                    top: 92,
-                    message: response.message,
-                    duration: 5
-                  })
-                } else {
-                  this.setState({
-                    copyActions: [...this.state.copyActions, res.uuid]
-                  })
-                }
-              })
-            }
-          })
-        } else if (
-          (res.OpenType === 'tab' || res.OpenType === 'blank') &&
-          card.originCard &&
-          (card.originCard.OpenType === 'tab' || card.originCard.OpenType === 'blank')
-        ) {
-          Api.getSystemConfig({
-            func: 'sPC_Get_LongParam',
-            MenuID: card.originCard.uuid
-          }).then(result => {
-            if (result.status && result.LongParam) {
-              let _LongParam = ''
-
-              // 瑙f瀽閰嶇疆锛屼慨鏀规ā鎬佹鏍囬鍚嶇О
-              if (result.LongParam) {
-                try {
-                  _LongParam = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam)))
-                } catch (e) {
-                  console.warn('Parse Failure')
-                  _LongParam = ''
-                }
-              }
-
-              let _temp = ''
-              if (_LongParam && _LongParam.type === 'FormTab') {
-                try {
-                  _LongParam.action = _LongParam.action.map(_btn => {
-                    _btn.uuid = Utils.getuuid()
-
-                    return _btn
-                  })
-                  _LongParam.tabgroups.forEach(_groupId => {
-                    _LongParam[_groupId] = _LongParam[_groupId].map(_tab => {
-                      _tab.uuid = Utils.getuuid()
-
-                      return _tab
-                    })
-                  })
-                  _LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(_LongParam)))
-                  _temp = 'FormTab'
-                } catch {
-                  console.warn('Stringify Failure')
-                  _LongParam = ''
-                }
-              } else {
-                _LongParam = ''
-              }
-
-              if (!_temp) return
-
-              let param = {
-                func: 'sPC_ButtonParam_AddUpt',
-                ParentID: menu.MenuID,
-                MenuID: res.uuid,
-                MenuNo: menu.MenuNo,
-                Template: _temp,
-                MenuName: res.label,
-                PageParam: JSON.stringify({Template: _temp}),
-                LongParam: _LongParam
-              }
-
-              Api.getSystemConfig(param).then(response => {
-                if (!response.status) {
-                  notification.warning({
-                    top: 92,
-                    message: response.message,
-                    duration: 5
-                  })
-                } else {
-                  this.setState({
-                    copyActions: [...this.state.copyActions, res.uuid]
-                  })
-                }
-              })
-            }
-          })
-        }
-
-        // 鍒ゆ柇鏄惁瀛樺湪鎿嶄綔鍒�
-        let _hasGridbtn = _action.filter(act => act.position === 'grid').length > 0
-        let _gridBtn = config.gridBtn
-
-        if (_gridBtn) {
-          _gridBtn.display = _hasGridbtn
-        } else {
-          _gridBtn = {
-            display: _hasGridbtn,
-            Align: 'center',
-            IsSort: 'false',
-            uuid: Utils.getuuid(),
-            label: this.state.dict['header.form.column.action'],
-            type: 'action',
-            style: 'button',
-            show: 'horizontal',
-            Width: 120
-          }
-        }
-
-        this.setState({
-          config: {...config, action: _action, gridBtn: _gridBtn},
-          modaltype: ''
-        })
+      this.setState({
+        config: {...config, [res.groupId]: _tabgroup},
+        modaltype: ''
       })
-    } else if (modaltype === 'columns' || modaltype === 'colspan') {
-      this.columnFormRef.handleConfirm().then(res => {
-        let fieldrepet = false // 瀛楁閲嶅
-        let labelrepet = false // 鎻愮ず鏂囧瓧閲嶅
-
-        let _columns = config.columns.map(item => {
-          if (item.uuid !== res.uuid && res.field && item.field) {
-            if (item.field === res.field) {
-              fieldrepet = true
-            } else if (item.label === res.label) {
-              labelrepet = true
-            }
-          }
-
-          if (item.uuid === res.uuid) {
-            return res
-          } else {
-            return item
-          }
-        })
-
-        if (fieldrepet) {
-          notification.warning({
-            top: 92,
-            message: '瀛楁宸插瓨鍦紒',
-            duration: 5
-          })
-          return
-        } else if (labelrepet) {
-          notification.warning({
-            top: 92,
-            message: '鍚嶇О宸插瓨鍦紒',
-            duration: 5
-          })
-          return
-        }
-        
-        _columns = _columns.filter(item => !item.origin)
-
-        this.setState({
-          config: {...config, columns: _columns},
-          modaltype: ''
-        })
-      })
-    } else if (modaltype === 'gridbtn') {
-      this.gridBtnFormRef.handleConfirm().then(res => {
-        this.setState({
-          config: {...config, gridBtn: res},
-          modaltype: ''
-        })
-      })
-    } else if (modaltype === 'tabs') {
-      this.tabsFormRef.handleConfirm().then(res => {
-        let _tabgroup = config[res.groupId].map(item => {
-          if (item.uuid === res.uuid) {
-            return res
-          } else {
-            return item
-          }
-        })
-        _tabgroup = _tabgroup.filter(item => !item.origin)
-
-        this.setState({
-          config: {...config, [res.groupId]: _tabgroup},
-          modaltype: ''
-        })
-      })
-    }
+    })
   }
 
   /**
    * @description 鍙栨秷淇濆瓨锛屽鏋滃厓绱犱负鏂版坊鍏冪礌锛屽垯浠庡簭鍒椾腑鍒犻櫎
    */
   editModalCancel = () => {
-    const { config, card, modaltype } = this.state
+    const { config, card } = this.state
 
     if (card && card.focus) {
       let _config = null
-      if (modaltype === 'search') {
-        let _search = config.search.filter(item => item.uuid !== card.uuid)
-        _config = {...config, search: _search}
-      } else if (modaltype === 'actionEdit') {
-        let _action = config.action.filter(item => item.uuid !== card.uuid)
-        _config = {...config, action: _action}
-      } else if (modaltype === 'columns' || modaltype === 'colspan') {
-        let _columns = config.columns.filter(item => item.uuid !== card.uuid)
-        _config = {...config, columns: _columns}
-      } else if (modaltype === 'tabs') {
-        let _tabgroup = config[card.groupId].filter(item => item.uuid !== card.uuid)
-        _config = {...config, [card.groupId]: _tabgroup}
-      } else {
-        _config = config
-      }
+
+      let _tabgroup = config[card.groupId].filter(item => item.uuid !== card.uuid)
+      _config = {...config, [card.groupId]: _tabgroup}
 
       this.setState({
         card: null,
@@ -1082,153 +504,6 @@
         modaltype: ''
       })
     }
-  }
-
-  /**
-   * @description 鎸夐挳-鍒涘缓瀛樺偍杩囩▼
-   */
-  creatFunc = () => {
-    const { menu } = this.props
-    const { config } = this.state
-
-    this.actionFormRef.handleConfirm().then(res => {
-      let btn = res         // 鎸夐挳淇℃伅
-      let newLText = ''     // 鍒涘缓瀛樺偍杩囩▼sql
-      let DelText = ''      // 鍒犻櫎瀛樺偍杩囩▼sql
-
-      // 鍒涘缓瀛樺偍杩囩▼锛屽繀椤诲~鍐欏唴閮ㄥ嚱鏁板悕
-      if (!btn.innerFunc) {
-        notification.warning({
-          top: 92,
-          message: '璇峰~鍐欏唴閮ㄥ嚱鏁帮紒',
-          duration: 5
-        })
-        return
-      }
-
-      new Promise(resolve => {
-        // 寮圭獥锛堣〃鍗曪級绫绘寜閽紝鍏堣幏鍙栨寜閽厤缃俊鎭紝濡傛灉灏氭湭閰嶇疆鎸夐挳鍒欎細鎶ラ敊骞剁粓姝€��
-        // 鑾峰彇淇℃伅鍚庣敓鎴愬垹闄ゅ拰鍒涘缓瀛樺偍杩囩▼鐨勮鍙�
-        if (btn.OpenType === 'pop') {
-          Api.getSystemConfig({
-            func: 'sPC_Get_LongParam',
-            MenuID: btn.uuid
-          }).then(res => {
-            let _LongParam = ''
-            if (res.status && res.LongParam) {
-              try {
-                _LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
-              } catch (e) {
-                console.warn('Parse Failure')
-                _LongParam = ''
-              }
-            }
-
-            if (_LongParam) {
-              let fields = []
-              if (_LongParam.groups.length > 0) {
-                _LongParam.groups.forEach(group => {
-                  fields = [...fields, ...group.sublist]
-                })
-              } else {
-                fields = _LongParam.fields
-              }
-
-              let _param = {
-                funcName: btn.innerFunc,
-                name: config.setting.tableName || '',
-                fields: fields,
-                menuNo: menu.MenuNo
-              }
-              newLText = Utils.formatOptions(Utils.getfunc(_param, btn, menu, config))
-              DelText = Utils.formatOptions(Utils.dropfunc(_param.funcName))
-              resolve(true)
-            } else {
-              notification.warning({
-                top: 92,
-                message: '寮圭獥锛堣〃鍗曪級鎸夐挳锛岃鍏堥厤缃〃鍗曚俊鎭紒',
-                duration: 5
-              })
-              resolve(false)
-            }
-          })
-        } else if (btn.OpenType === 'excelIn') {
-          if (btn.verify && btn.verify.sheet && btn.verify.columns && btn.verify.columns.length > 0) {
-            let _param = {
-              funcName: btn.innerFunc,
-              menuNo: menu.MenuNo
-            }
-            newLText = Utils.formatOptions(Utils.getexcelInfunc(_param, btn, menu))
-            DelText = Utils.formatOptions(Utils.dropfunc(_param.funcName))
-            resolve(true)
-          } else {
-            notification.warning({
-              top: 92,
-              message: '璇峰畬鍠勫鍏xcel楠岃瘉淇℃伅锛�',
-              duration: 5
-            })
-            resolve(false)
-          }
-        } else if (btn.OpenType === 'excelOut') {
-          let _param = {
-            innerFunc: btn.innerFunc
-          }
-
-          newLText = Utils.formatOptions(Utils.getTableFunc(_param, menu, config ))
-          DelText = Utils.formatOptions(Utils.dropfunc(btn.innerFunc))
-          resolve(true)
-        } else {
-          let _param = {
-            funcName: btn.innerFunc,
-            name: config.setting.tableName || '',
-            fields: '',
-            menuNo: menu.MenuNo
-          }
-          newLText = Utils.formatOptions(Utils.getfunc(_param, btn, menu, config))
-          DelText = Utils.formatOptions(Utils.dropfunc(_param.funcName))
-          resolve(true)
-        }
-      }).then(res => {
-        if (!res) return
-
-        this.refs.btnCreatFunc.exec(btn.innerFunc, newLText, DelText).then(result => {
-          if (result !== 'success') return
-
-          let _action = config.action.map(item => {
-            if (item.uuid === btn.uuid) {
-              return btn
-            } else {
-              return item
-            }
-          })
-          _action = _action.filter(item => !item.origin)
-
-          // 鍒ゆ柇鏄惁瀛樺湪鎿嶄綔鍒�
-          let _hasGridbtn = _action.filter(act => act.position === 'grid').length > 0
-          let _gridBtn = config.gridBtn
-
-          if (_gridBtn) {
-            _gridBtn.display = _hasGridbtn
-          } else {
-            _gridBtn = {
-              display: _hasGridbtn,
-              Align: 'center',
-              IsSort: 'false',
-              uuid: Utils.getuuid(),
-              label: this.state.dict['header.form.column.action'],
-              type: 'action',
-              style: 'button',
-              show: 'horizontal',
-              Width: 120
-            }
-          }
-
-          this.setState({
-            config: {...config, action: _action, gridBtn: _gridBtn}
-          })
-        })
-      })
-    })
   }
 
   /**
@@ -1259,27 +534,6 @@
             config: _config
           })
         }
-      })
-    })
-  }
-
-  /**
-   * @description 鍒涘缓鎸夐挳鎺ュ彛锛堝啓鍏ワ級
-   */
-  btnCreatInterface = () => {
-    const { menu } = this.props
-    const { config } = this.state
-
-    this.menuformRef.handleConfirm().then(res => {
-      this.actionFormRef.handleConfirm().then(result => {
-        let _menu = {
-          type: 'main',
-          MenuID: menu.MenuID,
-          menuName: res.menuName,
-          menuNo: res.menuNo
-        }
-
-        this.refs.btnCreatInterface.triggerInInterface(result, config, _menu)
       })
     })
   }
@@ -1335,21 +589,6 @@
             }
           })
           _config = {...config, [element.card.groupId]: _tabgroup}
-        } else {
-          let list = config[element.type].filter(item => {
-            if (item.uuid === element.card.uuid) {
-              return false
-            } else {
-              return true
-            }
-          })
-          
-          _config = {...config, [element.type]: list}
-
-          // 鍒犻櫎鎸夐挳鏃跺垽鏂槸鍚﹀瓨鍦ㄦ搷浣滃垪
-          if (element.type === 'action' && _config.gridBtn) {
-            _config.gridBtn.display = _config.action.filter(act => act.position === 'grid').length > 0
-          }
         }
 
         // 鍒犻櫎鎸夐挳鍏冪礌
@@ -1365,55 +604,6 @@
         })
       },
       onCancel() {}
-    })
-  }
-
-  /**
-   * @description 楠岃瘉淇℃伅閰嶇疆
-   */
-  profileAction = (element) => {
-    this.setState({
-      profileVisible: true,
-      card: element
-    })
-  }
-
-  /**
-   * @description 鎸夐挳鍙屽嚮瑙﹀彂瀛愰厤缃�
-   */
-  btnDoubleClick = (element) => {
-    if (!element.origin && (element.OpenType === 'pop' || element.OpenType === 'popview' || element.OpenType === 'blank' || element.OpenType === 'tab')) {
-      this.setSubConfig(element, 'button')
-    } else {
-      notification.warning({
-        top: 92,
-        message: '姝ゆ寜閽棤瀛愰厤缃」锛�',
-        duration: 5
-      })
-    }
-  }
-
-  /**
-   * @description 楠岃瘉淇℃伅淇濆瓨
-   */
-  verifySubmit = () => {
-    const { card } = this.state
-    let config = JSON.parse(JSON.stringify(this.state.config))
-
-    this.verifyRef.handleConfirm().then(res => {
-      config.action = config.action.map(item => {
-        if (item.uuid === card.uuid) {
-          item.verify = res
-        }
-  
-        return item
-      })
-  
-      this.setState({
-        profileVisible: false,
-        config: config,
-        card: ''
-      })
     })
   }
 
@@ -1523,7 +713,7 @@
       }
 
       let _LongParam = ''
-      let _config = {...config, tables: this.state.selectedTables, easyCode: res.easyCode}
+      let _config = {...config, easyCode: res.easyCode}
       let _pageParam = {...menu.PageParam, OpenType: res.opentype}
 
       // 鏈缃暟鎹簮鎴栨爣绛句笉鍚堟硶鏃讹紝鍚敤鐘舵�佷负false
@@ -2110,7 +1300,7 @@
       })
     } else {
       this.menuformRef.handleConfirm().then(res => {
-        let _config = {...config, tables: this.state.selectedTables, easyCode: res.easyCode}
+        let _config = {...config, easyCode: res.easyCode}
         let _pageParam = {...menu.PageParam, OpenType: res.opentype}
         let _originMenu = {
           ...originMenu,
@@ -2135,262 +1325,6 @@
         })
       })
     }
-  }
-
-  /**
-   * @description 绛涢�夊彲鐢ㄥ瓧娈甸泦
-   */
-  queryField = (type) => {
-    const {selectedTables, tableColumns, config} = this.state
-    // 鍒ゆ柇鏄惁宸查�夋嫨琛ㄥ悕
-    if (selectedTables.length === 0) {
-      notification.warning({
-        top: 92,
-        message: '璇烽�夋嫨琛ㄥ悕锛�',
-        duration: 5
-      })
-      return
-    }
-
-    // 琛ㄥ瓧娈甸泦杞负map鏁版嵁
-    let columns = new Map()
-    tableColumns.forEach(table => {
-      table.columns.forEach(column => {
-        columns.set(column.field, column)
-      })
-    })
-
-    if (type === 'search') {
-      // 娣诲姞鎼滅储鏉′欢锛屽瓧娈甸泦涓瓨鍦ㄦ悳绱㈡潯浠跺瓧娈碉紝浣跨敤鎼滅储鏉′欢瀵硅薄鏇挎崲瀛楁闆嗭紝璁剧疆鏁版嵁绫诲瀷
-      config.search.forEach(item => {
-        if (columns.has(item.field)) {
-          let _datatype = columns.get(item.field).datatype
-          columns.set(item.field, {...item, selected: true, datatype: _datatype})
-        }
-      })
-    } else if (type === 'columns') {
-      // 娣诲姞鏄剧ず鍒楋紝瀛楁闆嗕腑瀛樺湪鏄剧ず鍒楀瓧娈碉紝浣跨敤鏄剧ず鍒楀璞℃浛鎹㈠瓧娈甸泦锛岃缃暟鎹被鍨�
-      config.columns.forEach(item => {
-        if (columns.has(item.field)) {
-          let _datatype = columns.get(item.field).datatype
-          columns.set(item.field, {...item, selected: true, datatype: _datatype})
-        }
-      })
-    }
-
-    // 鏄剧ず瀛楁闆嗗脊绐�
-    this.setState({
-      addType: type,
-      tableVisible: true,
-      fields: [...columns.values()]
-    })
-  }
-
-  /**
-   * @description 娣诲姞瀛楁闆�
-   */
-  addFieldSubmit = () => {
-    const {addType, config} = this.state
-
-    // 瀛楁闆嗕负绌猴紝鍏抽棴寮圭獥
-    if (!this.state.fields || this.state.fields.length === 0) {
-      this.setState({
-        tableVisible: false,
-        addType: ''
-      })
-    }
-
-    // 鑾峰彇宸查�夊瓧娈甸泦鍚�
-    let cards = this.refs.searchcard.state.selectCards
-
-    if (cards.length === 0) {
-      notification.warning({
-        top: 92,
-        message: '璇烽�夋嫨娣诲姞瀛楁',
-        duration: 5
-      })
-      return
-    }
-
-    let columnsMap = new Map()
-    cards.forEach(card => {
-      columnsMap.set(card.field, card)
-    })
-
-    if (addType === 'search') {
-      let _search = config.search.filter(item => !item.origin)
-
-      // 閲嶇疆鍘熸湁鎼滅礌鏉′欢
-      _search = _search.map(item => {
-        if (columnsMap.has(item.field)) {
-          let cell = columnsMap.get(item.field)
-
-          if (cell.type !== item.type) { // 鏁版嵁绫诲瀷淇敼
-            if (cell.type === 'select') {
-              item.match = '='
-            } else if (cell.type === 'daterange') {
-              item.match = 'between'
-            } else {
-              cell.type = 'text'
-              item.match = 'like'
-            }
-            
-            item.type = cell.type
-            item.initval = ''
-          }
-          columnsMap.delete(item.field)
-        }
-        return item
-      })
-      
-      let _columns = [...columnsMap.values()]
-
-      // 椤哄簭娣诲姞鏂板鎼滅储
-      _columns.forEach(item => {
-        let _match = ''
-        if (item.type === 'select') {
-          _match = '='
-        } else if (item.type === 'daterange') {
-          _match = 'between'
-        } else {
-          _match = 'like'
-        }
-
-        let newcard = {
-          uuid: Utils.getuuid(),
-          label: item.label,
-          field: item.field,
-          initval: '',
-          type: item.type || 'text',
-          resourceType: '0',
-          setAll: 'false',
-          options: [],
-          orderType: 'asc',
-          match: _match,
-          display: 'dropdown'
-        }
-
-        _search.push(newcard)
-      })
-
-      this.setState({
-        config: {...config, search: _search}
-      })
-    } else {
-      let _columns = config.columns.filter(item => !item.origin)
-
-      // 閲嶇疆鍘熸湁鏄剧ず鍒楃被鍨�
-      _columns = _columns.map(item => {
-        if (columnsMap.has(item.field)) {
-          let cell = columnsMap.get(item.field)
-
-          if (cell.type) {
-            item.type = cell.type
-          }
-
-          columnsMap.delete(item.field)
-        }
-        return item
-      })
-
-      let _cols = [...columnsMap.values()]
-
-      // 娣诲姞鏄剧ず鍒�
-      _cols.forEach(item => {
-        let newcard = {
-          uuid: Utils.getuuid(),
-          Align: 'left',
-          label: item.label,
-          field: item.field,
-          Hide: 'false',
-          IsSort: item.type === 'picture' ? 'false' : 'true',
-          type: item.type,
-          Width: 120
-        }
-
-        _columns.push(newcard)
-      })
-
-      this.setState({
-        config: {...config, columns: _columns}
-      })
-    }
-
-    notification.success({
-      top: 92,
-      message: '鎿嶄綔鎴愬姛',
-      duration: 2
-    })
-  }
-
-  /**
-   * @description 琛ㄥ悕鍒囨崲鏃讹紝娣诲姞琛ㄥ悕锛屾柊澧炴椂鏌ヨ琛ㄧ浉鍏冲瓧娈�
-   */
-  onTableChange = (value) => {
-    const {tables, selectedTables, tableColumns} = this.state
-
-    let _table = tables.filter(item => item.TbName === value)[0]
-    let isSelected = !!selectedTables.filter(cell => cell.TbName === value)[0]
-    if (!isSelected) {
-      this.setState({
-        selectedTables: [...selectedTables, _table]
-      })
-      Api.getSystemConfig({func: 'sPC_Get_FieldName', TBName: value}).then(res => {
-        if (res.status) {
-          let tabmsg = {
-            tableName: _table.name,
-            columns: res.FDName.map(item => {
-              let _type = item.FieldType.toLowerCase()
-              let _decimal = 0
-              if (/^nvarchar/.test(_type)) {
-                _type = 'text'
-              } else if (/^int/.test(_type)) {
-                _type = 'number'
-              } else if (/^decimal/.test(_type)) {
-                _decimal = _type.split(',')[1]
-                _decimal = parseInt(_decimal)
-                _type = 'number'
-              } else if (/^datetime/.test(_type)) {
-                _type = 'datetime'
-              } else if (/^date/.test(_type)) {
-                _type = 'date'
-              } else {
-                _type = 'text'
-              }
-
-              return {
-                field: item.FieldName,
-                label: item.FieldDec,
-                type: _type,
-                datatype: _type,
-                decimal: _decimal
-              }
-            })
-          }
-          this.setState({
-            tableColumns: [...tableColumns, tabmsg]
-          })
-        } else {
-          notification.warning({
-            top: 92,
-            message: res.message,
-            duration: 5
-          })
-        }
-      })
-    }
-  }
-
-  /**
-   * @description 鍒犻櫎琛ㄥ悕浠ュ強琛ㄧ浉鍏冲瓧娈�
-   */
-  deleteTable = (table) => {
-    const {selectedTables, tableColumns} = this.state
-
-    this.setState({
-      selectedTables: selectedTables.filter(item => item.TbName !== table.TbName),
-      tableColumns: tableColumns.filter(item => item.tableName !== table.TbName)
-    })
   }
 
   /**
@@ -2664,40 +1598,6 @@
   }
 
   /**
-   * @description 鏄剧ず闅愯棌鏄剧ず鍒楀瓧娈靛悕
-   */
-  onColumnNameChange = () => {
-    const { showColumnName, config } = this.state
-
-    if (!showColumnName) {
-      let fields = []
-      config.columns.forEach(col => {
-        if (col.field) {
-          fields.push(col.field)
-        }
-      })
-
-      fields = fields.join(',')
-
-      let textArea = document.createElement('textarea')
-      textArea.value = fields
-      document.body.appendChild(textArea)
-      textArea.select()
-
-      try {
-        document.execCommand('copy')
-        document.body.removeChild(textArea)
-      } catch (err) {
-        document.body.removeChild(textArea)
-      }
-    }
-    
-    this.setState({
-      showColumnName: !showColumnName
-    })
-  }
-
-  /**
    * @description 澧炲姞鏍囩椤靛垎缁�
    */
   addTabGroup = () => {
@@ -2766,27 +1666,6 @@
     })
   }
 
-  copycolumn = () => {
-    const { config } = this.state
-
-    let oInput = document.createElement('input')
-    let val = {
-      copyType: 'columns',
-      columns: config.columns
-    }
-
-    oInput.value = window.btoa(window.encodeURIComponent(JSON.stringify(val)))
-    document.body.appendChild(oInput)
-    oInput.select()
-    document.execCommand('Copy')
-    oInput.className = 'oInput'
-    oInput.style.display = 'none'
-
-    message.success('澶嶅埗鎴愬姛銆�')
-
-    document.body.removeChild(oInput)
-  }
-
   /**
    * @description 閫夋嫨涓嶄繚瀛樻椂锛屽鏈夊鍒舵寜閽紝鍒欏垹闄�
    */
@@ -2801,6 +1680,9 @@
     this.props.handleView()
   }
 
+  /**
+   * @description 缂栬緫鍔熻兘瀹屾垚鏇存柊锛屽寘鎷В鍐绘寜閽�佺矘璐淬�佹浛鎹㈢瓑
+   */
   updateConfig = (res) => {
     if (res.type === 'thaw') {
       this.setState({
@@ -2808,32 +1690,90 @@
         config: res.config
       })
     } else if (res.type === 'paste') {
-      if (res.copyType === 'action') {
-        this.handleAction(res.content, 'copy')
-      } else if (res.copyType === 'columns') {
+      this.setState({
+        pasteContent: res.content
+      }, () => {
         this.setState({
-          config: res.config
+          pasteContent: null
         })
-      }
+      })
     }
+  }
+
+  /**
+   * @description 鏇存柊鎼滅储鏉′欢閰嶇疆淇℃伅
+   */
+  updatesearch = (config, options) => {
+    const { optionLibs } = this.state
+
+    this.setState({
+      config: config,
+      optionLibs: options || optionLibs
+    })
+  }
+
+  /**
+   * @description 鏇存柊鎸夐挳閰嶇疆淇℃伅
+   */
+  updateaction = (config, copyId, delcard) => {
+    const { copyActions, delActions } = this.state
+
+    this.setState({
+      config: config,
+      copyActions: copyId ? [...copyActions, copyId] : copyActions,
+      delActions: delcard ? [...delActions, delcard] : delActions
+    })
+  }
+
+  /**
+   * @description 鏇存柊鏄剧ず鍒楅厤缃俊鎭�
+   */
+  updatecolumn = (config) => {
+    this.setState({
+      config: config
+    })
+  }
+
+  /**
+   * @description 鏇存柊鍥捐〃缁勯厤缃俊鎭�
+   */
+  updatechartgroup = (config, _chartview) => {
+    this.setState({
+      config: config,
+      chartview: _chartview
+    })
+  }
+  
+  /**
+   * @description 鏇存柊甯哥敤琛ㄤ俊鎭紝蹇嵎娣诲姞鍚庢洿鏂伴厤缃俊鎭�
+   */
+  updatetable = (config, fields) => {
+    const { tableFields } = this.state
+
+    this.setState({
+      config: config,
+      tableFields: fields ? fields : tableFields
+    })
+  }
+
+  /**
+   * @description 鎵归噺娣诲姞锛屾洿鏂伴厤缃俊鎭�
+   */
+  updatefield = (config) => {
+    this.setState({
+      config: config
+    })
   }
 
   render () {
     const { modaltype, activeKey, config } = this.state
 
-    const configAction = config.action.filter(_action =>
-      !_action.origin && (_action.OpenType === 'pop' || _action.OpenType === 'popview' || _action.OpenType === 'blank' || _action.OpenType === 'tab')
-    )
+    const confActions = config.action.filter(_action => !_action.origin && ['pop', 'popview', 'blank', 'tab'].includes(_action.OpenType))
 
     let configTabs = []
     config.tabgroups.forEach(group => {
       configTabs.push(...config[group])
     })
-
-    let hasbtncrtinter = false
-    if (modaltype === 'actionEdit' && config.setting.interType === 'inner' && !config.setting.innerFunc && config.setting.dataresource) {
-      hasbtncrtinter = true
-    }
 
     return (
       <div className="common-table-board">
@@ -2843,7 +1783,7 @@
           <div className="tools">
             <Collapse accordion defaultActiveKey={activeKey} bordered={false} onChange={(key) => this.setState({activeKey: key})}>
               {/* 鍩烘湰淇℃伅 */}
-              <Panel forceRender={true} header={this.state.dict['header.menu.basedata']} key="0" id="common-basedata">
+              <Panel forceRender={true} header={this.state.dict['header.menu.basedata']} key="0" id="main-basedata">
                 {/* 鑿滃崟淇℃伅 */}
                 <MenuForm
                   dict={this.state.dict}
@@ -2851,42 +1791,12 @@
                   wrappedComponentRef={(inst) => this.menuformRef = inst}
                 />
                 {/* 琛ㄥ悕娣诲姞 */}
-                <div className="ant-col ant-form-item-label">
-                  <label>
-                    <Tooltip placement="topLeft" title="姝ゅ鍙互娣诲姞閰嶇疆鐩稿叧鐨勫父鐢ㄨ〃锛屽湪娣诲姞鎼滅储鏉′欢鍜屾樉绀哄垪鏃讹紝鍙�氳繃宸ュ叿鏍忎腑鐨勬坊鍔犳寜閽紝鎵归噺娣诲姞琛ㄦ牸鐩稿叧瀛楁銆�">
-                      <Icon type="question-circle" />
-                      {this.state.dict['header.menu.table.add']}
-                    </Tooltip>
-                  </label>
-                </div>
-                <Select
-                  showSearch
-                  className="tables"
-                  style={{ width: '100%' }}
-                  optionFilterProp="children"
-                  value={this.state.dict['header.menu.table.placeholder']}
-                  onChange={this.onTableChange}
-                  showArrow={false}
-                  getPopupContainer={() => document.getElementById('common-basedata')}
-                  filterOption={(input, option) => {
-                    return option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
-                      option.props.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
-                  }}
-                > 
-                  {this.state.tables.map((table, index) => (
-                    <Option key={index} title={table.TbName} value={table.TbName}>{table.Remark}</Option>
-                  ))}
-                </Select>
-                {this.state.selectedTables.length > 0 && <List
-                  size="small"
-                  bordered
-                  dataSource={this.state.selectedTables}
-                  renderItem={(item, index) => <List.Item key={index} title={item.Remark + ' (' + item.TbName + ')'}>
-                    {item.Remark + ' (' + item.TbName + ')'}
-                    <Icon type="close" onClick={() => this.deleteTable(item)}/>
-                    <div className="bottom-mask"></div>
-                  </List.Item>}
-                />}
+                <TableComponent
+                  config={config}
+                  containerId="main-basedata"
+                  selectedTables={config.tables || []}
+                  updatetable={this.updatetable}
+                />
               </Panel>
               {/* 鎼滅储鏉′欢娣诲姞 */}
               <Panel header={this.state.dict['header.menu.search']} key="1">
@@ -2895,7 +1805,12 @@
                     return (<SourceElement key={index} content={item}/>)
                   })}
                 </div>
-                <Button type="primary" block onClick={() => this.queryField('search')}>{this.state.dict['header.menu.search.add']}</Button>
+                <FieldsComponent
+                  config={config}
+                  type="search"
+                  tableFields={this.state.tableFields}
+                  updatefield={this.updatefield}
+                />
               </Panel>
               {/* 鎸夐挳娣诲姞 */}
               <Panel header={this.state.dict['header.menu.action']} key="2">
@@ -2905,7 +1820,7 @@
                   })}
                 </div>
                 <div className="config-btn">
-                  {configAction.length > 0 ?
+                  {confActions.length > 0 ?
                     <p className="config-btn-title">
                       <Tooltip placement="topLeft" title="鐐瑰嚮鎸夐挳锛屽彲瀹屾垚鎴栨煡鐪嬫寜閽厤缃俊鎭��">
                         <Icon type="question-circle" />
@@ -2914,7 +1829,7 @@
                     </p> : null
                   }
                 </div>
-                {configAction.map((item, index) => {
+                {confActions.map((item, index) => {
                   return (
                     <div key={index}>
                       <Button
@@ -2934,7 +1849,12 @@
                     return (<SourceElement key={index} content={item}/>)
                   })}
                 </div>
-                <Button type="primary" block onClick={() => this.queryField('columns')}>{this.state.dict['header.menu.column.add']}</Button>
+                <FieldsComponent
+                  config={config}
+                  type="columns"
+                  tableFields={this.state.tableFields}
+                  updatefield={this.updatefield}
+                />
               </Panel>
               {/* 娣诲姞鏍囩 */}
               <Panel header={this.state.dict['header.menu.tab']} key="4">
@@ -2982,56 +1902,32 @@
               </div>
             } style={{ width: '100%' }}>
               <Icon type="setting" onClick={this.changeSetting} />
-              <div className="search-list">
-                <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃悳绱€�嬩腑锛岄�夋嫨瀵瑰簲鎼滅储妗嗘嫋鑷虫澶勬坊鍔狅紱鎴栫偣鍑绘寜閽�婃坊鍔犳悳绱㈡潯浠躲�嬫壒閲忔坊鍔狅紝閫夋嫨鎵归噺娣诲姞鏃讹紝闇�鎻愬墠閫夋嫨浣跨敤琛ㄣ��">
-                  <Icon type="question-circle" />
-                </Tooltip>
-                <DragElement
-                  type="search"
-                  list={config.search}
-                  handleList={this.handleList}
-                  handleMenu={this.handleSearch}
-                  deleteMenu={this.deleteElement}
-                  placeholder={this.state.dict['header.form.search.placeholder']}
-                />
-              </div>
-              <div className="action-list" id="action-list">
-                <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃寜閽�嬩腑锛岄�夋嫨瀵瑰簲绫诲瀷鐨勬寜閽嫋鑷虫澶勬坊鍔狅紝濡傞�夋嫨鎸夐挳绫诲瀷涓鸿〃鍗曘�佹柊鏍囩椤电瓑鍚湁閰嶇疆椤甸潰鐨勬寜閽紝鍙湪宸︿晶宸ュ叿鏍�-鎸夐挳-鍙厤缃寜閽锛岀偣鍑绘寜閽畬鎴愮浉鍏抽厤缃�傛敞锛氬綋璁剧疆鎸夐挳鏄剧ず浣嶇疆涓鸿〃鏍兼椂锛屾樉绀哄垪浼氬鍔犳搷浣滃垪銆�">
-                  <Icon type="question-circle" />
-                </Tooltip>
-                <DragElement
-                  type="action"
-                  list={config.action}
-                  setting={config.setting}
-                  handleList={this.handleList}
-                  handleMenu={this.handleAction}
-                  copyElement={(val) => this.handleAction(val, 'copy')}
-                  deleteMenu={this.deleteElement}
-                  profileMenu={this.profileAction}
-                  doubleClickCard={this.btnDoubleClick}
-                  placeholder={this.state.dict['header.form.action.placeholder']}
-                />
-              </div>
+              <SearchComponent
+                menu={{MenuID: this.props.menu.MenuID, MenuName: this.props.menu.MenuName}}
+                config={config}
+                pasteContent={this.state.pasteContent}
+                sysRoles={this.props.sysRoles}
+                optionLibs={this.state.optionLibs}
+                updatesearch={this.updatesearch}
+              />
+              <ActionComponent
+                type="main"
+                menu={{MenuID: this.props.menu.MenuID, MenuName: this.props.menu.MenuName, MenuNo: this.props.menu.MenuNo}}
+                config={config}
+                tabs={this.state.tabviews}
+                pasteContent={this.state.pasteContent}
+                usefulFields={this.props.permFuncField}
+                setSubConfig={(_btn) => this.setSubConfig(_btn, 'button')}
+                updateaction={this.updateaction}
+              />
               {/* 鏄剧ず鍒� */}
-              <div className="column-list">
-                <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃樉绀哄垪銆嬩腑锛岄�夋嫨瀵瑰簲绫诲瀷鐨勬樉绀哄垪鎷栬嚦姝ゅ娣诲姞锛涙垨鐐瑰嚮銆婃坊鍔犳樉绀哄垪銆嬫寜閽壒閲忔坊鍔狅紝閫夋嫨鎵归噺娣诲姞鏃讹紝闇�鎻愬墠閫夋嫨浣跨敤琛ㄣ�傛敞锛氭坊鍔犲悎骞跺垪鏃讹紝闇�璁剧疆鍙�夊垪銆�">
-                  <Icon type="question-circle" />
-                </Tooltip>
-                {config.columns && config.columns.length > 0 ? <Icon className="column-copy" title="copy" type="copy" onClick={this.copycolumn} /> : null}
-                <Switch checkedChildren="寮�" unCheckedChildren="鍏�" defaultChecked={this.state.showColumnName} onChange={this.onColumnNameChange} />
-                <DragElement
-                  type="columns"
-                  list={config.columns}
-                  setting={config.setting}
-                  gridBtn={config.gridBtn}
-                  handleList={this.handleList}
-                  handleMenu={this.handleColumn}
-                  deleteMenu={this.deleteElement}
-                  handleGridBtn={this.handleGridBtn}
-                  showfield={this.state.showColumnName}
-                  placeholder={this.state.dict['header.form.column.placeholder']}
-                />
-              </div>
+              <ColumnComponent
+                config={config}
+                menu={this.props.menu}
+                sysRoles={this.props.sysRoles}
+                pasteContent={this.state.pasteContent}
+                updatecolumn={this.updatecolumn}
+              />
               {/* 鏍囩缁� */}
               {config.tabgroups.map((groupId, index) => {
                 return (
@@ -3060,105 +1956,6 @@
             </Card>
           </div>
         </DndProvider>
-        {/* 缂栬緫鎼滅储鏉′欢 */}
-        <Modal
-          title={this.state.dict['header.modal.search.edit']}
-          visible={modaltype === 'search'}
-          width={750}
-          maskClosable={false}
-          onOk={this.handleSubmit}
-          confirmLoading={this.state.sqlVerifing}
-          onCancel={this.editModalCancel}
-          destroyOnClose
-        >
-          <SearchForm
-            dict={this.state.dict}
-            card={this.state.card}
-            inputSubmit={this.handleSubmit}
-            optionLibs={this.state.optionLibs}
-            formlist={this.state.formlist}
-            wrappedComponentRef={(inst) => this.searchFormRef = inst}
-          />
-        </Modal>
-        {/* 缂栬緫鎸夐挳锛氬鍒躲�佺紪杈� */}
-        <Modal
-          title={modaltype === 'actionEdit' ? this.state.dict['header.modal.action.edit'] : this.state.dict['header.modal.action.copy']}
-          visible={modaltype === 'actionEdit' || modaltype === 'actionCopy'}
-          width={800}
-          maskClosable={false}
-          onCancel={this.editModalCancel}
-          footer={[
-            hasbtncrtinter ? <CreateInterface key="interface" dict={this.state.dict} ref="btnCreatInterface" trigger={this.btnCreatInterface}/> : null,
-            modaltype === 'actionEdit' ? <CreateFunc key="create" dict={this.state.dict} ref="btnCreatFunc" trigger={this.creatFunc}/> : null,
-            <Button key="cancel" onClick={this.editModalCancel}>{this.state.dict['header.cancel']}</Button>,
-            <Button key="confirm" type="primary" onClick={this.handleSubmit}>{this.state.dict['model.confirm']}</Button>
-          ]}
-          destroyOnClose
-        >
-          <ActionForm
-            dict={this.state.dict}
-            card={this.state.card}
-            tabs={this.state.tabviews}
-            formlist={this.state.formlist}
-            inputSubmit={this.handleSubmit}
-            setting={config.setting}
-            wrappedComponentRef={(inst) => this.actionFormRef = inst}
-          />
-        </Modal>
-        {/* 鏄剧ず鍒楃紪杈� */}
-        <Modal
-          title={this.state.dict['header.modal.column.edit']}
-          visible={modaltype === 'columns'}
-          width={750}
-          maskClosable={false}
-          onOk={this.handleSubmit}
-          onCancel={this.editModalCancel}
-          destroyOnClose
-        >
-          <ColumnForm
-            dict={this.state.dict}
-            card={this.state.card}
-            MenuID={this.props.menu.MenuID}
-            inputSubmit={this.handleSubmit}
-            formlist={this.state.formlist}
-            wrappedComponentRef={(inst) => this.columnFormRef = inst}
-          />
-        </Modal>
-        {/* 鍚堝苟鍒楃紪杈� */}
-        <Modal
-          title={this.state.dict['header.modal.colspan.edit']}
-          visible={modaltype === 'colspan'}
-          width={700}
-          maskClosable={false}
-          onOk={this.handleSubmit}
-          onCancel={this.editModalCancel}
-          destroyOnClose
-        >
-          <ColspanForm
-            dict={this.state.dict}
-            card={this.state.card}
-            inputSubmit={this.handleSubmit}
-            columns={config.columns}
-            wrappedComponentRef={(inst) => this.columnFormRef = inst}
-          />
-        </Modal>
-        {/* 鎿嶄綔鍒楃紪杈� */}
-        <Modal
-          title={this.state.dict['header.modal.gridbtn.edit']}
-          visible={modaltype === 'gridbtn'}
-          width={750}
-          maskClosable={false}
-          onOk={this.handleSubmit}
-          onCancel={this.editModalCancel}
-          destroyOnClose
-        >
-          <GridBtnForm
-            dict={this.state.dict}
-            inputSubmit={this.handleSubmit}
-            card={config.gridBtn}
-            wrappedComponentRef={(inst) => this.gridBtnFormRef = inst}
-          />
-        </Modal>
         {/* 鏍囩缂栬緫 */}
         <Modal
           title={this.state.dict['header.modal.tabs.edit']}
@@ -3178,76 +1975,6 @@
             inputSubmit={this.handleSubmit}
             wrappedComponentRef={(inst) => this.tabsFormRef = inst}
           />
-        </Modal>
-        {/* 鏍规嵁瀛楁鍚嶆坊鍔犳樉绀哄垪鍙婃悳绱㈡潯浠� */}
-        <Modal
-          wrapClassName="common-table-fields-modal"
-          title={this.state.dict['model.edit']}
-          visible={this.state.tableVisible}
-          width={'65vw'}
-          maskClosable={false}
-          style={{minWidth: '900px', maxWidth: '1200px'}}
-          cancelText={this.state.dict['header.close']}
-          onOk={this.addFieldSubmit}
-          onCancel={() => { // 鍙栨秷娣诲姞
-            this.setState({
-              tableVisible: false,
-              addType: ''
-            })
-          }}
-          destroyOnClose
-        >
-          {this.state.addType && this.state.fields.length > 0 ?
-            <EditCard data={this.state.fields} ref="searchcard" type={this.state.addType} dict={this.state.dict} /> : null
-          }
-          {(!this.state.fields || this.state.fields.length === 0) &&
-            <Empty />
-          }
-        </Modal>
-        {/* 鎸夐挳浣跨敤绯荤粺瀛樺偍杩囩▼鏃讹紝楠岃瘉淇℃伅妯℃�佹 */}
-        <Modal
-          wrapClassName="common-table-fields-modal"
-          title={'楠岃瘉淇℃伅'}
-          maskClosable={false}
-          visible={this.state.profileVisible}
-          width={'75vw'}
-          style={{minWidth: '900px', maxWidth: '1200px'}}
-          okText={this.state.dict['header.submit']}
-          onOk={this.verifySubmit}
-          onCancel={() => { this.setState({ profileVisible: false }) }}
-          destroyOnClose
-        >
-          {this.state.card && !this.state.card.execMode && this.state.card.OpenType !== 'excelIn' && this.state.card.OpenType !== 'excelOut' ?
-            <VerifyCard
-              card={this.state.card}
-              dict={this.state.dict}
-              columns={config.columns}
-              wrappedComponentRef={(inst) => this.verifyRef = inst}
-            /> : null
-          }
-          {this.state.card && this.state.card.execMode ?
-            <VerifyCardPrint
-              card={this.state.card}
-              dict={this.state.dict}
-              columns={config.columns}
-              wrappedComponentRef={(inst) => this.verifyRef = inst}
-            /> : null
-          }
-          {this.state.card && this.state.card.OpenType === 'excelIn' ?
-            <VerifyCardExcelIn
-              card={this.state.card}
-              dict={this.state.dict}
-              columns={config.columns}
-              wrappedComponentRef={(inst) => this.verifyRef = inst}
-            /> : null
-          }
-          {this.state.card && this.state.card.OpenType === 'excelOut' ?
-            <VerifyCardExcelOut
-              card={this.state.card}
-              dict={this.state.dict}
-              wrappedComponentRef={(inst) => this.verifyRef = inst}
-            /> : null
-          }
         </Modal>
         {/* 璁剧疆鍏ㄥ眬閰嶇疆鍙婂垪琛ㄦ暟鎹簮 */}
         <Modal

--
Gitblit v1.8.0