From 2aa5ab63b4bbce5c36dbb3511b205b3b5f6af9bd Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 07 五月 2024 11:34:20 +0800 Subject: [PATCH] 2024-05-07 --- src/tabviews/custom/components/table/normal-table/index.jsx | 490 ++++++++++++++++++++++++++++-------------------------- 1 files changed, 256 insertions(+), 234 deletions(-) diff --git a/src/tabviews/custom/components/table/normal-table/index.jsx b/src/tabviews/custom/components/table/normal-table/index.jsx index 262deee..88851eb 100644 --- a/src/tabviews/custom/components/table/normal-table/index.jsx +++ b/src/tabviews/custom/components/table/normal-table/index.jsx @@ -1,7 +1,7 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { notification, Collapse, Modal } from 'antd' +import { Collapse } from 'antd' import Api from '@/api' import UtilsDM from '@/utils/utils-datamanage.js' @@ -29,7 +29,6 @@ config: {}, // 椤甸潰閰嶇疆淇℃伅锛屽寘鎷寜閽�佹悳绱€�佹樉绀哄垪銆佹爣绛剧瓑 actions: null, // 鎸夐挳闆� columns: null, // 鏄剧ず鍒� - arr_field: '', // 鏌ヨ瀛楁闆� setting: null, // 椤甸潰鍏ㄥ眬璁剧疆锛氭暟鎹簮銆佹寜閽強鏄剧ず鍒楀浐瀹氥�佷富閿瓑 data: [], // 鍒楄〃鏁版嵁闆� selectedData: [], // 宸查�夎〃鏍兼暟鎹� @@ -39,10 +38,12 @@ pageSize: 10, // 姣忛〉鏁版嵁鏉℃暟 orderBy: '', // 鎺掑簭 search: '', // 鎼滅储鏉′欢鏁扮粍锛屼娇鐢ㄦ椂闇�鍒嗗満鏅鐞� - statFValue: [] // 鍚堣鍊� + statFValue: [], // 鍚堣鍊� + allSearch: null } loaded = false + supModules = [] /** * @description 鍒濆鍖栧鐞� @@ -88,7 +89,7 @@ _data = window.GLOB.SyncData.get(_config.dataName) || [] if (_config.$cache) { - Api.writeCacheConfig(_config.uuid, fromJS(_data).toJS()) + Api.writeCacheConfig(_config.uuid, fromJS(_data).toJS(), BID) } _config.setting.sync = 'false' @@ -139,6 +140,22 @@ _config.style = _config.style || {} + let allSearch = null + if (_config.colsCtrls && _config.colsCtrls.length > 0) { + allSearch = [{key: 'BID', value: BID || ''}] + allSearch.push(..._config.$searches) + if (_config.setting.useMSearch) { + let mainSearch = window.GLOB.SearchBox.get(_config.$searchId) || [] + allSearch.push(...mainSearch) + } + } else { + _config.colsCtrls = null + } + + // if (_config.hasExtend) { + + // } + this.setState({ pageSize: setting.pageSize || 10, BID: BID || '', @@ -149,8 +166,8 @@ setting: setting, actions: _config.action, columns: _config.cols, - arr_field: _config.columns.map(col => col.field).join(','), - search: _config.$searches + search: _config.$searches, + allSearch }) } @@ -182,12 +199,13 @@ pageIndex: 1 }, () => { this.loadmaindata(true, 'true', '', 'timer') - this.getStatFieldsValue() }) }) } this.initExec() + + this.autoExec() } /** @@ -209,21 +227,21 @@ } initExec = () => { - const { config, setting } = this.state + const { config, setting, BID } = this.state if (config.$cache) { if (config.$time && !setting.laypage) { if (!this.loaded) { - Api.getLCacheConfig(config.uuid, config.$time).then(res => { - if (!res && config.setting.onload === 'true') { + Api.getLCacheConfig(config.uuid, config.$time, BID).then(res => { + if (!res.valid && config.setting.onload === 'true') { setTimeout(() => { - this.loadmaindata() + this.loadmaindata(false, 'true', '', 'init') }, config.setting.delay || 0) } - if (!res || this.loaded) return + if (!res.data || this.loaded) return - this.setState({data: res.map((item, index) => { + this.setState({data: res.data.map((item, index) => { item.key = index item.$$uuid = item[config.setting.primaryKey] || '' item.$$key = '' + item.key + item.$$uuid @@ -249,10 +267,10 @@ } } else { if (!this.loaded) { - Api.getLCacheConfig(config.uuid, 0).then(res => { - if (!res || this.loaded) return + Api.getLCacheConfig(config.uuid, 0, BID).then(res => { + if (!res.data || this.loaded) return - this.setState({data: res.map((item, index) => { + this.setState({data: res.data.map((item, index) => { item.key = index item.$$uuid = item[config.setting.primaryKey] || '' item.$$key = '' + item.key + item.$$uuid @@ -279,16 +297,33 @@ if (config.setting.onload === 'true') { setTimeout(() => { - this.loadmaindata() - this.getStatFieldsValue() + this.loadmaindata(false, 'true', '', 'init') }, config.setting.delay || 0) } } } else if (config.setting.onload === 'true') { setTimeout(() => { this.loadmaindata() - this.getStatFieldsValue() }, config.setting.delay || 0) + } + } + + autoExec = (times) => { + const { config } = this.state + + if (!config.wrap.autoExec) return + + let btn = document.getElementById('button' + config.wrap.autoExec) + + this.autoTimer && clearTimeout(this.autoTimer) + + if (btn) { + MKEmitter.emit('triggerBtnId', config.wrap.autoExec, []) + } else if (!times || times < 20) { + times = times ? times + 1 : 1 + this.autoTimer = setTimeout(() => { + this.autoExec(times) + }, 1000) } } @@ -302,7 +337,7 @@ let _data = window.GLOB.SyncData.get(config.dataName) || [] if (config.$cache) { - Api.writeCacheConfig(config.uuid, fromJS(_data).toJS()) + Api.writeCacheConfig(config.uuid, fromJS(_data).toJS(), BID) } _data = _data.map((item, index) => { @@ -354,12 +389,13 @@ * @param { String } repage 琛ㄦ牸鏄惁閲嶇疆椤电爜 */ async loadmaindata (reset, repage, id, type) { - const { setting, config, arr_field, search, orderBy, BID, pageIndex, pageSize, BData } = this.state + const { setting, config, search, orderBy, BID, pageIndex, pageSize, BData } = this.state if (setting.supModule && !BID && setting.supKey !== 'false') { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇� this.setState({ data: [], selectedData: [], + loading: false, total: 0 }) @@ -370,6 +406,7 @@ } this.loaded = true + this.requestId = '' return } @@ -395,13 +432,17 @@ } let _orderBy = orderBy || setting.order - let param = UtilsDM.getQueryDataParams(setting, arr_field, searches, _orderBy, pageIndex, pageSize, BID) + let param = UtilsDM.getQueryDataParams(setting, searches, _orderBy, pageIndex, pageSize, BID) - let result = await Api.genericInterface(param) + this.requestId = config.uuid + new Date().getTime() + + let result = await Api.genericInterface(param, '', '', this.requestId) if (result.status) { + if (result.$requestId && this.requestId !== result.$requestId) return + this.loaded = true - if (config.$cache && pageIndex === 1 && config.setting.onload !== 'false') { - Api.writeCacheConfig(config.uuid, result.data || '') + if (config.$cache && type === 'init') { + Api.writeCacheConfig(config.uuid, result.data || [], BID) } if (repage === 'false' && result.data && result.data.length === 0 && result.total > 0 && pageIndex > 1) { @@ -467,10 +508,22 @@ return item }) + let total = result.total || 0 + if (config.setting.custompage && data.length) { + total = data[data.length - 1].mk_total || 0 + } + + let allSearch = null + if (config.colsCtrls) { + allSearch = [{key: 'BID', value: BID || ''}] + allSearch.push(...searches) + } + this.setState({ data: data, selectedData: [], - total: result.total, + allSearch: allSearch, + total: total, loading: false }) @@ -481,45 +534,27 @@ } } - 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) } } /** * @description 鑾峰彇鍗曡鏁版嵁 */ - async loadmainLinedata (id) { - const { setting, config, arr_field, search, orderBy, BID, pageIndex, pageSize, BData } = this.state + 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) { // 涓昏〃鎼滅储鏉′欢 @@ -537,35 +572,32 @@ }) let _orderBy = orderBy || setting.order - let param = UtilsDM.getQueryDataParams(setting, arr_field, searches, _orderBy, pageIndex, pageSize, BID, id) + let param = UtilsDM.getQueryDataParams(setting, searches, _orderBy, pageIndex, pageSize, BID, id) let result = await Api.genericInterface(param) if (result.status) { - if (!result.data || !result.data[0]) { - this.setState({ - loading: false - }) - + if (position === 'line_grid' && (!result.data || !result.data[0])) { + this.loadmaindata(true, 'false') return } - + let data = fromJS(this.state.data).toJS() let selectedData = fromJS(this.state.selectedData).toJS() - let _data = result.data[0] - _data.$$uuid = _data[setting.primaryKey] || '' - _data.$$BID = BID || '' - _data.$$BData = BData || '' - - if (config.absFields) { - config.absFields.forEach(f => { - if (!isNaN(_data[f])) { - _data[f] = Math.abs(_data[f]) - } - }) - } - - try { + if (result.data && result.data[0]) { + let _data = result.data[0] + _data.$$uuid = _data[setting.primaryKey] || '' + _data.$$BID = BID || '' + _data.$$BData = BData || '' + + if (config.absFields) { + config.absFields.forEach(f => { + if (!isNaN(_data[f])) { + _data[f] = Math.abs(_data[f]) + } + }) + } + data = data.map(item => { if (item.$$uuid === _data.$$uuid) { _data.key = item.key @@ -576,99 +608,68 @@ return item } }) + + if (!_data.$Index) { + this.setState({ + loading: false + }) + return + } + selectedData = selectedData.map(item => { if (_data.$$uuid === item.$$uuid) { return _data } return item }) - } catch (e) { - console.warn('鏁版嵁鏌ヨ閿欒') + + if (selectedData.length && _data.$$uuid === selectedData[selectedData.length - 1].$$uuid) { + MKEmitter.emit('resetSelectLine', config.uuid, _data.$$uuid || '', _data) + } + + this.setState({ + data, + selectedData, + loading: false + }) + + if (config.setting.$hasSyncModule) { + MKEmitter.emit('syncBalconyData', config.uuid, selectedData, data.length === selectedData.length) + } + } else { + let index = data.findIndex(item => item.$$uuid === id) + + if (index === -1) { + this.setState({ + loading: false + }) + return + } + + data = data.filter(item => item.$$uuid !== id) + data = data.map((item, i) => { + item.key = i + item.$$key = '' + item.key + item.$$uuid + + return item + }) + + this.setState({ + data: data, + loading: false + }) + + setTimeout(() => { + MKEmitter.emit('resetTable', config.uuid, 'delete', index) + }, 20) } - - MKEmitter.emit('resetSelectLine', config.uuid, _data.$$uuid || '', _data) - - this.setState({ - data, - selectedData, - loading: false - }) } else { this.setState({ loading: false }) - notification.error({ - top: 92, - message: result.message, - duration: 10 - }) + + UtilsDM.queryFail(result) } - } - - /** - * @description 鑾峰彇鍚堣瀛楁鍊� - */ - getStatFieldsValue = () => { - const { setting, config, search, BID, orderBy } = this.state - - if (setting.supModule && !BID && setting.supKey !== 'false') { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇� - this.setState({ - statFValue: [] - }) - return - } - - if (config.statFields.length === 0 || setting.interType !== 'system' || !setting.dataresource) return - - let searches = fromJS(search).toJS() - if (config.setting.useMSearch) { // 涓昏〃鎼滅储鏉′欢 - let mainSearch = window.GLOB.SearchBox.get(config.$searchId) || [] - let keys = config.$s_keys || [] - mainSearch.forEach(item => { - if (keys.includes(item.key.toLowerCase())) return - - searches.push(item) - }) - } - - if (config.$s_req && searches.filter(item => item.required && item.value === '').length > 0) { - return - } - - let _orderBy = orderBy || setting.order - let param = UtilsDM.getStatQueryDataParams(setting, config.statFields, searches, _orderBy, BID) - - Api.genericInterface(param).then(res => { - if (res.status) { - let _data = res.data[0] - let values = [] - - if (_data) { - config.statFields.forEach(item => { - if (_data[item.field] || _data[item.field] === 0) { - let val = +_data[item.field] - if (isNaN(val)) { - val = 0 - } - val = val.toFixed(item.decimal) - values.push({label: item.label, value: val}) - } - }) - } - this.setState({ - statFValue: values - }) - } else { - this.setState({ - statFValue: [] - }) - notification.error({ - top: 92, - message: res.message, - duration: 10 - }) - } - }) } /** @@ -681,7 +682,6 @@ search: searches }, () => { this.loadmaindata(true, 'true') - this.getStatFieldsValue() }) } @@ -715,11 +715,9 @@ pageIndex: 1 }, () => { this.loadmaindata(true, 'true', id) - this.getStatFieldsValue() }) } else { this.loadmaindata(true, 'false', id) - this.getStatFieldsValue() } } @@ -727,7 +725,7 @@ * @description 瀵煎嚭Excel鏃讹紝鑾峰彇椤甸潰鎼滅储鎺掑簭绛夊弬鏁� */ queryModuleParam = (menuId, callback) => { - const { arr_field, config, orderBy, search, setting} = this.state + const { config, orderBy, search, setting} = this.state if (config.uuid !== menuId) return @@ -743,10 +741,8 @@ } callback({ - arr_field: arr_field, orderBy: orderBy || setting.order, - search: searches, - menuName: config.name + search: searches }) } @@ -758,24 +754,46 @@ if (!id) { this.reloadtable() } else { - this.loadmainLinedata(id) + 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 - }, () => { - this.loadmaindata(true, 'true') - this.getStatFieldsValue() - }) + 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.loadmaindata(true, 'true') + }) + } + } else { + if (!setting.supModule || setting.supModule !== MenuID) return + + if (id !== this.state.BID || id !== '') { + this.setState({ + pageIndex: 1, + BID: id, + BData: data + }, () => { + if (!setting.checkBid) { + this.loadmaindata(true, 'true') + } + }) + } } } @@ -790,16 +808,41 @@ if (config.uuid !== menuId) return - if (position === 'line') { - if (lines && lines.length === 1) { - this.loadmainLinedata(lines[0].$$uuid) + if (config.supNodes) { + if (position === 'mainline' || position === 'popclose') { + 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 { + if (position === 'line' || position === 'line_grid') { + if (lines && lines.length === 1) { + this.loadLinedata(lines[0].$$uuid, position) + } else { + this.reloadtable(btn, id) + } + } else { + this.reloadtable(btn, id) + } + } + } else { + if (position === 'line' || position === 'line_grid') { + if (lines && lines.length === 1) { + this.loadLinedata(lines[0].$$uuid, position) + } else { + this.reloadtable(btn, id) + } + } else if ((position === 'mainline' || position === 'popclose') && config.setting.supModule && BID) { // 鍒锋柊婧愮粍浠舵椂锛岄檮甯﹀埛鏂颁笂绾ц涓庡綋鍓嶇粍浠� + MKEmitter.emit('reloadData', config.setting.supModule, BID) } else { this.reloadtable(btn, id) } - } else if ((position === 'mainline' || position === 'popclose') && config.setting.supModule && BID) { // 鍒锋柊婧愮粍浠舵椂锛岄檮甯﹀埛鏂颁笂绾ц涓庡綋鍓嶇粍浠� - MKEmitter.emit('reloadData', config.setting.supModule, BID) - } else { - this.reloadtable(btn, id) } } @@ -838,72 +881,51 @@ } render() { - const { BID, setting, actions, config, columns, selectedData, BData, data } = this.state + const { BID, setting, actions, config, columns, selectedData, BData, data, allSearch } = this.state let style = {...config.style} if (config.wrap.empty === 'hidden' && (!data || data.length === 0)) { style.display = 'none' } + let content = <> + {config.search.length ? + <MainSearch BID={BID} config={config} refreshdata={this.refreshbysearch}/> : null + } + {actions.length > 0 ? <MainAction + BID={BID} + setting={setting} + actions={actions} + BData={BData} + columns={config.columns} + selectedData={selectedData} + /> : (setting.tableType || config.search.length > 0 ? <div className="mk-action-space" style={{height: '25px'}}></div> : null)} + <MainTable + setting={setting} + columns={columns} + MenuID={config.uuid} + allSearch={allSearch} + data={this.state.data} + fields={config.columns} + total={this.state.total} + colsCtrls={config.colsCtrls} + lineMarks={config.lineMarks} + loading={this.state.loading} + refreshdata={this.refreshbytable} + statFValue={this.state.statFValue} + chgSelectData={(selects) => this.setState({selectedData: selects})} + /> + </> + return ( <div className="custom-normal-table" id={'anchor' + config.uuid} style={style}> {config.wrap.collapse === 'true' ? <Collapse bordered={false} defaultActiveKey="1" expandIconPosition="right"> <Panel forceRender={true} header={<NormalHeader config={config}/>} key="1"> - {config.search && config.search.length ? - <MainSearch BID={BID} config={config} refreshdata={this.refreshbysearch}/> : null - } - {actions.length > 0 ? <MainAction - BID={BID} - setting={setting} - actions={actions} - BData={BData} - columns={config.columns} - selectedData={selectedData} - /> : <div className="mk-action-space" style={{height: '25px'}}></div>} - <div className="main-table-box"> - <MainTable - setting={setting} - columns={columns} - MenuID={config.uuid} - data={data} - fields={config.columns} - total={this.state.total} - lineMarks={config.lineMarks} - loading={this.state.loading} - refreshdata={this.refreshbytable} - statFValue={this.state.statFValue} - chgSelectData={(selects) => this.setState({selectedData: selects})} - /> - </div> + {content} </Panel> </Collapse> : <> <NormalHeader config={config}/> - {config.search && config.search.length ? - <MainSearch BID={BID} config={config} refreshdata={this.refreshbysearch}/> : null - } - {actions.length > 0 ? <MainAction - BID={BID} - setting={setting} - actions={actions} - BData={BData} - columns={config.columns} - selectedData={selectedData} - /> : <div className="mk-action-space" style={{height: '25px'}}></div>} - <div className={'main-table-box ' + (!actions || actions.length === 0 ? 'no-action' : '')}> - <MainTable - setting={setting} - columns={columns} - MenuID={config.uuid} - data={this.state.data} - fields={config.columns} - total={this.state.total} - lineMarks={config.lineMarks} - loading={this.state.loading} - refreshdata={this.refreshbytable} - statFValue={this.state.statFValue} - chgSelectData={(selects) => this.setState({selectedData: selects})} - /> - </div> + {content} </>} </div> ) -- Gitblit v1.8.0