/* eslint-disable */ import { useEffect, useState, useRef } from "react"; import { Button, Form, Space, Upload, Select, Switch, message, DatePicker, Modal, Spin, Input, Image, InputNumber } from "antd-v4"; import { CheckOutlined, CloseCircleOutlined, EditOutlined, SendOutlined, SaveOutlined, MinusOutlined, ThunderboltOutlined } from "@ant-design/icons"; import BackIcon from "@/assets/back.svg"; import CopyAllIcon from "@/assets/copyallWhite.svg"; import moment from "moment"; import BraftEditor from "braft-editor"; import "braft-editor/dist/index.css"; import gStyles from "@/index.less"; import styles from "./index.less"; import commonConfig from "@/utils/config"; import * as commonUtils from "@/utils/utils"; import AntdDraggableModal from "@/components/Common/AntdDraggableModal"; import WorkOrderSystemService from "./WorkOrderSystemService"; import WorkOrderSystemConfig from "./WorkOrderSystemConfig"; // 主入口 const WorkOrderSystemDetail = props => { const [loading, setLoading] = useState(false); // 详情弹窗id const { current: detailModalId } = useRef("detailModalId_" + Math.random().toString(36).substring(2)); // 最小化状态 const [bMin, setBMin] = useState(false); window.setBMin = setBMin; // 强制更新视图 const [updater, setUpdater] = useState(0); const forceUpdate = () => { setUpdater(updater + 1); }; // 刷新页面 const [refresher, setRefresher] = useState(0); const refresh = () => { setRefresher(refresher + 1); }; const [form] = Form.useForm(); const [formEnabled, setFormEnabled] = useState(false); const { sId, app, refreshSlaveTable, gdsjurisdiction } = props; const { userinfo } = app; const { sUserName: sMakePerson } = userinfo; const [detailData, setDetailData] = useState({}); const { sTitle, fileData = [], replyData = [], sContentMemo, sCustomerId, sCustomerName, sModuleId, sModuleName, sHanldeId, sRDUserId, sCopyHanldeId, bVsersion, sBug, sType, tDevHandleDate, tHandleDate, sStatus, } = detailData; const [customerOption, setCustomerOption] = useState([]); // 【所属客户】下拉选项 const [moduleOption, setModuleOption] = useState([]); // 【所属模块】下拉选项 const [userOption, setUserOption] = useState([]); // 【处理人、抄送人】下拉选项 const { priorityOption, sBugOption } = WorkOrderSystemConfig; // 各种固定下拉选项 const [replyModalVisible, setReplyModalVisible] = useState(false); // 回复弹窗状态 const [assignmentModalVisible, setAssignmentModalVisible] = useState(false); // 指派弹窗状态 const [resolutionModalVisible, setResolutionModalVisible] = useState(false); // 解决弹窗状态 const enabled = !["已关闭"].includes(sStatus); // 是否可操作 const [bSoluted, setSolutedState] = useState(false); // 是否已解决状态 // 富文本看点击图片事件 const [imageVisible, setImageVisible] = useState(false); const [imageSrc, setImageSrc] = useState(null); useEffect(() => { const showImage = e => { if (e.target && e.target.nodeName === "IMG") { const { src } = e.target; if (src) { setImageSrc(src); setImageVisible(true); } } }; document.addEventListener("dblclick", showImage); return () => { document.removeEventListener("dblclick", showImage); }; }, []); // 判断是否已解决 useEffect(() => { let result = ["已解决"].includes(sStatus); if (!result) { // 如果状态不是已解决,查看历史记录中最后一个非已指派的是否是已解决 replyData.forEach(item => { const { sResult } = item; if (sResult === "已解决") { result = true; } else if (sResult === "已激活") { result = false; } }); } setSolutedState(result); }, [detailData]); // 显示的按钮 const [btnShowData, setBtnShowData] = useState([]); // 过滤掉没有权限的按钮 useEffect(() => { let defaultBtnData = ["BtnReplyd", "BtnEdit", "BtnAssign", "BtnSolve", "BtnClose"]; if (!enabled) { setBtnShowData([]); return; } else if (bSoluted) { defaultBtnData = ["BtnAssign", "BtnActive", "BtnClose"]; } if (gdsjurisdiction) { gdsjurisdiction.forEach(child => { const index = defaultBtnData.findIndex(item => item === child.sAction); if (index > -1) { defaultBtnData.splice(index, 1); } }); } setBtnShowData(defaultBtnData); }, [gdsjurisdiction, enabled, bSoluted]); // 指派/解决 const addReplyHanle = async values => { if (values.sContentMemo === "
") { delete values.sContentMemo; } const response = await WorkOrderSystemService.addReplyHanle({ ...values, sId, sMakePerson, }); setLoading(false); if (commonUtils.isNotEmptyObject(response)) { refreshSlaveTable(); if (["已激活"].includes(values.sResult)) { refresh(); } else { props.onSaveState({ workOrderSystemDetailModalVisible: false, }); } } }; // 初始化加载数据 useEffect(() => { const handleDetailData = async () => { setDetailData(await WorkOrderSystemService.getDetailData({ sId })); setCustomerOption( (await WorkOrderSystemService.getsCustomerData()).map(item => ({ label: item.sCustomerName, value: item.sCustomerId || item.sId, item, })) ); setModuleOption( (await WorkOrderSystemService.getsModuleData()).map(item => ({ label: item.sModuleName, value: item.sModuleId, item, })) ); setUserOption( (await WorkOrderSystemService.getUserData()).map(item => ({ label: item.sHanldeName, value: item.sHanldeId, item, })) ); }; handleDetailData(); }, [refresher]); // detailData变化时,给表单赋值 useEffect(() => { if (commonUtils.isNotEmptyArr(detailData) && commonUtils.isNotEmptyArr(customerOption) && commonUtils.isNotEmptyArr(moduleOption)) { const temp = {}; replyData.forEach((item, index) => { const { tCreateDate, sMakePerson: sMakePersonTemp, sResult, sContentMemo: sContentMemoTemp, sAssignedBy } = item; temp[`reply${index}`] = ( {index + 1}.{tCreateDate} 由 {sMakePersonTemp} {sResult.replace("已", "")} {[""].map(() => { if (!sAssignedBy) { return ""; } else if (sAssignedBy && sResult.includes("解决") && sMakePersonTemp === sAssignedBy) { return ""; } else if (sAssignedBy && sResult.includes("解决")) { return ( <> 并指派给 {sAssignedBy} > ); } else { return ( <> 给 {sAssignedBy} > ); } })} ); if (sContentMemoTemp) { temp[`replyContentMemo${index}`] = BraftEditor.createEditorState(sContentMemoTemp); } }); const addState = {}; if (sCustomerId) { if (customerOption.find(item => item.value === sCustomerId)) { addState.sCustomerId = sCustomerId; } else { setCustomerOption(prevState => [ ...prevState, { value: sCustomerId, label: sCustomerName, item: { sCustomerId, sCustomerName, }, }, ]); } } if (sModuleId) { if (moduleOption.find(item => item.value === sModuleId)) { addState.sModuleId = sModuleId; } else { setModuleOption(prevState => [ ...prevState, { value: sModuleId, label: sModuleName, item: { sModuleId, sModuleName, }, }, ]); } } form.setFieldsValue({ sTitle, sContentMemo: BraftEditor.createEditorState(sContentMemo), ...addState, sHanldeId, sCopyHanldeId: sCopyHanldeId ? sCopyHanldeId.split(",") : [], sRDUserId, bVsersion, sBug, sType: sType !== undefined ? parseInt(sType) : "", tDevHandleDate: tDevHandleDate ? moment(tDevHandleDate) : "", tHandleDate: tHandleDate ? moment(tHandleDate) : "", ...temp, }); forceUpdate(); } }, [detailData, customerOption, moduleOption]); const [fileList, setFileList] = useState([]); // 附件列表 const [fileAdd, setFileAdd] = useState([]); // 新增附件 // fileData变化时,给附件列表赋值 useEffect(() => { setFileList( [...fileData].map(item => { const { sId: uid, sPictureName: name, sPicturePath } = item; return { uid, name, url: `${commonConfig.feedback_host}file/download?savePathStr=${sPicturePath}&sModelsId=100`, status: "done", item, }; }) ); }, [fileData]); // fileAdd变化时,调用新增附件接口 useEffect(() => { if (!fileAdd.length) return; const handleFileAdd = async () => { setFileAdd([]); const _fileData = await WorkOrderSystemService.uploadAdd(fileAdd, { sId, sMakePerson, }); setFileList([ ...fileList, ..._fileData.map(item => { const { sId: uid, sPictureName: name, sPicturePath } = item; return { uid, name, url: `${commonConfig.feedback_host}file/download?savePathStr=${sPicturePath}&sModelsId=100`, status: "done", item, }; }), ]); }; handleFileAdd(); }, [fileAdd]); // 附件props const uploadProps = { accept: "*/*", multiple: true, fileList, disabled: !btnShowData.includes("BtnEdit"), beforeUpload: file => { setFileAdd(prevState => [...prevState, file]); return false; }, onRemove: file => { Modal.confirm({ title: "确认删除", onOk() { WorkOrderSystemService.deleteFile(file.item, sId, () => { setFileList(fileList.filter(item => item.uid !== file.uid)); message.success("附件删除成功"); }); }, }); }, }; // 回复props const replyProps = { ...props, replyModalVisible, detailData, detailModalId, setReplyModalVisible, refresh, bMin, setBMin, }; // 指派props const assignmentProps = { ...props, bMin, setBMin, userOption, visible: assignmentModalVisible, setVisible: setAssignmentModalVisible, detailData, onFinish: values => { setLoading(true); setAssignmentModalVisible(false); const { value, label } = userOption.find(item => item.value === values.sHanldeId); const copyDataAdd = {}; const copyData = userOption.filter(item => values.sCopyHanldeId.includes(item.value)); if (commonUtils.isNotEmptyArr(copyData)) { copyDataAdd.sCopyFor = copyData.map(item => item.label).toString(); copyDataAdd.sCopyForId = copyData.map(item => item.value).toString(); } addReplyHanle({ sAssignedBy: label, sAssignedById: value, ...copyDataAdd, sContentMemo: values.sContentMemo ? values.sContentMemo.toHTML() : "", sResult: "已指派", }); }, }; // 解决props const resolutionModalProps = { ...props, bResolution: true, userOption, visible: resolutionModalVisible, setVisible: setResolutionModalVisible, detailData, bMin, setBMin, onFinish: values => { setLoading(true); setResolutionModalVisible(false); const { value, label } = userOption.find(item => item.value === values.sHanldeId); const copyDataAdd = {}; const copyData = userOption.filter(item => values.sCopyHanldeId.includes(item.value)); if (commonUtils.isNotEmptyArr(copyData)) { copyDataAdd.sCopyFor = copyData.map(item => item.label).toString(); copyDataAdd.sCopyForId = copyData.map(item => item.value).toString(); } addReplyHanle({ sAssignedBy: label, sAssignedById: value, dSolveHourSj: values.dSolveHourSj, ...copyDataAdd, sContentMemo: values.sContentMemo ? values.sContentMemo.toHTML() : "", sResult: "已解决", }); }, }; // 图片弹窗props const imageModalProps = { imageSrc, imageVisible, setImageVisible, }; // 修改后保存 const onFinish = async values => { setLoading(true); const { sContentMemo, sCustomerId, sModuleId, sHanldeId, sCopyHanldeId, sRDUserId, bVsersion, sBug, sType, tDevHandleDate, tHandleDate, dSolveHour, } = values; const response = await WorkOrderSystemService.detailUpdate({ sId, sMakePerson, sTitle, sContentMemo: sContentMemo.toHTML(), ...customerOption.find(item => item.value === sCustomerId).item, ...moduleOption.find(item => item.value === sModuleId).item, ...userOption.find(item => item.value === sHanldeId).item, sCopyHanldeId: sCopyHanldeId.toString(), sCopyHanldeName: userOption .filter(item => sCopyHanldeId.includes(item.value)) .map(item => item.label) .toString(), sRDUserId, sRDUserName: userOption.find(item => sRDUserId === item.value)?.label, bVsersion, sBug, sType, tDevHandleDate: tDevHandleDate ? moment(tDevHandleDate).format("YYYY-MM-DD") : undefined, tHandleDate: tDevHandleDate ? moment(tHandleDate).format("YYYY-MM-DD") : undefined, dSolveHour, sStatus: "已修改", }); setLoading(false); if (commonUtils.isNotEmptyObject(response)) { setFormEnabled(false); refresh(); refreshSlaveTable(); } }; return (