|
@@ -1,11 +1,12 @@
|
|
|
import PageContent from '@/components/PageContent';
|
|
|
import PageTitle from '@/components/PageTitle';
|
|
|
import {
|
|
|
- MandateChildType,
|
|
|
- MandateDetailType,
|
|
|
- PropsType,
|
|
|
- UserType,
|
|
|
- WorkOrderType,
|
|
|
+ IMandateChildType,
|
|
|
+ IMandateDetailType,
|
|
|
+ IPropsType,
|
|
|
+ ITopFilter,
|
|
|
+ IUserType,
|
|
|
+ IWorkOrderType,
|
|
|
} from '@/pages/TaskManage/Detail/detail.types';
|
|
|
import {
|
|
|
MandateClass,
|
|
@@ -18,58 +19,77 @@ import {
|
|
|
dispatchOrder,
|
|
|
getMandateChildList,
|
|
|
getMandateDetail,
|
|
|
+ getMandateList,
|
|
|
ignoreTask,
|
|
|
setTaskAutomation,
|
|
|
} from '@/services/TaskManage';
|
|
|
import { connect, useLocation, useRequest } from '@umijs/max';
|
|
|
+
|
|
|
+import TopFilter from '@/pages/TaskManage/components/TopFilter';
|
|
|
+import { IMandateType } from '@/pages/TaskManage/index.types';
|
|
|
+import { Col, Collapse, CollapseProps, Divider, List, Row } from 'antd';
|
|
|
import React, { useEffect, useState } from 'react';
|
|
|
+import styles from './detail.less';
|
|
|
|
|
|
-const TaskDetail: React.FC<PropsType> = (props) => {
|
|
|
+const TaskDetail: React.FC<IPropsType> = (props) => {
|
|
|
const { userList, dispatch } = props;
|
|
|
const md5 = require('md5');
|
|
|
const location = useLocation();
|
|
|
const queryParams = new URLSearchParams(location.search);
|
|
|
const project_id = Number(queryParams.get('project_id'));
|
|
|
- const mandate_id = Number(queryParams.get('mandate_id'));
|
|
|
+ const mandateType = Number(queryParams.get('mandateType'));
|
|
|
|
|
|
- const [mandateDetail, setMandateDetail] = useState<MandateDetailType>();
|
|
|
- const [handledWorkOrders, setHandledWorkOrders] = useState<WorkOrderType[]>(
|
|
|
+ const [mandateList, setMandateList] = useState<IMandateType[]>([]);
|
|
|
+ const [mandateDetail, setMandateDetail] = useState<IMandateDetailType>();
|
|
|
+ const [handledWorkOrders, setHandledWorkOrders] = useState<IWorkOrderType[]>(
|
|
|
[],
|
|
|
);
|
|
|
- const [subMandateList, setSubMandateList] = useState<MandateChildType[]>([]);
|
|
|
+ const [subMandateList, setSubMandateList] = useState<IMandateChildType[]>([]);
|
|
|
+
|
|
|
+ const [topFilters, setTopFilters] = useState<ITopFilter[]>([]);
|
|
|
+
|
|
|
+ const {
|
|
|
+ data: originMandateList,
|
|
|
+ run: runGetMandateList,
|
|
|
+ refresh: refreshMandateList,
|
|
|
+ } = useRequest(getMandateList, {
|
|
|
+ manual: true,
|
|
|
+ onSuccess: (data) => {
|
|
|
+ setMandateList(data.list);
|
|
|
+ },
|
|
|
+ });
|
|
|
|
|
|
const { run: getDetail, refresh: refreshDetail } = useRequest(
|
|
|
getMandateDetail,
|
|
|
{
|
|
|
- defaultParams: [
|
|
|
- {
|
|
|
- project_id,
|
|
|
- mandate_id,
|
|
|
- },
|
|
|
- ],
|
|
|
+ manual: true,
|
|
|
formatResult: (result) => {
|
|
|
- const mandate: MandateDetailType = {
|
|
|
+ const mandate: IMandateDetailType = {
|
|
|
...result.data,
|
|
|
- Status: MandateStatus.find((item) => item.value === result.data.Status),
|
|
|
+ Status: MandateStatus.find(
|
|
|
+ (item) => item.value === result.data.Status,
|
|
|
+ ),
|
|
|
MandateClass: MandateClass.find(
|
|
|
(item) => item.value === result.data.MandateClass,
|
|
|
),
|
|
|
MandateType: MandateType.find(
|
|
|
(item) => item.value === result.data.MandateType,
|
|
|
),
|
|
|
+ ResponsiblePeople: userList.find(
|
|
|
+ (item) => item.ID === result.data.ResponsiblePeople,
|
|
|
+ ),
|
|
|
};
|
|
|
- const workOrderList: WorkOrderType[] = result.data.Records.map(
|
|
|
- (record: WorkOrderType) => {
|
|
|
+
|
|
|
+ const workOrderList: IWorkOrderType[] = result.data.Records.map(
|
|
|
+ (record: IWorkOrderType) => {
|
|
|
return {
|
|
|
...record,
|
|
|
- Status: OrderStatus.find(
|
|
|
- (item) => item.value === record.Status,
|
|
|
- ),
|
|
|
+ Status: OrderStatus.find((item) => item.value === record.Status),
|
|
|
RecordType: OrderType.find(
|
|
|
(item) => item.value === record.RecordType,
|
|
|
),
|
|
|
Responsible: userList.find(
|
|
|
- (item: UserType) => item.ID === record.Responsible,
|
|
|
+ (item: IUserType) => item.ID === record.Responsible,
|
|
|
),
|
|
|
};
|
|
|
},
|
|
@@ -80,20 +100,15 @@ const TaskDetail: React.FC<PropsType> = (props) => {
|
|
|
},
|
|
|
);
|
|
|
|
|
|
- const {
|
|
|
- run: getMandateChild,
|
|
|
- loading,
|
|
|
- refresh: refreshMandateChild,
|
|
|
- } = useRequest(getMandateChildList, {
|
|
|
- defaultParams: [
|
|
|
- {
|
|
|
- mandateId: mandate_id,
|
|
|
+ const { run: getMandateChild, refresh: refreshMandateChild } = useRequest(
|
|
|
+ getMandateChildList,
|
|
|
+ {
|
|
|
+ manual: true,
|
|
|
+ formatResult: (result) => {
|
|
|
+ setSubMandateList(result.data);
|
|
|
},
|
|
|
- ],
|
|
|
- formatResult: (result) => {
|
|
|
- setSubMandateList(result.data);
|
|
|
},
|
|
|
- });
|
|
|
+ );
|
|
|
|
|
|
const { run: setAuto } = useRequest(setTaskAutomation, {
|
|
|
manual: true,
|
|
@@ -119,6 +134,30 @@ const TaskDetail: React.FC<PropsType> = (props) => {
|
|
|
},
|
|
|
});
|
|
|
|
|
|
+ const onTopFilterChange = (value: any, item: ITopFilter, index: number) => {
|
|
|
+ switch (index) {
|
|
|
+ case 0:
|
|
|
+ setMandateList(
|
|
|
+ originMandateList.list.filter(
|
|
|
+ (item: IMandateType) => item.MandateClass === value,
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ setMandateList(
|
|
|
+ originMandateList.list.filter(
|
|
|
+ (item: IMandateType) => item.Status === value,
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ const onTopFilterClean = () => {
|
|
|
+ setMandateList(originMandateList.list)
|
|
|
+ };
|
|
|
+
|
|
|
+ // 获取用户
|
|
|
useEffect(() => {
|
|
|
if (userList.length === 0) {
|
|
|
dispatch({
|
|
@@ -127,16 +166,161 @@ const TaskDetail: React.FC<PropsType> = (props) => {
|
|
|
});
|
|
|
}
|
|
|
}, []);
|
|
|
+ // 获取列表
|
|
|
+ useEffect(() => {
|
|
|
+ runGetMandateList({
|
|
|
+ project_id,
|
|
|
+ pageSize: 9999,
|
|
|
+ });
|
|
|
+ }, [userList]);
|
|
|
+ // 顶部下拉过滤器
|
|
|
+ useEffect(() => {
|
|
|
+ const filters: ITopFilter[] = [];
|
|
|
+
|
|
|
+ filters.push({
|
|
|
+ key: '任务类别',
|
|
|
+ placeholder: '任务类别',
|
|
|
+ // @ts-ignore
|
|
|
+ options: MandateClass.map((item) => {
|
|
|
+ if (item.MandateType === mandateType) {
|
|
|
+ return {
|
|
|
+ value: item.value,
|
|
|
+ label: item.label,
|
|
|
+ key: item.value + '任务类别',
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }).filter((item) => item),
|
|
|
+ });
|
|
|
+
|
|
|
+ filters.push({
|
|
|
+ key: '任务状态',
|
|
|
+ placeholder: '任务状态',
|
|
|
+ options: MandateStatus.map((item) => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ key: item.value + '任务状态',
|
|
|
+ };
|
|
|
+ }),
|
|
|
+ });
|
|
|
+ setTopFilters(filters);
|
|
|
+ }, [mandateType]);
|
|
|
+
|
|
|
+ const buildTaskList = (item: IMandateType, index: number) => {
|
|
|
+ const formatItem = {
|
|
|
+ ...item,
|
|
|
+ Status: MandateStatus.find((status) => status.value === item.Status),
|
|
|
+ MandateType: MandateType.find((type) => type.value === item.MandateType),
|
|
|
+ MandateClass: MandateClass.find(
|
|
|
+ (itemClass) => itemClass.value === item.MandateClass,
|
|
|
+ ),
|
|
|
+ ResponsiblePeople: userList.find(
|
|
|
+ (user) => user.ID === item.ResponsiblePeople,
|
|
|
+ ),
|
|
|
+ };
|
|
|
+
|
|
|
+ const workOrder = item.Records.map((record) => {
|
|
|
+ return {
|
|
|
+ ...record,
|
|
|
+ Status: OrderStatus.find((status) => status.value === record.Status),
|
|
|
+ RecordType: OrderType.find((type) => type.value === record.RecordType),
|
|
|
+ Responsible: userList.find((user) => user.ID === record.Responsible),
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ const collapseData: CollapseProps['items'] = [
|
|
|
+ {
|
|
|
+ key: '1',
|
|
|
+ label: (
|
|
|
+ <span style={{ color: '#5697e4' }}>关联工单({workOrder.length})</span>
|
|
|
+ ),
|
|
|
+ children: workOrder.map((order) => {
|
|
|
+ return (
|
|
|
+ <div className={styles.workOrderCard}>
|
|
|
+ <div className={styles.leftInfo}>
|
|
|
+ <Row>
|
|
|
+ <Col span={12}>工单编号:{order.Id}</Col>
|
|
|
+ <Col span={12}>时间:{order.CreateTime}</Col>
|
|
|
+ </Row>
|
|
|
+ <Row>
|
|
|
+ <Col span={12}>
|
|
|
+ 工单状态:
|
|
|
+ <span style={{ color: '#5697e4' }}>
|
|
|
+ {order.Status?.label}
|
|
|
+ </span>
|
|
|
+ </Col>
|
|
|
+ <Col span={12}>工单负责人:{order.Responsible?.CName}</Col>
|
|
|
+ </Row>
|
|
|
+ </div>
|
|
|
+ <Divider type="vertical" style={{ height: '40px' }} />
|
|
|
+ <div className={styles.rightButton}>查看工单</div>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ }),
|
|
|
+ },
|
|
|
+ ];
|
|
|
+
|
|
|
+ return (
|
|
|
+ <List.Item>
|
|
|
+ <div className={`${styles.cardContainer} card-box`}>
|
|
|
+ <div className={styles.taskInfo}>
|
|
|
+ <Row justify="space-between" style={{ marginBottom: '20px' }}>
|
|
|
+ <Col>时间:{formatItem.CreateTime}</Col>
|
|
|
+ <Col>任务类别:{formatItem.MandateClass?.label}</Col>
|
|
|
+ <Col>
|
|
|
+ 任务负责人:{formatItem.ResponsiblePeople?.CName || '-'}
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ <Row
|
|
|
+ justify="space-between"
|
|
|
+ style={{ paddingBottom: '10px', borderBottom: '1px solid gray' }}
|
|
|
+ >
|
|
|
+ <Col>任务状态:{formatItem.Status?.label || '-'}</Col>
|
|
|
+ <Col>
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ width: '80px',
|
|
|
+ color: 'white',
|
|
|
+ backgroundColor: '#f5a623',
|
|
|
+ textAlign: 'center',
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ 任务详情
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ <Row>
|
|
|
+ <Collapse
|
|
|
+ className={styles.collapseLabel}
|
|
|
+ ghost
|
|
|
+ items={collapseData}
|
|
|
+ />
|
|
|
+ </Row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </List.Item>
|
|
|
+ );
|
|
|
+ };
|
|
|
|
|
|
return (
|
|
|
<PageContent>
|
|
|
- <PageTitle returnable>任务详情</PageTitle>
|
|
|
-
|
|
|
+ <PageTitle returnable>
|
|
|
+ {MandateType.find((item) => item.value === mandateType)?.label}
|
|
|
+ </PageTitle>
|
|
|
+ <TopFilter
|
|
|
+ filters={topFilters}
|
|
|
+ onChange={onTopFilterChange}
|
|
|
+ onClean={onTopFilterClean}
|
|
|
+ />
|
|
|
+ <List
|
|
|
+ itemLayout="horizontal"
|
|
|
+ dataSource={mandateList}
|
|
|
+ renderItem={buildTaskList}
|
|
|
+ />
|
|
|
</PageContent>
|
|
|
);
|
|
|
};
|
|
|
|
|
|
-export default connect(({ taskUser }: any): { userList: UserType[] } => {
|
|
|
+export default connect(({ taskUser }: any): { userList: IUserType[] } => {
|
|
|
return {
|
|
|
userList: taskUser.userList,
|
|
|
};
|