| | |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Modal, notification, Button } from 'antd' |
| | | import moment from 'moment' |
| | | |
| | | import Utils, { FuncUtils } from '@/utils/utils.js' |
| | | import Utils from '@/utils/utils.js' |
| | | import { getActionForm, getBaseTableActionForm } from './formconfig' |
| | | import asyncSpinComponent from '@/utils/asyncSpinComponent' |
| | | |
| | | import MKEmitter from '@/utils/events.js' |
| | | import ActionForm from './actionform' |
| | | import MenuUtils from '@/utils/utils-custom.js' |
| | |
| | | const VerifyExcelIn = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelin')) |
| | | const VerifyExcelOut = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelout')) |
| | | const VerifyMegvii = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifymegvii')) |
| | | const VerifyPay = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifypay')) |
| | | |
| | | class ActionComponent extends Component { |
| | | static propTpyes = { |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | MKEmitter.addListener('revert', this.revert) |
| | | MKEmitter.addListener('revertBtn', this.revertBtn) |
| | | MKEmitter.addListener('addButton', this.addButton) |
| | | MKEmitter.addListener('submitModal', this.handleSave) |
| | | } |
| | |
| | | this.setState = () => { |
| | | return |
| | | } |
| | | MKEmitter.removeListener('revert', this.revert) |
| | | MKEmitter.removeListener('revertBtn', this.revertBtn) |
| | | MKEmitter.removeListener('addButton', this.addButton) |
| | | MKEmitter.removeListener('submitModal', this.handleSave) |
| | | } |
| | | |
| | | revert = () => { |
| | | revertBtn = (id) => { |
| | | if (id && id !== this.props.config.uuid) return |
| | | |
| | | this.setState({ |
| | | actionlist: fromJS(this.props.config.action).toJS() |
| | | }) |
| | |
| | | const { card, actionlist } = this.state |
| | | |
| | | let _card = fromJS(card).toJS() |
| | | _card.style = style |
| | | _card.style = fromJS(style).toJS() |
| | | |
| | | if (_card.style.paddingLeft === '15px') { |
| | | delete _card.style.paddingLeft |
| | | } |
| | | if (_card.style.paddingRight === '15px') { |
| | | delete _card.style.paddingRight |
| | | } |
| | | if (_card.style.minHeight === '28px') { |
| | | delete _card.style.minHeight |
| | | } |
| | | |
| | | let _actionlist = actionlist.map(cell => { |
| | | if (cell.uuid === _card.uuid) return _card |
| | |
| | | |
| | | changeBtnStyle = (element) => { |
| | | let _style = element.style ? fromJS(element.style).toJS() : {} |
| | | let options = ['font', 'border', 'background', 'margin', 'padding'] |
| | | let options = ['font', 'border', 'background', 'margin', 'padding', 'minHeight'] |
| | | |
| | | _style.paddingLeft = _style.paddingLeft || '15px' |
| | | _style.paddingRight = _style.paddingRight || '15px' |
| | | _style.minHeight = _style.minHeight || '28px' |
| | | |
| | | this.setState({ |
| | | card: element |
| | |
| | | addButton = (cardId, element) => { |
| | | if (cardId !== this.props.config.uuid) return |
| | | |
| | | delete element.eleType |
| | | |
| | | const { actionlist } = this.state |
| | | |
| | | this.setState({actionlist: [...actionlist, element]}) |
| | |
| | | supId = '' |
| | | } |
| | | } |
| | | |
| | | let menu = window.GLOB.customMenu |
| | | |
| | | let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, config.uuid, supId) |
| | | let modules = MenuUtils.getSubModules(menu.components, config.uuid, supId, menu.interfaces || null) |
| | | |
| | | if (config.subtype === 'basetable') { |
| | | delete card.eleType // 区分按钮位置 |
| | |
| | | formlist: getBaseTableActionForm(card, functip, config, usefulFields, modules) |
| | | }) |
| | | } else { |
| | | let anchors = MenuUtils.getAnchors(window.GLOB.customMenu.components, config.uuid) || [] |
| | | let anchors = MenuUtils.getAnchors(menu.components, config.uuid) || [] |
| | | |
| | | this.setState({ |
| | | visible: true, |
| | |
| | | */ |
| | | handleSubmit = () => { |
| | | const { config } = this.props |
| | | let color = { primary: '#1890ff', yellow: '#c49f47', orange: 'orange', danger: '#ff4d4f', green: '#26C281', dgreen: '#32c5d2', purple: '#8E44AD', cyan: '#13c2c2', gray: '#666666', default: '#333333' } |
| | | let color = { primary: '#1890ff', yellow: '#c49f47', orange: 'orange', danger: '#ff4d4f', green: '#26C281', dgreen: '#32c5d2', purple: '#8E44AD', cyan: '#13c2c2', gray: '#E7E7EF', default: 'rgba(0, 0, 0, 0.65)' } |
| | | let _actionlist = fromJS(this.state.actionlist).toJS() |
| | | |
| | | this.actionFormRef.handleConfirm().then(btn => { |
| | | _actionlist = _actionlist.filter(item => !item.origin || item.uuid === btn.uuid) |
| | | |
| | | if ((btn.OpenType === 'excelIn' || btn.OpenType === 'excelOut') && (!btn.verify || !btn.verify.columns) && (config.subtype === 'basetable' || config.subtype === 'normaltable')) { |
| | | let columns = [] |
| | | let maps = [] |
| | | let labels = {} |
| | | if (config.subtype === 'normaltable') { |
| | | config.columns.forEach(col => { |
| | | labels[col.field] = col.label |
| | | }) |
| | | } |
| | | |
| | | if (btn.OpenType === 'excelOut') { |
| | | let pushcol = (item) => { |
| | | let cell = { |
| | | Column: item.field, |
| | | Text: item.label, |
| | | Width: 20, |
| | | abs: 'false', |
| | | output: 'true', |
| | | required: 'false', |
| | | type: 'text', |
| | | noValue: 'true', |
| | | uuid: Utils.getuuid() |
| | | } |
| | | |
| | | if (item.type === 'number') { |
| | | cell.type = 'number' |
| | | cell.decimal = item.decimal |
| | | |
| | | if (item.noValue === 'hide') { |
| | | cell.noValue = 'false' |
| | | } |
| | | } |
| | | |
| | | columns.push(cell) |
| | | } |
| | | |
| | | config.cols.forEach(item => { |
| | | if (item.Hide === 'true') return |
| | | |
| | | if (config.subtype === 'normaltable') { |
| | | if (item.type === 'colspan') { |
| | | item.subcols.forEach(cell => { |
| | | if (!cell.field || cell.Hide === 'true' || maps.includes(cell.field)) return |
| | | maps.push(cell.field) |
| | | |
| | | pushcol(cell) |
| | | }) |
| | | } else if (item.type === 'custom') { |
| | | item.elements.forEach(cell => { |
| | | if (!cell.field || maps.includes(cell.field)) return |
| | | maps.push(cell.field) |
| | | |
| | | pushcol({...cell, label: labels[cell.field]}) |
| | | }) |
| | | } |
| | | } |
| | | |
| | | if (!item.field || maps.includes(item.field)) return |
| | | maps.push(item.field) |
| | | |
| | | pushcol(item) |
| | | }) |
| | | |
| | | btn.verify = btn.verify || {enable: 'false', dataType: 'default', scripts: []} |
| | | btn.verify.columns = columns |
| | | } else { |
| | | let pushcol = (item) => { |
| | | let _type = 'Nvarchar(50)' |
| | | let _limit = '50' |
| | | if (item.type === 'number' && !item.decimal) { |
| | | _type = 'Int' |
| | | _limit = '' |
| | | } else if (item.type === 'number') { |
| | | _type = 'Decimal(18,' + item.decimal + ')' |
| | | _limit = item.decimal |
| | | } |
| | | |
| | | let _cell = { |
| | | uuid: Utils.getuuid(), |
| | | Column: item.field, |
| | | Text: item.label, |
| | | type: _type, |
| | | limit: _limit, |
| | | import: 'true', |
| | | required: 'true' |
| | | } |
| | | |
| | | if (_type !== 'Nvarchar(50)') { |
| | | _cell.min = 0 |
| | | _cell.max = 999999 |
| | | } |
| | | |
| | | columns.push(_cell) |
| | | } |
| | | |
| | | config.cols.forEach(item => { |
| | | if (item.Hide === 'true') return |
| | | |
| | | if (config.subtype === 'normaltable') { |
| | | if (item.type === 'colspan') { |
| | | item.subcols.forEach(cell => { |
| | | if (!cell.field || cell.Hide === 'true' || maps.includes(cell.field)) return |
| | | maps.push(cell.field) |
| | | |
| | | pushcol(cell) |
| | | }) |
| | | } else if (item.type === 'custom') { |
| | | item.elements.forEach(cell => { |
| | | if (!cell.field || maps.includes(cell.field)) return |
| | | maps.push(cell.field) |
| | | |
| | | pushcol({...cell, label: labels[cell.field]}) |
| | | }) |
| | | } |
| | | } |
| | | |
| | | if (!item.field || maps.includes(item.field)) return |
| | | maps.push(item.field) |
| | | |
| | | pushcol(item) |
| | | }) |
| | | |
| | | btn.verify = btn.verify || {sheet: 'Sheet1', default: 'true', range: 1, scripts: [], uniques: []} |
| | | btn.verify.columns = columns |
| | | } |
| | | } |
| | | |
| | | let labelrepet = false |
| | | _actionlist = _actionlist.map(item => { |
| | |
| | | if (item.uuid === btn.uuid) { |
| | | if (config.subtype === 'basetable') { |
| | | let _c = btn.class.replace('border-', '') |
| | | if (btn.class.indexOf('border') > -1 || btn.class === 'default') { |
| | | if (btn.class === 'default') { |
| | | btn.style = {color: 'rgba(0, 0, 0, 0.65)', backgroundColor: '#fff', borderColor: '#d9d9d9', marginRight: '15px'} |
| | | } else if (btn.class.indexOf('border') > -1) { |
| | | btn.style = {color: color[_c], backgroundColor: '#fff', borderColor: color[_c], marginRight: '15px'} |
| | | } else if (btn.class === 'gray') { |
| | | btn.style = {color: 'rgba(0, 0, 0, 0.65)', backgroundColor: color[_c], borderColor: color[_c], marginRight: '15px'} |
| | | } else { |
| | | btn.style = {color: '#fff', backgroundColor: color[_c], borderColor: color[_c], marginRight: '15px'} |
| | | } |
| | | } else { |
| | | btn.style = item.style || {} |
| | | if (btn.class !== item.class || btn.show !== item.show || !btn.style.color || item.focus) { |
| | | if (btn.show === 'icon') { |
| | | btn.style.color = color[btn.class] |
| | | btn.style.backgroundColor = 'transparent' |
| | | } else { |
| | | btn.style.color = '#ffffff' |
| | | btn.style.backgroundColor = color[btn.class] |
| | | if (btn.class) { |
| | | if (btn.class !== item.class || btn.show !== item.show || !btn.style.color || (item.focus && !btn.style.color)) { |
| | | // if (btn.show === 'icon') { |
| | | // btn.style.color = color[btn.class] |
| | | // btn.style.backgroundColor = 'transparent' |
| | | // } |
| | | if (btn.class === 'default') { |
| | | btn.style.color = 'rgba(0, 0, 0, 0.65)' |
| | | btn.style.backgroundColor = '#fff' |
| | | btn.style.borderColor = '#d9d9d9' |
| | | } else if (btn.class.indexOf('border') > -1) { |
| | | let _c = btn.class.replace('border-', '') |
| | | btn.style.color = color[_c] |
| | | btn.style.backgroundColor = '#fff' |
| | | btn.style.borderColor = color[_c] |
| | | btn.style.borderWidth = '1px' |
| | | } else if (btn.class === 'gray') { |
| | | btn.style.color = 'rgba(0, 0, 0, 0.65)' |
| | | btn.style.backgroundColor = color[btn.class] |
| | | btn.style.borderColor = color[btn.class] |
| | | } else { |
| | | btn.style.color = '#ffffff' |
| | | btn.style.backgroundColor = color[btn.class] |
| | | btn.style.borderColor = color[btn.class] |
| | | } |
| | | } |
| | | } else if (btn.color) { |
| | | btn.style = {} |
| | | } |
| | | } |
| | | |
| | | btn.updateTime = moment().format('YYYY-MM-DD HH:mm') |
| | | return btn |
| | | } else { |
| | | return item |
| | |
| | | */ |
| | | deleteElement = (card) => { |
| | | const { config } = this.props |
| | | let _this = this |
| | | let that = this |
| | | |
| | | confirm({ |
| | | content: `确定删除 - ${card.label} ?`, |
| | | onOk() { |
| | | let _actionlist = fromJS(_this.state.actionlist).toJS() |
| | | let _actionlist = fromJS(that.state.actionlist).toJS() |
| | | |
| | | _actionlist = _actionlist.filter(item => item.uuid !== card.uuid) |
| | | |
| | | _this.setState({ |
| | | that.setState({ |
| | | actionlist: _actionlist |
| | | }, () => { |
| | | _this.props.updateaction({...config, action: _actionlist}) |
| | | that.props.updateaction({...config, action: _actionlist}) |
| | | }) |
| | | }, |
| | | onCancel() {} |
| | |
| | | verifySubmit = () => { |
| | | const { config } = this.props |
| | | const { card } = this.state |
| | | |
| | | |
| | | this.verifyRef.handleConfirm().then(res => { |
| | | let _actionlist = fromJS(this.state.actionlist).toJS() |
| | | _actionlist = _actionlist.filter(item => !item.origin || item.uuid === card.uuid) |
| | |
| | | _actionlist = _actionlist.map(item => { |
| | | if (item.uuid === card.uuid) { |
| | | item.verify = res |
| | | item.updateTime = moment().format('YYYY-MM-DD HH:mm') |
| | | } |
| | | |
| | | return item |
| | |
| | | * @description 创建按钮存储过程 |
| | | */ |
| | | creatFunc = () => { |
| | | const { config } = this.props |
| | | const menu = window.GLOB.customMenu |
| | | let _config = fromJS(this.props.config).toJS() |
| | | |
| | | this.actionFormRef.handleConfirm().then(res => { |
| | | let btn = res // 按钮信息 |
| | | let newLText = '' // 创建存储过程sql |
| | | let DelText = '' // 删除存储过程sql |
| | | return new Promise((resolve) => { |
| | | this.actionFormRef.handleConfirm().then(res => { |
| | | let btn = fromJS(res).toJS() |
| | | let _config = fromJS(config).toJS() |
| | | |
| | | // 创建存储过程,必须填写内部函数名 |
| | | if (btn.intertype !== 'inner') { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '使用内部函数时,才可以创建存储过程!', |
| | | duration: 5 |
| | | }) |
| | | return |
| | | } |
| | | if (btn.OpenType === 'excelIn') { |
| | | btn.func = btn.innerFunc |
| | | btn.menuNo = menu.MenuNo |
| | | btn.MenuName = menu.MenuName + _config.name |
| | | btn.$type = 'excelIn' |
| | | |
| | | if (btn.OpenType === 'pop') { |
| | | let _param = { |
| | | funcName: btn.innerFunc, |
| | | name: _config.setting.tableName || '', |
| | | fields: btn.modal ? btn.modal.fields : [], |
| | | menuNo: menu.MenuNo |
| | | resolve(btn) |
| | | } else if (btn.OpenType === 'excelOut') { |
| | | _config.MenuName = menu.MenuName + '-' + _config.name |
| | | _config.menuNo = menu.MenuNo |
| | | _config.MenuID = menu.MenuID |
| | | _config.func = btn.innerFunc |
| | | _config.$type = 'table' |
| | | |
| | | resolve(_config) |
| | | } else { |
| | | btn.func = btn.innerFunc |
| | | btn.name = _config.setting.tableName || '' |
| | | btn.menuNo = menu.MenuNo |
| | | btn.MenuID = menu.MenuID |
| | | btn.MenuName = menu.MenuName + _config.name |
| | | btn.fields = [] |
| | | btn.columns = _config.columns |
| | | btn.primaryKey = _config.setting.primaryKey || 'ID' |
| | | btn.$type = 'btn' |
| | | |
| | | if (btn.OpenType === 'pop') { |
| | | btn.fields = btn.modal ? btn.modal.fields : [] |
| | | } |
| | | |
| | | resolve(btn) |
| | | } |
| | | newLText = Utils.formatOptions(FuncUtils.getfunc(_param, btn, menu, _config)) |
| | | DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc)) |
| | | } else if (btn.OpenType === 'excelIn') { |
| | | let _param = { |
| | | funcName: btn.innerFunc, |
| | | menuNo: menu.MenuNo |
| | | } |
| | | newLText = Utils.formatOptions(FuncUtils.getexcelInfunc(_param, btn, menu)) |
| | | DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc)) |
| | | } else if (btn.OpenType === 'excelOut') { |
| | | let _param = { |
| | | innerFunc: btn.innerFunc |
| | | } |
| | | |
| | | newLText = Utils.formatOptions(FuncUtils.getTableFunc(_param, menu, _config)) // 创建存储过程sql |
| | | DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc)) |
| | | } else { |
| | | let _param = { |
| | | funcName: btn.innerFunc, |
| | | name: _config.setting.tableName || '', |
| | | fields: '', |
| | | menuNo: menu.MenuNo |
| | | } |
| | | newLText = Utils.formatOptions(FuncUtils.getfunc(_param, btn, menu, _config)) |
| | | DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc)) |
| | | } |
| | | |
| | | this.refs.btnCreatFunc.exec(btn.innerFunc, newLText, DelText) |
| | | }) |
| | | }) |
| | | } |
| | | |
| | |
| | | let _col = null |
| | | if (config.type === 'table') { |
| | | config.cols.forEach(col => { |
| | | if (col.type !== 'action') return |
| | | if (col.type !== 'custom') return |
| | | |
| | | col.elements = col.elements.filter(item => { |
| | | if (item.uuid === id) { |
| | |
| | | } |
| | | return item.uuid !== id |
| | | }) |
| | | }) |
| | | } else if (config.type === 'card' && config.subcards) { |
| | | config.subcards.forEach(scard => { |
| | | scard.elements = scard.elements.filter(item => { |
| | | if (item.uuid === id) { |
| | | btn = item |
| | | _col = scard |
| | | } |
| | | return item.uuid !== id |
| | | }) |
| | | scard.backElements = scard.backElements.filter(item => { |
| | | if (item.uuid === id) { |
| | | btn = item |
| | | _col = scard |
| | | } |
| | | return item.uuid !== id |
| | | }) |
| | | return scard |
| | | }) |
| | | } |
| | | |
| | |
| | | columns={config.columns} |
| | | wrappedComponentRef={(inst) => this.verifyRef = inst} |
| | | /> |
| | | } else if (card.payMode === 'system') { |
| | | return <VerifyPay |
| | | card={card} |
| | | columns={config.columns} |
| | | wrappedComponentRef={(inst) => this.verifyRef = inst} |
| | | /> |
| | | } |
| | | } |
| | | |
| | |
| | | {/* 编辑按钮:复制、编辑 */} |
| | | <Modal |
| | | title="按钮·编辑" |
| | | wrapClassName="mk-scroll-modal" |
| | | visible={visible} |
| | | width={920} |
| | | maskClosable={false} |
| | | onCancel={this.editModalCancel} |
| | | footer={[ |
| | | record && record.intertype === 'inner' ? <CreateFunc key="create" ref="btnCreatFunc" trigger={this.creatFunc}/> : null, |
| | | record && record.intertype === 'inner' ? <CreateFunc key="create" getMsg={this.creatFunc}/> : null, |
| | | <Button key="cancel" onClick={this.editModalCancel}>取消</Button>, |
| | | <Button key="confirm" type="primary" onClick={this.handleSubmit}>确定</Button> |
| | | ]} |
| | | destroyOnClose |
| | | > |
| | | <ActionForm |
| | | type={config.type === 'tree' ? 'card' : ''} |
| | | card={card} |
| | | formlist={this.state.formlist} |
| | | inputSubmit={this.handleSubmit} |