MemberModal.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import React, { useState, useEffect } from 'react';
  2. import { Form, Modal, TreeSelect, Table, Button, Input, Tabs } from 'antd';
  3. import { connect } from 'dva';
  4. const { TreeNode } = TreeSelect;
  5. const { TabPane } = Tabs;
  6. //状态
  7. const STATUS = [
  8. { value: 1, label: '售前' },
  9. { value: 2, label: '执行' },
  10. { value: 4, label: '研发' },
  11. { value: 5, label: '运营' },
  12. { value: 6, label: '质保' },
  13. ];
  14. function MemberRender(props) {
  15. const {
  16. visible,
  17. onClose,
  18. isEdit = false,
  19. currentItem,
  20. loading,
  21. depUserTree,
  22. member: dataSource,
  23. dispatch,
  24. } = props;
  25. const [type, setType] = useState('1');
  26. const [form] = Form.useForm();
  27. const [currentMember, setCurrentMember] = useState({});
  28. const columns = [
  29. {
  30. title: '工号',
  31. dataIndex: 'UserName',
  32. },
  33. {
  34. title: '姓名',
  35. dataIndex: 'CName',
  36. },
  37. {
  38. title: '手机号码',
  39. dataIndex: 'Mobile',
  40. },
  41. {
  42. title: '操作',
  43. //移除按钮,此处应传入当前成员的数据
  44. render: member =>
  45. member.ID != currentItem.author &&
  46. member.ID != currentItem.LeaderId &&
  47. member.ID != currentItem.wty_manager_id &&
  48. member.ID != currentItem.opt_manager_id && <a onClick={() => onDelete(member)}>移除</a>,
  49. },
  50. ];
  51. const onDelete = item => {
  52. Modal.confirm({
  53. title: '移除成员',
  54. content: '是否确认从项目中移除该成员',
  55. okText: '移除',
  56. okType: 'danger',
  57. cancelText: '取消',
  58. onOk() {
  59. dispatch({
  60. type: 'approval/deleteMember',
  61. payload: { project_code_id: currentItem.id, user_id: item.ID, flow_id: Number(type) },
  62. });
  63. },
  64. });
  65. };
  66. const handleAddMember = () => {
  67. form.validateFields().then(({ memberID }) => {
  68. dispatch({
  69. type: 'approval/addMember',
  70. payload: {
  71. project_code_id: currentItem.id,
  72. user_id: Number(memberID.split('||')[0]),
  73. flow_id: Number(type),
  74. },
  75. callback: () => {
  76. form.resetFields();
  77. },
  78. });
  79. });
  80. // form.resetFields();
  81. };
  82. const handleChange = type => {
  83. setType(type);
  84. dispatch({
  85. type: 'approval/queryMember',
  86. payload: { project_code_id: currentItem.id, flow_id: Number(type) },
  87. });
  88. };
  89. useEffect(() => {
  90. if (currentItem?.id) {
  91. handleChange('1');
  92. }
  93. }, [currentItem]);
  94. return (
  95. <>
  96. <Tabs defaultActiveKey="1" activeKey={type} onChange={type => handleChange(type)}>
  97. {STATUS.map(
  98. item =>
  99. currentItem.flow_id >= item.value && (
  100. <TabPane tab={item.label} key={item.value}></TabPane>
  101. )
  102. )}
  103. </Tabs>
  104. {isEdit && (
  105. <Form
  106. labelCol={{ span: 6 }}
  107. wrapperCol={{ span: 10 }}
  108. width="100%"
  109. style={{ marginBottom: 20 }}
  110. layout="inline"
  111. form={form}
  112. >
  113. <Form.Item
  114. label="添加成员"
  115. name="memberID"
  116. initialValue={null}
  117. rules={[{ required: true, message: '请选择成员' }]}
  118. >
  119. <TreeSelect
  120. showSearch
  121. allowClear
  122. style={{ width: 240 }}
  123. placeholder="请选择项目成员"
  124. multiple={false}
  125. treeData={depUserTree}
  126. filterTreeNode={(input, option) => {
  127. return option.props.title === input;
  128. }}
  129. />
  130. </Form.Item>
  131. <Form.Item>
  132. <Button type="primary" loading={loading} onClick={handleAddMember}>
  133. 添加
  134. </Button>
  135. </Form.Item>
  136. </Form>
  137. )}
  138. <Table columns={columns} loading={loading} dataSource={dataSource} pagination={false} />
  139. </>
  140. );
  141. }
  142. export default connect(({ approval, user, loading }) => ({
  143. currentUser: user.currentUser,
  144. loading: loading.models.approval,
  145. depUserTree: approval.depUserTree,
  146. member: approval.member,
  147. }))(MemberRender);