From a02fc6a77fa1b35c6516b2d37108d80e260c6c85 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 07 十一月 2024 22:05:08 +0800 Subject: [PATCH] 2024-11-07 --- src/tabviews/custom/components/table/normal-table/index.jsx | 398 ++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 285 insertions(+), 113 deletions(-) diff --git a/src/tabviews/custom/components/table/normal-table/index.jsx b/src/tabviews/custom/components/table/normal-table/index.jsx index 92c7018..0b77025 100644 --- a/src/tabviews/custom/components/table/normal-table/index.jsx +++ b/src/tabviews/custom/components/table/normal-table/index.jsx @@ -1,7 +1,8 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { notification, Collapse, Modal } from 'antd' +import { Collapse, notification } from 'antd' +import moment from 'moment' import Api from '@/api' import UtilsDM from '@/utils/utils-datamanage.js' @@ -43,6 +44,7 @@ } loaded = false + supModules = [] /** * @description 鍒濆鍖栧鐞� @@ -77,8 +79,6 @@ if (setting.selected !== 'always' && setting.selected !== 'init' && setting.selected !== 'sign') { setting.selected = 'false' - } else { - setting.orisel = true } if (_config.setting.sync === 'true') { @@ -131,6 +131,8 @@ window.GLOB.SyncData.delete(_config.dataName) } + } else if (_config.setting.supModule && !BID && _config.wrap.supKey !== 'false') { + _config.setting.onload = 'false' } if (_config.wrap.collapse === 'true') { @@ -151,6 +153,11 @@ _config.colsCtrls = null } + let columns = _config.cols + if (_config.hasExtend) { + columns = this.getCols(_config.cols, BData, _config.setting.extendTime) + } + this.setState({ pageSize: setting.pageSize || 10, BID: BID || '', @@ -160,7 +167,7 @@ config: _config, setting: setting, actions: _config.action, - columns: _config.cols, + columns: columns, search: _config.$searches, allSearch }) @@ -193,7 +200,7 @@ this.setState({ pageIndex: 1 }, () => { - this.loadmaindata(true, 'true', '', 'timer') + this.loadData(true, 'true', '', 'timer') }) }) } @@ -230,7 +237,7 @@ Api.getLCacheConfig(config.uuid, config.$time, BID).then(res => { if (!res.valid && config.setting.onload === 'true') { setTimeout(() => { - this.loadmaindata(false, 'true', '', 'init') + this.loadData(false, 'true', '', 'init') }, config.setting.delay || 0) } @@ -292,13 +299,13 @@ if (config.setting.onload === 'true') { setTimeout(() => { - this.loadmaindata(false, 'true', '', 'init') + this.loadData(false, 'true', '', 'init') }, config.setting.delay || 0) } } } else if (config.setting.onload === 'true') { setTimeout(() => { - this.loadmaindata() + this.loadData() }, config.setting.delay || 0) } } @@ -378,12 +385,134 @@ MKEmitter.removeListener('transferSyncData', this.transferSyncData) } + getCols = (cols, BData, time) => { + let _cols = [] + let weeks = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�'] + + let excols = (col) => { + let _s = [] + let _marks = col.marks || [] + let names = [] + let fields = [] + + for (let i = 0; i < col.quota; i++) { + fields.push(col.field + (i === 0 ? '' : i)) + + if (col.colUnit === 'day') { + let hasweek = col.dayFormat.indexOf('week') > -1 + let format = col.dayFormat.replace(/\sweek/, '') + let day = moment().add(col.shift + i, 'days').format(format) + + if (hasweek) { + let _w = moment().add(col.shift + i, 'days').weekday() + day = day + ' ' + weeks[_w] + } + + names.push(day) + } else { + let format = col.hourFormat + if (format === 'H point') { + format = 'H鐐�' + } + + let hour = moment(time).add(col.shift + i, 'hours').format(format) + + if (format === 'h:00') { + if (hour === '12:00') { + hour = hour + ' pm' + } else if (hour === moment(time).add(col.shift + i, 'hours').format('H:00')) { + hour = hour + ' am' + } else { + hour = hour + ' pm' + } + } + names.push(hour) + } + } + + if (col.supField) { + names = [] + let val = '' + if (BData) { + let field = col.supField.toLowerCase() + Object.keys(BData).forEach(key => { + if (key.toLowerCase() === field) { + val = BData[key] + '' + } + }) + } + + if (val) { + names = val.split(',') + + if (names.length > fields.length) { + names.length = fields.length + } else if (fields.length > names.length) { + fields.length = names.length + } + } + } + + if (names.length === 0) return _s + + _s = fields.map((f, i) => { + return { + type: 'text', + Align: col.Align, + Width: col.Width, + field: f, + label: names[i], + uuid: col.uuid + i, + marks: _marks.filter(mark => mark.field[0] === f || !fields.includes(mark.field[0])) + } + }) + + return _s + } + + cols.forEach(col => { + if (col.type === 'extend') { + let exs = excols(col) + _cols.push(...exs) + } else if (col.type === 'colspan') { + let subs = [] + col.subcols.forEach(subcol => { + if (subcol.type === 'extend') { + let exs = excols(subcol) + subs.push(...exs) + } else { + subs.push(col) + } + }) + + if (subs.length) { + _cols.push({...col, subcols: subs}) + } + } else { + _cols.push(col) + } + }) + + return _cols + } + + resetCols = (BData) => { + const { config } = this.state + + let columns = this.getCols(config.cols, BData, config.setting.extendTime) + + this.setState({ + columns: columns, + data: [], + selectedData: [], + total: 0 + }) + } + /** * @description 涓昏〃鏁版嵁鍔犺浇 - * @param { Boolean } reset 琛ㄦ牸鏄惁閲嶇疆 - * @param { String } repage 琛ㄦ牸鏄惁閲嶇疆椤电爜 */ - async loadmaindata (reset, repage, id, type) { + async loadData (reset, repage, id, type) { const { setting, config, search, orderBy, BID, pageIndex, pageSize, BData } = this.state if (setting.supModule && !BID && setting.supKey !== 'false') { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇� @@ -398,6 +527,10 @@ reset && MKEmitter.emit('resetTable', config.uuid, 'true') // 鍒楄〃閲嶇疆 if (setting.$hasSyncModule) { MKEmitter.emit('syncBalconyData', config.uuid, [], false) + } + if (config.$hasTopModule) { + window.GLOB.CacheData.set(config.uuid + 'tb', { $$empty: true, $$uuid: '' }) + MKEmitter.emit('mkPublicData', config.uuid + 'tb', { $$empty: true, $$uuid: '' }) } this.loaded = true @@ -440,35 +573,9 @@ Api.writeCacheConfig(config.uuid, result.data || [], BID) } - if (repage === 'false' && result.data && result.data.length === 0 && result.total > 0 && pageIndex > 1) { - let _pageIndex = Math.ceil(result.total / pageSize) - - if (_pageIndex < pageIndex) { - MKEmitter.emit('resetTable', config.uuid, 'repage', _pageIndex) - this.setState({ - pageIndex: _pageIndex, - data: [], - selectedData: [], - total: result.total - }, () => { - this.loadmaindata() - }) - return - } - } - - if ((setting.selected !== 'false' || (setting.orisel && id)) && result.data && result.data.length > 0) { - setTimeout(() => { - MKEmitter.emit('mkCheckTopLine', config.uuid, id, setting.selected) - }, 200) - if (setting.selected === 'init') { - this.setState({setting: {...setting, selected: 'false'}}) - } - } else { - MKEmitter.emit('resetSelectLine', config.uuid, '', '') // 骞挎挱鏁版嵁鍒囨崲 - if (setting.$hasSyncModule) { - MKEmitter.emit('syncBalconyData', config.uuid, [], false) - } + if (repage === 'false' && result.data.length === 0 && pageIndex > 1) { + this.reloadIndex() + return } reset && MKEmitter.emit('resetTable', config.uuid, repage) // 鍒楄〃閲嶇疆 @@ -514,6 +621,17 @@ allSearch.push(...searches) } + if (data.length && (id || setting.selected !== 'false')) { + setTimeout(() => { + MKEmitter.emit('mkCheckTopLine', config.uuid, id, setting.selected) + }, 200) + } else { + MKEmitter.emit('resetSelectLine', config.uuid, '', '') // 骞挎挱鏁版嵁鍒囨崲 + if (setting.$hasSyncModule) { + MKEmitter.emit('syncBalconyData', config.uuid, [], false) + } + } + this.setState({ data: data, selectedData: [], @@ -522,6 +640,15 @@ loading: false }) + if (setting.selected === 'init') { + this.setState({setting: {...setting, selected: 'false'}}) + } + + if (config.$hasTopModule) { + window.GLOB.CacheData.set(config.uuid + 'tb', data[0] || { $$empty: true, $$uuid: '' }) + MKEmitter.emit('mkPublicData', config.uuid + 'tb', data[0] || { $$empty: true, $$uuid: '' }) + } + if (config.timer && config.clearField && result.data && result.data[0]) { let vals = (config.clearValue || '').split(',') if (vals.includes(result.data[0][config.clearField])) { @@ -529,37 +656,14 @@ } } - if (result.message) { - if (result.ErrCode === 'Y') { - Modal.success({ - title: result.message - }) - } else if (result.ErrCode === 'S') { - notification.success({ - top: 92, - message: result.message, - duration: 2 - }) - } - } + UtilsDM.querySuccess(result) } else { this.setState({ loading: false }) this.timer && this.timer.stop() - if (!result.message) return - if (result.ErrCode === 'N') { - Modal.error({ - title: result.message, - }) - } else if (result.ErrCode !== '-2') { - notification.error({ - top: 92, - message: result.message, - duration: 10 - }) - } + UtilsDM.queryFail(result) } } @@ -568,11 +672,6 @@ */ async loadLinedata (id, position) { const { setting, config, search, orderBy, BID, pageIndex, pageSize, BData } = this.state - - if (config.forbidLine) { - this.reloadtable() - return - } let searches = fromJS(search).toJS() if (config.setting.useMSearch) { // 涓昏〃鎼滅储鏉′欢 @@ -595,7 +694,7 @@ let result = await Api.genericInterface(param) if (result.status) { if (position === 'line_grid' && (!result.data || !result.data[0])) { - this.loadmaindata(true, 'false') + this.reloadIndex() return } @@ -607,6 +706,12 @@ _data.$$uuid = _data[setting.primaryKey] || '' _data.$$BID = BID || '' _data.$$BData = BData || '' + + if (setting.controlField) { + if (setting.controlVal.includes(_data[setting.controlField] + '')) { + _data.$disabled = true + } + } if (config.absFields) { config.absFields.forEach(f => { @@ -685,11 +790,8 @@ this.setState({ loading: false }) - notification.error({ - top: 92, - message: result.message, - duration: 10 - }) + + UtilsDM.queryFail(result) } } @@ -698,11 +800,25 @@ * 鍚湁鍒濆涓嶅姞杞界殑椤甸潰锛屼慨鏀硅缃� */ refreshbysearch = (searches) => { + const { setting, BID } = this.state + + if (setting.supModule && !BID && setting.supKey !== 'false') { + notification.warning({ + top: 92, + message: window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒', + duration: 5 + }) + this.setState({ + search: searches + }) + return + } + this.setState({ pageIndex: 1, search: searches }, () => { - this.loadmaindata(true, 'true') + this.loadData(true, 'true') }) } @@ -723,23 +839,19 @@ pageSize: pagination.pageSize, orderBy: (sorter.field && sorter.order) ? `${sorter.field} ${sorter.order}` : '' }, () => { - this.loadmaindata() + this.loadData() }) } /** * @description 琛ㄦ牸鍒锋柊 */ - reloadtable = (btn, id) => { - if (!btn || btn.resetPageIndex !== 'false') { - this.setState({ - pageIndex: 1 - }, () => { - this.loadmaindata(true, 'true', id) - }) - } else { - this.loadmaindata(true, 'false', id) - } + reloadIndex = () => { + this.setState({ + pageIndex: 1 + }, () => { + this.loadData(true, 'true') + }) } /** @@ -773,51 +885,112 @@ if (config.uuid !== menuId) return if (!id) { - this.reloadtable() + this.reloadIndex() + } else if (config.forbidLine) { + this.loadData(true, 'false', id) } else { this.loadLinedata(id) } } resetParentParam = (MenuID, id, data) => { - const { setting } = this.state + const { config, setting } = this.state - if (!setting.supModule || setting.supModule !== MenuID) return + if (config.supNodes) { + if (!config.supNodes.includes(MenuID)) return + this.supModules = this.supModules.filter(item => item.key !== MenuID) + let bid = '' + let _data = null - if (id !== this.state.BID || id !== '') { - this.setState({ - pageIndex: 1, - BID: id, - BData: data - }, () => { - if (!setting.checkBid) { - this.loadmaindata(true, 'true') + if (id) { + this.supModules.push({key: MenuID, value: id, data}) + } + if (this.supModules.length > 0) { + bid = this.supModules[this.supModules.length - 1].value + _data = this.supModules[this.supModules.length - 1].data + } + + if (bid !== this.state.BID || bid !== '') { + this.setState({ BID: bid, BData: _data, pageIndex: 1 }, () => { + this.loadData(true, 'true') + }) + } + } else { + if (!setting.supModule || setting.supModule !== MenuID) return + + if (id !== this.state.BID || id !== '') { + if (config.parCtrl) { + this.resetCols(data) } - }) + this.setState({ + pageIndex: 1, + BID: id, + BData: data + }, () => { + if (!setting.checkBid) { + this.loadData(true, 'true') + } + }) + } } } /** * @description 鎸夐挳鎵ц瀹屾垚鍚庨〉闈㈠埛鏂� - * @param {*} menuId // 鑿滃崟Id - * @param {*} position // 鍒锋柊浣嶇疆 - * @param {*} btn // 鎵ц鐨勬寜閽� */ refreshByButtonResult = (menuId, position, btn, id, lines) => { const { config, BID } = this.state if (config.uuid !== menuId) return - if (position === 'line' || position === 'line_grid') { - if (lines && lines.length === 1) { - this.loadLinedata(lines[0].$$uuid, position) + let _id = config.wrap.selected === 'always' ? (id || '') : '' + if (config.supNodes) { + if (['mainline', 'maingrid', 'popclose'].includes(position)) { + let supNode = this.supModules[this.supModules.length - 1] + config.supNodes.forEach((item, i) => { + setTimeout(() => { + if (supNode && supNode.key === item) { + MKEmitter.emit('reloadData', item, supNode.value) + } else { + MKEmitter.emit('reloadData', item) + } + }, i * 10) + }) } else { - this.reloadtable(btn, id) + if (position === 'line' || position === 'line_grid') { + if (lines && lines.length === 1) { + if (config.forbidLine) { + this.loadData(true, 'false', lines[0].$$uuid) + } else { + this.loadLinedata(lines[0].$$uuid, position) + } + } else { + this.loadData(true, 'false', _id) + } + } else if (btn.resetPageIndex !== 'false') { + this.reloadIndex() + } else { + this.loadData(true, 'false', _id) + } } - } else if ((position === 'mainline' || position === 'popclose') && config.setting.supModule && BID) { // 鍒锋柊婧愮粍浠舵椂锛岄檮甯﹀埛鏂颁笂绾ц涓庡綋鍓嶇粍浠� - MKEmitter.emit('reloadData', config.setting.supModule, BID) } else { - this.reloadtable(btn, id) + if (position === 'line' || position === 'line_grid') { + if (lines && lines.length === 1) { + if (config.forbidLine) { + this.loadData(true, 'false', lines[0].$$uuid) + } else { + this.loadLinedata(lines[0].$$uuid, position) + } + } else { + this.loadData(true, 'false', _id) + } + } else if (['mainline', 'maingrid', 'popclose'].includes(position) && config.setting.supModule) { + MKEmitter.emit('reloadData', config.setting.supModule, position === 'maingrid' ? '' : BID) + } else if (btn.resetPageIndex !== 'false') { + this.reloadIndex() + } else { + this.loadData(true, 'false', _id) + } } } @@ -850,9 +1023,7 @@ if (config.$searchId !== searchId) return - this.setState({pageIndex: 1}, () => { - this.reloadtable() - }) + this.reloadIndex() } render() { @@ -883,6 +1054,7 @@ data={this.state.data} fields={config.columns} total={this.state.total} + parCtrl={config.parCtrl} colsCtrls={config.colsCtrls} lineMarks={config.lineMarks} loading={this.state.loading} -- Gitblit v1.8.0