|
@@ -1,5 +1,5 @@
|
|
|
import React, { useState, useEffect, useMemo, useRef } from 'react';
|
|
|
-import { Button, Form, Modal, Select, Steps, Tabs, TreeSelect, Upload } from 'antd';
|
|
|
+import { Button, Form, Modal, Select, Steps, Tabs, TreeSelect, Upload, message } from 'antd';
|
|
|
import styles from './DetailModal.less';
|
|
|
import TableRender from './TableRender';
|
|
|
import MemberModal from './MemberModal';
|
|
@@ -9,6 +9,7 @@ import { async } from '@antv/x6/lib/registry/marker/async';
|
|
|
import { queryStatusHistory } from '@/services/approval';
|
|
|
import { UploadOutlined } from '@ant-design/icons';
|
|
|
import { startExecution, startOperate, startQuality } from '@/services/approval';
|
|
|
+import { connect } from 'dva';
|
|
|
|
|
|
const { Step } = Steps;
|
|
|
// 新建
|
|
@@ -25,6 +26,7 @@ function DetailModal(props) {
|
|
|
disabled,
|
|
|
currentUser,
|
|
|
loading,
|
|
|
+ dispatch,
|
|
|
} = props;
|
|
|
const [codes, setCodes] = useState({
|
|
|
type: '',
|
|
@@ -45,10 +47,10 @@ function DetailModal(props) {
|
|
|
name: data.name,
|
|
|
version: data.version,
|
|
|
});
|
|
|
- setParams({
|
|
|
- project_status: data?.project_status,
|
|
|
- // status: data?.status,
|
|
|
- });
|
|
|
+ // setParams({
|
|
|
+ // project_status: data?.project_status,
|
|
|
+ // // status: data?.status,
|
|
|
+ // });
|
|
|
if (data?.id) initStatueHistory(data.id);
|
|
|
}, [data, visible]);
|
|
|
|
|
@@ -138,6 +140,32 @@ function DetailModal(props) {
|
|
|
|
|
|
return { showModifyManager, showEditBtn, showMember, showStatus, showExecution };
|
|
|
}, [currentUser, data, isEdit]);
|
|
|
+ const manager = useMemo(() => {
|
|
|
+ let manager = {};
|
|
|
+ switch (data.project_status) {
|
|
|
+ case 0:
|
|
|
+ // 售前
|
|
|
+ manager = data.AuditUser || {};
|
|
|
+ manager.DepID = data.author_dep_id;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ // 执行
|
|
|
+ manager = data.Leader || {};
|
|
|
+ manager.DepID = data.leader_dep_id;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ // 运营
|
|
|
+ manager = data.OptManager || {};
|
|
|
+ manager.DepID = data.opt_manager_dep_id;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ // 质保
|
|
|
+ manager = data.WtyManager || {};
|
|
|
+ manager.DepID = data.wty_manager_dep_id;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return manager;
|
|
|
+ }, [data]);
|
|
|
const statusOptions = useMemo(() => {
|
|
|
if (!data?.id) return [];
|
|
|
const { showStatus, showExecution } = promise;
|
|
@@ -195,30 +223,25 @@ function DetailModal(props) {
|
|
|
if (!label) return null;
|
|
|
return (
|
|
|
<>
|
|
|
- <Form.Item
|
|
|
- label={label}
|
|
|
- name="managerID"
|
|
|
- rules={[{ required: true, message: `请选择${label}` }]}
|
|
|
- >
|
|
|
+ <Form.Item label={label} rules={[{ required: true, message: `请选择${label}` }]}>
|
|
|
<TreeSelect
|
|
|
showSearch
|
|
|
allowClear
|
|
|
- style={{ width: '100%' }}
|
|
|
placeholder={`请选择${label}`}
|
|
|
multiple={false}
|
|
|
filterTreeNode={(input, option) => {
|
|
|
- return option.props.title === input;
|
|
|
+ return option.props.title.industry(input);
|
|
|
}}
|
|
|
+ onChange={value => setParams({ ...params, Manager: value })}
|
|
|
treeData={depUserTree}
|
|
|
/>
|
|
|
</Form.Item>
|
|
|
{params.status == 11 && (
|
|
|
- <Form.Item
|
|
|
- label="合同状态"
|
|
|
- name="contractStatus"
|
|
|
- rules={[{ required: true, message: '请选择合同状态' }]}
|
|
|
- >
|
|
|
- <Select style={{ width: '100%' }}>
|
|
|
+ <Form.Item label="合同状态">
|
|
|
+ <Select
|
|
|
+ onChange={value => setParams({ ...params, contractStatus: value })}
|
|
|
+ placeholder="请选择有无合同"
|
|
|
+ >
|
|
|
<Option key={0}>无合同</Option>
|
|
|
<Option key={1}>有合同</Option>
|
|
|
</Select>
|
|
@@ -245,13 +268,68 @@ function DetailModal(props) {
|
|
|
};
|
|
|
|
|
|
const onSave = () => {
|
|
|
+ let type = '';
|
|
|
+ let payload = null;
|
|
|
if (params.status == 11) {
|
|
|
// '项目经理'
|
|
|
+ if (!params.Manager) return message.error('请选择项目经理');
|
|
|
+ if (!params.contractStatus) return message.error('请选择有无合同');
|
|
|
+ type = 'approval/startExecution';
|
|
|
+ const [manager_id, dep_id] = params.Manager.split('||');
|
|
|
+ payload = {
|
|
|
+ project_code_id: data.id,
|
|
|
+ with_contract: Number(params.contractStatus),
|
|
|
+ dep_id: Number(dep_id),
|
|
|
+ exe_manager_id: Number(manager_id),
|
|
|
+ };
|
|
|
+ if (params.attach && params.attach.length > 0) {
|
|
|
+ try {
|
|
|
+ payload.attach = JSON.stringify(params.attach);
|
|
|
+ } catch (e) {
|
|
|
+ console.error(e);
|
|
|
+ payload.attach = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
} else if (params.status == 21) {
|
|
|
// '运营经理'
|
|
|
+ if (!params.Manager) return message.error('请选择运营经理');
|
|
|
+ type = 'approval/startOperate';
|
|
|
+ const [manager_id, dep_id] = params.Manager.split('||');
|
|
|
+ payload = {
|
|
|
+ project_code_id: data.id,
|
|
|
+ dep_id: Number(dep_id),
|
|
|
+ opt_manager_id: Number(manager_id),
|
|
|
+ };
|
|
|
} else if (params.status == 31) {
|
|
|
// '质保经理'
|
|
|
+ type = 'approval/startQuality';
|
|
|
+ const [manager_id, dep_id] = params.Manager.split('||');
|
|
|
+ payload = {
|
|
|
+ project_code_id: data.id,
|
|
|
+ dep_id: Number(dep_id),
|
|
|
+ wty_manager_id: Number(manager_id),
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ type = 'approval/updateApproval';
|
|
|
+ payload = {
|
|
|
+ ...data,
|
|
|
+ ...params,
|
|
|
+ manager_id: manager.ID,
|
|
|
+ };
|
|
|
+ if (params.attach && params.attach.length > 0) {
|
|
|
+ try {
|
|
|
+ payload.attach = JSON.stringify(params.attach);
|
|
|
+ } catch (e) {
|
|
|
+ console.error(e);
|
|
|
+ payload.attach = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ dispatch({
|
|
|
+ type,
|
|
|
+ payload,
|
|
|
+ callback: () => onClose(),
|
|
|
+ });
|
|
|
};
|
|
|
|
|
|
const uploadProps = {
|
|
@@ -264,8 +342,8 @@ function DetailModal(props) {
|
|
|
// defaultFileList: attachData?.attach_extend,
|
|
|
onChange({ file, fileList }) {
|
|
|
if (file.status !== 'uploading') {
|
|
|
- const data = fileList.map(item => item.response?.data);
|
|
|
- setParams({ ...params, attach: [...params.attach, data] });
|
|
|
+ const urlList = fileList.map(item => item.response?.data);
|
|
|
+ setParams({ ...params, attach: urlList });
|
|
|
}
|
|
|
},
|
|
|
};
|
|
@@ -302,18 +380,19 @@ function DetailModal(props) {
|
|
|
)}
|
|
|
<Form.Item className={styles.formItem} label="项目经理">
|
|
|
{!promise.showModifyManager ? (
|
|
|
- data.AuthorUser?.CName
|
|
|
+ manager?.CName
|
|
|
) : (
|
|
|
<TreeSelect
|
|
|
- defaultValue={data.AuthorUser?.CName}
|
|
|
+ // defaultValue={`${manager.ID}||${manager.DepID}`}
|
|
|
+ placeholder={manager.CName || '请选择项目经理'}
|
|
|
showSearch
|
|
|
allowClear
|
|
|
style={{ width: '60%' }}
|
|
|
- placeholder="请选择项目经理"
|
|
|
multiple={false}
|
|
|
filterTreeNode={(input, option) => {
|
|
|
return option.props.title === input;
|
|
|
}}
|
|
|
+ onChange={value => setParams({ ...params, manager_id: Number(value.split('||')[0]) })}
|
|
|
treeData={depUserTree}
|
|
|
/>
|
|
|
)}
|
|
@@ -339,7 +418,7 @@ function DetailModal(props) {
|
|
|
</Form.Item>
|
|
|
)}
|
|
|
<Form.Item className={styles.formItem} label="项目阶段">
|
|
|
- {STATUS.find(item => item.value == params?.project_status)?.label}
|
|
|
+ {STATUS.find(item => item.value == data?.project_status)?.label}
|
|
|
</Form.Item>
|
|
|
<Form.Item className={styles.formItem} label="现阶段状态">
|
|
|
{isEdit ? (
|
|
@@ -366,7 +445,7 @@ function DetailModal(props) {
|
|
|
<TableRender onlyShow={true} value={data.process_info} />
|
|
|
</Form.Item>
|
|
|
<Form.Item>
|
|
|
- <Button type="primary" onClick={onSave}>
|
|
|
+ <Button type="primary" loading={loading} onClick={onSave}>
|
|
|
保存
|
|
|
</Button>
|
|
|
</Form.Item>
|
|
@@ -428,4 +507,4 @@ function DetailModal(props) {
|
|
|
</Modal>
|
|
|
);
|
|
|
}
|
|
|
-export default DetailModal;
|
|
|
+export default connect(({ loading }) => ({ loading: loading.models.approval }))(DetailModal);
|