import PageContent from '@/components/PageContent'; import PageTitle from '@/components/PageTitle'; import { IColumn, IMandateChildTypes, } from '@/pages/TaskManage/Detail/TaskDetail/taskDetail.types'; import { IMandateDetailType, IUserType, IWorkOrderType, } from '@/pages/TaskManage/Detail/TaskList/taskList.types'; import { MandateClass, MandateStatus, MandateType, OrderStatus, OrderType, } from '@/pages/TaskManage/constent'; import { getDiagnosticDetail, getMandateDetail } from '@/services/TaskManage'; import { useLocation } from '@@/exports'; import { UpOutlined } from '@ant-design/icons'; import { connect, useRequest } from '@umijs/max'; import { Col, Collapse, CollapseProps, Divider, Row, Table } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import dayjs from 'dayjs'; import { useEffect, useState } from 'react'; // @ts-ignore import ReactZmage from 'react-zmage'; import { useNavigate } from 'umi'; import styles from './taskDetail.less'; interface IPropsType { userList: IUserType[]; dispatch: (args: { type: string; payload: object }) => void; } function TaskDetail(props: IPropsType) { const { userList, dispatch } = props; 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 navigate = useNavigate(); const [mandateDetail, setMandateDetail] = useState(); const [mandateChild, setMandateChild] = useState([]); const [handledWorkOrder, setHandledWorkOrder] = useState< CollapseProps['items'] >([]); const [mandateTable, setMandateTable] = useState([]); const columnDef: ColumnsType = [ { title: '详情', dataIndex: 'detail', key: 'key', render: (value, record) => { return (
{value.text}
); }, }, ]; const base64ToImageUrl = (base64String: string) => { const byteCharacters = atob(base64String); const byteArrays = []; for (let i = 0; i < byteCharacters.length; i++) { byteArrays.push(byteCharacters.charCodeAt(i)); } const byteArray = new Uint8Array(byteArrays); const blob = new Blob([byteArray], { type: 'image/png' }); return URL.createObjectURL(blob); }; const { refresh: refreshDetail } = useRequest(getMandateDetail, { defaultParams: [ { mandate_id, project_id, }, ], formatResult: async (result) => { const tempMandate: 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, ), CreateTime: dayjs(result.data.CreateTime).format('YYYY-MM-DD HH:mm'), }; const workOrder = result.data.Records.map((item: IWorkOrderType) => { return { ...item, CreateTime: dayjs(item.CreateTime).format('YYYY-MM-DD HH:mm'), Status: OrderStatus.find((status) => status.value === item.Status), RecordType: OrderType.find((type) => type.value === item.RecordType), Responsible: userList.find((user) => user.ID === item.Responsible), }; }); const children = result.data.MandateChild; const tempOrder = [ { key: '1', label: ( 关联工单({workOrder.length}) ), children: workOrder.map((record: IWorkOrderType) => { return (
<> 工单类型: {record.RecordType?.label?.replace('工单', '')} 时间:{record.CreateTime || '-'} 工单状态: {typeof record.Status === 'number' ? '-' : record.Status?.label} 工单负责人: {typeof record.Responsible === 'number' ? '-' : record.Responsible?.CName}
{ if (typeof record.RecordType === 'number') { return; } // @ts-ignore goTaskOrder( record.Id, record.RecordType?.value, tempMandate?.MandateClass.value, ); }} > 查看工单
); }), }, ]; if ( tempMandate.MandateClass && tempMandate.ExtendId && /* @ts-ignore */ tempMandate.MandateClass.value === 7 ) { const image = await getDiagnosticDetail(tempMandate.ExtendId); tempMandate.img = image.path; } setMandateDetail(tempMandate); setHandledWorkOrder(tempOrder); if (children && children.length) { setMandateChild(children); } }, }); useEffect(() => { if (userList.length === 0) { dispatch({ type: 'taskUser/fetchUserList', payload: { project_id }, }); } }, []); useEffect(() => { if (!mandateChild.length) { return; } if (mandateDetail?.MandateClass?.value === 2) { const dataSource = []; dataSource.push({ detail: { text: mandateChild[0].Title, key: 'title', }, }); dataSource.push( ...Object.entries(JSON.parse(mandateChild[0].Content)).map( (item: any) => { const [key, value] = item; return { detail: { text: value['item_alias'] + ' 现有数值:' + value['old_value'] + ' 建议调整数值' + value['new_value'], key: key, }, }; }, ), ); setMandateTable(dataSource); return; } const dataSource = mandateChild.map((item, index) => { if (item.MandateClass === 2) { } return { detail: { text: item.Title + item.Content, key: item.Title + index + item.Content, }, }; }); setMandateTable(dataSource); }, [mandateChild]); const goTaskOrder = ( orderID: number, orderType: number, mandateClass: number, ) => { navigate( `/task-manage/list/order-detail?project_id=${project_id}&order_id=${orderID}&order_type=${orderType}&mandate_class=${mandateClass}`, ); }; return ( 任务详情
时间:{mandateDetail?.CreateTime} {/*// @ts-ignore*/} {/*//@ts-ignore*/} 任务类别:{mandateDetail?.MandateClass?.label} {/*//@ts-ignore*/} 任务状态:{mandateDetail?.Status?.label} {/*// @ts-ignore*/} 任务负责人:{mandateDetail?.ResponsiblePeople?.CName}
任务总结 {mandateDetail?.Summary || '根据水质相关数据.建议您调节以下参数,水厂运行可达较优状态'} {mandateDetail?.img && ( 预警图片 )} {mandateDetail?.Files.length > 0 && ( 截图 { if (item) { return { src: item.url, }; } return {}; })} /> )} 任务内容 {/*{mandateDetail?.Detail}*/}
( )} items={handledWorkOrder} />
); } export default connect( ({ taskUser, }: any): { userList: IUserType[]; } => { return { userList: taskUser.userList, }; }, )(TaskDetail);