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, ignoreReason, } from '@/pages/TaskManage/constent'; import { dispatchOrder, getDiagnosticDetail, getMandateDetail, ignoreTaskRequest, setTaskAutomation, withdrawOrderRequest, } from '@/services/TaskManage'; import { useLocation } from '@@/exports'; import { CaretDownFilled } from '@ant-design/icons'; import { connect, useRequest } from '@umijs/max'; import { Button, Checkbox, Col, Collapse, CollapseProps, ConfigProvider, DatePicker, Divider, Form, Input, Modal, Row, Select, Table, message, } 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 zhCN from 'antd/es/locale/zh_CN'; import { UnityAction } from '@/utils/utils'; import styles from './taskDetail.less'; const IgnoreTaskModal = (params: any) => { const { open, onCancel, onOk } = params; const [ignoreReasonText, setIgnoreReasonText] = useState(''); const [selectedReason, setSelectedReason] = useState({}); const [showInput, setShowInput] = useState(false); const onReasonChange = (reason: any, option: any) => { if (reason !== 4) { setSelectedReason(option); setShowInput(false); } else { setShowInput(true); } }; const onReasonTextChange = (e: any) => { setIgnoreReasonText(e.target.value); }; const handleCancle = () => { setSelectedReason({}); setIgnoreReasonText(''); setShowInput(false); onCancel(); }; const confirmIgnore = () => { if (showInput) { if (!ignoreReasonText.length) { message.warning('请输入忽略理由'); } else { onOk(ignoreReasonText); } } else { if (selectedReason?.label) { onOk(selectedReason.label); } else { message.warning('请选择忽略理由'); } } }; return (
)}
); }; const AutoHandleModal = (props: any) => { const { open, onCancel, onOk } = props; const [automation, setAutomation] = useState(); const confirmAutoHandle = () => { if (automation && automation.length) { onOk(automation); } else { message.warning('请输入口令'); } }; return (
{ { setAutomation(e.target.value); }} /> }
); }; const MandateSelectModal = (props: any) => { const { open, onCancel, list, onOk, selectedTask, setSelectedTask } = props; const [checkOptions, setCheckOptions] = useState([]); useEffect(() => { setCheckOptions( list.map((mandate: any, index: number) => { return { label: ( {`${index + 1}. ${mandate.Title}为${mandate.Content}`} ), value: mandate.Id, disabled: mandate.Status !== 0, }; }), ); }, [list]); const onDispatchClick = () => { onOk(selectedTask); }; const handleCheckChange = (checkedValue: any) => { setSelectedTask(checkedValue); }; return ( 取消 , , ]} > ); }; const DispatchTaskModal = (props: any) => { const { open, onCancel, onOK, userList } = props; const [form] = Form.useForm(); useEffect(() => { if (!open) { form.resetFields(); } }, [open]); const handleDispatchConfirm = async () => { const value = await form.validateFields().catch((err) => err.errorFields.forEach((item) => { message.error(item.errors); }), ); if (!value) { return; } onOK(value); }; return (
{ return { label: item.CName, value: item.ID, }; })} placeholder="请选择操作人" />
); }; 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 [withdrawReason, setWithdrawReason] = useState(''); const [withdrawOrderOpen, setWithdrawOrderOpen] = useState(false); const [clickedOrder, setClickedOrder] = useState({}); const [flodWorkOrder, setFlodWorkOrder] = useState(true); const [ignoreModalOpen, setIgnoreModalOpen] = useState(false); const [autoHandleModalOpen, setAutoHandleModalOpen] = useState(false); const [mandateSelectModalOpen, setMandateSelectModalOpen] = useState(false); const [selectedTask, setSelectedTask] = useState([]); const [dispatchModalOpen, setDispatchModalOpen] = useState(false); const columnDef: ColumnsType = [ { title: '详情', dataIndex: 'detail', key: 'key', render: (value, _record, index) => { return (
{index + 1}、{value.text}
); }, }, ]; 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, ); }} > 查看
{record?.Status?.value === 0 && (
{ setWithdrawOrderOpen(true); setClickedOrder(record); }} > 关闭
)}
); }), }, ]; 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); } }, }); const { run: runIgnore } = useRequest(ignoreTaskRequest, { manual: true, }); const { run: runDispatch } = useRequest(dispatchOrder, { manual: true, }); const { run: runAutomate } = useRequest(setTaskAutomation, { manual: true, }); // 忽略 const onIgnoreTaskConfirm = async (id: any, reason: string) => { const params = { Id: id, Status: 4, note: reason, }; const result = await runIgnore(params); if (result) { return true; } }; // 派单 const onDispatchTaskConfirm = async (params: any) => { const result = await runDispatch(params); if (result) { return true; } }; // 自动处理 const onAutoHandleTaskConfirm = async (pw: any, mandate: any) => { const params = { mandate_id: mandate.Id, pw, }; const result = runAutomate(params, mandate); if (result) { return true; } }; // 打开指定弹窗 const openSpecifiedModal = (type: any) => { switch (type) { case 'ignore': setIgnoreModalOpen(true); break; case 'manual': UnityAction.sendMsg('menuItem', '工艺监控'); break; case 'auto': setAutoHandleModalOpen(true); break; case 'dispatch': setMandateSelectModalOpen(true); break; } }; // 忽略 const onIgnoreModalOk = async (reason: any) => { const result = await onIgnoreTaskConfirm(mandate_id, reason); if (result) { setIgnoreModalOpen(false); refreshDetail(); } }; const onAutoHandleModalOk = async (pw: any) => { const result = await onAutoHandleTaskConfirm(pw, mandateDetail); if (result) { setAutoHandleModalOpen(false); refreshDetail(); } }; const onMandateSelected = (records: any) => { // 打开派单Form弹窗将选中的任务进行派遣 if (records?.length === 0) { message.warning('请先选择要派遣的任务'); return; } setSelectedTask(records); setDispatchModalOpen(true); }; const onDispatchModalOk = async (value: any) => { const params = { ...value, m_id: Number(mandate_id), mc_id: selectedTask.join(), plan_end_time: dayjs(value.plan_end_time).format('YYYY-MM-DD HH:mm:ss'), }; if (params.type === 5) { if (params.mc_id.split(',').length > 1) { message.warning('加药工单不可批量派遣'); return; } params.note = `${ mandateChild .find((mandate) => mandate.Id === Number(params.mc_id)) ?.Title?.split(':')[1] + ',请及时加药' }`; } else { params.note = mandateDetail?.Summary; } const result = await onDispatchTaskConfirm(params); if (result) { setMandateSelectModalOpen(false); setDispatchModalOpen(false); setFlodWorkOrder(false); refreshDetail(); } }; 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].Content}: ${mandateChild[0].Content}`, key: 'title', }, }); console.log(mandateChild[0]); setMandateTable(dataSource); return; } const dataSource = mandateChild.map((item, index) => { if (item.MandateClass === 3 || item.MandateClass === 6) { return { detail: { text: item.Content, key: item.Title + index + item.Content, }, }; } 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}`, ); }; const withdrawOrderConfirm = async () => { if (!withdrawReason) { message.warning('请输入关闭理由'); return; } const res = await withdrawOrderRequest({ record_id: clickedOrder?.Id, note: withdrawReason, type: clickedOrder?.RecordType?.value, }); if (res.code === 200) { message.success('关闭工单成功'); setClickedOrder({}); setWithdrawOrderOpen(false); refreshDetail(); } }; 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 !== undefined && mandateDetail?.Files?.length > 0 && ( 截图 { if (item) { return { src: item.url, }; } return {}; })} /> )} 任务内容 {/*{mandateDetail?.Detail}*/} {mandateDetail?.Status?.value === 0 && ( )} {(mandateDetail?.MandateClass?.value === 1 || mandateDetail?.MandateClass?.value === 2) && mandateDetail?.Status?.value === 0 && ( )} {(mandateDetail?.MandateClass?.value === 1 || mandateDetail?.MandateClass?.value === 2) && mandateDetail?.Status?.value === 0 && ( )} {mandateChild?.filter((item) => item.Status === 0)?.length > 0 && ( )}
( )} items={handledWorkOrder} onChange={() => { setFlodWorkOrder(!flodWorkOrder); }} />
{ setWithdrawOrderOpen(false); }} onOk={withdrawOrderConfirm} >
{ setWithdrawReason(e.target.value); }} />
setIgnoreModalOpen(false)} onOk={onIgnoreModalOk} /> setAutoHandleModalOpen(false)} onOk={onAutoHandleModalOk} /> setMandateSelectModalOpen(false)} selectedTask={selectedTask} setSelectedTask={setSelectedTask} onOk={onMandateSelected} list={mandateChild} /> { setDispatchModalOpen(false); }} onOK={onDispatchModalOk} /> ); } export default connect( ({ taskUser, }: any): { userList: IUserType[]; } => { return { userList: taskUser.userList, }; }, )(TaskDetail);