|
@@ -1,327 +0,0 @@
|
|
-import PageContent from '@/components/PageContent';
|
|
|
|
-import PageTitle from '@/components/PageTitle';
|
|
|
|
-import {
|
|
|
|
- IMandateChildType,
|
|
|
|
- IMandateDetailType,
|
|
|
|
- IPropsType,
|
|
|
|
- ITopFilter,
|
|
|
|
- IUserType,
|
|
|
|
- IWorkOrderType,
|
|
|
|
-} from '@/pages/TaskManage/Detail/detail.types';
|
|
|
|
-import {
|
|
|
|
- MandateClass,
|
|
|
|
- MandateStatus,
|
|
|
|
- MandateType,
|
|
|
|
- OrderStatus,
|
|
|
|
- OrderType,
|
|
|
|
-} from '@/pages/TaskManage/constent';
|
|
|
|
-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<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 mandateType = Number(queryParams.get('mandateType'));
|
|
|
|
-
|
|
|
|
- const [mandateList, setMandateList] = useState<IMandateType[]>([]);
|
|
|
|
- const [mandateDetail, setMandateDetail] = useState<IMandateDetailType>();
|
|
|
|
- const [handledWorkOrders, setHandledWorkOrders] = useState<IWorkOrderType[]>(
|
|
|
|
- [],
|
|
|
|
- );
|
|
|
|
- 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,
|
|
|
|
- {
|
|
|
|
- manual: true,
|
|
|
|
- formatResult: (result) => {
|
|
|
|
- const mandate: IMandateDetailType = {
|
|
|
|
- ...result.data,
|
|
|
|
- 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: IWorkOrderType[] = result.data.Records.map(
|
|
|
|
- (record: IWorkOrderType) => {
|
|
|
|
- return {
|
|
|
|
- ...record,
|
|
|
|
- Status: OrderStatus.find((item) => item.value === record.Status),
|
|
|
|
- RecordType: OrderType.find(
|
|
|
|
- (item) => item.value === record.RecordType,
|
|
|
|
- ),
|
|
|
|
- Responsible: userList.find(
|
|
|
|
- (item: IUserType) => item.ID === record.Responsible,
|
|
|
|
- ),
|
|
|
|
- };
|
|
|
|
- },
|
|
|
|
- );
|
|
|
|
- setMandateDetail(mandate);
|
|
|
|
- setHandledWorkOrders(workOrderList);
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- const { run: getMandateChild, refresh: refreshMandateChild } = useRequest(
|
|
|
|
- getMandateChildList,
|
|
|
|
- {
|
|
|
|
- manual: true,
|
|
|
|
- formatResult: (result) => {
|
|
|
|
- setSubMandateList(result.data);
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- const { run: setAuto } = useRequest(setTaskAutomation, {
|
|
|
|
- manual: true,
|
|
|
|
- onSuccess: () => {
|
|
|
|
- refreshDetail();
|
|
|
|
- refreshMandateChild();
|
|
|
|
- },
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- const { run: runIgnoreTask } = useRequest(ignoreTask, {
|
|
|
|
- manual: true,
|
|
|
|
- onSuccess: () => {
|
|
|
|
- refreshDetail();
|
|
|
|
- refreshMandateChild();
|
|
|
|
- },
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- const { run: runDispatch } = useRequest(dispatchOrder, {
|
|
|
|
- manual: true,
|
|
|
|
- onSuccess: () => {
|
|
|
|
- refreshDetail();
|
|
|
|
- refreshMandateChild();
|
|
|
|
- },
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- 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({
|
|
|
|
- type: 'taskUser/fetchUserList',
|
|
|
|
- payload: { project_id },
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- }, []);
|
|
|
|
- // 获取列表
|
|
|
|
- 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>
|
|
|
|
- {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: IUserType[] } => {
|
|
|
|
- return {
|
|
|
|
- userList: taskUser.userList,
|
|
|
|
- };
|
|
|
|
-})(TaskDetail);
|
|
|