From 0847aeed380492bafaf5b27a49ac4e4b77a819b1 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 08 七月 2021 16:39:09 +0800 Subject: [PATCH] 2021-07-08 --- src/menu/datasource/index.jsx | 150 +++++++++++++++++++----- src/menu/datasource/verifycard/utils.jsx | 14 + src/mob/searchconfig/settingform/index.jsx | 2 src/mob/searchconfig/index.jsx | 87 +++++++++++++- src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx | 6 src/mob/searchconfig/settingform/index.scss | 7 + src/tabviews/zshare/topSearch/index.jsx | 4 src/menu/datasource/verifycard/index.jsx | 38 ++++- src/utils/utils.js | 15 ++ 9 files changed, 261 insertions(+), 62 deletions(-) diff --git a/src/menu/datasource/index.jsx b/src/menu/datasource/index.jsx index 01d1c81..8115d65 100644 --- a/src/menu/datasource/index.jsx +++ b/src/menu/datasource/index.jsx @@ -16,6 +16,7 @@ state = { dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, + appType: sessionStorage.getItem('appType'), sourcelist: [], mainSearch: [], visible: false, @@ -35,42 +36,129 @@ editDataSource = () => { const { config } = this.props + const { appType } = this.state let search = [] - let parents = [] - let _conf = config - let getParents = (box) => { - box.components.forEach(item => { - if (item.type !== 'tabs') return + let menu = fromJS(window.GLOB.customMenu).toJS() - item.subtabs.forEach(tab => { - if (_conf.parentId === tab.parentId && _conf.tabId === tab.uuid) { - parents.unshift(tab) - _conf = item - - if (_conf.parentId && _conf.tabId) { - getParents(tab) - } - } else { - getParents(tab) - } - }) - }) - } - - if (config.parentId && config.tabId) { - getParents(window.GLOB.customMenu) - } - - parents.unshift(window.GLOB.customMenu) - - parents.forEach(parent => { - parent.components.forEach(item => { - if (item.type === 'search') { - search = item.search + if (appType === 'mob') { + let ms = null + menu.components.forEach(item => { + if (item.type === 'topbar' && (item.wrap.type === 'search' || (item.wrap.type === 'navbar' && item.wrap.search === 'true'))) { + ms = item.search } }) - }) + + if (config.floor > 1) { + let _search = null + let filterComponent = (box) => { + box.components.forEach(item => { + if (_search) return + + if (item.uuid === config.uuid) { + _search = box.slist.pop() + } else if (item.type === 'group') { + item.components.forEach(m => { + if (m.uuid !== config.uuid) return + _search = box.slist.pop() + }) + } else if (item.type === 'tabs') { + let able = item.setting.display === 'inline-block' && item.setting.position === 'top' + item.subtabs.forEach(tab => { + if (able && tab.hasSearch === 'icon' && tab.search) { + tab.slist = [...box.slist, tab.search] + } else { + tab.slist = [...box.slist] + } + + filterComponent(tab) + }) + } + }) + } + menu.slist = [] + filterComponent(menu) + + if (_search) { + ms = _search + } + } + + if (ms) { + if (ms.setting.type === 'search') { + search.push({ + type: 'text', + label: '鎼滅储鏍�', + field: ms.setting.field, + match: ms.setting.match, + required: ms.setting.required, + value: ms.setting.initval || '' + }) + } + ms.fields.forEach(item => { + if (item.type === 'range') { + item.initval = `${item.minValue},${item.maxValue}` + } + search.push(item) + }) + + ms.groups.forEach(group => { + if (group.setting.type === 'search') { + search.push({ + type: 'text', + label: group.wrap.name, + field: group.setting.field, + match: group.setting.match, + required: group.setting.required, + value: group.setting.initval || '' + }) + } + + group.fields.forEach(item => { + if (item.type === 'range') { + item.initval = `${item.minValue},${item.maxValue}` + } + search.push(item) + }) + }) + } + } else { + if (config.floor > 1) { + let _search = null + let filterComponent = (box) => { + 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() + } 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) + }) + } + }) + } + menu.slist = [] + filterComponent(menu) + + if (_search) { + search = _search + } + } else { + menu.components.forEach(item => { + if (item.type !== 'search') return + search = item.search + }) + } + } this.setState({ visible: true, diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx index 0d6dcc5..2e247f9 100644 --- a/src/menu/datasource/verifycard/index.jsx +++ b/src/menu/datasource/verifycard/index.jsx @@ -34,6 +34,7 @@ initsql: '', // sql楠岃瘉鏃跺彉閲忓0鏄庡強璧嬪�� usefulfields: '', defaultsql: '', // 榛樿Sql + defaultSearch: '', systemScripts: [], colColumns: [ { @@ -208,11 +209,18 @@ }) } + let _search = this.formatSearch(search) + _search = Utils.joinMainSearchkey(_search) + + _search = _search.replace(/@\$@/ig, '') + _search = _search ? 'where ' + _search : '' + this.setState({ scripts, columns: fromJS(config.columns).toJS(), setting: _setting, searches: search, + defaultSearch: _search, varMarks: Marks }) @@ -386,8 +394,15 @@ return } + let _search = this.formatSearch(search) + _search = Utils.joinMainSearchkey(_search) + + _search = _search.replace(/@\$@/ig, '') + _search = _search ? 'where ' + _search : '' + this.setState({ searches: search, + defaultSearch: _search, setting: res }, () => { this.sqlverify(() => { // 楠岃瘉鎴愬姛 @@ -441,15 +456,9 @@ } getdefaultSql = () => { - const { columns, searches, setting } = this.state + const { columns, setting, defaultSearch } = this.state let defaultsql = '' let arr_field = columns.map(col => col.field).join(',') - - let _search = this.formatSearch(searches) - _search = Utils.joinMainSearchkey(_search) - - _search = _search.replace(/@\$@/ig, '') - _search = _search ? 'where ' + _search : '' if (setting.dataresource) { let _dataresource = setting.dataresource @@ -458,7 +467,7 @@ _dataresource = '(' + _dataresource + ') tb' } - 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` + 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` } this.setState({defaultsql}) @@ -499,6 +508,8 @@ 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 = '@$@' @@ -534,8 +545,15 @@ return } + let _search = this.formatSearch(search) + _search = Utils.joinMainSearchkey(_search) + + _search = _search.replace(/@\$@/ig, '') + _search = _search ? 'where ' + _search : '' + this.setState({ searches: search, + defaultSearch: _search, setting: res }, () => { this.sqlverify(() => { resolve({setting: res, columns, scripts }) }, reject, false) @@ -569,7 +587,7 @@ } sqlverify = (resolve, reject, change = false, testScripts) => { - const { columns, setting, scripts, searches } = this.state + const { columns, setting, scripts, searches, defaultSearch } = this.state let _scripts = scripts.filter(item => item.status !== 'false') @@ -587,7 +605,7 @@ } if ((setting.interType === 'system' && setting.execute !== 'false') || _scripts.length > 0) { - let result = SettingUtils.getDebugSql(setting, _scripts, columns, searches) + let result = SettingUtils.getDebugSql(setting, _scripts, columns, searches, defaultSearch) if (result.error) { notification.warning({ diff --git a/src/menu/datasource/verifycard/utils.jsx b/src/menu/datasource/verifycard/utils.jsx index 3b3b266..fa55bc3 100644 --- a/src/menu/datasource/verifycard/utils.jsx +++ b/src/menu/datasource/verifycard/utils.jsx @@ -7,7 +7,7 @@ * @return {Object} setting 椤甸潰璁剧疆 * @return {Array} columns 鏄剧ず瀛楁 */ - static getDebugSql (setting, scripts, columns, searches = []) { + static getDebugSql (setting, scripts, columns, searches = [], defSearch) { let sql = '' let error = '' let _dataresource = '' @@ -77,7 +77,7 @@ reg: new RegExp('@' + item.datefield + '1@', 'ig') }) } - if (['dateweek', 'datemonth', 'daterange'].includes(item.type)) { + if (['dateweek', 'datemonth', 'daterange', 'range'].includes(item.type)) { _regoptions.push({ var: new RegExp('@' + item.field, 'ig'), reg: new RegExp('@' + item.field + '@', 'ig') @@ -114,7 +114,7 @@ } }) - let _search = '' + let _search = defSearch if (setting.queryType === 'statistics' && _dataresource) { _regoptions.forEach(item => { @@ -136,7 +136,7 @@ }, { reg: new RegExp('@FullName@', 'ig'), }) - if (setting.laypage !== 'false') { + if (setting.laypage === 'true') { _regoptions.push({ reg: new RegExp('@pageSize@', 'ig'), }, { @@ -176,7 +176,11 @@ _dataresource = '(' + _dataresource + ') tb' } - _dataresource = `select${setting.laypage !== 'false' ? ' top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable ${setting.laypage !== 'false' ? 'where rows > 0' : ''} order by tmptable.rows` + if (setting.order) { + _dataresource = `select${setting.laypage === 'true' ? ' top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable ${setting.laypage === 'true' ? 'where rows > 0' : ''} order by tmptable.rows` + } else { + _dataresource = `select${setting.laypage === 'true' ? ' top 10' : ''} ${arr_field} from ${_dataresource} ${_search}` + } } if (_customScript) { diff --git a/src/mob/searchconfig/index.jsx b/src/mob/searchconfig/index.jsx index 2d7aa16..74d36b4 100644 --- a/src/mob/searchconfig/index.jsx +++ b/src/mob/searchconfig/index.jsx @@ -148,20 +148,49 @@ * 3銆侀�氳繃loading鍒锋柊 */ handleSubmit = () => { + const { config } = this.state this.formRef.handleConfirm().then(res => { let _group = fromJS(this.state.group).toJS() - let fieldrepet = false // 瀛楁閲嶅 - + _group.fields = _group.fields.map(item => { - if (item.uuid !== res.uuid && item.field.toLowerCase() === res.field.toLowerCase()) { - fieldrepet = true - } - if (item.uuid === res.uuid) { return res } else { return item } + }) + + let fieldrepet = false // 瀛楁閲嶅 + let lowerField = res.field.toLowerCase() + + if (config.setting.field) { + let m = config.setting.field.toLowerCase().split(',') + if (m.includes(lowerField)) { + fieldrepet = true + } + } + config.fields.forEach(item => { + if (item.uuid === res.uuid) return + if (res.type === 'date' && item.type === 'date') return + if (item.field.toLowerCase() === lowerField) { + fieldrepet = true + } + }) + + config.groups.forEach(group => { + if (group.setting.field) { + let m = group.setting.field.toLowerCase().split(',') + if (m.includes(lowerField)) { + fieldrepet = true + } + } + group.fields.forEach(item => { + if (item.uuid === res.uuid) return + if (res.type === 'date' && item.type === 'date') return + if (item.field.toLowerCase() === lowerField) { + fieldrepet = true + } + }) }) if (fieldrepet) { @@ -285,8 +314,54 @@ * @description 淇濆瓨鍒嗙粍璁剧疆 */ settingSave = () => { + const { config } = this.state this.settingRef.handleConfirm().then(res => { let _group = {...this.state.group, setting: res} + let lowers = _group.setting.field ? _group.setting.field.toLowerCase() : '' + + if (lowers) { + let fieldrepet = false // 瀛楁閲嶅 + lowers = lowers.split(',') + let length = lowers.length + + if (_group.floor !== 1 && config.setting.field) { + let m = config.setting.field.toLowerCase().split(',') + if (Array.from(new Set([...m, ...lowers])).length < m.length + length) { + fieldrepet = true + } + } + + config.fields.forEach(item => { + if (lowers.includes(item.field.toLowerCase())) { + fieldrepet = true + } + }) + + config.groups.forEach(group => { + if (_group.uuid === group.uuid) return + if (group.setting.field) { + let m = group.setting.field.toLowerCase().split(',') + if (Array.from(new Set([...m, ...lowers])).length < m.length + length) { + fieldrepet = true + } + } + group.fields.forEach(item => { + if (lowers.includes(item.field.toLowerCase())) { + fieldrepet = true + } + }) + }) + + if (fieldrepet) { + notification.warning({ + top: 92, + message: '瀛楁宸插瓨鍦紒', + duration: 10 + }) + return + } + } + this.setState({ group: _group, settingVisible: false diff --git a/src/mob/searchconfig/settingform/index.jsx b/src/mob/searchconfig/settingform/index.jsx index 8468602..c5a5443 100644 --- a/src/mob/searchconfig/settingform/index.jsx +++ b/src/mob/searchconfig/settingform/index.jsx @@ -69,7 +69,7 @@ } return ( - <Form {...formItemLayout} className="ant-advanced-search-form modal-setting-form"> + <Form {...formItemLayout} className="mob-search-setting-form"> <Row gutter={24}> <Col span={12}> <Form.Item label="椤堕儴鏍峰紡"> diff --git a/src/mob/searchconfig/settingform/index.scss b/src/mob/searchconfig/settingform/index.scss index 9a74987..f0d30ef 100644 --- a/src/mob/searchconfig/settingform/index.scss +++ b/src/mob/searchconfig/settingform/index.scss @@ -1,4 +1,4 @@ -.ant-advanced-search-form.modal-setting-form { +.mob-search-setting-form { .textarea { .ant-form-item-label { width: 16.3%; @@ -15,4 +15,9 @@ position: relative; left: -3px; } + .ant-col.ant-col-12 { + display: inline-block; + float: none; + vertical-align: top; + } } \ No newline at end of file diff --git a/src/tabviews/zshare/topSearch/index.jsx b/src/tabviews/zshare/topSearch/index.jsx index d97e992..c16a881 100644 --- a/src/tabviews/zshare/topSearch/index.jsx +++ b/src/tabviews/zshare/topSearch/index.jsx @@ -144,10 +144,6 @@ data_sql: Utils.formatOptions(_option.sql) }) } else { // 鍚堝苟璇锋眰锛屽尯鍒嗘湰鍦板強绯荤粺 - // 澶栬仈鏁版嵁搴撴浛鎹� - if (window.GLOB.externalDatabase !== null) { - _option.sql = _option.sql.replace(/@db@/ig, window.GLOB.externalDatabase) - } if (item.database === 'sso') { mainItems.push(`select '${item.field}' as obj_name,'${_option.field}' as arr_field,'${window.btoa(window.encodeURIComponent(_option.sql))}' as LText`) } else { diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx index 26c87fe..dd5f292 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx @@ -229,8 +229,10 @@ fields = fields + ',' } - let database = btn.sheet.match(/(.*)\.(.*)\./ig) || '' - let sheet = btn.sheet.replace(/(.*)\.(.*)\./ig, '') + let database = btn.sheet.match(/(.*)\.(.*)\.|@db@/ig) || '' + let sheet = btn.sheet.replace(/(.*)\.(.*)\.|@db@/ig, '') + + database = database ? (database[0] || '') : '' _value = `Insert into ${database}${sheet} (${fields}createuserid,createuser,createstaff,bid)\nSelect ${fields}@userid@,@username,@fullname,@BID@ From @${sheet}` } else { diff --git a/src/utils/utils.js b/src/utils/utils.js index 8be2c14..6804c9e 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -500,6 +500,10 @@ let _endval = moment(val[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' searchText += '(' + item.key + ' >= \'' + _startval + '\' AND ' + item.key + ' < \'' + _endval + '\')' + } else if (item.type === 'range') { + let val = item.value.split(',') + + searchText += '(' + item.key + ' >= \'' + val[0] + '\' AND ' + item.key + ' < \'' + val[1] + '\')' } else { searchText += '(' + item.key + ' ' + item.match + ' \'' + item.value + '\')' } @@ -762,14 +766,21 @@ let userName = sessionStorage.getItem('User_Name') || '' let fullName = sessionStorage.getItem('Full_Name') || '' let city = sessionStorage.getItem('city') || '' + let _sheet = item.sheet if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } - let database = item.sheet.match(/(.*)\.(.*)\./ig) || '' - let sheet = item.sheet.replace(/(.*)\.(.*)\./ig, '') + if (window.GLOB.externalDatabase !== null) { + _sheet = _sheet.replace(/@db@/ig, window.GLOB.externalDatabase) + } + + let database = _sheet.match(/(.*)\.(.*)\./ig) + let sheet = _sheet.replace(/(.*)\.(.*)\./ig, '') + + database = database ? (database[0] || '') : '' let getuuid = () => { let uuid = [] -- Gitblit v1.8.0