king
2023-08-08 ab003fccad96beb96d18f8018980e6c75ed03edc
2023-08-08
5个文件已修改
149 ■■■■ 已修改文件
src/tabviews/custom/components/chart/antv-X6/index.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.scss 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/nodeupdate/memberform.jsx 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/nodeupdate/nodeform.jsx 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>