| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { connect } from 'react-redux' |
| | | import { Modal, Button, Popover, Icon } from 'antd' |
| | | import { Modal, Button, Popover } from 'antd' |
| | | import { FontColorsOutlined, EditOutlined, ProfileOutlined } from '@ant-design/icons' |
| | | |
| | | import zhCN from '@/locales/zh-CN/model.js' |
| | | import enUS from '@/locales/en-US/model.js' |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | | import { getActionForm } from './formconfig' |
| | | import { resetStyle } from '@/utils/utils-custom.js' |
| | | |
| | | import MKEmitter from '@/utils/events.js' |
| | | import MenuUtils from '@/utils/utils-custom.js' |
| | |
| | | } |
| | | |
| | | state = { |
| | | dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, |
| | | appType: sessionStorage.getItem('appType'), |
| | | card: null, // 编辑中元素 |
| | | formlist: null, // 表单信息 |
| | | visible: false, // 模态框控制 |
| | | profVisible: false, // 验证信息编辑 |
| | | } |
| | | |
| | | /** |
| | | * @description 搜索条件初始化 |
| | | */ |
| | | UNSAFE_componentWillMount () { |
| | | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | MKEmitter.addListener('submitStyle', this.getStyle) |
| | | } |
| | | |
| | | shouldComponentUpdate (nextProps, nextState) { |
| | |
| | | this.setState = () => { |
| | | return |
| | | } |
| | | MKEmitter.removeListener('submitStyle', this.getStyle) |
| | | } |
| | | |
| | | handleStyle = (element) => { |
| | | const { group } = this.props |
| | | |
| | | let _style = element.style ? fromJS(element.style).toJS() : {} |
| | | let options = ['font', 'border', 'padding', 'margin', 'backgroundColor'] |
| | | let options = ['font', 'border', 'padding', 'margin', 'backgroundColor', 'width'] |
| | | |
| | | this.setState({ |
| | | card: element |
| | | }) |
| | | |
| | | MKEmitter.emit('changeStyle', [group.uuid, element.type], options, _style) |
| | | MKEmitter.emit('changeStyle', options, _style, this.getStyle) |
| | | } |
| | | |
| | | getStyle = (comIds, style) => { |
| | | getStyle = (style) => { |
| | | const { card } = this.state |
| | | let group = fromJS(this.props.group).toJS() |
| | | |
| | | if (comIds.length !== 2 || comIds[0] !== group.uuid) return |
| | | |
| | | if (comIds[1] === 'prev') { |
| | | if (card.type === 'prev') { |
| | | group.prevButton.style = style |
| | | } else if (comIds[1] === 'submit') { |
| | | } else if (card.type === 'submit') { |
| | | group.subButton.style = style |
| | | } else if (comIds[1] === 'next') { |
| | | } else if (card.type === 'next') { |
| | | group.nextButton.style = style |
| | | } |
| | | |
| | |
| | | * @description 按钮编辑,获取按钮表单信息 |
| | | */ |
| | | handleAction = (card) => { |
| | | const { menu, config } = this.props |
| | | const { config } = this.props |
| | | |
| | | let usefulFields = sessionStorage.getItem('permFuncField') |
| | | if (usefulFields) { |
| | | try { |
| | | usefulFields = JSON.parse(usefulFields) |
| | | } catch { |
| | | } catch (e) { |
| | | usefulFields = [] |
| | | } |
| | | } else { |
| | |
| | | } |
| | | |
| | | let ableField = usefulFields.join(', ') |
| | | let msg = `函数名称需以${ableField}等字符开始;` |
| | | let functip = <div> |
| | | <p style={{marginBottom: '5px'}}>{this.state.dict['model.tooltip.func.innerface'].replace('@ableField', ableField)}</p> |
| | | <p style={{marginBottom: '5px'}}>{msg}</p> |
| | | </div> |
| | | |
| | | let modules = MenuUtils.getSubModules(menu.components, config.uuid) |
| | | let supId = '' |
| | | if (config.wrap.linkType === 'sup') { |
| | | supId = config.wrap.supModule[config.wrap.supModule.length - 1] |
| | | } |
| | | |
| | | let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, config.uuid, supId) |
| | | let anchors = MenuUtils.getAnchors(window.GLOB.customMenu.components, config.uuid) || [] |
| | | |
| | | if (card.type === 'submit' && !card.Ot) { |
| | | card.Ot = config.wrap.datatype === 'static' ? 'notRequired' : 'requiredSgl' |
| | | } |
| | | |
| | | this.setState({ |
| | | visible: true, |
| | | card: card, |
| | | formlist: getActionForm(card, functip, config.setting.tableName, usefulFields, modules) |
| | | formlist: getActionForm(card, functip, config.setting.tableName, usefulFields, modules, anchors) |
| | | }) |
| | | } |
| | | |
| | |
| | | |
| | | this.actionFormRef.handleConfirm().then(res => { |
| | | res.type = card.type |
| | | res.style = card.style || null |
| | | if (card.verify) { |
| | | res.verify = card.verify |
| | | } |
| | |
| | | }) |
| | | } |
| | | |
| | | changeMenu = () => { |
| | | const { appType } = this.state |
| | | const { group } = this.props |
| | | |
| | | if (appType !== 'pc' && appType !== 'mob') return |
| | | if (!group.subButton.linkmenu) return |
| | | |
| | | MKEmitter.emit('changeEditMenu', { |
| | | MenuID: group.subButton.linkmenu, |
| | | copyMenuId: '', |
| | | MenuNo: '', |
| | | MenuName: '', |
| | | }) |
| | | } |
| | | |
| | | render() { |
| | | const { group, config } = this.props |
| | | const { visible, profVisible, card, dict } = this.state |
| | | const { visible, profVisible, card } = this.state |
| | | |
| | | return ( |
| | | <div className="mk-form-action"> |
| | | {group.sort !== 1 ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | {group.prevButton && group.prevButton.enable !== 'false' && group.sort !== 1 ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control"> |
| | | <Icon className="edit" title="编辑" type="edit" onClick={() => this.handleAction(group.prevButton)} /> |
| | | <Icon className="style" title="调整样式" onClick={() => this.handleStyle(group.prevButton)} type="font-colors" /> |
| | | <EditOutlined className="edit" title="编辑" onClick={() => this.handleAction(group.prevButton)} /> |
| | | <FontColorsOutlined className="style" title="调整样式" onClick={() => this.handleStyle(group.prevButton)}/> |
| | | </div> |
| | | } trigger="hover"> |
| | | <Button type="link" className="prev" style={group.prevButton.style}>{group.prevButton.label}</Button> |
| | | <Button type="link" className="prev" style={resetStyle(group.prevButton.style)}>{group.prevButton.label}</Button> |
| | | </Popover> : null} |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control"> |
| | | <Icon className="edit" title="编辑" type="edit" onClick={() => this.handleAction(group.subButton)} /> |
| | | <Icon className="style" title="调整样式" onClick={() => this.handleStyle(group.subButton)} type="font-colors" /> |
| | | <Icon className="profile" title="setting" type="profile" onClick={() => this.profileAction()} /> |
| | | <EditOutlined className="edit" title="编辑" onClick={() => this.handleAction(group.subButton)} /> |
| | | <FontColorsOutlined className="style" title="调整样式" onClick={() => this.handleStyle(group.subButton)}/> |
| | | <ProfileOutlined className="profile" title="setting" onClick={() => this.profileAction()} /> |
| | | </div> |
| | | } trigger="hover"> |
| | | <Button type="link" className="submit mk-primary" style={group.subButton.style}>{group.subButton.label}</Button> |
| | | <Button type="link" className="submit mk-primary" onDoubleClick={this.changeMenu} style={resetStyle(group.subButton.style)}>{group.subButton.label}</Button> |
| | | </Popover> |
| | | {group.sort !== config.subcards.length ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | {group.nextButton && group.nextButton.enable !== 'false' && group.sort !== config.subcards.length ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control"> |
| | | <Icon className="edit" title="编辑" type="edit" onClick={() => this.handleAction(group.nextButton)} /> |
| | | <Icon className="style" title="调整样式" onClick={() => this.handleStyle(group.nextButton)} type="font-colors" /> |
| | | <EditOutlined className="edit" title="编辑" onClick={() => this.handleAction(group.nextButton)} /> |
| | | <FontColorsOutlined className="style" title="调整样式" onClick={() => this.handleStyle(group.nextButton)}/> |
| | | </div> |
| | | } trigger="hover"> |
| | | <Button type="link" className={'skip ' + group.nextButton.enable} style={group.nextButton.style}>{group.nextButton.label}</Button> |
| | | <Button type="link" className="skip" style={resetStyle(group.nextButton.style)}>{group.nextButton.label}</Button> |
| | | </Popover> : null} |
| | | {/* 编辑按钮:复制、编辑 */} |
| | | <Modal |
| | | title={dict['model.edit']} |
| | | title="编辑" |
| | | visible={visible} |
| | | width={800} |
| | | width={920} |
| | | maskClosable={false} |
| | | onCancel={this.editModalCancel} |
| | | footer={[ |
| | | <Button key="cancel" onClick={this.editModalCancel}>{dict['model.cancel']}</Button>, |
| | | <Button key="confirm" type="primary" onClick={this.handleActionSubmit}>{dict['model.confirm']}</Button> |
| | | <Button key="cancel" onClick={this.editModalCancel}>取消</Button>, |
| | | <Button key="confirm" type="primary" onClick={this.handleActionSubmit}>确定</Button> |
| | | ]} |
| | | destroyOnClose |
| | | > |
| | | <ActionForm |
| | | dict={dict} |
| | | card={card} |
| | | setting={config.setting} |
| | | formlist={this.state.formlist} |
| | |
| | | </Modal> |
| | | {/* 按钮使用系统存储过程时,验证信息模态框 */} |
| | | <Modal |
| | | wrapClassName="model-table-action-verify-modal" |
| | | title={'验证信息'} |
| | | wrapClassName="mk-pop-modal" |
| | | visible={profVisible} |
| | | width={'75vw'} |
| | | width={'90vw'} |
| | | maskClosable={false} |
| | | okText={dict['model.submit']} |
| | | okText="提交" |
| | | onOk={this.verifySubmit} |
| | | onCancel={() => { this.setState({ profVisible: false }) }} |
| | | onCancel={() => { |
| | | if (this.verifyRef.handleCancel) { |
| | | this.verifyRef.handleCancel().then(() => { |
| | | this.setState({ profVisible: false }) |
| | | }) |
| | | } else { |
| | | this.setState({ profVisible: false }) |
| | | } |
| | | }} |
| | | destroyOnClose |
| | | > |
| | | <VerifyCard |
| | | card={{...group.subButton, modal: {fields: group.fields}}} |
| | | dict={dict} |
| | | config={config} |
| | | columns={config.columns} |
| | | wrappedComponentRef={(inst) => this.verifyRef = inst} |
| | |
| | | } |
| | | } |
| | | |
| | | const mapStateToProps = (state) => { |
| | | return { |
| | | menu: state.customMenu |
| | | } |
| | | } |
| | | |
| | | const mapDispatchToProps = () => { |
| | | return {} |
| | | } |
| | | |
| | | export default connect(mapStateToProps, mapDispatchToProps)(CardCellComponent) |
| | | export default CardCellComponent |