From ee32a69f9a7f25c37757325dc28ac7b5127dceca Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 15 十月 2019 22:23:36 +0800 Subject: [PATCH] datamanage-update --- src/tabviews/datamanage/modules/action/index.jsx | 379 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 311 insertions(+), 68 deletions(-) diff --git a/src/tabviews/datamanage/modules/action/index.jsx b/src/tabviews/datamanage/modules/action/index.jsx index bcfedc3..84b092d 100644 --- a/src/tabviews/datamanage/modules/action/index.jsx +++ b/src/tabviews/datamanage/modules/action/index.jsx @@ -1,8 +1,9 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' -// import { is, fromJS } from 'immutable' +import {connect} from 'react-redux' import { Button, Affix, Modal, notification } from 'antd' import MutilForm from '@/components/mutilform' +import {modifyTabview} from '@/store/action' import Api from '@/api' import './index.scss' @@ -10,102 +11,314 @@ class MainAction extends Component { static propTpyes = { - MenuNo: PropTypes.string, + MenuNo: PropTypes.string, // 鑿滃崟鍙傛暟 + columns: PropTypes.array, // 鏄剧ず鍒楃敤浜庤〃鍗曞垪 actions: PropTypes.array, // 鎼滅储鏉′欢鍒楄〃 - dict: PropTypes.object // 瀛楀吀椤� + dict: PropTypes.object, // 瀛楀吀椤� + mainKey: PropTypes.array } state = { - visible: false, - formdata: null, - tabledata: null, - confirmLoading: false, - execAction: null + visible: false, // 寮圭獥鏄惁鏄剧ず + formdata: null, // 琛ㄥ崟鏄剧ず鍒楁暟鎹� + tabledata: null, // 鍒楄〃閫夋嫨鏁版嵁 + confirmLoading: false, // 纭涓� + execAction: null, // 鎵ц鎸夐挳灞炴�� + primarykey: null, // 涓婚敭 + bidkey: null, // BID + defaultproc: { // 榛樿娣诲姞銆佷慨鏀广�佸垹闄ゅ瓨鍌ㄨ繃绋� + Add: 'sDataManageAdd', + Update: 'sDataManageUpt', + Delete: 'sDataManageDel' + } } - refreshdata = () => { - this.props.refreshdata() + submitaction = (action, datalist, primarykey, bidkey) => { + if (action.Ot === 'requiredSgl' || action.Ot === 'requiredOnce') { // 閫夋嫨鍗曡鎴栧琛宨d鎷兼帴鎵ц + let ids = datalist.map(data => { + return data[primarykey] + }) + let bids = null + if (bidkey) { + bids = datalist.map(data => { + return data[bidkey] || '' + }) + } + return Api.submitInterface({ + func: action.AuditProc || this.state.defaultproc[action.Action], + ID: ids.join(','), // 涓婚敭瀛楁 + BID: bids ? bids.join(',') : '' // BID瀛楁 + }) + } else if (action.Ot === 'required') { // 鍙�夊琛岋紝寰幆鎵ц + let deffers = datalist.map(data => { + return new Promise((resolve, reject) => { + Api.submitInterface({ + func: action.AuditProc || this.state.defaultproc[action.Action], + ID: data[primarykey], // 涓婚敭瀛楁 + BID: data[bidkey] || '' // BID瀛楁 + }).then(res => { + resolve(res) + }) + }) + }) + return Promise.all(deffers) + } else { // 涓嶉�夎 + return Api.submitInterface({ + func: action.AuditProc || this.state.defaultproc[action.Action], + ID: '', // 涓婚敭瀛楁 + BID: '' // BID瀛楁 + }) + } } actionTrigger = (item) => { let _this = this - let data = this.props.gettableselected() || [] - if (item.Ot === 'required' && data.length === 0) { + let datalist = this.props.gettableselected() || [] + + /************* 鏍¢獙鍒楄〃鏁版嵁閫夋嫨鏄惁姝g‘ **************/ + + if ((item.Ot === 'requiredSgl' || item.Ot === 'required' || item.Ot === 'requiredOnce') && datalist.length === 0) { // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾暟鎹� notification.warning({ top: 92, - message: this.props.dict['main.action.confirm.selectline'] + message: this.props.dict['main.action.confirm.selectline'], + duration: 10 }) return - } else if (item.Ot === 'pop' && data.length !== 1) { - if (data.length === 0) { - // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾暟鎹� + } else if (item.Ot === 'requiredSgl' && datalist.length > 1) { + // 闇�瑕侀�夋嫨鍗曡鏃讹紝鏍¢獙鏁版嵁 + notification.warning({ + top: 92, + message: this.props.dict['main.action.confirm.selectSingleLine'], + duration: 10 + }) + return + } + + /************* 鏍¢獙涓婚敭涓嶣ID **************/ + let ID = [] + let BID = [] + if (item.Ot === 'requiredSgl' || item.Ot === 'required' || item.Ot === 'requiredOnce') { + this.props.mainKey.forEach(key => { + if (key.IDField === '1') { + ID.push(key.FieldName) + } else { + BID.push(key.FieldName) + } + }) + + if (ID.length === 0) { // 涓婚敭鏍¢獙 notification.warning({ top: 92, - message: this.props.dict['main.action.confirm.selectline'] + message: this.props.dict['main.action.primarykey.required'], + duration: 10 }) return - } else { - // 闇�瑕侀�夋嫨鍗曡鏃讹紝鏍¢獙鏁版嵁 + } else if (ID.length > 1) { notification.warning({ top: 92, - message: this.props.dict['main.action.confirm.selectSingleLine'] + message: this.props.dict['main.action.primarykey.repetition'], + duration: 10 + }) + return + } + + if (BID.length > 1) { // BID鏍¢獙 + notification.warning({ + top: 92, + message: this.props.dict['main.action.primarykey.repetitionbid'], + duration: 10 }) return } } - if (item.Action === 'Prompt' || item.Action === 'Delete') { + /********************* 鎿嶄綔澶勭悊 **********************/ + + if (item.OpenType === 'prompt') { // 纭妗� confirm({ title: this.props.dict['main.action.confirm.tip'], onOk() { - return Api.setActionSubmit({ - func: 'SetActionSubmitSuccess' - // func: 'SetActionSubmitError' - }).then((res) => { - if (res.status) { - notification.success({ - top: 92, - message: _this.props.dict['main.action.confirm.success'] - // duration: 0 - // description: - }) - _this.refreshdata() - } else { - notification.error({ - top: 92, - message: res.message - }) - } - }) + return _this.submitaction(item, datalist, ID[0], (BID.length === 1 ? BID[0] : '')) + .then(res => { + if (Array.isArray(res)) { + let iserror = false + res.forEach(result => { + if (!result.status && !iserror) { + notification.error({ + top: 92, + message: result.message, + duration: 15 + }) + iserror = true + } + }) + if (!iserror) { + notification.success({ + top: 92, + message: _this.props.dict['main.action.confirm.success'] + }) + if (item.ReloadForm && item.ReloadForm !== 'false' && item.ReloadForm !== 'singlegrid') { + _this.props.refreshdata(item.ReloadForm) + } + } + } else { + if (res.status) { + notification.success({ + top: 92, + message: _this.props.dict['main.action.confirm.success'] + }) + if (item.ReloadForm && item.ReloadForm !== 'false' && item.ReloadForm !== 'singlegrid') { + _this.props.refreshdata(item.ReloadForm) + } + } else { + notification.error({ + top: 92, + message: res.message, + duration: 15 + }) + } + } + }) }, onCancel() {} }) - } else if (item.Action === 'Update') { - Api.getModelFormData(item.MenuID).then(res => { - if (res.status) { - this.setState({ - formdata: res.data.map(input => { - let validate = input.Validate && JSON.parse(input.Validate) - input.DynOptions = JSON.parse(input.DynOptions) - input.required = (validate && validate.required) || false - return input - }), - visible: true, - execAction: item, - tabledata: data[0] - }) + } else if (item.OpenType === 'execproc') { // 鐩存帴鎵ц + this.submitaction(item, datalist, ID[0], (BID.length === 1 ? BID[0] : '')) + .then(res => { + if (Array.isArray(res)) { + let iserror = false + res.forEach(result => { + if (!result.status && !iserror) { + notification.error({ + top: 92, + message: result.message, + duration: 15 + }) + iserror = true + } + }) + if (!iserror) { + notification.success({ + top: 92, + message: this.props.dict['main.action.confirm.success'] + }) + if (item.ReloadForm && item.ReloadForm !== 'false' && item.ReloadForm !== 'singlegrid') { + this.props.refreshdata(item.ReloadForm) + } + } + } else { + if (res.status) { + notification.success({ + top: 92, + message: this.props.dict['main.action.confirm.success'] + }) + if (item.ReloadForm && item.ReloadForm !== 'false' && item.ReloadForm !== 'singlegrid') { + this.props.refreshdata(item.ReloadForm) + } + } else { + notification.error({ + top: 92, + message: res.message, + duration: 15 + }) + } + } + }) + } else if (item.OpenType === 'newpage') { // 鎵撳紑鏂伴〉闈� + let src = '#/' + item.LinkUrl + '?param=' + window.btoa(JSON.stringify({UserId: sessionStorage.getItem('UserID'), ID: datalist[0][ID[0]], BID: BID.length === 1 ? datalist[0][BID[0]] : ''})) + window.open(src) + } else if (item.OpenType === 'pop') { + this.setState({ + formdata: this.props.columns.map(column => { + column.readonly = false + if (column.ReadOnly.includes(item.MenuID)) { + column.readonly = true + } + return column + }), + visible: true, + execAction: item, + primarykey: ID[0], + bidkey: BID.length === 1 ? BID[0] : '', + tabledata: datalist[0] || '' + }) + } else if (item.OpenType === 'tab') { + let menu = { + MenuNo: this.props.MenuNo, + MenuID: item.MenuID, + MenuName: item.MenuName, + type: 'TabForm', + param: { + formdata: this.props.columns.map(column => { + column.readonly = false + if (column.ReadOnly.includes(item.MenuID)) { + column.readonly = true + } + return column + }), + execAction: item, + primarykey: ID[0], + bidkey: BID.length === 1 ? BID[0] : '', + tabledata: datalist[0] || '', + defaultproc: this.state.defaultproc, + dict: this.props.dict } + } + let tabs = JSON.parse(JSON.stringify(this.props.tabviews)) + let _index = null + let isexit = false + tabs = tabs.map((tab, index) => { + tab.selected = false + if (tab.MenuNo === this.props.MenuNo && tab.MenuID === item.MenuID) { + isexit = true + tab.selected = true + tab.param = menu.param + } else if (tab.MenuNo === this.props.MenuNo && tab.type !== 'TabForm') { + _index = index + menu.MenuName = tab.MenuName + '-' + menu.MenuName + menu.selected = true + } + return tab + }) + if (!isexit) { + tabs.splice(_index + 1, 0, menu) + } + this.props.modifyTabview(tabs) + } else if (item.OpenType === 'blank') { + this.props.switchview(item) + } else { + notification.warning({ + top: 92, + message: this.props.dict['main.action.settingerror'], + duration: 10 }) } } + changemenu(e) { + let menu = {} + let tabs = JSON.parse(JSON.stringify(this.props.tabviews)) + tabs = tabs.filter(tab => { + tab.selected = false + return tab.MenuID !== menu.MenuID + }) + menu.selected = true + tabs.push(menu) + this.props.modifyTabview(tabs) + } + getModels = () => { + if (!this.state.execAction) return + let cols = +this.state.execAction.FormLineQty + if (![1, 2, 3].includes(cols)) { + cols = 2 + } return ( <Modal wrapClassName='action-modal' - title={(this.state.execAction && this.state.execAction.MenuName) || ''} + title={this.state.execAction.MenuName || ''} visible={this.state.visible} - width={(this.state.execAction && +this.state.execAction.PopWidth) || 520} + width={document.body.clientWidth * this.state.execAction.PopWidth} onOk={this.handleOk} confirmLoading={this.state.confirmLoading} onCancel={this.handleCancel} @@ -115,6 +328,7 @@ dict={this.props.dict} formlist={this.state.formdata} data={this.state.tabledata} + cols={cols} wrappedComponentRef={(inst) => this.formRef = inst} />} </Modal> @@ -126,11 +340,25 @@ this.setState({ confirmLoading: true }) - console.log(res) - Api.setActionSubmit({ - func: 'SetActionSubmitSuccess' - }).then((res) => { - if (res.status) { + let values = [] + this.props.columns.forEach(column => { + let value = '' + if (res[column.FieldName] || res[column.FieldName] === 0) { // 渚濇閫夊彇琛ㄥ崟鍊笺�佽〃鏍兼暟鎹�笺�佸垵濮嬪�� + value = res[column.FieldName] + } else if (this.state.tabledata && this.state.tabledata[column.FieldName]) { + value = this.state.tabledata[column.FieldName] + } else if (column.InitVal) { + value = column.InitVal + } + values.push(value) + }) + Api.submitInterface({ + func: this.state.execAction.AuditProc || this.state.defaultproc[this.state.execAction.Action], + AddLongText: values.join(','), // 琛ㄥ崟鏁版嵁 + ID: (this.state.tabledata && this.state.primarykey) ? this.state.tabledata[this.state.primarykey] : '', // 涓婚敭瀛楁 + BID: (this.state.tabledata && this.state.bidkey) ? this.state.tabledata[this.state.bidkey] : '' // BID瀛楁 + }).then(result => { + if (result.status) { notification.success({ top: 92, message: this.props.dict['main.action.confirm.success'] @@ -139,10 +367,17 @@ confirmLoading: false, visible: false }) + if (this.state.execAction.ReloadForm && this.state.execAction.ReloadForm !== 'false' && this.state.execAction.ReloadForm !== 'singlegrid') { + this.props.refreshdata(this.state.execAction.ReloadForm) + } } else { + this.setState({ + confirmLoading: false + }) notification.error({ top: 92, - message: res.message + message: result.message, + duration: 15 }) } }) @@ -151,6 +386,7 @@ handleCancel = () => { this.setState({ + confirmLoading: false, visible: false }) this.formRef.handleReset() @@ -159,11 +395,6 @@ UNSAFE_componentWillMount () { } - - // shouldComponentUpdate (nextProps, nextState) { - // console.log(!is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))) - // return true - // } render() { return ( @@ -186,4 +417,16 @@ } } -export default MainAction \ No newline at end of file +const mapStateToProps = (state) => { + return { + tabviews: state.tabviews + } +} + +const mapDispatchToProps = (dispatch) => { + return { + modifyTabview: (tabviews) => dispatch(modifyTabview(tabviews)) + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(MainAction) \ No newline at end of file -- Gitblit v1.8.0