From f267d04e0561a0a20d1f2a9f558a273558ece90d Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期一, 24 五月 2021 17:50:19 +0800 Subject: [PATCH] 2021-05-24 --- src/tabviews/custom/components/form/normal-form/index.jsx | 284 ++++++++++++++++++++++++++++++++------------------------ 1 files changed, 163 insertions(+), 121 deletions(-) diff --git a/src/tabviews/custom/components/form/normal-form/index.jsx b/src/tabviews/custom/components/form/normal-form/index.jsx index 2652701..aa6387c 100644 --- a/src/tabviews/custom/components/form/normal-form/index.jsx +++ b/src/tabviews/custom/components/form/normal-form/index.jsx @@ -2,13 +2,13 @@ import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' import { connect } from 'react-redux' -import { Spin, notification } from 'antd' +import { Spin, notification, Button } from 'antd' // import moment from 'moment' import Api from '@/api' -// import Utils from '@/utils/utils.js' +import Utils from '@/utils/utils.js' import UtilsDM from '@/utils/utils-datamanage.js' -// import asyncComponent from '@/utils/asyncComponent' +import asyncComponent from '@/utils/asyncComponent' import asyncSpinComponent from '@/utils/asyncSpinComponent' import MKEmitter from '@/utils/events.js' import zhCN from '@/locales/zh-CN/main.js' @@ -17,6 +17,7 @@ import './index.scss' const MutilForm = asyncSpinComponent(() => import('@/tabviews/zshare/mutilform')) +const NormalButton = asyncComponent(() => import('@/tabviews/zshare/actionList/normalbutton')) class NormalForm extends Component { static propTpyes = { @@ -34,22 +35,23 @@ loading: false, // 鏁版嵁鍔犺浇鐘舵�� activeKey: '', // 閫変腑鏁版嵁 sync: false, // 鏄惁缁熶竴璇锋眰鏁版嵁 - data: {}, // 鏁版嵁 - group: null + data: null, // 鏁版嵁 + group: null, + step: 0 } UNSAFE_componentWillMount () { const { data, BID, config } = this.props - let _data = {} + let _data = null let _sync = false - if (config.setting && config.wrap.datatype !== 'static') { + if (config.wrap.datatype !== 'static') { _sync = config.setting.sync === 'true' - if (_sync && data) { - _data = data[config.dataName] || {} - if (_data && Array.isArray(_data)) { + if (_sync && data && data[config.dataName]) { + _data = data[config.dataName] + if (Array.isArray(_data)) { _data = _data[0] || {} } _sync = false @@ -58,10 +60,51 @@ _data = {} } + let roleId = sessionStorage.getItem('role_id') || '' + + config.subcards = config.subcards.map(group => { + group.subButton.uuid = group.uuid + group.subButton.$menuId = group.uuid + group.subButton.Ot = 'requiredSgl' + group.subButton.OpenType = 'formSubmit' + group.subButton.execError = 'never' + + group.fields = group.fields.map(cell => { + // 鏁版嵁婧恠ql璇彞锛岄澶勭悊锛屾潈闄愰粦鍚嶅崟瀛楁璁剧疆涓洪殣钘忚〃鍗� + if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(cell.type) && cell.resourceType === '1') { + let _option = Utils.getSelectQueryOptions(cell) + + cell.data_sql = Utils.formatOptions(_option.sql) + cell.base_sql = window.btoa(window.encodeURIComponent(_option.sql)) + cell.arr_field = _option.field + } + + // 瀛楁鏉冮檺榛戝悕鍗� + if (!cell.blacklist || !roleId || cell.blacklist.length === 0) return cell + if (cell.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) { + cell.hidden = 'true' + } + + return cell + }) + + return group + }) + + let _group = config.subcards[0] + + if (_data && config.wrap.statusControl && _data[config.wrap.statusControl]) { + let _status = _data[config.wrap.statusControl] + + let _groups = config.subcards.filter(item => item.setting.status === _status)[0] + _group = _groups || _group + } + this.setState({ sync: _sync, data: _data, - group: config.subcards[0], + group: _group, + step: _group.sort - 1, BID: BID || '', config: config, arr_field: config.columns.map(col => col.field).join(','), @@ -73,9 +116,9 @@ } componentDidMount () { - MKEmitter.addListener('reloadData', this.reloadData) + MKEmitter.addListener('mkFormSubmit', this.mkFormSubmit) MKEmitter.addListener('resetSelectLine', this.resetParentParam) - MKEmitter.removeListener('refreshByButtonResult', this.refreshByButtonResult) + MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult) } shouldComponentUpdate (nextProps, nextState) { @@ -86,7 +129,7 @@ this.setState = () => { return } - MKEmitter.removeListener('reloadData', this.reloadData) + MKEmitter.removeListener('mkFormSubmit', this.mkFormSubmit) MKEmitter.removeListener('resetSelectLine', this.resetParentParam) MKEmitter.removeListener('refreshByButtonResult', this.refreshByButtonResult) } @@ -95,18 +138,24 @@ * @description 鍥捐〃鏁版嵁鏇存柊锛屽埛鏂板唴瀹� */ UNSAFE_componentWillReceiveProps (nextProps) { - const { sync, config } = this.state + const { sync, config, group } = this.state if (sync && !is(fromJS(this.props.data), fromJS(nextProps.data))) { let _data = {} + let _group = group if (nextProps.data && nextProps.data[config.dataName]) { _data = nextProps.data[config.dataName] - if (_data && Array.isArray(_data)) { - _data = _data[0] + if (Array.isArray(_data)) { + _data = _data[0] || {} } } + if (config.wrap.statusControl && _data[config.wrap.statusControl]) { + let _status = _data[config.wrap.statusControl] + let _groups = config.subcards.filter(item => item.setting.status === _status)[0] + _group = _groups || _group + } - this.setState({sync: false, data: _data}) + this.setState({sync: false, data: _data, group: _group, step: _group.sort - 1,}) } else if (nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) { if (config.wrap.datatype !== 'static' && config.setting.syncRefresh === 'true') { this.setState({}, () => { @@ -123,27 +172,53 @@ * @param {*} btn // 鎵ц鐨勬寜閽� */ refreshByButtonResult = (menuId, position, btn) => { - const { config, BID } = this.state + const { config, group } = this.state - if (config.uuid !== menuId) return - - this.loadData() // 鏁版嵁鍒锋柊 + if (group.uuid !== menuId) return if (btn.syncComponentId && btn.syncComponentId !== config.uuid && btn.syncComponentId !== config.setting.supModule) { MKEmitter.emit('reloadData', btn.syncComponentId) // 鍚岀骇鏍囩鍒锋柊 } - if (position === 'mainline' && config.setting.supModule) { // 涓昏〃琛屽埛鏂� - MKEmitter.emit('reloadData', config.setting.supModule, (BID || 'empty')) - } else if (position === 'popclose') { // 鏍囩鍏抽棴鍒锋柊 - config.setting.supModule && MKEmitter.emit('reloadData', config.setting.supModule, (BID || 'empty')) - btn.$tabId && MKEmitter.emit('refreshPopButton', btn.$tabId) + if (config.subcards.length > group.sort) { + let _group = config.subcards.filter(item => item.sort === (group.sort + 1))[0] + + this.setState({group: null, step: group.sort}, () => { + this.setState({group: _group}) + }) + } else { + this.setState({step: group.sort}) + } + + if (btn.linkmenu && btn.linkmenu.length > 0) { + let menu_id = btn.linkmenu[btn.linkmenu.length - 1] + let menu = this.props.permMenus.filter(m => m.MenuID === menu_id)[0] || '' + + if (!menu) return + + let newtab = { + ...menu, + selected: true, + param: {} + } + let tabs = this.props.tabviews.filter((tab, i) => { + tab.selected = false + return tab.MenuID !== newtab.MenuID + }) + + if (this.props.tabviews.length > tabs.length) { + this.props.modifyTabview(fromJS(tabs).toJS()) + } + + this.setState({}, () => { + tabs.push(newtab) + this.props.modifyTabview(tabs) + }) } } resetParentParam = (MenuID, id) => { const { config } = this.state - if (config.wrap.datatype === 'static' || !config.setting.supModule || config.setting.supModule !== MenuID) return if (id !== this.state.BID) { this.setState({ BID: id }, () => { @@ -152,25 +227,11 @@ } } - reloadData = (menuId) => { - const { config } = this.state - - if (menuId !== config.uuid) return - - this.loadData() - } - - async loadData (hastimer) { + async loadData () { const { mainSearch, menuType } = this.props - const { config, arr_field, BID } = this.state + const { config, arr_field, BID, group } = this.state - if (config.wrap.datatype === 'static') { - this.setState({ - data: {}, - loading: false - }) - return - } else if (config.setting.supModule && !BID) { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇� + if (config.wrap.datatype === 'static' || (config.setting.supModule && !BID)) { this.setState({ data: {}, loading: false @@ -188,11 +249,17 @@ }) } - if (!hastimer) { + let requireFields = searches.filter(item => item.required && (!item.value || item.value.length === 0)) + if (requireFields.length > 0) { this.setState({ - loading: true + loading: false }) + return } + + this.setState({ + loading: true + }) let _orderBy = config.setting.order || '' let param = UtilsDM.getQueryDataParams(config.setting, arr_field, searches, _orderBy, 1, 1, BID, menuType) @@ -200,10 +267,18 @@ let result = await Api.genericInterface(param) if (result.status) { let _data = result.data && result.data[0] ? result.data[0] : {} + let _group = group + if (config.wrap.statusControl && _data[config.wrap.statusControl]) { + let _status = _data[config.wrap.statusControl] + let _groups = config.subcards.filter(item => item.setting.status === _status)[0] + _group = _groups || _group + } this.setState({ + group: _group, + step: _group.sort - 1, activeKey: '', - data: _data, + data: _data || {}, loading: false }) } else { @@ -218,85 +293,38 @@ } } - changeCard = (index, item) => { - const { config, data, activeKey } = this.state + mkFormSubmit = (btnId) => { + const { group } = this.state - this.openView(item) + if (group.uuid !== btnId) return - if (!config.wrap.cardType || activeKey === index) return - - this.setState({ - activeKey: index + this.formRef.handleConfirm().then(res => { + MKEmitter.emit('triggerFormSubmit', {menuId: btnId, form: res}) }) - - MKEmitter.emit('resetSelectLine', config.uuid, (item.setting.primaryId || ''), data) } - openView = (item) => { - if (item.setting.click === 'menu') { - let menu = null + prevStep = () => { + const { config, group } = this.state - if (item.setting.menu && item.setting.menu.length > 0) { - let menu_id = item.setting.menu.slice(-1)[0] - menu = this.props.permMenus.filter(m => m.MenuID === menu_id)[0] || '' - } + let _group = config.subcards.filter(item => item.sort === (group.sort - 1))[0] - if (!menu) { - notification.warning({ - top: 92, - message: '鑿滃崟宸插垹闄ゆ垨娌℃湁璁块棶鏉冮檺锛�', - duration: 5 - }) - return - } - - let newtab = { - ...menu, - selected: true, - param: {} - } - - if (item.setting.joint === 'true') { - newtab.param.BID = item.setting.primaryId - } - - if (['linkage_navigation', 'linkage'].includes(window.GLOB.navBar)) { - this.props.modifyTabview([newtab]) - } else { - let tabs = this.props.tabviews.filter((tab, i) => { - tab.selected = false - return tab.MenuID !== newtab.MenuID - }) - - if (this.props.tabviews.length !== tabs.length) { - this.props.modifyTabview(fromJS(tabs).toJS()) - } - - this.setState({}, () => { - tabs.push(newtab) - this.props.modifyTabview(tabs) - }) - } - } else if (item.setting.click === 'link') { - let src = item.setting.linkurl - - if (item.setting.joint === 'true') { - let con = '?' - - if (/\?/ig.test(src)) { - con = '&' - } - - src = src + `${con}id=${item.setting.primaryId}&appkey=${window.GLOB.appkey}&userid=${sessionStorage.getItem('UserID')}&LoginUID=${sessionStorage.getItem('LoginUID') || ''}` - } - - window.open(src) - } + this.setState({group: null, step: group.sort - 2}, () => { + this.setState({group: _group}) + }) } + nextStep = () => { + const { config, group } = this.state + + let _group = config.subcards.filter(item => item.sort === (group.sort + 1))[0] + + this.setState({group: null, step: group.sort}, () => { + this.setState({group: _group}) + }) + } render() { - const { config, loading, BID, data, group } = this.state + const { config, loading, BID, data, group, dict, step } = this.state return ( <div className="custom-normal-form-box" style={{...config.style}}> @@ -308,20 +336,34 @@ } {config.subcards.length > 1 ? <div className="mk-normal-form-title"> {config.subcards.map(card => ( - <div key={card.uuid} className="form-title"> - <span className="form-sort">{card.sort}</span> + <div key={card.uuid} className={'form-title' + (card.sort <= step ? ' active' : '')}> + <span className="form-sort" style={{background: config.wrap.color}}>{card.sort}</span> + <span className="before-line" style={{background: config.wrap.color}}></span> + <span className="after-line" style={{background: config.wrap.color}}></span> {card.setting.title} </div>)) } </div> : null} - <MutilForm + {group && data ? <MutilForm BID={BID} + dict={dict} data={data} - dict={this.state.dict} action={group} inputSubmit={this.handleOk} wrappedComponentRef={(inst) => this.formRef = inst} - /> + /> : null} + {group && data ? <div className="mk-form-action"> + {group.sort !== 1 ? <Button type="link" className="prev" onClick={this.prevStep} style={group.prevButton.style}>{group.prevButton.label}</Button> : null} + <NormalButton + BID={BID} + position="form" + btn={group.subButton} + setting={config.setting} + columns={config.columns} + selectedData={[data]} + /> + {group.nextButton.enable === 'true' && group.sort !== config.subcards.length ? <Button type="link" className="skip" onClick={this.nextStep} style={group.nextButton.style}>{group.nextButton.label}</Button> : null} + </div> : null} </div> ) } -- Gitblit v1.8.0