src/tabviews/custom/components/chart/antv-X6/index.jsx
@@ -490,6 +490,7 @@ disabled: true, children: [] } let _works = [] com.departments.forEach(dep => { let _dep = { @@ -523,6 +524,8 @@ worker_id: work.worker_id || '', workercode: work.workercode || '', workername: work.workername || '', parentIds: [com.OrgCode, dep.co_pro_code, job.jobcode], parentNames: [com.OrgName, dep.co_pro_name, job.jobname] } _job.children.push(_work) @@ -548,6 +551,8 @@ worker_id: work.worker_id || '', workercode: work.workercode || '', workername: work.workername || '', parentIds: [com.OrgCode, dep.co_pro_code, job.jobcode, group.work_group], parentNames: [com.OrgName, dep.co_pro_name, job.jobname, group.work_group] } _group.children.push(_work) @@ -570,6 +575,7 @@ }) if (_com.children.length > 0) { _com.works = _works orgs.push(_com) } }) src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx
@@ -474,8 +474,8 @@ {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} {mkdata.roleId ? <div>角色:{mkdata.roleName || ''}</div> : null} {mkdata.depId ? <div>部门:{mkdata.depName || ''}</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> src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.scss
@@ -161,9 +161,17 @@ top: 50px; } .ant-modal-body { min-height: 150px; max-height: calc(100vh - 200px); overflow-y: auto; padding-top: 15px; .ant-input-search { width: 300px; margin-bottom: 10px; } .ant-transfer-customize-list .ant-transfer-list { min-height: 300px; } } .ant-modal-body::-webkit-scrollbar { width: 7px; src/tabviews/custom/components/chart/antv-X6/nodeupdate/memberform.jsx
@@ -1,9 +1,11 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { Modal, Transfer, Tree } from 'antd' import { fromJS } from 'immutable' import { Modal, Transfer, Tree, Input, notification } from 'antd' import { FormOutlined } from '@ant-design/icons' const { TreeNode } = Tree const { Search } = Input const isChecked = (selectedKeys, eventKey) => { return selectedKeys.indexOf(eventKey) !== -1 @@ -72,20 +74,108 @@ state = { visible: false, targetKeys: ['sifuweoifuweifuo'] targetKeys: [], users: [] } onChange = targetKeys => { this.setState({ targetKeys }) } render() { search = (val) => { const { orgs } = this.props const { visible, targetKeys } = this.state let _orgs = fromJS(orgs).toJS() let _orgs_ = [] if (val) { let getOrg = (ors) => { return ors.filter(or => { if (or.key.indexOf(val) > -1 || or.title.indexOf(val) > -1) { return true } else if (!or.children) { return false } or.children = getOrg(or.children) return or.children.length > 0 }) } _orgs_ = getOrg(_orgs) } else { _orgs_ = _orgs } this.setState({orgs: _orgs_}) } trigger = () => { const { orgs, value, title } = this.props let userIds = [] let users = {} let getUsers = (ors) => { ors.forEach(or => { if (or.children) { getUsers(or.children) } else { users[or.worker_id] = or userIds.push(or.worker_id) } }) } getUsers(orgs) let targetKeys = [] let lost_works = [] value.forEach(user => { if (userIds.includes(user.worker_id)) { targetKeys.push(user.worker_id) } else { lost_works.push(user) } }) if (lost_works.length) { notification.warning({ top: 92, message: `原${title} ${lost_works.map(item => item.workername).join('、')} 不存在,请重新添加。`, duration: 10 }) } this.setState({visible: true, orgs: fromJS(orgs).toJS(), targetKeys, users}) } confirm = () => { const { targetKeys, users } = this.state let value = [] targetKeys.forEach(key => { if (!users[key]) return let user = fromJS(users[key]).toJS() delete user.key delete user.title value.push(user) }) this.setState({visible: false}) this.props.onChange(value) } render() { const { value } = this.props const { orgs, visible, targetKeys } = this.state return ( <> <div className="member-input">0人<FormOutlined onClick={() => this.setState({visible: true})} /></div> <div className="member-input">{value.length}人<FormOutlined onClick={this.trigger} /></div> <Modal wrapClassName="member-modal" title="选择人员" @@ -97,6 +187,7 @@ onCancel={() => this.setState({visible: false})} destroyOnClose > <Search onSearch={this.search}/> <TreeTransfer dataSource={orgs} targetKeys={targetKeys} onChange={this.onChange} /> </Modal> </> src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx
@@ -90,7 +90,7 @@ </Form.Item> </Col> : null} {nodetype === 'node' ? <Col span={12}> <Form.Item label="审批人"> <Form.Item label="设置审批人"> {getFieldDecorator('approver', { initialValue: data.approver || 'member' })( @@ -115,26 +115,24 @@ </Form.Item> </Col> : null} <Col span={12}> <Form.Item label="人员"> {getFieldDecorator('roleId', { initialValue: data.roleId || '', rules: [ { required: true, message: '请选择人员!' } ] <Form.Item label="审批人"> {getFieldDecorator('members', { initialValue: data.members || [], rules: [{ required: true, message: '请添加审批人!' }] })( <MemberForm orgs={orgs}/> <MemberForm orgs={orgs} title="审批人"/> )} </Form.Item> </Col> <Col span={12}> <Form.Item label="抄送"> {getFieldDecorator('depId', { initialValue: data.depId || '' <Form.Item label="抄送人"> {getFieldDecorator('copys', { initialValue: data.copys || [] })( <MemberForm orgs={orgs}/> <MemberForm orgs={orgs} title="抄送人"/> )} </Form.Item> </Col>