| | |
| | | |
| | | state = { |
| | | dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, |
| | | appType: sessionStorage.getItem('appType'), |
| | | sourcelist: [], |
| | | mainSearch: [], |
| | | visible: false, |
| | |
| | | |
| | | editDataSource = () => { |
| | | const { config } = this.props |
| | | const { appType } = this.state |
| | | |
| | | let search = [] |
| | | let parents = [] |
| | | let _conf = config |
| | | let getParents = (box) => { |
| | | let menu = fromJS(window.GLOB.customMenu).toJS() |
| | | |
| | | 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 (item.type !== 'tabs') return |
| | | 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 (_conf.parentId === tab.parentId && _conf.tabId === tab.uuid) { |
| | | parents.unshift(tab) |
| | | _conf = item |
| | | if (able && tab.hasSearch === 'icon' && tab.search) { |
| | | tab.slist = [...box.slist, tab.search] |
| | | } else { |
| | | tab.slist = [...box.slist] |
| | | } |
| | | |
| | | if (_conf.parentId && _conf.tabId) { |
| | | getParents(tab) |
| | | 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 { |
| | | getParents(tab) |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | if (config.floor > 1) { |
| | | let _search = null |
| | | let filterComponent = (box) => { |
| | | box.components.forEach(item => { |
| | | if (_search) return |
| | | |
| | | 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 |
| | | 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, |
| | |
| | | initsql: '', // sql验证时变量声明及赋值 |
| | | usefulfields: '', |
| | | defaultsql: '', // 默认Sql |
| | | defaultSearch: '', |
| | | systemScripts: [], |
| | | colColumns: [ |
| | | { |
| | |
| | | }) |
| | | } |
| | | |
| | | 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 |
| | | }) |
| | | |
| | |
| | | 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(() => { // 验证成功 |
| | |
| | | } |
| | | |
| | | 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 |
| | |
| | | _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}) |
| | |
| | | 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 = '@$@' |
| | |
| | | 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) |
| | |
| | | } |
| | | |
| | | 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') |
| | | |
| | |
| | | } |
| | | |
| | | 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({ |
| | |
| | | * @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 = '' |
| | |
| | | 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') |
| | |
| | | } |
| | | }) |
| | | |
| | | let _search = '' |
| | | let _search = defSearch |
| | | |
| | | if (setting.queryType === 'statistics' && _dataresource) { |
| | | _regoptions.forEach(item => { |
| | |
| | | }, { |
| | | reg: new RegExp('@FullName@', 'ig'), |
| | | }) |
| | | if (setting.laypage !== 'false') { |
| | | if (setting.laypage === 'true') { |
| | | _regoptions.push({ |
| | | reg: new RegExp('@pageSize@', 'ig'), |
| | | }, { |
| | |
| | | _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) { |
| | |
| | | * 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) { |
| | |
| | | * @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 |
| | |
| | | } |
| | | |
| | | 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="顶部样式"> |
| | |
| | | .ant-advanced-search-form.modal-setting-form { |
| | | .mob-search-setting-form { |
| | | .textarea { |
| | | .ant-form-item-label { |
| | | width: 16.3%; |
| | |
| | | position: relative; |
| | | left: -3px; |
| | | } |
| | | .ant-col.ant-col-12 { |
| | | display: inline-block; |
| | | float: none; |
| | | vertical-align: top; |
| | | } |
| | | } |
| | |
| | | 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 { |
| | |
| | | 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 { |
| | |
| | | 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 + '\')' |
| | | } |
| | |
| | | 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 = [] |