From 326aa6b3effaccc71cfe0775d47b0f29eb3695a6 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期日, 25 八月 2024 00:36:40 +0800
Subject: [PATCH] 2024-08-25

---
 src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx |  602 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 389 insertions(+), 213 deletions(-)

diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
index a99543e..502137b 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
@@ -1,15 +1,15 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { fromJS } from 'immutable'
-import { Form, Tabs, Row, Col, Button, notification, Modal, message, InputNumber, Spin, Typography, Popconfirm } from 'antd'
+import { Form, Tabs, Row, Col, Button, Input, notification, Modal, message, InputNumber, Spin, Typography, Popconfirm } from 'antd'
 import { EditOutlined, StopOutlined, CheckCircleOutlined, SwapOutlined, DeleteOutlined } from '@ant-design/icons'
-import moment from 'moment'
 import md5 from 'md5'
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
 import SettingUtils from './utils.jsx'
 import ColumnForm from './columnform'
+import OtherForm from './otherform'
 import DataSource from './datasource'
 import CustomScript from './customscript'
 import asyncComponent from '@/utils/asyncComponent'
@@ -17,6 +17,7 @@
 
 const { TabPane } = Tabs
 const { confirm } = Modal
+const { Search } = Input
 const { Paragraph } = Typography
 const EditTable = asyncComponent(() => import('@/templates/zshare/editTable'))
 
@@ -30,6 +31,9 @@
     verify: {},
     debugId: '',
     activeKey: 'setting',
+    visible: false,
+    line: null,
+    searchKey: '',
     excelColumns: [
       {
         title: '瀛楁',
@@ -37,6 +41,8 @@
         inputType: 'input',
         editable: true,
         unique: true,
+        searchable: true,
+        copy: true,
         width: '16%'
       },
       {
@@ -44,6 +50,7 @@
         dataIndex: 'Text',
         inputType: 'input',
         editable: true,
+        searchable: true,
         unique: true,
         width: '16%'
       },
@@ -63,7 +70,8 @@
         inputType: 'select',
         editable: true,
         required: false,
-        width: '12%',
+        keyCol: true,
+        width: '10%',
         render: (text) => {
           if (text === 'image') {
             return '鍥剧墖'
@@ -80,41 +88,12 @@
         ]
       },
       {
-        title: '鍙栫粷瀵瑰��',
-        dataIndex: 'abs',
-        inputType: 'radio',
-        editable: true,
-        required: false,
-        width: '12%',
-        render: (text) => {
-          if (text === 'true') {
-            return '鏄�'
-          } else {
-            return '鍚�'
-          }
-        },
-        options: [
-          {value: 'true', text: '鏄�'},
-          {value: 'false', text: '鍚�'}
-        ]
-      },
-      {
-        title: '灏忔暟浣�',
-        dataIndex: 'decimal',
-        inputType: 'number',
-        min: 0,
-        max: 18,
-        editable: true,
-        required: false,
-        width: '12%'
-      },
-      {
         title: '瀵煎嚭',
         dataIndex: 'output',
         inputType: 'radio',
         editable: true,
         required: false,
-        width: '12%',
+        width: '10%',
         render: (text) => {
           if (text !== 'false') {
             return '鏄�'
@@ -138,6 +117,123 @@
           {value: 'true', text: '鏄�'},
           {value: 'false', text: '鍚�'}
         ]
+      },
+      // {
+      //   title: '鍙栫粷瀵瑰��',
+      //   dataIndex: 'abs',
+      //   inputType: 'radio',
+      //   editable: true,
+      //   required: false,
+      //   keyVals: ['number'],
+      //   width: '10%',
+      //   render: (text, record) => {
+      //     if (record.type !== 'number') return ''
+
+      //     if (text === 'true') {
+      //       return '鏄�'
+      //     } else {
+      //       return '鍚�'
+      //     }
+      //   },
+      //   options: [
+      //     {value: 'true', text: '鏄�'},
+      //     {value: 'false', text: '鍚�'}
+      //   ]
+      // },
+      // {
+      //   title: '0鍊煎鍑�',
+      //   dataIndex: 'noValue',
+      //   inputType: 'radio',
+      //   editable: true,
+      //   required: false,
+      //   keyVals: ['number'],
+      //   width: '10%',
+      //   render: (text, record) => {
+      //     if (record.type !== 'number') return ''
+
+      //     if (text !== 'false') {
+      //       return '鏄�'
+      //     } else {
+      //       return '鍚�'
+      //     }
+      //   },
+      //   options: [
+      //     {value: 'true', text: '鏄�'},
+      //     {value: 'false', text: '鍚�'}
+      //   ]
+      // },
+      {
+        title: '灏忔暟浣�',
+        dataIndex: 'decimal',
+        inputType: 'number',
+        min: 0,
+        max: 18,
+        editable: true,
+        required: false,
+        keyVals: ['number'],
+        width: '12%',
+        render: (text, record) => record.type === 'number' ? text : ''
+      },
+      {
+        title: '鍏朵粬',
+        dataIndex: 'other',
+        required: false,
+        width: '18%',
+        render: (_, record) => {
+          if (record.type === 'number') {
+            let val = ''
+
+            if (record.abs === 'true') {
+              val += '鍙栫粷瀵瑰�硷紱'
+            }
+            if (record.noValue === 'false') {
+              val += '0鍊间笉瀵煎嚭锛�'
+            }
+            if (record.format) {
+              if (record.format === 'thdSeparator') {
+                val += '鏍煎紡鍖栵細鍗冨垎浣嶏紱'
+              } else if (record.format === 'thdSepPm') {
+                val += '鏍煎紡鍖栵細鍗冨垎浣嶏紙璐熷�肩孩鑹诧級锛�'
+              } else if (record.format === 'percent') {
+                val += '鏍煎紡鍖栵細鐧惧垎姣旓紱'
+              }
+            }
+            if (record.prefix) {
+              val += `鍓嶇紑锛�${record.prefix}锛沗
+            }
+            if (record.postfix) {
+              val += `鍚庣紑锛�${record.postfix}锛沗
+            }
+
+            return <div>{val}<EditOutlined className="edit-other" onClick={() => {this.setState({visible: true, line: fromJS(record).toJS()})}} /></div>
+          } else if (record.type === 'text') {
+            let val = ''
+
+            if (record.wrapText === 'true') {
+              val += '鑷姩鎹㈣锛�'
+            }
+            if (record.noValue === 'false') {
+              val += '绌哄�间笉瀵煎嚭锛�'
+            }
+            if (record.textFormat) {
+              if (record.textFormat === 'YYYY-MM-DD') {
+                val += '鏍煎紡鍖栵細YYYY-MM-DD锛�'
+              } else if (record.textFormat === 'YYYY-MM-DD HH:mm:ss') {
+                val += '鏍煎紡鍖栵細YYYY-MM-DD HH:mm:ss锛�'
+              }
+            }
+            if (record.prefix) {
+              val += `鍓嶇紑锛�${record.prefix}锛沗
+            }
+            if (record.postfix) {
+              val += `鍚庣紑锛�${record.postfix}锛沗
+            }
+
+            return <div>{val}<EditOutlined className="edit-other" onClick={() => {this.setState({visible: true, line: fromJS(record).toJS()})}} /></div>
+          }
+
+          return ''
+        }
       },
     ],
     scriptsColumns: [
@@ -164,7 +260,7 @@
         width: '10%',
         render: (text, record) => {
           if (record.position === 'back') {
-            return <span style={{color: 'orange'}}>鍚庣疆</span>
+            return <span style={{color: '#1890ff'}}>鍚庣疆</span>
           } else {
             return <span style={{color: '#26C281'}}>鍓嶇疆</span>
           }
@@ -195,12 +291,12 @@
         dataIndex: 'operation',
         render: (text, record) =>
           (<div style={{textAlign: 'center'}}>
-            <span className="operation-btn" title="缂栬緫" onClick={() => this.handleEdit(record, 'scripts')} style={{color: '#1890ff'}}><EditOutlined /></span>
-            <span className="operation-btn" title="鐘舵�佸垏鎹�" onClick={() => this.handleStatus(record, 'scripts')} style={{color: '#8E44AD'}}><SwapOutlined /></span>
+            <span className="operation-btn" title="缂栬緫" onClick={() => this.handleEdit(record)} style={{color: '#1890ff'}}><EditOutlined /></span>
+            <span className="operation-btn" title="鐘舵�佸垏鎹�" onClick={() => this.handleStatus(record)} style={{color: '#8E44AD'}}><SwapOutlined /></span>
             <Popconfirm
               overlayClassName="popover-confirm"
               title="纭畾鍒犻櫎鍚�?"
-              onConfirm={() => this.handleDelete(record, 'scripts')
+              onConfirm={() => this.handleDelete(record)
             }>
               <span className="operation-btn" style={{color: '#ff4d4f'}}><DeleteOutlined /></span>
             </Popconfirm>
@@ -225,6 +321,7 @@
       col.type = col.type || 'text'
       col.output = col.output || 'true'
       col.required = col.required || 'false'
+      col.noValue = col.noValue || 'true'
 
       if (!['text', 'image', 'number'].includes(col.type)) {
         if (/^Decimal/ig.test(col.type)) {
@@ -232,6 +329,13 @@
         } else {
           col.type = 'text'
         }
+      }
+
+      if (col.type !== 'number') {
+        col.decimal = ''
+        col.abs = 'false'
+      } else {
+        col.abs = col.abs || 'false'
       }
 
       return col
@@ -300,72 +404,61 @@
 
       searches = search
     } else {
-      let search = []
-  
+      searches = fromJS(config.search || []).toJS()
+
       if (config.setting && config.setting.useMSearch === 'true' && window.GLOB.customMenu) {
         let menu = fromJS(window.GLOB.customMenu).toJS()
-        let _search = null
-        let filterComponent = (box) => {
+        let filterComponent = (box, mainSearch) => {
           box.components.forEach(item => {
-            if (_search) return
-    
-            if (item.type === 'search') {
-              box.slist = [...box.slist, item.search]
-            } else if (item.uuid === config.uuid) {
-              _search = box.slist.pop()
+            if (item.type !== 'search') return
+            mainSearch = item.search
+          })
+          let has = false
+          box.components.forEach(item => {
+            if (item.uuid === config.uuid) {
+              has = true
             } else if (item.type === 'group') {
               item.components.forEach(m => {
                 if (m.uuid !== config.uuid) return
-                _search = box.slist.pop()
-              })
-            } else if (item.type === 'tabs') {
-              item.subtabs.forEach(tab => {
-                tab.slist = [...box.slist]
-                filterComponent(tab)
+                has = true
               })
             }
           })
-        }
-        menu.slist = []
-        filterComponent(menu)
-    
-        if (_search) {
-          search = _search
-        } else {
-          menu.components.forEach(item => {
-            if (item.type !== 'search') return
-            search = item.search
-          })
-        }
-      }
-  
-      searches = fromJS(config.search || []).toJS()
-  
-      if (search.length > 0) {
-        let keys = searches.map(item => (item.field ? item.field.toLowerCase() : ''))
-        search.forEach(item => {
-          if (item.field && !keys.includes(item.field.toLowerCase())) {
-            searches.push(item)
+
+          if (has) {
+            if (mainSearch) {
+              let keys = searches.map(item => (item.field ? item.field.toLowerCase() : ''))
+              mainSearch.forEach(item => {
+                if (item.field && !keys.includes(item.field.toLowerCase())) {
+                  searches.push(item)
+                }
+              })
+            }
+          } else {
+            box.components.forEach(item => {
+              if (item.type !== 'tabs') return
+
+              item.subtabs.forEach(tab => {
+                filterComponent(tab, mainSearch)
+              })
+            })
           }
-        })
+        }
+        filterComponent(menu, null)
       }
     }
 
     this.setState({
+      searchKey: '',
       verify: _verify,
       searches: searches,
       activeKey: card.intertype === 'system' && _verify.dataType === 'custom' ? 'setting' : 'columns'
     })
   }
 
-  handleEdit = (record, type) => {
-    let node = null
-
-    if (type === 'scripts') {
-      this.scriptsForm.edit(record)
-      node = document.getElementById('mk-exout-script')
-    }
-
+  handleEdit = (record) => {
+    this.scriptsForm.edit(record)
+    let node = document.getElementById('mk-exout-script')
 
     if (node && node.scrollTop) {
       let inter = Math.ceil(node.scrollTop / 10)
@@ -381,26 +474,24 @@
     }
   }
 
-  handleStatus = (record, type) => {
+  handleStatus = (record) => {
     let verify = JSON.parse(JSON.stringify(this.state.verify))
     record.status = record.status === 'false' ? 'true' : 'false'
 
-    if (type === 'scripts') {
-      verify.scripts = verify.scripts.map(item => {
-        if (item.uuid === record.uuid) {
-          return record
-        } else {
-          return item
-        }
-      })
-    }
+    verify.scripts = verify.scripts.map(item => {
+      if (item.uuid === record.uuid) {
+        return record
+      } else {
+        return item
+      }
+    })
 
     this.setState({
       verify: verify
     })
   }
 
-  columnChange = (values) => {
+  columnChange = (values, callback) => {
     let verify = JSON.parse(JSON.stringify(this.state.verify))
 
     let fields = verify.columns.map(item => item.Column)
@@ -411,6 +502,8 @@
         duration: 5
       })
       return
+    } else {
+      callback()
     }
     values.uuid = Utils.getuuid()
     values.abs = 'false'
@@ -423,38 +516,12 @@
     })
   }
 
-  handleDelete = (record, type) => {
-    const { verify } = this.state
+  handleDelete = (record) => {
+    let verify = JSON.parse(JSON.stringify(this.state.verify))
 
-    verify.columns = verify.columns.filter(item => item.uuid !== record.uuid)
+    verify.scripts = verify.scripts.filter(item => item.uuid !== record.uuid)
 
     this.setState({ verify: verify })
-  }
-
-  handleUpDown = (record, type, direction) => {
-    let verify = JSON.parse(JSON.stringify(this.state.verify))
-    let index = 0
-
-    verify.columns = verify.columns.filter((item, i) => {
-      if (item.uuid === record.uuid) {
-        index = i
-      }
-
-      return item.uuid !== record.uuid
-    })
-    if ((index === 0 && direction === 'up') || (index === verify.columns.length && direction === 'down')) {
-      return
-    }
-
-    if (direction === 'up') {
-      verify.columns.splice(index - 1, 0, record)
-    } else {
-      verify.columns.splice(index + 1, 0, record)
-    }
-
-    this.setState({
-      verify: verify
-    })
   }
 
   showError = (errorType) => {
@@ -499,6 +566,7 @@
   }
 
   handleConfirm = () => {
+    const { card, config } = this.props
     const { activeKey, verify } = this.state
     
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
@@ -514,6 +582,51 @@
         })
         
         return
+      }
+
+      if (verify.dataType === 'custom') {
+        if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))) {
+          notification.warning({
+            top: 92,
+            message: '瀛樺湪鏈繚瀛樿剼鏈紝璇风偣鍑荤‘瀹氫繚瀛橈紝鎴栫偣鍑诲彇娑堟斁寮冧慨鏀癸紒',
+            duration: 5
+          })
+          this.setState({activeKey: 'scripts'})
+          return
+        }
+      }
+      if (this.columnRef && this.columnRef.state.editingKey) {
+        notification.warning({
+          top: 92,
+          message: '瀛楁鏈繚瀛橈紒',
+          duration: 5
+        })
+        return
+      }
+
+      if (card.intertype === 'system' && verify.dataType !== 'custom' && verify.columns.length > 0 && config.$c_ds && config.setting.interType === 'system' && config.columns && config.columns.length > 0) {
+        let cols = []
+        let columns = config.columns.map(c => c.field)
+
+        if (config.subtype === 'dualdatacard' && config.subColumns) {
+          config.subColumns.forEach(item => {
+            columns.push(item.field)
+          })
+        }
+
+        verify.columns.forEach(col => {
+          if (col.output === 'false' || col.Column === '$Index') return
+          if (!columns.includes(col.Column)) {
+            cols.push(col.Column)
+          }
+        })
+        if (cols.length) {
+          notification.warning({
+            top: 92,
+            message: `瀵煎嚭鍒楋紙${cols.join('銆�')}锛夊湪瀛楁闆嗕腑涓嶅瓨鍦紒`,
+            duration: 5
+          })
+        }
       }
 
       if (activeKey === 'setting') {
@@ -544,19 +657,10 @@
                 loading: false
               })
               reject()
-            }, verify.scripts)
+            }, verify.scripts, 'submit')
           })
         })
       } else if (activeKey === 'columns') {
-        if (this.columnRef && this.columnRef.state.editingKey) {
-          notification.warning({
-            top: 92,
-            message: '瀛楁鏈繚瀛橈紒',
-            duration: 5
-          })
-          return
-        }
-
         if (this.props.card.intertype !== 'system' || verify.dataType !== 'custom') {
           resolve(verify)
         } else {
@@ -572,18 +676,9 @@
               loading: false
             })
             reject()
-          }, verify.scripts)
+          }, verify.scripts, 'submit')
         }
       } else if (activeKey === 'scripts') {
-        if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))) {
-          notification.warning({
-            top: 92,
-            message: '瀛樺湪鏈繚瀛樿剼鏈紝璇风偣鍑荤‘瀹氫繚瀛橈紝鎴栫偣鍑诲彇娑堟斁寮冧慨鏀癸紒',
-            duration: 5
-          })
-          return
-        }
-  
         this.setState({loading: true})
         this.sqlverify(() => { // 楠岃瘉鎴愬姛
           this.setState({
@@ -595,7 +690,7 @@
             loading: false
           })
           reject()
-        }, verify.scripts)
+        }, verify.scripts, 'submit')
       } else {
         resolve(verify)
       }
@@ -607,11 +702,25 @@
     const { verify } = this.state
 
     let columns = fromJS(verify.columns).toJS()
-    let fields = columns.map(item => item.Column)
+    let _names = {}
+    let fields = columns.map(item => {
+      let key = item.Column.toLowerCase()
+      _names[key] = item.Text
+
+      return key
+    })
+    let names = {$up: false}
 
     config.columns.forEach(item => {
-      if (fields.includes(item.field) || !item.field) return
-      fields.push(item.field)
+      if (!item.field) return
+      let key = item.field.toLowerCase()
+      if (fields.includes(key)) {
+        if (_names[key] !== item.label) {
+          names.$up = true
+          names[key] = item.label
+        }
+        return
+      }
 
       let cell = {
         Column: item.field,
@@ -634,8 +743,15 @@
 
     if (config.subtype === 'dualdatacard') {
       config.subColumns.forEach(item => {
-        if (fields.includes(item.field) || !item.field) return
-        fields.push(item.field)
+        if (!item.field) return
+        let key = item.field.toLowerCase()
+        if (fields.includes(key)) {
+          if (_names[key] !== item.label) {
+            names.$up = true
+            names[key] = item.label
+          }
+          return
+        }
   
         let cell = {
           Column: item.field,
@@ -657,19 +773,49 @@
       })
     }
 
-    this.setState({
-      verify: {...verify, columns: columns}
-    })
+    if (names.$up) {
+      const that = this
+
+      confirm({
+        content: '閮ㄥ垎瀛楁鍚嶇О涓庢樉绀哄垪涓嶄竴鑷达紝鏄惁鏇存柊锛�',
+        okText: '鏇存柊',
+        cancelText: '涓嶆洿鏂�',
+        onOk() {
+          columns = columns.map(item => {
+            let key = item.Column.toLowerCase()
+
+            if (names[key]) {
+              item.Text = names[key]
+            }
+
+            return item
+          })
+          
+          that.setState({
+            verify: {...verify, columns: columns}
+          })
+        },
+        onCancel() {
+          that.setState({
+            verify: {...verify, columns: columns}
+          })
+        }
+      })
+    } else {
+      this.setState({
+        verify: {...verify, columns: columns}
+      })
+    }
   }
 
   clearField = () => {
     const { verify } = this.state
-    const _this = this
+    const that = this
 
     confirm({
       content: `纭畾娓呯┖Excel鍒楀悧锛焋,
       onOk() {
-        _this.setState({
+        that.setState({
           verify: {
             ...verify,
             columns: []
@@ -687,6 +833,8 @@
       col.type = col.type || 'text'
       col.output = col.output || 'true'
       col.required = col.required || 'false'
+      col.noValue = col.noValue || 'true'
+      col.Width = col.Width || 20
 
       if (!['text', 'image', 'number'].includes(col.type)) {
         if (/^Decimal/ig.test(col.type)) {
@@ -695,27 +843,30 @@
           col.type = 'text'
         }
       }
+      if (col.type === 'text' && col.format) {
+        delete col.format
+      } else if (col.type === 'number' && col.textFormat) {
+        delete col.textFormat
+      }
 
       return col
     })
-    // if (columns[0] && !['image', 'text', 'number'].includes(columns[0].type)) {
-    //   columns = columns.map(col => {
-    //     let _cell = {
-    //       uuid: Utils.getuuid(),
-    //       Column: col.Column,
-    //       Text: col.Text,
-    //       Width: 20,
-    //       abs: 'false',
-    //       output: col.output || 'true',
-    //       required: col.required || 'false',
-    //       type: 'text',
-    //     }
-
-    //     return _cell
-    //   })
-    // }
 
     this.setState({verify: {...verify, columns}})
+  }
+
+  lineSubmit = () => {
+    const { line, verify } = this.state
+
+    let columns = verify.columns.map(col => {
+      if (col.uuid === line.uuid) {
+        return line
+      }
+
+      return col
+    })
+
+    this.setState({verify: {...verify, columns}, line: null, visible: false})
   }
 
   // 鏍囩鍒囨崲
@@ -723,28 +874,32 @@
     const { card } = this.props
     const { activeKey, verify } = this.state
 
-    if (card.intertype !== 'system' || verify.dataType !== 'custom') {
+    if (activeKey === 'setting') {
+      this.settingForm.handleConfirm().then(res => {
+        if (card.intertype !== 'system' || verify.dataType !== 'custom') {
+          this.setState({activeKey: val, verify: {...verify, ...res}})
+        } else {
+          this.setState({
+            verify: {...verify, ...res}
+          }, () => {
+            this.setState({loading: true})
+            this.sqlverify(() => { // 楠岃瘉鎴愬姛
+              this.setState({
+                activeKey: val,
+                loading: false
+              })
+            }, () => {             // 楠岃瘉澶辫触
+              this.setState({
+                activeKey: val,
+                loading: false
+              })
+            }, verify.scripts)
+          })
+        }
+      })
+    } else if (card.intertype !== 'system' || verify.dataType !== 'custom') {
       this.setState({activeKey: val})
       return
-    } else if (activeKey === 'setting') {
-      this.settingForm.handleConfirm().then(res => {
-        this.setState({
-          verify: {...verify, ...res}
-        }, () => {
-          this.setState({loading: true})
-          this.sqlverify(() => { // 楠岃瘉鎴愬姛
-            this.setState({
-              activeKey: val,
-              loading: false
-            })
-          }, () => {             // 楠岃瘉澶辫触
-            this.setState({
-              activeKey: val,
-              loading: false
-            })
-          }, verify.scripts)
-        })
-      })
     } else if (activeKey === 'columns') {
       if (this.columnRef && this.columnRef.state.editingKey) {
         notification.warning({
@@ -835,7 +990,7 @@
     }
   }
 
-  sqlverify = (_resolve, _reject, scripts) => {
+  sqlverify = (_resolve, _reject, scripts, type) => {
     const { searches, verify, debugId } = this.state
 
     if (verify.dataType !== 'custom') {
@@ -843,8 +998,7 @@
       return
     }
 
-    let timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
-    let sql = SettingUtils.getDebugSql(verify, scripts, (verify.useSearch === 'true' ? searches : []), Utils, '2023-04-20 15:29:37')
+    let sql = SettingUtils.getDebugSql(verify, scripts, (verify.useSearch === 'true' ? searches : []))
 
     let _debugId = md5(sql)
 
@@ -853,24 +1007,29 @@
       return
     }
 
-    let param = {
-      func: 's_debug_sql',
-      exec_type: 'y',
-      LText: sql
-    }
-    param.LText = Utils.formatOptions(param.LText)
-    param.timestamp = timestamp
-    param.secretkey = Utils.encrypt('', timestamp)
-
-    Api.genericInterface(param).then(result => {
-      if (result.status) {
+    Api.sDebug(sql).then(result => {
+      if (result.status || result.ErrCode === '-2') {
         this.setState({debugId: _debugId})
         _resolve()
       } else {
-        _reject()
-        Modal.error({
-          title: result.message
-        })
+        if (type === 'submit') {
+          Modal.confirm({
+            title: result.message,
+            okText: '鐭ラ亾浜�',
+            cancelText: '寮哄埗淇濆瓨',
+            onOk: () => {
+              _reject()
+            },
+            onCancel() {
+              _resolve()
+            }
+          })
+        } else {
+          _reject()
+          Modal.error({
+            title: result.message
+          })
+        }
       }
     })
   }
@@ -896,7 +1055,7 @@
 
   render() {
     const { card } = this.props
-    const { verify, excelColumns, scriptsColumns, activeKey, loading, searches } = this.state
+    const { verify, excelColumns, scriptsColumns, activeKey, loading, searches, searchKey, visible, line } = this.state
     const formItemLayout = {
       labelCol: {
         xs: { span: 24 },
@@ -924,13 +1083,13 @@
           } key="columns">
             <ColumnForm columnChange={this.columnChange}/>
             <Button className="excel-col-add mk-green" title="娣诲姞鏄剧ず鍒楀瓧娈�" onClick={this.columnFieldInput}>
-              鍚屾鏄剧ず鍒�
+              鍚屾瀛楁闆�
             </Button>
             <Button className="excel-col-add mk-red" title="娓呯┖Excel鍒�" onClick={this.clearField}>
               娓呯┖Excel鍒�
             </Button>
-            <div style={{color: '#959595', fontSize: '13px', paddingLeft: '10px'}}>濡傞渶瀵煎嚭搴忓彿锛岃浣跨敤瀛楁 $Index锛涙暟鍊肩被鍨嬪鍑烘椂鍙繘琛屾暟鎹鐞嗭紙鍙栫粷瀵瑰�笺�佷繚鐣欏皬鏁颁綅锛夛紱绾㈣壊鏍囬瀵煎嚭鏃跺垪澶存枃瀛椾负绾㈣壊銆�</div>
-            <EditTable actions={['edit', 'move', 'copy', 'del']} type="excelcolumn" wrappedComponentRef={(inst) => this.columnRef = inst} data={verify.columns} columns={excelColumns} onChange={this.changeColumns}/>
+            <div style={{color: '#959595', fontSize: '13px', paddingLeft: '10px'}}>濡傞渶瀵煎嚭搴忓彿锛岃浣跨敤瀛楁 $Index锛涘鍑轰负鍚︽椂锛屼笉浣跨敤琛屼俊鎭紙鏂囨湰涓虹┖锛屾暟鍊间负0锛夛紱绾㈣壊鏍囬瀵煎嚭鏃跺垪澶存枃瀛椾负绾㈣壊銆�</div>
+            <EditTable actions={['edit', 'move', 'copy', 'del']} type="excelcolumn" searchKey={searchKey} wrappedComponentRef={(inst) => this.columnRef = inst} data={verify.columns} columns={excelColumns} onChange={this.changeColumns}/>
           </TabPane>
           {card.intertype === 'system' ? <TabPane tab={
             <span>
@@ -947,7 +1106,12 @@
             />
             <EditTable actions={['move']} data={verify.scripts} columns={scriptsColumns} onChange={(scripts) => {this.setState({verify: {...verify, scripts}})}}/>
           </TabPane> : null}
-          <TabPane tab="淇℃伅鎻愮ず" key="message">
+          <TabPane tab={
+            <span>
+              淇℃伅鎻愮ず
+              {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}
+            </span>
+          } key="message">
             <Form {...formItemLayout}>
               <Row gutter={24}>
                 <Col offset={6} span={6}>
@@ -1043,6 +1207,18 @@
             </Form>
           </TabPane>
         </Tabs>
+        <Modal
+          title=""
+          visible={visible}
+          width={1000}
+          maskClosable={false}
+          closable={false}
+          onOk={this.lineSubmit}
+          onCancel={() => {this.setState({visible: false, line: null})}}
+          destroyOnClose
+        >
+          <OtherForm line={line} submit={this.lineSubmit} onChange={(values) => this.setState({line: values})}/>
+        </Modal>
       </div>
     )
   }

--
Gitblit v1.8.0