| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Form, Row, Col, Input, Select, Radio, InputNumber } from 'antd' |
| | | import { Form, Row, Col, Input, Select, Radio, InputNumber, Modal } from 'antd' |
| | | import { FormOutlined } from '@ant-design/icons' |
| | | |
| | | import ColorSketch from '@/mob/colorsketch' |
| | | |
| | | import ColorSketch from '@/tabviews/zshare/mutilform/mkColor' |
| | | import NodeForm from './nodeform' |
| | | import './index.scss' |
| | | |
| | | const { TextArea } = Input |
| | | |
| | | class NodeUpdate extends Component { |
| | | static propTpyes = { |
| | | node: PropTypes.object |
| | | node: PropTypes.object, |
| | | orgs: PropTypes.array |
| | | } |
| | | |
| | | state = { |
| | | formlist: null |
| | | formlist: null, |
| | | mknode: null, |
| | | mkdata: null |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | | this.setState({ |
| | | mknode: this.props.node, |
| | | mkdata: this.props.node.mkdata || '', |
| | | formlist: this.getFormList(this.props.node) |
| | | }) |
| | | } |
| | |
| | | formlist: null |
| | | }, () => { |
| | | this.setState({ |
| | | mknode: nextProps.node, |
| | | mkdata: nextProps.node.mkdata || '', |
| | | formlist: this.getFormList(nextProps.node) |
| | | }) |
| | | }) |
| | |
| | | lineType = 'dash' |
| | | } |
| | | |
| | | let font = node.labels && node.labels[0] ? node.labels[0].attrs.label : {} |
| | | |
| | | return [ |
| | | { |
| | | type: 'title', |
| | |
| | | type: 'text', |
| | | field: 'title', |
| | | label: '标签', |
| | | initval: title |
| | | initval: font.text || '' |
| | | }, |
| | | { |
| | | type: 'title', |
| | |
| | | {value: 'solid', text: '实线'}, |
| | | {value: 'dash', text: '虚线'} |
| | | ] |
| | | }, |
| | | { |
| | | type: 'title', |
| | | label: '标签样式' |
| | | }, |
| | | { |
| | | type: 'number', |
| | | field: 'fontSize', |
| | | label: '字号', |
| | | initval: font.fontSize || 14 |
| | | }, |
| | | { |
| | | type: 'color', |
| | | field: 'fontFill', |
| | | label: '颜色', |
| | | initval: font.fill || '#000000' |
| | | }, |
| | | { |
| | | type: 'other', |
| | | label: '自定义信息' |
| | | } |
| | | ] |
| | | } else if (node.shape === 'lane') { |
| | |
| | | } |
| | | ] |
| | | } else if (node.shape === 'mk-text') { |
| | | let fontFill = '#262626' |
| | | if (node.attrs && node.attrs.text) { |
| | | fontFill = node.attrs.text.fill || '#262626' |
| | | if (node.attrs && node.attrs.label) { |
| | | title = node.attrs.label.text || '' |
| | | } |
| | | |
| | | let fontSize = 12 |
| | | if (node.attrs && node.attrs.text) { |
| | | fontSize = node.attrs.text.fontSize || 12 |
| | | let fill = '' |
| | | |
| | | if (node.attrs && node.attrs.body) { |
| | | fill = node.attrs.body.fill || '' |
| | | } |
| | | |
| | | let stroke = '' |
| | | |
| | | if (node.attrs && node.attrs.body) { |
| | | stroke = node.attrs.body.stroke || '' |
| | | } |
| | | |
| | | let fontFill = '#262626' |
| | | if (node.attrs && node.attrs.label) { |
| | | fontFill = node.attrs.label.style.color || '#262626' |
| | | } |
| | | |
| | | let fontSize = 14 |
| | | if (node.attrs && node.attrs.label) { |
| | | fontSize = node.attrs.label.style.fontSize || 14 |
| | | } |
| | | return [ |
| | | { |
| | |
| | | label: '内容' |
| | | }, |
| | | { |
| | | type: 'text', |
| | | type: 'textarea', |
| | | field: 'title', |
| | | label: '标签', |
| | | initval: title |
| | | }, |
| | | { |
| | | type: 'title', |
| | | label: '样式' |
| | | }, |
| | | { |
| | | type: 'color', |
| | | field: 'fill', |
| | | label: '背景', |
| | | initval: fill |
| | | }, |
| | | { |
| | | type: 'color', |
| | | field: 'stroke', |
| | | label: '边框', |
| | | initval: stroke |
| | | }, |
| | | { |
| | | type: 'title', |
| | |
| | | initval: fontFill |
| | | }, |
| | | { |
| | | type: 'title', |
| | | type: 'other', |
| | | label: '自定义信息' |
| | | }, |
| | | { |
| | | type: 'text', |
| | | field: 'mksign', |
| | | label: '标记', |
| | | initval: node.mksign || '' |
| | | }, |
| | | } |
| | | ] |
| | | } |
| | | } |
| | |
| | | this.props.onChange(value, key) |
| | | } |
| | | |
| | | confirm = () => { |
| | | this.nodeRef.handleConfirm().then(res => { |
| | | this.setState({visible: false, mkdata: res}) |
| | | this.props.onChange(res, 'mkdata') |
| | | }) |
| | | } |
| | | |
| | | getFields() { |
| | | const { formlist } = this.state |
| | | const { formlist, mkdata, mknode } = this.state |
| | | const fields = [] |
| | | |
| | | if (!formlist) return |
| | |
| | | <Form.Item label={item.label}> |
| | | <Input defaultValue={item.initval} placeholder="" autoComplete="off" onChange={(e) => this.change(e.target.value, item.field)} /> |
| | | </Form.Item> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'textarea') { |
| | | fields.push( |
| | | <Col span={24} key={index} style={{padding: '0 12px'}}> |
| | | <TextArea defaultValue={item.initval} rows={3} onChange={(e) => this.change(e.target.value, item.field)} /> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'number') { |
| | |
| | | fields.push( |
| | | <Col span={24} key={index}> |
| | | <Form.Item label={item.label}> |
| | | <ColorSketch defaultValue={item.initval} onChange={(value) => this.change(value, item.field)}/> |
| | | <ColorSketch config={{initval: item.initval}} onChange={(value) => this.change(value, item.field)}/> |
| | | </Form.Item> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'other') { |
| | | fields.push( |
| | | <Col span={24} key={index}> |
| | | <span className="split-line">{item.label}:<FormOutlined onClick={() => {this.setState({visible: true})}}/></span> |
| | | {mkdata ? <div className="mk-data"> |
| | | <div>状态:{mkdata.status}<span style={{float: 'right'}}>{mkdata.statusName}</span></div> |
| | | {mknode.shape !== 'edge' && !mknode.mknode ? <div>标记:{mkdata.sign || ''}</div> : null} |
| | | {mknode.shape === 'edge' && mkdata.flowType ? <div>操作:{mkdata.flowType === 'reject' ? '驳回' : '审批'}</div> : null} |
| | | {mkdata.members && mkdata.members.length ? <div>审批人:{mkdata.members.map(item => item.workername).join('、')}</div> : null} |
| | | {mkdata.copys && mkdata.copys.length ? <div>抄送人:{mkdata.copys.map(item => item.workername).join('、')}</div> : null} |
| | | <div>备注:{mkdata.remark || ''}</div> |
| | | </div> : null} |
| | | </Col> |
| | | ) |
| | | } |
| | |
| | | } |
| | | |
| | | render() { |
| | | const { visible, mkdata, mknode } = this.state |
| | | |
| | | return ( |
| | | <div className="node-edit-form-wrap"> |
| | | <Form className="node-edit-form"> |
| | | <Row>{this.getFields()}</Row> |
| | | </Form> |
| | | <Modal |
| | | title={mknode && mknode.shape === 'edge' ? '连线编辑' : '节点编辑'} |
| | | wrapClassName="mk-x6-modal" |
| | | visible={visible} |
| | | closable={false} |
| | | maskClosable={false} |
| | | width={1050} |
| | | centered={true} |
| | | onOk={this.confirm} |
| | | onCancel={() => this.setState({visible: false})} |
| | | destroyOnClose |
| | | > |
| | | <NodeForm node={mknode} data={mkdata} orgs={this.props.orgs} handleSubmit={() => this.confirm()} wrappedComponentRef={(inst) => this.nodeRef = inst}/> |
| | | </Modal> |
| | | </div> |
| | | ) |
| | | } |