| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Collapse } from 'antd' |
| | | import { Collapse, notification } from 'antd' |
| | | import moment from 'moment' |
| | | |
| | | import Api from '@/api' |
| | |
| | | |
| | | let setting = {..._config.setting, ..._config.wrap} |
| | | |
| | | if (setting.selected !== 'always' && setting.selected !== 'init' && setting.selected !== 'sign') { |
| | | if (!['always', 'init', 'sign', 'local'].includes(setting.selected)) { |
| | | setting.selected = 'false' |
| | | } else { |
| | | setting.orisel = true |
| | | } |
| | | |
| | | if (_config.setting.sync === 'true') { |
| | |
| | | |
| | | 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') { |
| | |
| | | } |
| | | } else { |
| | | _config.colsCtrls = null |
| | | } |
| | | |
| | | if (setting.$tree && _config.cols[0]) { |
| | | _config.cols[0].$tree = true |
| | | } |
| | | |
| | | let columns = _config.cols |
| | |
| | | this.setState({ |
| | | pageIndex: 1 |
| | | }, () => { |
| | | this.loadmaindata(true, 'true', '', 'timer') |
| | | this.loadData(true, 'true', '', 'timer') |
| | | }) |
| | | }) |
| | | } |
| | |
| | | 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) |
| | | } |
| | | |
| | |
| | | |
| | | 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) |
| | | } |
| | | } |
| | |
| | | |
| | | /** |
| | | * @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 不存在时,不做查询 |
| | |
| | | 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 (result.data.length === 0 && pageIndex > 1) { |
| | | this.reloadIndex() |
| | | return |
| | | } |
| | | |
| | | reset && MKEmitter.emit('resetTable', config.uuid, repage) // 列表重置 |
| | |
| | | return item |
| | | }) |
| | | |
| | | if (setting.$tree && data.length) { |
| | | data = this.getTree(data) |
| | | } |
| | | |
| | | let total = result.total || 0 |
| | | if (config.setting.custompage && data.length) { |
| | | total = data[data.length - 1].mk_total || 0 |
| | |
| | | allSearch.push(...searches) |
| | | } |
| | | |
| | | if (data.length && (id || setting.selected !== 'false')) { |
| | | let keys = null |
| | | if (setting.selected === 'local') { |
| | | keys = this.state.selectedData.map(cell => cell.$$uuid) |
| | | } |
| | | setTimeout(() => { |
| | | MKEmitter.emit('mkCheckTopLine', config.uuid, id, setting.selected, keys) |
| | | }, 200) |
| | | } else { |
| | | MKEmitter.emit('resetSelectLine', config.uuid, '', '') // 广播数据切换 |
| | | if (setting.$hasSyncModule) { |
| | | MKEmitter.emit('syncBalconyData', config.uuid, [], false) |
| | | } |
| | | } |
| | | |
| | | this.setState({ |
| | | data: data, |
| | | selectedData: [], |
| | |
| | | total: total, |
| | | 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: '' }) |
| | |
| | | } |
| | | } |
| | | |
| | | getTree = (data) => { |
| | | const { setting } = this.state |
| | | |
| | | let options = [] |
| | | let pnodes = [] |
| | | let _data = [] |
| | | |
| | | data.forEach(item => { |
| | | let pval = item[setting.parentField] + '' |
| | | let val = item[setting.valueField] + '' |
| | | |
| | | if (pval === setting.mark) { |
| | | pnodes.push({ |
| | | ...item, |
| | | $mk_floor: 1, |
| | | $key: val, |
| | | $pid: '' |
| | | }) |
| | | } else if (pval) { |
| | | options.push({ |
| | | ...item, |
| | | $mk_floor: 0, |
| | | $key: val, |
| | | $pid: pval |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | let get_tree = (parents) => { |
| | | parents.forEach(parent => { |
| | | parent.children = [] |
| | | |
| | | options = options.filter(option => { |
| | | if (option.$pid === parent.$key) { |
| | | option.$mk_floor = parent.$mk_floor + 1 |
| | | option.$pkeys = parent.$pkeys ? [...parent.$pkeys, parent.$key] : [parent.$key] |
| | | |
| | | parent.children.push(option) |
| | | return false |
| | | } |
| | | return true |
| | | }) |
| | | |
| | | if (parent.children.length === 0) { |
| | | parent.children = null |
| | | } else { |
| | | parent.$open = true |
| | | parent.children = get_tree(parent.children) |
| | | } |
| | | }) |
| | | return parents |
| | | } |
| | | |
| | | let tree = get_tree(pnodes) |
| | | |
| | | let get_data = (parents) => { |
| | | parents.forEach(parent => { |
| | | let children = parent.children |
| | | |
| | | delete parent.children |
| | | |
| | | _data.push(parent) |
| | | |
| | | if (children) { |
| | | get_data(children) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | get_data(tree) |
| | | |
| | | if (options.length) { |
| | | _data.push(...options) |
| | | } |
| | | |
| | | _data = _data.map((item, index) => { |
| | | item.key = index |
| | | |
| | | return item |
| | | }) |
| | | |
| | | return _data |
| | | } |
| | | |
| | | /** |
| | | * @description 获取单行数据 |
| | | */ |
| | | 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) { // 主表搜索条件 |
| | |
| | | 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 |
| | | } |
| | | |
| | |
| | | _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 => { |
| | |
| | | * 含有初始不加载的页面,修改设置 |
| | | */ |
| | | refreshbysearch = (searches) => { |
| | | const { setting, BID } = this.state |
| | | |
| | | if (setting.supModule && !BID && setting.supKey !== 'false') { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: setting.supModTip || 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') |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 表格条件改变时重置数据(分页或排序) |
| | | */ |
| | | refreshbytable = (pagination, filters, sorter) => { |
| | | refreshbytable = (pagination, sorter) => { |
| | | if (sorter.order) { |
| | | let _chg = { |
| | | ascend: 'asc', |
| | |
| | | this.setState({ |
| | | pageIndex: pagination.current, |
| | | pageSize: pagination.pageSize, |
| | | orderBy: (sorter.field && sorter.order) ? `${sorter.field} ${sorter.order}` : '' |
| | | orderBy: (sorter.field && sorter.order) ? `${sorter.field} ${sorter.order}` : (pagination.fixed ? this.state.orderBy : '') |
| | | }, () => { |
| | | 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') |
| | | }) |
| | | } |
| | | |
| | | /** |
| | |
| | | if (config.uuid !== menuId) return |
| | | |
| | | if (!id) { |
| | | this.reloadtable() |
| | | this.reloadIndex() |
| | | } else if (config.forbidLine) { |
| | | this.loadData(true, 'false', id) |
| | | } else { |
| | | this.loadLinedata(id) |
| | | } |
| | |
| | | |
| | | if (bid !== this.state.BID || bid !== '') { |
| | | this.setState({ BID: bid, BData: _data, pageIndex: 1 }, () => { |
| | | this.loadmaindata(true, 'true') |
| | | this.loadData(true, 'true') |
| | | }) |
| | | } |
| | | } else { |
| | |
| | | BData: data |
| | | }, () => { |
| | | if (!setting.checkBid) { |
| | | this.loadmaindata(true, 'true') |
| | | 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 |
| | | |
| | | let _id = config.wrap.selected === 'always' ? (id || '') : '' |
| | | if (config.supNodes) { |
| | | if (['mainline', 'maingrid', 'popclose'].includes(position)) { |
| | | let supNode = this.supModules[this.supModules.length - 1] |
| | |
| | | } else { |
| | | if (position === 'line' || position === 'line_grid') { |
| | | if (lines && lines.length === 1) { |
| | | this.loadLinedata(lines[0].$$uuid, position) |
| | | if (config.forbidLine) { |
| | | this.loadData(true, 'false', lines[0].$$uuid) |
| | | } else { |
| | | this.loadLinedata(lines[0].$$uuid, position) |
| | | } |
| | | } else { |
| | | this.reloadtable(btn, id) |
| | | this.loadData(true, 'false', _id) |
| | | } |
| | | } else if (btn.resetPageIndex !== 'false') { |
| | | this.reloadIndex() |
| | | } else { |
| | | this.reloadtable(btn, id) |
| | | this.loadData(true, 'false', _id) |
| | | } |
| | | } |
| | | } else { |
| | | if (position === 'line' || position === 'line_grid') { |
| | | if (lines && lines.length === 1) { |
| | | this.loadLinedata(lines[0].$$uuid, position) |
| | | if (config.forbidLine) { |
| | | this.loadData(true, 'false', lines[0].$$uuid) |
| | | } else { |
| | | this.loadLinedata(lines[0].$$uuid, position) |
| | | } |
| | | } else { |
| | | this.reloadtable(btn, id) |
| | | 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.reloadtable(btn, id) |
| | | this.loadData(true, 'false', _id) |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | if (config.$searchId !== searchId) return |
| | | |
| | | this.setState({pageIndex: 1}, () => { |
| | | this.reloadtable() |
| | | }) |
| | | this.reloadIndex() |
| | | } |
| | | |
| | | render() { |