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