|
@@ -1,9 +1,13 @@
|
|
import React, { useState, useEffect, useMemo, useRef } from 'react';
|
|
import React, { useState, useEffect, useMemo, useRef } from 'react';
|
|
-import { Form, Modal, Steps, Tabs, TreeSelect } from 'antd';
|
|
|
|
|
|
+import { Button, Form, Modal, Select, Steps, Tabs, TreeSelect, Upload } from 'antd';
|
|
import styles from './DetailModal.less';
|
|
import styles from './DetailModal.less';
|
|
import TableRender from './TableRender';
|
|
import TableRender from './TableRender';
|
|
import MemberModal from './MemberModal';
|
|
import MemberModal from './MemberModal';
|
|
import StatusRender from './StatusRender';
|
|
import StatusRender from './StatusRender';
|
|
|
|
+import { STATUS, SUB_STATUS } from './List';
|
|
|
|
+import { async } from '@antv/x6/lib/registry/marker/async';
|
|
|
|
+import { queryStatusHistory } from '@/services/approval';
|
|
|
|
+import { UploadOutlined } from '@ant-design/icons';
|
|
|
|
|
|
const { Step } = Steps;
|
|
const { Step } = Steps;
|
|
// 新建
|
|
// 新建
|
|
@@ -27,9 +31,42 @@ function DetailModal(props) {
|
|
name: '',
|
|
name: '',
|
|
version: '',
|
|
version: '',
|
|
});
|
|
});
|
|
- const [params, setParams] = useState({
|
|
|
|
- sub_status: data.sub_status,
|
|
|
|
- });
|
|
|
|
|
|
+ const [params, setParams] = useState({});
|
|
|
|
+ const [statusList, setStatusHistory] = useState([]);
|
|
|
|
+
|
|
|
|
+ const subSelectOptions = {
|
|
|
|
+ 0: [
|
|
|
|
+ { value: 1, label: '预算和方式' },
|
|
|
|
+ { value: 7, label: '放弃' },
|
|
|
|
+ { value: 8, label: '失败' },
|
|
|
|
+ { value: 9, label: '关闭' },
|
|
|
|
+ ],
|
|
|
|
+ 1: [
|
|
|
|
+ { value: 2, label: '招标' },
|
|
|
|
+ { value: 7, label: '放弃' },
|
|
|
|
+ { value: 8, label: '失败' },
|
|
|
|
+ { value: 9, label: '关闭' },
|
|
|
|
+ ],
|
|
|
|
+ 2: [
|
|
|
|
+ { value: 3, label: '中标' },
|
|
|
|
+ { value: 8, label: '失败' },
|
|
|
|
+ { value: 9, label: '关闭' },
|
|
|
|
+ ],
|
|
|
|
+ 3: [
|
|
|
|
+ { value: 4, label: '转执行' },
|
|
|
|
+ { value: 9, label: '关闭' },
|
|
|
|
+ ],
|
|
|
|
+ 4: [
|
|
|
|
+ { value: 5, label: '转运营' },
|
|
|
|
+ { value: 6, label: '转质保' },
|
|
|
|
+ { value: 9, label: '关闭' },
|
|
|
|
+ ],
|
|
|
|
+ 5: [
|
|
|
|
+ { value: 6, label: '转质保' },
|
|
|
|
+ { value: 9, label: '关闭' },
|
|
|
|
+ ],
|
|
|
|
+ 6: [{ value: 9, label: '关闭' }],
|
|
|
|
+ };
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
if (!visible || !data.id) return;
|
|
if (!visible || !data.id) return;
|
|
@@ -40,8 +77,37 @@ function DetailModal(props) {
|
|
name: data.name,
|
|
name: data.name,
|
|
version: data.version,
|
|
version: data.version,
|
|
});
|
|
});
|
|
|
|
+ setParams({
|
|
|
|
+ project_status: data?.project_status,
|
|
|
|
+ sub_status: data?.status,
|
|
|
|
+ });
|
|
|
|
+ if (data?.id) initStatueHistory(data.id);
|
|
}, [data, visible]);
|
|
}, [data, visible]);
|
|
|
|
|
|
|
|
+ const initStatueHistory = async id => {
|
|
|
|
+ const res = await queryStatusHistory({ id });
|
|
|
|
+ if (res.data) setStatusHistory(res.data);
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const handleSubChange = e => {
|
|
|
|
+ console.log(e);
|
|
|
|
+ setParams({ ...params, sub_status: e });
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const uploadProps = {
|
|
|
|
+ action: `/api/v2/approval/attach`,
|
|
|
|
+ headers: {
|
|
|
|
+ 'JWT-TOKEN': localStorage.getItem('JWT-TOKEN'),
|
|
|
|
+ },
|
|
|
|
+ // defaultFileList: attachData?.attach_extend,
|
|
|
|
+ onChange({ file, fileList }) {
|
|
|
|
+ if (file.status !== 'uploading') {
|
|
|
|
+ const list = fileList.map(item => item.response?.data?.attach);
|
|
|
|
+ setParams({ ...params, attach: list });
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ };
|
|
|
|
+
|
|
const renderDetail = () => (
|
|
const renderDetail = () => (
|
|
<>
|
|
<>
|
|
<div className={styles.subTitle}>项目详情</div>
|
|
<div className={styles.subTitle}>项目详情</div>
|
|
@@ -73,12 +139,10 @@ function DetailModal(props) {
|
|
</Form.Item>
|
|
</Form.Item>
|
|
</>
|
|
</>
|
|
)}
|
|
)}
|
|
- {!isEdit && data.AuthorUser ? (
|
|
|
|
- <Form.Item className={styles.formItem} label="售前项目经理">
|
|
|
|
- {data.AuthorUser.CName}
|
|
|
|
- </Form.Item>
|
|
|
|
- ) : (
|
|
|
|
- <Form.Item label="售前项目经理" className={styles.formItem} name="managerID">
|
|
|
|
|
|
+ <Form.Item className={styles.formItem} label="售前项目经理">
|
|
|
|
+ {!isEdit && data.AuthorUser ? (
|
|
|
|
+ data.AuthorUser.CName
|
|
|
|
+ ) : (
|
|
<TreeSelect
|
|
<TreeSelect
|
|
defaultValue={data.AuthorUser?.CName}
|
|
defaultValue={data.AuthorUser?.CName}
|
|
showSearch
|
|
showSearch
|
|
@@ -91,8 +155,8 @@ function DetailModal(props) {
|
|
}}
|
|
}}
|
|
treeData={depUserTree}
|
|
treeData={depUserTree}
|
|
/>
|
|
/>
|
|
- </Form.Item>
|
|
|
|
- )}
|
|
|
|
|
|
+ )}
|
|
|
|
+ </Form.Item>
|
|
{data.AuthorDepInfo && (
|
|
{data.AuthorDepInfo && (
|
|
<Form.Item className={styles.formItem} label="所属部门">
|
|
<Form.Item className={styles.formItem} label="所属部门">
|
|
{data.AuthorDepInfo.Name}
|
|
{data.AuthorDepInfo.Name}
|
|
@@ -113,12 +177,28 @@ function DetailModal(props) {
|
|
{data.OptManager.CName}
|
|
{data.OptManager.CName}
|
|
</Form.Item>
|
|
</Form.Item>
|
|
)}
|
|
)}
|
|
- {/* <Form.Item className={styles.formItem} label="项目阶段">
|
|
|
|
- {data.OptManager.CName}
|
|
|
|
|
|
+ <Form.Item className={styles.formItem} label="项目阶段">
|
|
|
|
+ {STATUS.find(item => item.value == params?.project_status)?.label}
|
|
</Form.Item>
|
|
</Form.Item>
|
|
<Form.Item className={styles.formItem} label="现阶段状态">
|
|
<Form.Item className={styles.formItem} label="现阶段状态">
|
|
- {data.OptManager.CName}
|
|
|
|
- </Form.Item> */}
|
|
|
|
|
|
+ {isEdit ? (
|
|
|
|
+ <Select
|
|
|
|
+ defaultValue={SUB_STATUS[0].label}
|
|
|
|
+ style={{ width: '60%' }}
|
|
|
|
+ onChange={handleSubChange}
|
|
|
|
+ options={data?.status || data?.status == 0 ? subSelectOptions[data?.status] : []}
|
|
|
|
+ />
|
|
|
|
+ ) : (
|
|
|
|
+ SUB_STATUS.find(item => item.value == data?.status)?.label
|
|
|
|
+ )}
|
|
|
|
+ </Form.Item>
|
|
|
|
+ {isEdit && data?.status >= 0 && data?.status <= 4 && (
|
|
|
|
+ <Form.Item className={styles.formItem} label="上传文件">
|
|
|
|
+ <Upload {...uploadProps}>
|
|
|
|
+ <Button icon={<UploadOutlined />}>上传文件</Button>
|
|
|
|
+ </Upload>
|
|
|
|
+ </Form.Item>
|
|
|
|
+ )}
|
|
<Form.Item className={styles.formItem} label="项目规模">
|
|
<Form.Item className={styles.formItem} label="项目规模">
|
|
<TableRender
|
|
<TableRender
|
|
onlyShow={true}
|
|
onlyShow={true}
|
|
@@ -169,7 +249,7 @@ function DetailModal(props) {
|
|
<Modal title="项目详情" width={800} visible={visible} onCancel={onClose} footer={null}>
|
|
<Modal title="项目详情" width={800} visible={visible} onCancel={onClose} footer={null}>
|
|
{renderDetail()}
|
|
{renderDetail()}
|
|
{/* {data.audit_status != 0 && renderAuth()} */}
|
|
{/* {data.audit_status != 0 && renderAuth()} */}
|
|
- <Tabs defaultActiveKey="3">
|
|
|
|
|
|
+ <Tabs defaultActiveKey="1">
|
|
<Tabs.TabPane tab="成员管理" key="1">
|
|
<Tabs.TabPane tab="成员管理" key="1">
|
|
<MemberModal isEdit={isEdit} currentItem={data} />
|
|
<MemberModal isEdit={isEdit} currentItem={data} />
|
|
</Tabs.TabPane>
|
|
</Tabs.TabPane>
|
|
@@ -177,7 +257,7 @@ function DetailModal(props) {
|
|
{renderAuth()}
|
|
{renderAuth()}
|
|
</Tabs.TabPane>
|
|
</Tabs.TabPane>
|
|
<Tabs.TabPane tab="状态记录" key="3">
|
|
<Tabs.TabPane tab="状态记录" key="3">
|
|
- <StatusRender />
|
|
|
|
|
|
+ <StatusRender statusList={statusList} />
|
|
</Tabs.TabPane>
|
|
</Tabs.TabPane>
|
|
</Tabs>
|
|
</Tabs>
|
|
</Modal>
|
|
</Modal>
|