/* eslint-disable */ import React, { useEffect, useState, useRef } from "react"; import { Button, Form, Space, Upload, Select, Switch, message, DatePicker, Modal, Spin, Input, Image } from "antd"; import { CheckOutlined, CloseCircleOutlined, EditOutlined, SendOutlined, SaveOutlined, MinusOutlined } 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 * as 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, sCopyHanldeId, bVsersion, bBug, sType, tDevHandleDate, tHandleDate, sStatus } = detailData; const [customerOption, setCustomerOption] = useState([]); // 【所属客户】下拉选项 const [moduleOption, setModuleOption] = useState([]); // 【所属模块】下拉选项 const [userOption, setUserOption] = useState([]); // 【处理人、抄送人】下拉选项 const { priorityOption } = WorkOrderSystemConfig; // 【优先级】下拉选项 const [replyModalVisible, setReplyModalVisible] = useState(false); // 回复弹窗状态 const [assignmentModalVisible, setAssignmentModalVisible] = useState(false); // 指派弹窗状态 const [resolutionModalVisible, setResolutionModalVisible] = useState(false); // 解决弹窗状态 const enabled = !["已关闭"].includes(sStatus); // 是否可操作 // 富文本看点击图片事件 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); }; }, []); // 显示的按钮 const [btnShowData, setBtnShowData] = useState([]); // 过滤掉没有权限的按钮 useEffect( () => { if (!enabled) { setBtnShowData([]); return; } const defaultBtnData = [ "BtnReplyd", "BtnEdit", "BtnAssign", "BtnSolve", "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] ); // 指派/解决 const addReplyHanle = async values => { const response = await WorkOrderSystemService.addReplyHanle({ ...values, sId, sMakePerson }); setLoading(false); if (commonUtils.isNotEmptyObject(response)) { refreshSlaveTable(); props.onSaveState({ workOrderSystemDetailModalVisible: false }); } }; // 初始化加载数据 useEffect( 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 })) ); }, [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("已", "")} {sAssignedBy ? ( <> 给 {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(",") : [], bVsersion, bBug, 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( async () => { if (fileAdd.length) { 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 }; }) ]); } }, [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 => { setResolutionModalVisible(false); addReplyHanle({ 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, bVsersion, bBug, sType, tDevHandleDate, tHandleDate } = 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(), bVsersion, bBug, sType, tDevHandleDate: tDevHandleDate ? moment(tDevHandleDate).format("YYYY-MM-DD") : undefined, tHandleDate: tDevHandleDate ? moment(tHandleDate).format("YYYY-MM-DD") : undefined, sStatus: "已修改" }); setLoading(false); if (commonUtils.isNotEmptyObject(response)) { setFormEnabled(false); refresh(); refreshSlaveTable(); } }; return (