From bdfec77e57c90ad4750e08ee822818ce991b019f Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期日, 26 十一月 2023 14:11:58 +0800
Subject: [PATCH] 2023-11-26

---
 src/menu/datasource/verifycard/index.jsx |  433 ++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 291 insertions(+), 142 deletions(-)

diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx
index a8e1e0f..a8e84f7 100644
--- a/src/menu/datasource/verifycard/index.jsx
+++ b/src/menu/datasource/verifycard/index.jsx
@@ -2,13 +2,13 @@
 import PropTypes from 'prop-types'
 import { fromJS } from 'immutable'
 import { Form, Tabs, Popconfirm, notification, Modal, Typography, Spin, message, Button, Input } from 'antd'
-import { StopOutlined, CheckCircleOutlined, EditOutlined, SwapOutlined, DeleteOutlined, CopyOutlined, BorderOutlined, SnippetsOutlined } from '@ant-design/icons'
+import { StopOutlined, CheckCircleOutlined, TableOutlined, EditOutlined, SwapOutlined, DeleteOutlined, CopyOutlined, BorderOutlined, SnippetsOutlined } from '@ant-design/icons'
 import moment from 'moment'
 import md5 from 'md5'
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
-
+import { formatSearch, joinMainSearchkey } from '@/utils/utils-custom.js'
 import asyncComponent from '@/utils/asyncComponent'
 import ColForm from './columnform'
 import CustomScriptsForm from './customscript'
@@ -22,6 +22,7 @@
 const { TabPane } = Tabs
 const { Paragraph } = Typography
 const { Search } = Input
+const { confirm } = Modal
 
 const CodeMirror = asyncComponent(() => import('@/templates/zshare/codemirror'))
 const FieldsComponent = asyncComponent(() => import('@/templates/sharecomponent/fieldscomponent'))
@@ -29,7 +30,8 @@
 
 class VerifyCard extends Component {
   static propTpyes = {
-    config: PropTypes.object,        // 缁勪欢閰嶇疆淇℃伅
+    config: PropTypes.object,
+    updRecord: PropTypes.func
   }
 
   state = {
@@ -38,11 +40,11 @@
     subColumns: [],
     activeKey: 'setting',
     loading: false,
+    colLoading: false,
     searchKey: '',
     initsql: '',          // sql楠岃瘉鏃跺彉閲忓0鏄庡強璧嬪��
     usefulfields: '',
     defaultsql: '',       // 榛樿Sql
-    defaultSearch: '',
     systemScripts: [],
     median: {},
     visible: false,
@@ -50,12 +52,14 @@
     reload: false,
     script: null,
     scriptValue: '',
+    cols: null,
     colColumns: [
       {
         title: '鍚嶇О',
         dataIndex: 'label',
         inputType: 'input',
         editable: true,
+        searchable: true,
         width: '28%'
       },
       {
@@ -64,6 +68,8 @@
         inputType: 'input',
         editable: true,
         unique: true,
+        strict: true,
+        searchable: true,
         copy: true,
         rules: [{
           pattern: /^[\u4E00-\u9FA50-9a-zA-Z_]*$/ig,
@@ -84,6 +90,7 @@
           { value: 'Nvarchar(512)', text: 'Nvarchar(512)' },
           { value: 'Nvarchar(1024)', text: 'Nvarchar(1024)' },
           { value: 'Nvarchar(2048)', text: 'Nvarchar(2048)' },
+          { value: 'Nvarchar(4000)', text: 'Nvarchar(4000)' },
           { value: 'Nvarchar(max)', text: 'Nvarchar(max)' },
           { value: 'Int', text: 'Int' },
           { value: 'Decimal(18,0)', text: 'Decimal(18,0)' },
@@ -116,7 +123,7 @@
       {
         title: 'SQL',
         dataIndex: 'sql',
-        width: '72%',
+        width: '65%',
         render: (text) => {
           let title = text.match(/^\s*\/\*.+\*\//)
           title = title && title[0] ? title[0] : ''
@@ -131,9 +138,21 @@
         }
       },
       {
+        title: '鎵ц浣嶇疆',
+        dataIndex: 'position',
+        width: '10%',
+        render: (text, record) => {
+          if (record.position === 'back') {
+            return <span style={{color: '#1890ff'}}>鍚庣疆</span>
+          } else {
+            return <span style={{color: '#26C281'}}>鍓嶇疆</span>
+          }
+        }
+      },
+      {
         title: '鐘舵��',
         dataIndex: 'status',
-        width: '13%',
+        width: '10%',
         render: (text, record) => record.status === 'false' ?
           (
             <div style={{color: '#ff4d4f'}}>
@@ -193,16 +212,32 @@
       })
     }
 
-    let _search = this.formatSearch(search)
-    _search = Utils.joinMainSearchkey(_search)
-
-    _search = _search.replace(/@\$@/ig, '')
-    _search = _search ? 'where ' + _search : ''
     let columns = config.columns ? fromJS(config.columns).toJS() : []
     let subColumns = config.subColumns ? fromJS(config.subColumns).toJS() : []
 
     columns.reverse()
     subColumns.reverse()
+
+    columns.forEach(col => {
+      if (!col.datatype) return
+      if (/^nvarchar/.test(col.datatype)) {
+        col.datatype = col.datatype.replace(/^nvarchar/, 'Nvarchar')
+      } else if (/^decimal/.test(col.datatype)) {
+        col.datatype = col.datatype.replace(/^decimal/, 'Decimal')
+      } else if (/^int/.test(col.datatype)) {
+        col.datatype = col.datatype.replace(/^int/, 'Int')
+      }
+    })
+    subColumns.forEach(col => {
+      if (!col.datatype) return
+      if (/^nvarchar/.test(col.datatype)) {
+        col.datatype = col.datatype.replace(/^nvarchar/, 'Nvarchar')
+      } else if (/^decimal/.test(col.datatype)) {
+        col.datatype = col.datatype.replace(/^decimal/, 'Decimal')
+      } else if (/^int/.test(col.datatype)) {
+        col.datatype = col.datatype.replace(/^int/, 'Int')
+      }
+    })
 
     this.setState({
       scripts,
@@ -210,9 +245,9 @@
       subColumns: subColumns,
       setting: _setting,
       median: _setting,
-      searches: search,
-      defaultSearch: _search,
-      searchKey: ''
+      searches: formatSearch(search),
+      searchKey: '',
+      debugId: _setting.debugId || ''
     })
 
     this.getsysScript()
@@ -242,7 +277,7 @@
 
     _sParam.open_key = Utils.encryptOpenKey(_sParam.secretkey, _sParam.timestamp) // 浜戠鏁版嵁楠岃瘉
     
-    Api.getSystemConfig(_sParam).then(res => {
+    Api.getCloudConfig(_sParam).then(res => {
       if (res.status) {
         let _scripts = res.data.map(item => {
           return {
@@ -357,6 +392,7 @@
     if (values.uuid) {
       scripts = scripts.map(item => {
         if (item.uuid === values.uuid) {
+          values.$index = item.$index || ''
           return values
         } else {
           return item
@@ -367,7 +403,7 @@
     }
 
     return new Promise((resolve, reject) => {
-      this.sqlverify(resolve, reject, false, scripts)
+      this.sqlverify(resolve, reject, 'script', scripts)
     })
   }
 
@@ -408,15 +444,8 @@
           search = [...search, ...mainSearch]
         }
 
-        let _search = this.formatSearch(search)
-        _search = Utils.joinMainSearchkey(_search)
-
-        _search = _search.replace(/@\$@/ig, '')
-        _search = _search ? 'where ' + _search : ''
-
         this.setState({
-          searches: search,
-          defaultSearch: _search,
+          searches: formatSearch(search),
           setting: res
         }, () => {
           this.sqlverify(() => { // 楠岃瘉鎴愬姛
@@ -431,7 +460,7 @@
               loading: false
             })
             this.getdefaultSql()
-          }, true)
+          }, 'change')
         })
       }, () => {
         this.setState({loading: false})
@@ -495,9 +524,11 @@
   }
 
   getdefaultSql = () => {
-    const { columns, setting, defaultSearch } = this.state
+    const { columns, setting, searches } = this.state
     let defaultsql = ''
     let arr_field = columns.map(col => col.field).join(',')
+
+    let _search = joinMainSearchkey(searches)
 
     if (setting.dataresource) {
       let _dataresource = setting.dataresource
@@ -506,64 +537,15 @@
         _dataresource = '(' + _dataresource + ') tb'
       }
 
-      defaultsql = `select top @pageSize@ ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${_dataresource} ${defaultSearch}) tmptable where rows > (@pageSize@ * (@pageIndex@ - 1)) order by tmptable.rows`
+      defaultsql = `select top @pageSize@ ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${_dataresource} ${_search}) tmptable where rows > (@pageSize@ * (@pageIndex@ - 1)) order by tmptable.rows`
     }
 
     this.setState({defaultsql})
   }
 
-  /**
-   * @description 鑾峰彇鍏ㄩ儴鎼滅储鏉′欢
-   * @param {Array} searches 鎼滅储鏉′欢鏁扮粍
-   */
-  formatSearch (searches) {
-    if (!searches) return []
-
-    let newsearches = []
-    searches.forEach(search => {
-      if (!search.field) return
-      
-      let item = {
-        key: search.field,
-        match: search.match,
-        type: search.type,
-        label: search.label,
-        value: search.initval,
-        required: search.required === 'true'
-      }
-      if (item.type === 'group') {
-        item.key = search.datefield
-        item.type = 'daterange'
-        item.match = 'between'
-        item.value = [moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')].join(',')
-
-        newsearches.push(item)
-        return
-      } else if (item.type === 'date') {
-        item.value = moment().format('YYYY-MM-DD')
-      } else if (item.type === 'datemonth') {
-        item.value = moment().format('YYYY-MM')
-      } else if (item.type === 'dateweek') {
-        item.value = moment().format('YYYY-MM-DD')
-      } else if (item.type === 'daterange') {
-        item.value = [moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')].join(',')
-      } else if (item.type === 'range') {
-
-      } else if (item.type === 'multiselect' || (item.type === 'checkcard' && search.multiple === 'true')) {
-        item.type = 'multi'
-        item.value = '@$@'
-      } else {
-        item.value = '@$@'
-      }
-      newsearches.push(item)
-    })
-
-    return newsearches
-  }
-
   submitDataSource = () => {
     const { config, mainSearch } = this.props
-    const { activeKey, setting, columns, subColumns, scripts } = this.state
+    const { activeKey, setting, columns, subColumns, scripts, cols } = this.state
 
     if (config.subtype === 'dualdatacard') {
       let arr = columns.map(col => col.field.toLowerCase())
@@ -593,18 +575,11 @@
             search = [...search, ...mainSearch]
           }
 
-          let _search = this.formatSearch(search)
-          _search = Utils.joinMainSearchkey(_search)
-
-          _search = _search.replace(/@\$@/ig, '')
-          _search = _search ? 'where ' + _search : ''
-
           this.setState({
-            searches: search,
-            defaultSearch: _search,
+            searches: formatSearch(search),
             setting: res
           }, () => {
-            this.sqlverify(() => { resolve({setting: res, columns, subColumns, scripts }) }, reject, false)
+            this.sqlverify(() => { resolve({setting: res, columns, subColumns, scripts, cols }) }, reject, 'submit')
           })
         }, () => {
           reject()
@@ -619,7 +594,7 @@
           reject()
           return
         }
-        this.sqlverify(() => { resolve({setting, columns, subColumns, scripts }) }, reject, false)
+        this.sqlverify(() => { resolve({setting, columns, subColumns, scripts, cols }) }, reject, 'submit')
       } else if (activeKey === 'subcolumns') {
         if (this.subdatasource && this.subdatasource.state.editingKey) {
           notification.warning({
@@ -630,7 +605,7 @@
           reject()
           return
         }
-        this.sqlverify(() => { resolve({setting, columns, subColumns, scripts }) }, reject, false)
+        this.sqlverify(() => { resolve({setting, columns, subColumns, scripts, cols }) }, reject, 'submit')
       } else if (activeKey === 'scripts') {
         let _loading = false
         if (this.scriptsForm && this.scriptsForm.state.editItem) {
@@ -649,20 +624,21 @@
           return
         }
 
-        this.sqlverify(() => { resolve({setting, columns, subColumns, scripts }) }, reject, false)
+        this.sqlverify(() => { resolve({setting, columns, subColumns, scripts, cols }) }, reject, 'submit')
       }
     })
   }
 
-  sqlverify = (resolve, reject, change = false, testScripts) => {
-    const { columns, setting, scripts, searches, defaultSearch, debugId } = this.state
+  sqlverify = (resolve, reject, type, testScripts) => {
+    const { config } = this.props
+    const { columns, setting, scripts, searches, debugId, subColumns } = this.state
 
     let _scripts = scripts.filter(item => item.status !== 'false')
 
     if (testScripts) {
       _scripts = testScripts.filter(item => item.status !== 'false')
     }
-    if (!change && setting.interType === 'system' && setting.execute === 'false' && _scripts.length === 0) {
+    if (type !== 'change' && setting.interType === 'system' && setting.execute === 'false' && _scripts.length === 0) {
       notification.warning({
         top: 92,
         message: '涓嶆墽琛岄粯璁ql鏃讹紝璇锋坊鍔犺嚜瀹氫箟鑴氭湰锛�',
@@ -672,16 +648,38 @@
       return
     }
 
-    if (change && columns.length === 0) {
+    if (type === 'change' && columns.length === 0) {
       reject()
       return
     }
 
     if ((setting.interType === 'system' && setting.execute !== 'false') || _scripts.length > 0) {
-      let timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
-      let r = SettingUtils.getDebugSql(setting, _scripts, columns, searches, defaultSearch, timestamp)
+      let _columns = columns
+      if (config.subtype === 'dualdatacard') {
+        _columns = [...columns, ...subColumns]
+      }
+      let r = SettingUtils.getDebugSql(setting, _scripts, _columns, searches, config.type)
 
       let _debugId = md5(r.sql)
+      
+      if (r.custompage && setting.laypage === 'true' && _columns.findIndex(col => col.field === 'mk_total') === -1) {
+        if (config.subtype !== 'basetable') {
+          Modal.warning({
+            title: `鏁版嵁婧愭垨鑷畾涔夎剼鏈腑浣跨敤鑷畾涔夊垎椤垫帓搴忔椂锛岃鍦ㄥ瓧娈甸泦涓坊鍔� mk_total銆俙,
+            okText: '鐭ラ亾浜�',
+            onOk: () => {
+              reject()
+            }
+          })
+          return
+        } else {
+          notification.warning({
+            top: 92,
+            message: '鏁版嵁婧愭垨鑷畾涔夎剼鏈腑浣跨敤鑷畾涔夊垎椤垫帓搴忔椂锛岃鍦ㄦ樉绀哄垪涓坊鍔� mk_total銆�',
+            duration: 5
+          })
+        }
+      }
 
       if (debugId === _debugId) {
         resolve()
@@ -696,50 +694,82 @@
         })
       }
 
-      let param = {
-        func: 's_debug_sql',
-        exec_type: 'y',
-        LText: r.sql
-      }
-      param.LText = Utils.formatOptions(param.LText)
-      param.timestamp = timestamp
-      param.secretkey = Utils.encrypt('', timestamp)
-
-      let sumParam = null
-      if (r.sumSql) {
-        sumParam = {
-          func: 's_debug_sql',
-          exec_type: 'y',
-          LText: r.sumSql
-        }
-        sumParam.LText = Utils.formatOptions(sumParam.LText)
-        sumParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
-        sumParam.secretkey = Utils.encrypt('', sumParam.timestamp)
-      }
-      
-      Api.genericInterface(param).then(result => {
-        if (result.status) {
-          if (sumParam) {
-            Api.genericInterface(sumParam).then(res => {
-              if (res.status) {
-                this.setState({debugId: _debugId})
-                resolve()
-              } else {
-                reject()
-                Modal.error({
-                  title: res.message
+      Api.sDebug(r.sql).then(result => {
+        if (result.status || result.ErrCode === '-2') {
+          this.setState({debugId: _debugId}, () => {
+            resolve()
+          })
+        } else {
+          if (/鍒楀悕\s*'[a-zA-Z0-9_-]+'\s*鏃犳晥/.test(result.message)) {
+            let tail = ''
+            let type = ''
+            if (setting.execute !== 'false' && setting.queryType !== 'statistics') {
+              searches.forEach(item => {
+                if (item.forbid) return
+                item.key.split(',').forEach(field => {
+                  if (new RegExp(`'${field}'`).test(result.message)) {
+                    tail = field
+                    type = '鎼滅储鏉′欢'
+                  }
                 })
+              })
+            }
+
+            if (!tail && setting.order) {
+              let keys = setting.order.replace(/\s+(asc|desc)/ig, '').replace(/\s+/g, '')
+              keys.split(',').forEach(field => {
+                if (new RegExp(`'${field}'`).test(result.message)) {
+                  tail = field
+                  type = '鎺掑簭'
+                }
+              })
+            }
+
+            if (!tail) {
+              columns.forEach(item => {
+                if (new RegExp(`'${item.field}'`).test(result.message)) {
+                  tail = item.field
+                  if (config.subtype === 'basetable') {
+                    type = '鏄剧ず鍒�'
+                  } else {
+                    type = '瀛楁闆�'
+                  }
+                }
+              })
+              if (!tail && config.subtype === 'dualdatacard') {
+                subColumns.forEach(item => {
+                  if (new RegExp(`'${item.field}'`).test(result.message)) {
+                    tail = item.field
+                    type = '瀛愯〃瀛楁闆�'
+                  }
+                })
+              }
+            }
+
+            if (tail) {
+              result.message = result.message.replace(/ROLLBACK TRANSACTION 璇锋眰娌℃湁瀵瑰簲鐨� BEGIN TRANSACTION銆�/, '')
+              result.message = <>{result.message}<span style={{color: 'red'}}>娉細{type}涓瓨鍦ㄥ瓧娈祘tail}</span></>
+            }
+          }
+          if (type === 'submit') {
+            Modal.confirm({
+              title: result.message,
+              okText: '鐭ラ亾浜�',
+              cancelText: '寮哄埗淇濆瓨',
+              onOk: () => {
+                reject()
+              },
+              onCancel() {
+                resolve()
               }
             })
           } else {
-            this.setState({debugId: _debugId})
-            resolve()
+            reject()
+            Modal.error({
+              title: result.message,
+              okText: '鐭ラ亾浜�'
+            })
           }
-        } else {
-          reject()
-          Modal.error({
-            title: result.message
-          })
         }
       })
     } else {
@@ -780,7 +810,7 @@
 
     this.setState({loading: true})
 
-    this.sqlverify(() => {this.setState({scripts: _scripts, script: null, scriptValue: '', loading: false})}, () => {this.setState({loading: false})}, false, _scripts)
+    this.sqlverify(() => {this.setState({scripts: _scripts, script: null, scriptValue: '', loading: false})}, () => {this.setState({loading: false})}, 'script', _scripts)
   }
 
   updatefields = (columns) => {
@@ -894,18 +924,39 @@
           this.setState({reload: false})
         })
       }
+
+      this.props.updRecord({...res.data.setting})
     })
+  }
+
+  updateStatus = (res) => {
+    this.setState({median: {...res}})
+    this.props.updRecord({...res})
   }
 
   copyColumns = () => {
     const { columns } = this.state
     let m = []
     let n = []
+    let s = []
 
     columns.forEach(col => {
-      m.push(`${col.field}(${col.label})`)
-      n.push(col.field)
+      m.unshift(`${col.field} ${col.datatype}`)
+      n.unshift(col.field)
+      if (/decimal|int/ig.test(col.datatype)) {
+        s.unshift(`${Math.round(Math.random() * 10)} as ${col.field}`)
+      } else if (/datetime/.test(col.datatype)) {
+        s.unshift(`'${moment().format('YYYY-MM-DD HH:mm:ss')}' as ${col.field}`)
+      } else if (/date/.test(col.datatype)) {
+        s.unshift(`'${moment().format('YYYY-MM-DD')}' as ${col.field}`)
+      } else {
+        s.unshift(`'${col.label}' as ${col.field}`)
+      }
     })
+
+    if (window.debugger) {
+      console.info('select ' + s.join(', '))
+    }
 
     let oInput = document.createElement('input')
     oInput.value = `/*${m.join(',')}*/
@@ -924,7 +975,7 @@
     let n = []
 
     subColumns.forEach(col => {
-      m.push(`${col.field}(${col.label})`)
+      m.push(`${col.field} ${col.datatype}`)
       n.push(col.field)
     })
 
@@ -937,6 +988,92 @@
     document.body.removeChild(oInput)
 
     message.success('澶嶅埗鎴愬姛銆�')
+  }
+
+  addProcess = () => {
+    const { config } = this.props
+    const { columns } = this.state
+
+    if (config.subtype === 'dualdatacard') return
+
+    let fields = []
+    let cols = []
+    let _cols = columns.map(item => item.field.toLowerCase())
+
+    if (!_cols.includes('remark_w')) {
+      fields.push({ uuid: Utils.getuuid(), label: '澶囨敞', field: 'remark_w', datatype: 'Nvarchar(50)', fieldlength: 50, type: 'text' })
+      cols.push({ uuid: Utils.getuuid(), Width: 120, label: '澶囨敞', field: 'remark_w', type: 'text', Hide: 'false', IsSort: 'false', fieldlength: 50 })
+    }
+    if (!_cols.includes('statusname_w')) {
+      fields.push({ uuid: Utils.getuuid(), label: '鐘舵��', field: 'statusname_w', datatype: 'Nvarchar(50)', fieldlength: 50, type: 'text' })
+      cols.push({ uuid: Utils.getuuid(), Width: 120, label: '鐘舵��', field: 'statusname_w', type: 'text', Hide: 'false', IsSort: 'false', fieldlength: 50 })
+    }
+    if (!_cols.includes('works_flow_param')) {
+      fields.push({ uuid: Utils.getuuid(), label: '娴佺▼鍙傛暟', field: 'works_flow_param', datatype: 'Nvarchar(512)', fieldlength: 512, type: 'text' })
+      cols.push({ uuid: Utils.getuuid(), Width: 120, label: '娴佺▼鍙傛暟', field: 'works_flow_param', type: 'text', Hide: 'true', IsSort: 'false', fieldlength: 512 })
+    }
+
+    if (fields.length === 0) return
+
+    const that = this
+
+    if (config.subtype !== 'basetable') {
+      cols = null
+    }
+
+    confirm({
+      content: cols ? '鏄剧ず鍒椾腑鏄惁娣诲姞宸ヤ綔娴佸瓧娈碉紵' : '瀛楁闆嗕腑鏄惁娣诲姞宸ヤ綔娴佸瓧娈碉紵',
+      onOk() {
+        that.setState({
+          cols: cols,
+          columns: [...fields, ...columns]
+        })
+      },
+      onCancel() {}
+    })
+  }
+
+  updateColumns = (tableName) => {
+    const { config } = this.props
+    const { colLoading, columns } = this.state
+
+    if (colLoading || columns.length > 0) return
+
+    if (config.subtype === 'basetable') return
+
+    let param = {func: 'sPC_Get_FieldName', TBName: tableName}
+    if (window.GLOB.cloudServiceApi) { // 涓斿瓨鍦ㄤ簯绔湴鍧�
+      param.rduri = window.GLOB.cloudServiceApi
+      param.userid = sessionStorage.getItem('CloudUserID') || ''
+      param.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
+    }
+
+    this.setState({colLoading: true})
+
+    Api.getSystemCacheConfig(param).then(result => {
+      this.setState({colLoading: false})
+      if (!result.status) return
+
+      let fields = []
+      result.FDName.forEach(item => {
+        if (item.f_type !== 0) return
+
+        if (/nvarchar|int|decimal/ig.test(item.FieldType) || item.FieldType === 'date' || item.FieldType === 'datetime') {
+          fields.unshift({
+            uuid: Utils.getuuid(),
+            label: item.FieldDec,
+            field: item.FieldName,
+            datatype: item.FieldType.toLowerCase()
+          })
+        }
+      })
+
+      if (fields.length === 0) return
+
+      this.setState({columns: fields})
+    }, () => {
+      this.setState({colLoading: false})
+    })
   }
 
   /**
@@ -968,7 +1105,9 @@
               subColumns={subColumns}
               setting={setting}
               scripts={scripts}
-              updateStatus={(res) => this.setState({median: {...res}})}
+              updateStatus={this.updateStatus}
+              updateColumns={this.updateColumns}
+              addProcess={this.addProcess}
               wrappedComponentRef={(inst) => this.settingForm = inst}
             /> : null}
           </TabPane>
@@ -985,7 +1124,15 @@
               updatefield={this.updatefields}
             />
             <EditTable actions={['edit', 'move', 'copy', 'del', 'clear']} searchKey={searchKey} type="datasourcefield" wrappedComponentRef={(inst) => this.datasource = inst} data={columns} columns={colColumns} onChange={(columns) => this.setState({columns})}/>
-          </TabPane> : null}
+          </TabPane> : <TabPane tab={
+            <span>
+              瀛楁闆�<TableOutlined style={{marginLeft: '5px', fontSize: '12px'}} />
+              {columns.length ? <span className="count-tip">{columns.length}</span> : null}
+            </span>
+          } key="columns">
+            <div className="base-table-columns"></div>
+            <EditTable actions={[]} searchKey={searchKey} type="datasourcefield" data={columns} columns={colColumns}/>
+          </TabPane>}
           {config.subtype === 'dualdatacard' ? <TabPane tab={
             <span>
               瀛愯〃瀛楁闆�
@@ -1004,8 +1151,8 @@
             <span>
               鑷畾涔夎剼鏈�
               {scripts.length ? <span className="count-tip">{scripts.length}</span> : null}
-              {config.type !== 'interface' && activeKey === 'setting' ? <CopyOutlined title="澶嶅埗鏁版嵁婧�" className="mk-copy-datasource" onClick={(e) => {e.stopPropagation();this.copyDatasource()}}/> : null}
-              {config.type !== 'interface' && activeKey === 'setting' ? <SnippetsOutlined title="瀵煎叆鏁版嵁婧�" className="mk-paste-datasource" onClick={(e) => {e.stopPropagation();this.setState({pvisible: true})}}/> : null}
+              {activeKey === 'setting' ? <CopyOutlined title="澶嶅埗鏁版嵁婧�" className="mk-copy-datasource" onClick={(e) => {e.stopPropagation();this.copyDatasource()}}/> : null}
+              {activeKey === 'setting' ? <SnippetsOutlined title="瀵煎叆鏁版嵁婧�" className="mk-paste-datasource" onClick={(e) => {e.stopPropagation();this.setState({pvisible: true})}}/> : null}
               {activeKey === 'columns' ? <CopyOutlined title="浠ラ�楀彿鎷兼帴褰㈠紡澶嶅埗瀛楁" className="mk-copy-fields" onClick={(e) => {e.stopPropagation();this.copyColumns()}}/> : null}
               {activeKey === 'subcolumns' ? <CopyOutlined title="浠ラ�楀彿鎷兼帴褰㈠紡澶嶅埗瀛楁" className="mk-copy-fields" onClick={(e) => {e.stopPropagation();this.copySubColumns()}}/> : null}
               {activeKey === 'subcolumns' || activeKey === 'columns' ? <span onClick={(e) => {e.stopPropagation()}}><Search className="mk-search-fields" defaultValue={searchKey} allowClear onSearch={(val, e) => {e.stopPropagation();this.setState({searchKey: val})}} /></span> : null}
@@ -1023,6 +1170,7 @@
               this.setState({visible: true, script: null, scriptValue: ''})
             }}/> : null}
             <CustomScriptsForm
+              type={config.type}
               setting={setting}
               searches={searches}
               defaultsql={defaultsql}
@@ -1031,6 +1179,7 @@
               systemScripts={this.state.systemScripts}
               scriptsChange={this.scriptsChange}
               scriptSubmit={this.scriptSubmit}
+              addProcess={this.addProcess}
               wrappedComponentRef={(inst) => this.scriptsForm = inst}
             />
             <EditTable actions={['move']} data={scripts} columns={scriptsColumns} onChange={this.changeScripts}/>

--
Gitblit v1.8.0