| | |
| | | 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' |
| | | |
| | |
| | | |
| | | 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') { // 选择单行或多行id拼接执行 |
| | | 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() || [] |
| | | |
| | | /************* 校验列表数据选择是否正确 **************/ |
| | | |
| | | 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 |
| | | } |
| | | |
| | | /************* 校验主键与BID **************/ |
| | | 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} |
| | |
| | | dict={this.props.dict} |
| | | formlist={this.state.formdata} |
| | | data={this.state.tabledata} |
| | | cols={cols} |
| | | wrappedComponentRef={(inst) => this.formRef = inst} |
| | | />} |
| | | </Modal> |
| | |
| | | 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'] |
| | |
| | | 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 |
| | | }) |
| | | } |
| | | }) |
| | |
| | | |
| | | handleCancel = () => { |
| | | this.setState({ |
| | | confirmLoading: false, |
| | | visible: false |
| | | }) |
| | | this.formRef.handleReset() |
| | |
| | | UNSAFE_componentWillMount () { |
| | | |
| | | } |
| | | |
| | | // shouldComponentUpdate (nextProps, nextState) { |
| | | // console.log(!is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))) |
| | | // return true |
| | | // } |
| | | |
| | | render() { |
| | | return ( |
| | |
| | | } |
| | | } |
| | | |
| | | export default MainAction |
| | | const mapStateToProps = (state) => { |
| | | return { |
| | | tabviews: state.tabviews |
| | | } |
| | | } |
| | | |
| | | const mapDispatchToProps = (dispatch) => { |
| | | return { |
| | | modifyTabview: (tabviews) => dispatch(modifyTabview(tabviews)) |
| | | } |
| | | } |
| | | |
| | | export default connect(mapStateToProps, mapDispatchToProps)(MainAction) |