From 84804b405cb88f659d055b16eb3bd00b813ccb4a Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 10 十二月 2020 10:58:38 +0800 Subject: [PATCH] 2020-12-10 --- src/tabviews/custom/components/table/normal-table/index.jsx | 183 +++++++++++++++++++++++---------------------- 1 files changed, 92 insertions(+), 91 deletions(-) diff --git a/src/tabviews/custom/components/table/normal-table/index.jsx b/src/tabviews/custom/components/table/normal-table/index.jsx index a1eb621..01e5a09 100644 --- a/src/tabviews/custom/components/table/normal-table/index.jsx +++ b/src/tabviews/custom/components/table/normal-table/index.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types' import {connect} from 'react-redux' import { is, fromJS } from 'immutable' -import { notification, Switch } from 'antd' +import { notification } from 'antd' import Api from '@/api' import Utils from '@/utils/utils.js' @@ -21,22 +21,24 @@ class NormalTable extends Component { static propTpyes = { - param: PropTypes.any, // 鍏朵粬椤甸潰浼犻�掔殑鎼滅储鏉′欢绛夊弬鏁� - MenuID: PropTypes.string, // 鑿滃崟Id - MenuNo: PropTypes.string, // 鑿滃崟鍙傛暟 - MenuName: PropTypes.string // 鑿滃崟鍚嶇О + BID: PropTypes.any, // 鐖剁骇Id + data: PropTypes.array, // 缁熶竴鏌ヨ鏁版嵁 + config: PropTypes.object, // 缁勪欢閰嶇疆淇℃伅 + mainSearch: PropTypes.any, // 澶栧眰鎼滅储鏉′欢 + menuType: PropTypes.any, // 鑿滃崟绫诲瀷 } state = { dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, - BID: null, // 椤甸潰璺宠浆鏃舵惡甯D + BID: '', // 涓婄骇ID + BData: '', // 涓婄骇缁勪欢琛屾暟鎹� config: {}, // 椤甸潰閰嶇疆淇℃伅锛屽寘鎷寜閽�佹悳绱€�佹樉绀哄垪銆佹爣绛剧瓑 searchlist: null, // 鎼滅储鏉′欢 actions: null, // 鎸夐挳闆� columns: null, // 鏄剧ず鍒� arr_field: '', // 浣跨敤 sPC_Get_TableData 鏃剁殑鏌ヨ瀛楁闆� setting: null, // 椤甸潰鍏ㄥ眬璁剧疆锛氭暟鎹簮銆佹寜閽強鏄剧ず鍒楀浐瀹氥�佷富閿瓑 - data: null, // 鍒楄〃鏁版嵁闆� + data: [], // 鍒楄〃鏁版嵁闆� selectedData: [], // 宸查�夎〃鏍兼暟鎹� total: 0, // 鎬绘暟 loading: false, // 鍒楄〃鏁版嵁鍔犺浇涓� @@ -44,8 +46,6 @@ pageSize: 10, // 姣忛〉鏁版嵁鏉℃暟 orderBy: '', // 鎺掑簭 search: '', // 鎼滅储鏉′欢鏁扮粍锛屼娇鐢ㄦ椂闇�鍒嗗満鏅鐞� - BIDs: {}, // 涓婄骇琛╥d - pickup: false, // 涓昏〃鏁版嵁闅愯棌鏄剧ず鍒囨崲 statFields: [], // 鍚堣瀛楁 statFValue: [] // 鍚堣鍊� } @@ -55,10 +55,9 @@ * 1銆� initdata 涓烘墦鍗版椂浣跨敤鐨勬暟鎹泦 */ UNSAFE_componentWillMount () { - const { data, initdata } = this.props + const { data, initdata, BID } = this.props let _config = fromJS(this.props.config).toJS() let _cols = new Map() - let _data = null let _sync = _config.setting.sync === 'true' @@ -68,6 +67,15 @@ } else if (_config.setting.sync === 'true' && initdata) { _data = initdata || [] _sync = false + } + + if (_data) { + _data = _data.map((item, index) => { + item.key = index + item.$$uuid = item[_config.setting.primaryKey] || '' + item.$$BID = BID || '' + return item + }) } _config.columns.forEach(item => { @@ -88,6 +96,7 @@ }) this.setState({ + BID: BID || '', title: _config.wrap.title, sync: _sync, data: _data, @@ -108,20 +117,23 @@ /** * @description 涓昏〃鏁版嵁鍔犺浇 - */ - async loadmaindata () { - const { setting, arr_field, BIDs, search, orderBy, BID, pageIndex, pageSize } = this.state + * @param { Boolean } reset 琛ㄦ牸鏄惁閲嶇疆 + * @param { String } repage 琛ㄦ牸鏄惁閲嶇疆椤电爜 + */ + async loadmaindata (reset, repage) { + const { setting, config, arr_field, search, orderBy, BID, pageIndex, pageSize } = this.state let requireFields = search.filter(item => item.required && (!item.value || item.value.length === 0)) - this.setState({ - selectedData: [], - BIDs: { - ...BIDs, - mainTable: '', - mainTabledata: '' - } - }) - + if (setting.supModule && !BID) { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇� + this.setState({ + data: [], + selectedData: [], + total: 0 + }) + MKEmitter.emit('resetSelectLine', config.uuid, '', '') // 骞挎挱鏁版嵁鍒囨崲 + reset && MKEmitter.emit('resetTable', config.uuid, repage) // 鍒楄〃閲嶇疆 + return + } if (requireFields.length > 0) { let labels = requireFields.map(item => item.label) labels = Array.from(new Set(labels)) @@ -142,20 +154,24 @@ let param = UtilsDM.getQueryDataParams(setting, arr_field, search, _orderBy, pageIndex, pageSize, BID, this.props.menuType) if (param.func === 'sPC_Get_TableData') { - param.menuname = this.props.MenuName || '' + param.menuname = config.name || '' } let result = await Api.genericInterface(param) if (result.status) { + MKEmitter.emit('resetSelectLine', config.uuid, '', '') // 骞挎挱鏁版嵁鍒囨崲 + reset && MKEmitter.emit('resetTable', config.uuid, repage) // 鍒楄〃閲嶇疆 + this.setState({ data: result.data.map((item, index) => { item.key = index item.$$uuid = item[setting.primaryKey] || '' + item.$$BID = BID || '' return item }), + selectedData: [], total: result.total, - loading: false, - pickup: false + loading: false }) } else { this.setState({ @@ -173,7 +189,7 @@ * @description 鑾峰彇鍗曡鏁版嵁 */ async loadmainLinedata (id) { - const { setting, arr_field, search, orderBy, BID, pageIndex, pageSize } = this.state + const { setting, config, arr_field, search, orderBy, BID, pageIndex, pageSize } = this.state this.setState({ loading: true @@ -183,7 +199,7 @@ let param = UtilsDM.getQueryDataParams(setting, arr_field, search, _orderBy, pageIndex, pageSize, BID, this.props.menuType, id) if (param.func === 'sPC_Get_TableData') { - param.menuname = this.props.MenuName || '' + param.menuname = config.name || '' } let result = await Api.genericInterface(param) @@ -196,6 +212,8 @@ data = data.map(item => { if (item[setting.primaryKey] === _data[setting.primaryKey]) { _data.key = item.key + _data.$$uuid = _data[setting.primaryKey] || '' + _data.$$BID = BID || '' return _data } else { return item @@ -226,7 +244,14 @@ * @description 鑾峰彇鍚堣瀛楁鍊� */ getStatFieldsValue = () => { - const { setting, search, BID, orderBy, statFields } = this.state + const { setting, config, search, BID, orderBy, statFields } = this.state + + if (setting.supModule && !BID) { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇� + this.setState({ + statFValue: [] + }) + return + } if (statFields.length === 0 || setting.interType !== 'system' || !setting.dataresource) return @@ -239,7 +264,7 @@ let param = UtilsDM.getStatQueryDataParams(setting, statFields, search, _orderBy, BID, this.props.menuType) if (param.func === 'sPC_Get_TableData') { - param.menuname = this.props.MenuName || '' + param.menuname = config.name || '' } Api.genericInterface(param).then(res => { @@ -292,12 +317,11 @@ this.getStatFieldsValue() }) } else { - MKEmitter.emit('resetTable', this.props.MenuID + 'mainTable') // 鍒楄〃閲嶇疆 this.setState({ pageIndex: 1, search: searches }, () => { - this.loadmaindata() + this.loadmaindata(true, 'true') this.getStatFieldsValue() }) } @@ -329,16 +353,14 @@ */ reloadtable = (btn) => { if (!btn || btn.resetPageIndex !== 'false') { - MKEmitter.emit('resetTable', this.props.MenuID + 'mainTable') // 鍒楄〃閲嶇疆 this.setState({ pageIndex: 1 }, () => { - this.loadmaindata() + this.loadmaindata(true, 'true') this.getStatFieldsValue() }) } else { - MKEmitter.emit('resetTable', this.props.MenuID + 'mainTable', 'false') // 鍒楄〃閲嶇疆 - this.loadmaindata() + this.loadmaindata(true, 'false') this.getStatFieldsValue() } } @@ -356,53 +378,20 @@ * @description 瀵煎嚭Excel鏃讹紝鑾峰彇椤甸潰鎼滅储鎺掑簭绛夊弬鏁� */ getexceloutparam = () => { - const { MenuName } = this.props - const { arr_field, orderBy, search, setting} = this.state + const { arr_field, config, orderBy, search, setting} = this.state return { arr_field: arr_field, orderBy: orderBy || setting.order, search: search, - menuName: MenuName + menuName: config.name } } - /** - * @description 琛ㄦ牸閫夋嫨椤瑰垏鎹� - */ - changeSelectedData = (selectedData) => { - this.setState({selectedData}) - } - - /** - * @description 琛ㄦ牸Id鍙樺寲 - */ - handleTableId = (type, id, data) => { - const { BIDs } = this.state - - this.setState({ - BIDs: { - ...BIDs, - [type]: id, - [type + 'data']: data - } - }) - } - - /** - * @description 鏁版嵁灞曞紑鍚堝苟鍒囨崲 - */ - pickupChange = () => { - const { pickup } = this.state - this.setState({ - pickup: !pickup - }) - } - reloadData = (menuId, id, btn) => { - const { MenuID } = this.props + const { config } = this.state - if (MenuID !== menuId) return + if (config.uuid !== menuId) return if (id === 'empty') return if (id === 'formtab') { // 琛ㄥ崟鏍囩椤靛埛鏂� @@ -417,14 +406,36 @@ } } + resetParentParam = (MenuID, id, data) => { + const { setting } = this.state + + if (!setting.supModule || setting.supModule !== MenuID) return + if (id !== this.state.BID) { + this.setState({ + pageIndex: 1, + BID: id, + BData: data + }, () => { + this.loadmaindata(true, 'true') + this.getStatFieldsValue() + }) + } + } + UNSAFE_componentWillReceiveProps(nextProps) { - const { sync, config } = this.state + const { sync, config, BID } = this.state if (sync && !is(fromJS(this.props.data), fromJS(nextProps.data))) { let _data = [] if (nextProps.data && nextProps.data[config.dataName]) { _data = nextProps.data[config.dataName] || [] } + _data = _data.map((item, index) => { + item.key = index + item.$$uuid = item[config.setting.primaryKey] || '' + item.$$BID = BID || '' + return item + }) this.setState({sync: false, data: _data}) } else if (!is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) { @@ -442,6 +453,7 @@ componentDidMount () { MKEmitter.addListener('reloadData', this.reloadData) + MKEmitter.addListener('resetSelectLine', this.resetParentParam) } /** @@ -452,11 +464,11 @@ return } MKEmitter.removeListener('reloadData', this.reloadData) + MKEmitter.removeListener('resetSelectLine', this.resetParentParam) } render() { - const { MenuName } = this.props - const { BID, setting, searchlist, pageSize, actions, config, columns, pickup, selectedData } = this.state + const { BID, setting, searchlist, actions, config, columns, selectedData } = this.state return ( <div className="custom-normal-table"> @@ -474,39 +486,28 @@ BID={BID} setting={setting} actions={actions} - columns={config.columns} - MenuName={MenuName} dict={this.state.dict} - MenuID={this.props.MenuID} + BData={this.state.BData} + columns={config.columns} selectedData={selectedData} refreshdata={this.refreshbyaction} getexceloutparam={this.getexceloutparam} /> </div> <div className="main-table-box"> - {(setting.tableType === 'radio' || setting.tableType === 'checkbox') && this.state.data && this.state.data.length > 0 ? - <Switch title="鏀惰捣" className="main-pickup" checkedChildren="寮�" unCheckedChildren="鍏�" defaultChecked={pickup} onChange={this.pickupChange} /> : null - } <MainTable - tableId="mainTable" - BID={BID} - pickup={pickup} setting={setting} columns={columns} - MenuName={MenuName} - pageSize={pageSize} - dict={this.state.dict} + MenuID={config.uuid} data={this.state.data} fields={config.columns} total={this.state.total} - MenuID={this.props.MenuID} lineMarks={config.lineMarks} loading={this.state.loading} refreshdata={this.refreshbytable} statFValue={this.state.statFValue} - handleTableId={this.handleTableId} refreshbyaction={this.refreshbyaction} - chgSelectData={this.changeSelectedData} + chgSelectData={(selects) => this.setState({selectedData: selects})} /> </div> </div> -- Gitblit v1.8.0