From ab003fccad96beb96d18f8018980e6c75ed03edc Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 08 八月 2023 16:28:43 +0800 Subject: [PATCH] 2023-08-08 --- src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.scss | 10 +++ src/tabviews/custom/components/chart/antv-X6/index.jsx | 6 ++ src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx | 28 ++++----- src/tabviews/custom/components/chart/antv-X6/nodeupdate/memberform.jsx | 101 ++++++++++++++++++++++++++++++++- src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx | 4 5 files changed, 126 insertions(+), 23 deletions(-) diff --git a/src/tabviews/custom/components/chart/antv-X6/index.jsx b/src/tabviews/custom/components/chart/antv-X6/index.jsx index 87c4c48..6e05732 100644 --- a/src/tabviews/custom/components/chart/antv-X6/index.jsx +++ b/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) } }) diff --git a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx b/src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx index 722012a..34ac0c0 100644 --- a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx +++ b/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> diff --git a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.scss b/src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.scss index b9da954..57d1d35 100644 --- a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.scss +++ b/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; diff --git a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/memberform.jsx b/src/tabviews/custom/components/chart/antv-X6/nodeupdate/memberform.jsx index 4602e47..37827b0 100644 --- a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/memberform.jsx +++ b/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> </> diff --git a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx b/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx index a47936b..de23978 100644 --- a/src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx +++ b/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> -- Gitblit v1.8.0