From 437c6d72f76072e5ab1b09e78101370805113c4b Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期日, 01 十月 2023 18:46:37 +0800 Subject: [PATCH] Merge branch 'master' into positec --- src/menu/datasource/verifycard/index.jsx | 186 ++++++++++++++++++++++++++-------------------- 1 files changed, 105 insertions(+), 81 deletions(-) diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx index 266395c..7519b71 100644 --- a/src/menu/datasource/verifycard/index.jsx +++ b/src/menu/datasource/verifycard/index.jsx @@ -8,7 +8,7 @@ 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' @@ -40,11 +40,11 @@ subColumns: [], activeKey: 'setting', loading: false, + colLoading: false, searchKey: '', initsql: '', // sql楠岃瘉鏃跺彉閲忓0鏄庡強璧嬪�� usefulfields: '', defaultsql: '', // 榛樿Sql - defaultSearch: '', systemScripts: [], median: {}, visible: false, @@ -210,16 +210,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, @@ -227,8 +243,7 @@ subColumns: subColumns, setting: _setting, median: _setting, - searches: search, - defaultSearch: _search, + searches: formatSearch(search), searchKey: '', debugId: _setting.debugId || '' }) @@ -426,15 +441,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(() => { // 楠岃瘉鎴愬姛 @@ -513,9 +521,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 @@ -524,59 +534,10 @@ _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 = () => { @@ -611,15 +572,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(() => { resolve({setting: res, columns, subColumns, scripts, cols }) }, reject, 'submit') @@ -674,7 +628,7 @@ sqlverify = (resolve, reject, type, testScripts) => { const { config } = this.props - const { columns, setting, scripts, searches, defaultSearch, debugId } = this.state + const { columns, setting, scripts, searches, debugId, subColumns } = this.state let _scripts = scripts.filter(item => item.status !== 'false') @@ -697,7 +651,11 @@ } if ((setting.interType === 'system' && setting.execute !== 'false') || _scripts.length > 0) { - let r = SettingUtils.getDebugSql(setting, _scripts, columns, searches, defaultSearch, config.type) + 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) @@ -907,11 +865,25 @@ const { columns } = this.state let m = [] let n = [] + let s = [] columns.forEach(col => { - m.push(`${col.field} ${col.datatype}`) - 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(',')}*/ @@ -988,6 +960,49 @@ }) } + 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}) + }) + } + /** * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊 */ @@ -1018,6 +1033,7 @@ setting={setting} scripts={scripts} updateStatus={this.updateStatus} + updateColumns={this.updateColumns} addProcess={this.addProcess} wrappedComponentRef={(inst) => this.settingForm = inst} /> : null} @@ -1035,7 +1051,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> + 瀛楁闆� + {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> 瀛愯〃瀛楁闆� -- Gitblit v1.8.0