diff --git a/src/components/Common/WorkOrderSystem/WorkOrderSystemAdd.js b/src/components/Common/WorkOrderSystem/WorkOrderSystemAdd.js index 108ab73..7735c7b 100644 --- a/src/components/Common/WorkOrderSystem/WorkOrderSystemAdd.js +++ b/src/components/Common/WorkOrderSystem/WorkOrderSystemAdd.js @@ -21,6 +21,7 @@ import commonConfig from "@/utils/config"; import * as commonUtils from "@/utils/utils"; import moment from "moment"; import WorkOrderSystemService from "./WorkOrderSystemService"; +import WorkOrderSystemConfig from "./WorkOrderSystemConfig"; let _dispatch, _props; const reducer = (state, action) => { @@ -43,7 +44,7 @@ const reducer = (state, action) => { const WorkOrderSystemAdd = props => { const [state, dispatch] = useReducer(reducer, { sType: 4, - bBug: false, + sBug: '0', bVsersion: false }); const { customerData, moduleData, userData, loading = false } = state; @@ -53,24 +54,7 @@ const WorkOrderSystemAdd = props => { const [customerOption, setCustomerOption] = useState([]); // 【所属客户】下拉选项 const [moduleOption, setModuleOption] = useState([]); // 【所属模块】下拉选项 const [userOption, setUserOption] = useState([]); // 【处理人、抄送人】下拉选项 - const priorityOption = [ - { - label: "严重", - value: 1 - }, - { - label: "紧急", - value: 2 - }, - { - label: "一般", - value: 3 - }, - { - label: "优化", - value: 4 - } - ]; + const { priorityOption, sBugOption } = WorkOrderSystemConfig; // 各种固定下拉选项 // 初始化加载数据 useEffect(() => { @@ -291,10 +275,13 @@ const WorkOrderSystemAdd = props => { - + { const [loading, setLoading] = useState(false); // 详情弹窗id - const { current: detailModalId } = useRef( - "detailModalId_" + - Math.random() - .toString(36) - .substring(2) - ); + const { current: detailModalId } = useRef("detailModalId_" + Math.random().toString(36).substring(2)); // 最小化状态 const [bMin, setBMin] = useState(false); @@ -77,21 +52,22 @@ const WorkOrderSystemDetail = props => { sHanldeId, sCopyHanldeId, bVsersion, - bBug, + sBug, sType, tDevHandleDate, tHandleDate, - sStatus + sStatus, } = detailData; const [customerOption, setCustomerOption] = useState([]); // 【所属客户】下拉选项 const [moduleOption, setModuleOption] = useState([]); // 【所属模块】下拉选项 const [userOption, setUserOption] = useState([]); // 【处理人、抄送人】下拉选项 - const { priorityOption } = WorkOrderSystemConfig; // 【优先级】下拉选项 + 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); @@ -113,228 +89,235 @@ const WorkOrderSystemDetail = props => { }; }, []); + // 判断是否已解决 + 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( - () => { - 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] - ); + 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 + sMakePerson, }); setLoading(false); if (commonUtils.isNotEmptyObject(response)) { refreshSlaveTable(); - props.onSaveState({ - workOrderSystemDetailModalVisible: false - }); + if (["已激活"].includes(values.sResult)) { + refresh(); + } else { + props.onSaveState({ + workOrderSystemDetailModalVisible: false, + }); + } } }; // 初始化加载数据 - useEffect( - async () => { + useEffect(() => { + const handleDetailData = async () => { setDetailData(await WorkOrderSystemService.getDetailData({ sId })); setCustomerOption( (await WorkOrderSystemService.getsCustomerData()).map(item => ({ label: item.sCustomerName, value: item.sCustomerId || item.sId, - item + item, })) ); setModuleOption( (await WorkOrderSystemService.getsModuleData()).map(item => ({ label: item.sModuleName, value: item.sModuleId, - item + item, })) ); setUserOption( (await WorkOrderSystemService.getUserData()).map(item => ({ label: item.sHanldeName, value: item.sHanldeId, - item + 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 - ); - } - }); + handleDetailData(); + }, [refresher]); - 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 - } + // 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); } + }); - if (sModuleId) { - if (moduleOption.find(item => item.value === sModuleId)) { - addState.sModuleId = sModuleId; - } else { - setModuleOption(prevState => [ - ...prevState, - { - value: sModuleId, - label: sModuleName, - item: { - sModuleId, - sModuleName - } - } - ]); - } + 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, + }, + }, + ]); } + } - 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(); + if (sModuleId) { + if (moduleOption.find(item => item.value === sModuleId)) { + addState.sModuleId = sModuleId; + } else { + setModuleOption(prevState => [ + ...prevState, + { + value: sModuleId, + label: sModuleName, + item: { + sModuleId, + sModuleName, + }, + }, + ]); + } } - }, - [detailData, customerOption, moduleOption] - ); + + form.setFieldsValue({ + sTitle, + sContentMemo: BraftEditor.createEditorState(sContentMemo), + ...addState, + sHanldeId, + sCopyHanldeId: sCopyHanldeId ? sCopyHanldeId.split(",") : [], + 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 => { + 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`, + url: `${commonConfig.feedback_host}file/download?savePathStr=${sPicturePath}&sModelsId=100`, status: "done", - item + 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] - ); + handleFileAdd(); + }, [fileAdd]); // 附件props const uploadProps = { @@ -354,9 +337,9 @@ const WorkOrderSystemDetail = props => { setFileList(fileList.filter(item => item.uid !== file.uid)); message.success("附件删除成功"); }); - } + }, }); - } + }, }; // 回复props @@ -368,7 +351,7 @@ const WorkOrderSystemDetail = props => { setReplyModalVisible, refresh, bMin, - setBMin + setBMin, }; // 指派props @@ -383,14 +366,10 @@ const WorkOrderSystemDetail = props => { onFinish: values => { setLoading(true); setAssignmentModalVisible(false); - const { value, label } = userOption.find( - item => item.value === values.sHanldeId - ); + const { value, label } = userOption.find(item => item.value === values.sHanldeId); const copyDataAdd = {}; - const copyData = userOption.filter(item => - values.sCopyHanldeId.includes(item.value) - ); + const copyData = userOption.filter(item => values.sCopyHanldeId.includes(item.value)); if (commonUtils.isNotEmptyArr(copyData)) { copyDataAdd.sCopyFor = copyData.map(item => item.label).toString(); @@ -401,12 +380,10 @@ const WorkOrderSystemDetail = props => { sAssignedBy: label, sAssignedById: value, ...copyDataAdd, - sContentMemo: values.sContentMemo - ? values.sContentMemo.toHTML() - : "

", - sResult: "已指派" + sContentMemo: values.sContentMemo ? values.sContentMemo.toHTML() : "

", + sResult: "已指派", }); - } + }, }; // 解决props @@ -420,38 +397,41 @@ const WorkOrderSystemDetail = props => { 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({ - sContentMemo: values.sContentMemo - ? values.sContentMemo.toHTML() - : "

", - sResult: "已解决" + sAssignedBy: label, + sAssignedById: value, + dSolveHourSj: values.dSolveHourSj, + ...copyDataAdd, + sContentMemo: values.sContentMemo ? values.sContentMemo.toHTML() : "

", + sResult: "已解决", }); - } + }, }; // 图片弹窗props const imageModalProps = { imageSrc, imageVisible, - setImageVisible + setImageVisible, }; // 修改后保存 const onFinish = async values => { setLoading(true); - const { - sContentMemo, - sCustomerId, - sModuleId, - sHanldeId, - sCopyHanldeId, - bVsersion, - bBug, - sType, - tDevHandleDate, - tHandleDate - } = values; + const { sContentMemo, sCustomerId, sModuleId, sHanldeId, sCopyHanldeId, bVsersion, sBug, sType, tDevHandleDate, tHandleDate, dSolveHour } = + values; const response = await WorkOrderSystemService.detailUpdate({ sId, @@ -467,18 +447,21 @@ const WorkOrderSystemDetail = props => { .map(item => item.label) .toString(), bVsersion, - bBug, + sBug, sType, - tDevHandleDate: tDevHandleDate - ? moment(tDevHandleDate).format("YYYY-MM-DD") - : undefined, - tHandleDate: tDevHandleDate - ? moment(tHandleDate).format("YYYY-MM-DD") - : undefined, - sStatus: "已修改" + tDevHandleDate: tDevHandleDate ? moment(tDevHandleDate).format("YYYY-MM-DD") : undefined, + tHandleDate: tDevHandleDate ? moment(tHandleDate).format("YYYY-MM-DD") : undefined, + dSolveHour, + sStatus: "已修改", }); setLoading(false); + + if (values.callback) { + values.callback(); + return; + } + if (commonUtils.isNotEmptyObject(response)) { setFormEnabled(false); refresh(); @@ -492,20 +475,20 @@ const WorkOrderSystemDetail = props => { form={form} onFinish={onFinish} labelCol={{ - span: 3 + span: 3, }} wrapperCol={{ - span: 21 + span: 21, }} className={`${styles.workOrderSystemDetail} ${detailModalId}`} > { fontSize: 16, fontWeight: "bold", resize: "none", - color: "#000" + color: "#000", }} /> - + - + { }} /> - - - + - + - - - + + +