From e92ddbcdc1cb990de02621bccfa62cc067afd3b9 Mon Sep 17 00:00:00 2001 From: liuwh <964324856@qq.com> Date: Mon, 09 Sep 2024 15:26:24 +0800 Subject: [PATCH] Merge branch 'master' of http://120.79.193.119:9090/r/gzzfw/frontEnd/gzDyh into master --- gz-customerSystem/src/assets/images/tab3.png | 0 .gitignore | 2 gz-customerSystem/src/assets/images/checkInto.png | 0 gz-customerSystem/src/assets/images/visitInto.png | 0 gz-customerSystem/src/views/register/visit/component/agentDialog.jsx | 10 gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx | 31 gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx | 69 gz-customerSystem/src/views/register/index.jsx | 511 +++++++++ gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx | 99 + gz-customerSystem/src/utils/selectOption.js | 204 +-- gz-customerSystem/src/views/register/matterDetail/Supervising.jsx | 2 gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx | 557 +++++---- gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx | 269 ++++ gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx | 18 gz-customerSystem/src/views/register/matterDetail/index.jsx | 143 +- gz-customerSystem/src/components/ArcoUpload/index.jsx | 31 gz-customerSystem/src/views/register/index.less | 96 + gz-customerSystem/src/views/register/visit/component/levelDetail.jsx | 145 + gz-customerSystem/src/assets/images/tab6.png | 0 gz-customerSystem/src/views/register/closingReview/index.jsx | 129 + gz-customerSystem/src/views/register/handleFeedback/index.jsx | 139 ++ gz-customerSystem/src/views/register/eventFlow/index.jsx | 23 gz-customerSystem/src/assets/images/tab2.png | 0 gz-customerSystem/src/views/register/visit/component/applyDialog.jsx | 15 gz-customerSystem/src/styles/public.less | 13 gz-customerSystem/src/views/register/eventFlow/component/BackModel.jsx | 4 gz-customerSystem/src/assets/images/index.js | 20 gz-customerSystem/src/components/personCard/DetailDialog.jsx | 28 gz-customerSystem/src/api/appUrl.js | 5 gz-customerSystem/src/assets/images/tab5.png | 0 gz-customerSystem/src/assets/images/tab1.png | 0 gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx | 2 gz-customerSystem/src/router/router.js | 11 /dev/null | 186 --- gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx | 2 gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx | 2 gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx | 33 gz-customerSystem/src/views/register/matterDetail/FileTable.jsx | 24 gz-customerSystem/src/views/register/visit/preview.jsx | 2 gz-customerSystem/src/components/personCard/index.jsx | 2 gz-customerSystem/src/views/register/visit/index.jsx | 29 gz-customerSystem/src/api/apiHandler.js | 180 +- gz-customerSystem/src/assets/images/tab4.png | 0 gz-customerSystem/src/views/register/closingReview/component/ReviewProgress.jsx | 81 - gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx | 166 ++ gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx | 2 46 files changed, 2,228 insertions(+), 1,057 deletions(-) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b4982a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +gz-customerSystem/build.zip +gz-customerSystem/package-lock.json diff --git a/gz-customerSystem/src/api/apiHandler.js b/gz-customerSystem/src/api/apiHandler.js index a18c67e..a38d6fc 100644 --- a/gz-customerSystem/src/api/apiHandler.js +++ b/gz-customerSystem/src/api/apiHandler.js @@ -2,94 +2,132 @@ * @Company: hugeInfo * @Author: ldh * @Date: 2022-02-16 11:28:12 - * @LastEditTime: 2024-09-07 16:45:38 + * @LastEditTime: 2024-09-08 10:31:44 * @LastEditors: dminyi 1301963064@qq.com * @Version: 1.0.0 * @Description: axios处理方法 */ -import axios from 'axios'; -import { catchApiError, appUrl, getSessionStorage, info } from '../utils/utility'; +import axios from "axios"; +import { + catchApiError, + appUrl, + getSessionStorage, + info, +} from "../utils/utility"; // 网络异常 function networkException(err) { - if (err.code >= 400) { - catchApiError({ content: '抱歉! 网络异常请刷新' }); - } else { - catchApiError({ content: '抱歉! 网络错误' }); - } + if (err.code >= 400) { + catchApiError({ content: "抱歉! 网络异常请刷新" }); + } else { + catchApiError({ content: "抱歉! 网络错误" }); + } } // api返回结果处理 function resHandle(resData) { - const { code, data, msg } = resData; - if (code === 0 || code === '0') { - // let res_data = data ? aes_decrypt(data) : true; - return { type: true, data }; - } else if (code === 401 || code === '401') { - catchApiError({ content: '抱歉! 登录状态已失效请重新登录', loginStatus: 'lose' }); - return { type: false }; - } else if (code === 105 || code === '105') { - return { type: false, code, data, msg }; - } else if (code === 106 || code === '106') { - return { type: false, code, data, msg }; - } else if (code === -1 || code == '-1') { - catchApiError({ content: msg }); - return { type: false }; - } else { - info({ type: 'warning', content: msg }); - return { type: false }; - } + const { code, data, msg } = resData; + if (code === 0 || code === "0") { + // let res_data = data ? aes_decrypt(data) : true; + return { type: true, data }; + } else if (code === 401 || code === "401") { + catchApiError({ + content: "抱歉! 登录状态已失效请重新登录", + loginStatus: "lose", + }); + return { type: false }; + } else if (code === 105 || code === "105") { + return { type: false, code, data, msg }; + } else if (code === 106 || code === "106") { + return { type: false, code, data, msg }; + } else if (code === -1 || code == "-1") { + catchApiError({ content: msg }); + return { type: false }; + } else { + info({ type: "warning", content: msg }); + return { type: false }; + } } export const ax = axios; export function request(value = {}) { - let token = getSessionStorage('customerSystemToken'); + let token = getSessionStorage("customerSystemToken"); - // 无token时 - if (!token && value.url !== 'ctAccount/login') { - catchApiError({ content: '抱歉!登录状态已失效请重新登录', loginStatus: 'lose' }); - return { type: false }; - } + // 无token时 + if (!token && value.url !== "ctAccount/login") { + catchApiError({ + content: "抱歉!登录状态已失效请重新登录", + loginStatus: "lose", + }); + return { type: false }; + } - // let data = aes_encrypt(JSON.stringify(value.data)); - let data = value.data; - - const url = - value.service === 'sys' - ? `${appUrl.fileUrl}/${appUrl[value.service] || ''}/api/web/${value.url}` - : `${appUrl.baseUrl}/${appUrl[value.service] || ''}/api/web/${value.url}`; + // let data = aes_encrypt(JSON.stringify(value.data)); + let data = value.data; - if (value.type === 'get') { - return ax - .get(url, { params: data, headers: { 'Authorization': token } }) - .then((response) => { - return resHandle(response.data); - }) - .catch((err) => { - networkException(err); - return { type: false }; - }); - } else if (value.type === 'delete') { - return ax - .delete(url, { params: data, headers: { 'Authorization': token } }) - .then((response) => { - return resHandle(response.data); - }) - .catch((err) => { - networkException(err); - return { type: false }; - }); - } - else { - return ax - .post(url, data, { headers: { 'Authorization': token } }) - .then((response) => { - return resHandle(response.data); - }) - .catch((err) => { - networkException(err); - return { type: false }; - }); - } + const url = + value.service === "sys" + ? `${appUrl.fileUrl}/${appUrl[value.service] || ""}/api/web/${value.url}` + : `${appUrl.baseUrl}/${appUrl[value.service] || ""}/api/web/${value.url}`; + + const urlAi = `${appUrl.fileUrl}/${appUrl[value.service] || ""}/api/ai/${ + value.urlAi + }`; + + if (value.typeAi === "get") { + return ax + .get(urlAi, { params: data, headers: { Authorization: token } }) + .then((response) => { + return resHandle(response.data); + }) + .catch((err) => { + networkException(err); + return { type: false }; + }); + } + if (value.typeAi === "post") { + return ax + .post(urlAi, data, { headers: { Authorization: token } }) + .then((response) => { + return resHandle(response.data); + }) + .catch((err) => { + networkException(err); + return { type: false }; + }); + } + + + if (value.type === "get") { + return ax + .get(url, { params: data, headers: { Authorization: token } }) + .then((response) => { + return resHandle(response.data); + }) + .catch((err) => { + networkException(err); + return { type: false }; + }); + } else if (value.type === "delete") { + return ax + .delete(url, { params: data, headers: { Authorization: token } }) + .then((response) => { + return resHandle(response.data); + }) + .catch((err) => { + networkException(err); + return { type: false }; + }); + } else { + return ax + .post(url, data, { headers: { Authorization: token } }) + .then((response) => { + return resHandle(response.data); + }) + .catch((err) => { + networkException(err); + return { type: false }; + }); + } } diff --git a/gz-customerSystem/src/api/appUrl.js b/gz-customerSystem/src/api/appUrl.js index 2cf0ece..9338a21 100644 --- a/gz-customerSystem/src/api/appUrl.js +++ b/gz-customerSystem/src/api/appUrl.js @@ -2,7 +2,7 @@ * @Company: hugeInfo * @Author: ldh * @Date: 2022-02-16 11:25:57 - * @LastEditTime: 2024-09-07 16:35:00 + * @LastEditTime: 2024-09-09 10:07:53 * @LastEditors: dminyi 1301963064@qq.com * @Version: 1.0.0 * @Description: api地址 @@ -38,7 +38,7 @@ // 正式版 export const web = { // web服务 - baseUrl: "https://zfw-dyh.by.gov.cn", + baseUrl: "/gz-dyh", // baseUrl: 'http://146.4.99.61:8088/byzfw', // 附件服务 @@ -59,4 +59,5 @@ oper: "dyh-oper", // dyh-oper sys: "dyh-sys", // dyh-sys disp: "dyh-disp", //dyh-disp + utils: "dyh-utils", }; diff --git a/gz-customerSystem/src/assets/images/checkInto.png b/gz-customerSystem/src/assets/images/checkInto.png new file mode 100644 index 0000000..9852049 --- /dev/null +++ b/gz-customerSystem/src/assets/images/checkInto.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/index.js b/gz-customerSystem/src/assets/images/index.js index 9a8f3c0..91af7c6 100644 --- a/gz-customerSystem/src/assets/images/index.js +++ b/gz-customerSystem/src/assets/images/index.js @@ -2,7 +2,7 @@ * @Company: hugeInfo * @Author: lwh * @Date: 2023-04-24 16:12:00 - * @LastEditTime: 2024-09-07 14:08:18 + * @LastEditTime: 2024-09-09 09:44:30 * @LastEditors: dminyi 1301963064@qq.com * @Version: 1.0.0 * @Description: @@ -64,6 +64,14 @@ import Audit from "./Audit.png"; import aiPerson from "./aiPerson.png"; import caselogo from "./caselogo.png"; +import tab1 from "./tab1.png"; +import tab2 from "./tab2.png"; +import tab3 from "./tab3.png"; +import tab4 from "./tab4.png"; +import tab5 from "./tab5.png"; +import tab6 from "./tab6.png"; +import visitInto from "./visitInto.png"; +import checkInto from "./checkInto.png"; export { ledger_1, @@ -122,5 +130,13 @@ up, Audit, aiPerson, - caselogo + caselogo, + tab1, + tab2, + tab3, + tab4, + tab5, + tab6, + visitInto, + checkInto }; \ No newline at end of file diff --git a/gz-customerSystem/src/assets/images/tab1.png b/gz-customerSystem/src/assets/images/tab1.png new file mode 100644 index 0000000..923701f --- /dev/null +++ b/gz-customerSystem/src/assets/images/tab1.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/tab2.png b/gz-customerSystem/src/assets/images/tab2.png new file mode 100644 index 0000000..57a3b63 --- /dev/null +++ b/gz-customerSystem/src/assets/images/tab2.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/tab3.png b/gz-customerSystem/src/assets/images/tab3.png new file mode 100644 index 0000000..200fb5c --- /dev/null +++ b/gz-customerSystem/src/assets/images/tab3.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/tab4.png b/gz-customerSystem/src/assets/images/tab4.png new file mode 100644 index 0000000..4e52d4a --- /dev/null +++ b/gz-customerSystem/src/assets/images/tab4.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/tab5.png b/gz-customerSystem/src/assets/images/tab5.png new file mode 100644 index 0000000..c7f6b49 --- /dev/null +++ b/gz-customerSystem/src/assets/images/tab5.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/tab6.png b/gz-customerSystem/src/assets/images/tab6.png new file mode 100644 index 0000000..b5b18fe --- /dev/null +++ b/gz-customerSystem/src/assets/images/tab6.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/visitInto.png b/gz-customerSystem/src/assets/images/visitInto.png new file mode 100644 index 0000000..87f653b --- /dev/null +++ b/gz-customerSystem/src/assets/images/visitInto.png Binary files differ diff --git a/gz-customerSystem/src/components/ArcoUpload/index.jsx b/gz-customerSystem/src/components/ArcoUpload/index.jsx index b440f36..7f87aa1 100644 --- a/gz-customerSystem/src/components/ArcoUpload/index.jsx +++ b/gz-customerSystem/src/components/ArcoUpload/index.jsx @@ -23,6 +23,7 @@ * label *, // form的label名 * editData *, // 编辑回显数据 * handleDelFile *,//删除文件接口 + * ownerType,//用于回显文件 */ export default function ArcoUpload(props) { @@ -36,8 +37,22 @@ useEffect(() => { if (props.editData) { - console.log(props.editData[props.field]); - setMyFileList(props.editData[props.field]) + if(props.editData[props.field]) { + //新增的时候有file数据,可以这样子回显 + setMyFileList(props.editData[props.field]) + } else { + //编辑的时候,文件统一放在filInfoList了,需要设置ownerType获取到该材料文件回显 + const fileInfoList = props.editData.fileInfoList + if(fileInfoList && fileInfoList.length != 0) { + let file = []; + fileInfoList.forEach(item => { + if(item.ownerType == props.ownerType) { + file.push(item.fileList[0]) + } + }) + setMyFileList(file) + } + } } }, [props.editData]) @@ -60,7 +75,8 @@ }} headers={{ Authorization: $$.getSessionStorage('customerSystemToken') }} onChange={(fileList, file) => { - const { status, response } = file + const { status, response, uid } = file + console.log(fileList, file); //因为字节upLoad组件有bug,不能区分添加文件还是删除文件,所以用这种办法来判断是不是删除 const isDel = myFileList && myFileList.length > fileList.length //上传失败 @@ -79,7 +95,14 @@ } //删除文件 if (isDel && props.handleDelFile) { - props.handleDelFile(response.data[0].id) + if(response) { + //删除的是新提交的 + props.handleDelFile(response.data[0].id) + } else { + //删除的是回显的文件 + props.handleDelFile(uid) + } + } handleFileListChange(fileList); setMyFileList(fileList) diff --git a/gz-customerSystem/src/components/personCard/DetailDialog.jsx b/gz-customerSystem/src/components/personCard/DetailDialog.jsx index 5c6877a..183501d 100644 --- a/gz-customerSystem/src/components/personCard/DetailDialog.jsx +++ b/gz-customerSystem/src/components/personCard/DetailDialog.jsx @@ -124,17 +124,13 @@ [ { label: '登记企业材料', - value: <a href="your-link-here.html" target="_blank"> - <img src={link} alt="" className="title-file" />广东好又多餐饮有限公司营业执照.pdf - </a>, + value: '', isFile: true, field: 'file', }, { label: '法定代表人身份证明材料', - value: <a href="your-link-here.html" target="_blank"> - <img src={link} alt="" className="title-file" />江照月个人身份.pdf - </a>, + value: '', isFile: true, field: 'file1', }, @@ -189,17 +185,13 @@ [ { label: '机构登记材料', - value: <a href="your-link-here.html" target="_blank"> - <img src={link} alt="" className="title-file" />广东好又多餐饮有限公司营业执照.pdf - </a>, + value: '', isFile: true, field: 'file', }, { label: '机构代表人身份证明材料', - value: <a href="your-link-here.html" target="_blank"> - <img src={link} alt="" className="title-file" />江照月个人身份.pdf - </a>, + value: '', isFile: true, field: 'file1', }, @@ -290,17 +282,13 @@ [ { label: '身份证明材料', - value: <a href="your-link-here.html" target="_blank"> - <img src={link} alt="" className="title-file" />广东好又多餐饮有限公司营业执照.pdf - </a>, + value: '', isFile: true, field: 'file', }, { label: '代理人授权委托书', - value: <a href="your-link-here.html" target="_blank"> - <img src={link} alt="" className="title-file" />江照月个人身份.pdf - </a>, + value: '', isFile: true, field: 'file1', }, @@ -394,9 +382,9 @@ } </table> {/* 重复来访重点人员 */} - <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}> + {/* <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}> <KeyVisits /> - </div> + </div> */} </div> ) } diff --git a/gz-customerSystem/src/components/personCard/index.jsx b/gz-customerSystem/src/components/personCard/index.jsx index 90394f2..5d3e0b2 100644 --- a/gz-customerSystem/src/components/personCard/index.jsx +++ b/gz-customerSystem/src/components/personCard/index.jsx @@ -32,7 +32,7 @@ } let isAgent = false let isAgentFor = false - const typeList = data.map(item => { + const typeList = data?.map(item => { return item.perType })//获取有多少申请人和被申请人 if (typeList.indexOf('15_020008-1') != -1) { diff --git a/gz-customerSystem/src/router/router.js b/gz-customerSystem/src/router/router.js index c341bbf..59db9ab 100644 --- a/gz-customerSystem/src/router/router.js +++ b/gz-customerSystem/src/router/router.js @@ -2,7 +2,7 @@ * @Company: hugeInfo * @Author: ldh * @Date: 2022-03-28 11:22:41 - * @LastEditTime: 2024-09-03 14:58:33 + * @LastEditTime: 2024-09-08 15:15:51 * @LastEditors: dminyi 1301963064@qq.com * @Version: 1.0.0 * @Description: 路由 @@ -144,6 +144,8 @@ import FileMessage from "../views/register/matterDetail/fileMessage"; //结案审核 import ClosingReview from "../views/register/closingReview"; +//工作台 +import VisitWorkBench from "../views/register"; import Test from "../views/test"; @@ -218,12 +220,11 @@ {/* 来访登记*/} <Route path="visit/:id?" element={<Visit />} /> <Route path="visit/eventFlow/:caseTaskId?/:caseId?" element={<EventFlow />} /> - <Route path="visit/handleFeedback" element={<HandleFeedback />} /> + <Route path="visit/handleFeedback/:caseTaskId?/:caseId?" element={<HandleFeedback />} /> <Route path="visit/fileMessage" element={<FileMessage />} /> - <Route path="visit/closingReview" element={<ClosingReview />}/> + <Route path="visit/closingReview/:caseTaskId?/:caseId?" element={<ClosingReview />}/> + <Route path="visit/visitWorkBench" element={<VisitWorkBench />}/> - - {/* 工作流模块 */} <Route path="workflowTemplate" element={<WorkflowTemplate />} /> <Route path="workflowTemplate/workflowTemplateEdit" element={<WorkflowTemplateEdit />} /> diff --git a/gz-customerSystem/src/styles/public.less b/gz-customerSystem/src/styles/public.less index 03efcd4..e824b98 100644 --- a/gz-customerSystem/src/styles/public.less +++ b/gz-customerSystem/src/styles/public.less @@ -794,6 +794,19 @@ } } +//字节对话框 +.arco-modal-simple { + width: 400px; + + .arco-modal-header { + padding: 0; + } + + .arco-modal-header { + text-align: right; + } +} + //弹窗底部按钮 .dialogFooter { width: 100%; diff --git a/gz-customerSystem/src/utils/selectOption.js b/gz-customerSystem/src/utils/selectOption.js index 977bb33..ac70aa9 100644 --- a/gz-customerSystem/src/utils/selectOption.js +++ b/gz-customerSystem/src/utils/selectOption.js @@ -9,8 +9,7 @@ */ // 事项来源 -const caseCanal = [ - { +const caseCanal = [{ value: '22_00001-1', label: '大厅来访', }, @@ -20,8 +19,7 @@ } ]; // 来访形式 -const visitWay = [ - { +const visitWay = [{ value: '24_00002-1', label: '来访', }, @@ -31,8 +29,7 @@ } ]; // 当事人地位 -const personType = [ - { +const personType = [{ value: '15_020008-1', label: '申请方当事人', }, @@ -50,8 +47,7 @@ }, ]; // 当事人类型 -const personClass = [ - { +const personClass = [{ value: '09_01001-1', label: '自然人', }, @@ -65,8 +61,7 @@ }, ]; //上传材料大类 -const fileOwnerCat = [ - { +const fileOwnerCat = [{ value: '22_00014-1', label: '申请材料', }, @@ -84,8 +79,7 @@ }, ]; //上传材料类型 -const fileOwnerType = [ - { +const fileOwnerType = [{ value: '22_00018-101', label: '申请材料', }, @@ -145,20 +139,27 @@ value: '22_00018-513', label: '上报审核附件', }, + { + value: '22_00018-302', + label: '协议文书', + }, + { + value: '22_00018-514', + label: '结案审核附件', + }, ]; // 附件上传人类型 -const uploaderType = [ - { +const uploaderType = [{ value: 1, label: '工作人员', }, - { value: 2, + { + value: 2, label: '当事人', }, ]; // 性别 -const sex = [ - { +const sex = [{ value: '09_00003-1', label: '男', }, @@ -168,8 +169,7 @@ }, ]; // 证件类型 -const cardType = [ - { +const cardType = [{ value: '09_00015-1', label: '身份证', }, @@ -203,8 +203,7 @@ }, ]; // 民族 -const nation = [ - { +const nation = [{ value: '09_00005-1', label: '汉族', }, @@ -450,8 +449,7 @@ }, ]; // 委托类型 -const agentType = [ - { +const agentType = [{ value: '22_00004-1', label: '一般授权代理', }, @@ -469,8 +467,7 @@ }, ]; // 事项状态 -const caseStatus = [ - { +const caseStatus = [{ value: 1, label: '待签收', }, @@ -496,8 +493,7 @@ }, ]; // 事项进度 -const process = [ - { +const process = [{ value: 1, label: '来访登记', }, @@ -523,8 +519,7 @@ }, ]; // 调解结果 -const mediResult = [ - { +const mediResult = [{ value: '22_00025-1', label: '化解成功', }, @@ -534,8 +529,7 @@ }, ]; // 会议类型 -const meetType = [ - { +const meetType = [{ value: '22_00020-1', label: '纠纷调解会议', }, @@ -545,8 +539,7 @@ }, ]; // 会议方式 -const meetWay = [ - { +const meetWay = [{ value: '22_00021-3', label: '线上 + 线下', }, @@ -560,8 +553,7 @@ }, ]; // 调度类型 -const dispType = [ - { +const dispType = [{ value: '22_00012-1', label: '归口分流', }, @@ -571,19 +563,17 @@ }, ]; // 通用审核结果 -const auditResult = [ - { - value: '24_00004-1', - label: '同意' +const auditResult = [{ + value: '24_00004-1', + label: '同意' }, - { - value: '24_00004-2', - label: '不同意' + { + value: '24_00004-2', + label: '不同意' }, ]; // 委托关系 -const agentRelate = [ - { +const agentRelate = [{ value: '24_00007-1', label: '亲属', }, @@ -593,22 +583,17 @@ }, ]; // 企业类型 -const enterpriseType = [ - { - value: '24_00008-1', - label: '餐饮服务', - }, -]; +const enterpriseType = [{ + value: '24_00008-1', + label: '餐饮服务', +}, ]; // 机构类型 -const orgaType = [ - { - value: '24_00009-1', - label: '志愿者服务', - }, -]; +const orgaType = [{ + value: '24_00009-1', + label: '志愿者服务', +}, ]; //事项等级 -const caseLevelList = [ - { +const caseLevelList = [{ value: 1, label: '一级' }, @@ -625,8 +610,7 @@ // VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV 暂时用不到,防止以后会用的,先保留 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV // 调解类型 -const mediateType = [ - { +const mediateType = [{ value: '22_00002-1', label: '人民调解', }, @@ -644,8 +628,7 @@ }, ]; // 代理人类型 -const agentClass = [ - { +const agentClass = [{ value: '09_01010-1', label: '律师', }, @@ -675,8 +658,7 @@ }, ]; // 职业 -const job = [ - { +const job = [{ value: '22_00003-1', label: '专业人士(教师/医生/律师等)', }, @@ -730,8 +712,7 @@ }, ]; // 通知方式 -const noticeWay = [ - { +const noticeWay = [{ value: '22_00023-1', label: '微信通知', }, @@ -741,8 +722,7 @@ }, ]; // 归档状态 -const fileStatus = [ - { +const fileStatus = [{ value: 0, label: '未归档', }, @@ -752,8 +732,7 @@ }, ]; // 任务节点执行者类型 -const taskCandeType = [ - { +const taskCandeType = [{ value: 1, label: '所有人', }, @@ -771,8 +750,7 @@ }, ]; // 实名认证状态 -const realStatus = [ - { +const realStatus = [{ value: 0, label: '未认证', }, @@ -782,8 +760,7 @@ }, ]; // 会议视频录制状态:1:录制转码中,2:已上传 -const recordStatus = [ - { +const recordStatus = [{ value: '1', label: '录制转码中', }, @@ -793,8 +770,7 @@ }, ]; // 涉及人群 -const crowd = [ - { +const crowd = [{ value: '22_00035-1', label: '未成年人', }, @@ -832,8 +808,7 @@ }, ]; // 纠纷来源 -const caseSource = [ - { +const caseSource = [{ value: '22_00036-2', label: '依申请调解', }, @@ -880,8 +855,7 @@ // 调解不予受理原因 -const mediateError = [ - { +const mediateError = [{ value: '22_00005-1', label: '人民法院已经受理或正在受理的', }, @@ -903,8 +877,7 @@ }, ]; // 拒绝签收原因 -const refuseSign = [ - { +const refuseSign = [{ value: '22_00009-1', label: '人民法院已经受理或正在受理的', }, @@ -934,8 +907,7 @@ }, ]; // 签收意见 -const signResult = [ - { +const signResult = [{ value: '22_00010-1', label: '同意签收', }, @@ -945,8 +917,7 @@ }, ]; // 调度来源 -const dispSource = [ - { +const dispSource = [{ value: '22_00011-1', label: '纠纷调度', }, @@ -968,8 +939,7 @@ }, ]; // 调度处理 -const dispHandle = [ - { +const dispHandle = [{ value: '22_00013-1', label: '正常调度', }, @@ -987,8 +957,7 @@ }, ]; // 调解参与人类型 -const joinUserType = [ - { +const joinUserType = [{ value: '22_00022-1', label: '调解员', }, @@ -1022,8 +991,7 @@ }, ]; // 人脸认证状态 -const faceStatus = [ - { +const faceStatus = [{ value: '1', label: '已认证', }, @@ -1033,8 +1001,7 @@ }, ]; // 司法确认进度 -const judicProcess = [ - { +const judicProcess = [{ value: '22_00029-1', label: '待审查', }, @@ -1060,8 +1027,7 @@ }, ]; // 司法确认状态 -const judicStatus = [ - { +const judicStatus = [{ value: '22_00029-1', label: '受理确认', }, @@ -1087,8 +1053,7 @@ }, ]; // 司法确认结果 -const judicResult = [ - { +const judicResult = [{ value: '22_00028-1', label: '已达成', }, @@ -1098,8 +1063,7 @@ }, ]; // 司法确认不予受理原因 -const judicError = [ - { +const judicError = [{ value: '22_00031-1', label: '不属于人民法院受理民事案件的范围', }, @@ -1121,26 +1085,36 @@ }, ]; // 司法确认退回原因 -const judicReturn = [ +const judicReturn = [{ + value: '22_00032-1', + label: '其他', +}, ]; +// 系列案区别 +const selectdata = [{ + value: '1', + label: '非系列案' + }, { - value: '22_00032-1', - label: '其他', + value: '2', + label: '系列案' }, ]; -// 系列案区别 -const selectdata = [ - { value: '1', label: '非系列案' }, - { value: '2', label: '系列案' }, -]; // 履行情况 -const fulfilSitu = [ - { value: '22_00008-1', label: '未履行' }, - { value: '22_00008-2', label: '当场履行' }, - { value: '22_00008-3', label: '分期履行' }, +const fulfilSitu = [{ + value: '22_00008-1', + label: '未履行' + }, + { + value: '22_00008-2', + label: '当场履行' + }, + { + value: '22_00008-3', + label: '分期履行' + }, ]; //调解不成功原因 -const mediFalseCause = [ - { +const mediFalseCause = [{ value: '22_00019-1', label: '当事人未能就调解协议达成一致', }, @@ -1220,4 +1194,4 @@ mediFalseCause, }; -export default obj; +export default obj; \ No newline at end of file diff --git a/gz-customerSystem/src/views/filesCheck/newFileCheck.jsx b/gz-customerSystem/src/views/filesCheck/newFileCheck.jsx deleted file mode 100644 index 57454a7..0000000 --- a/gz-customerSystem/src/views/filesCheck/newFileCheck.jsx +++ /dev/null @@ -1,402 +0,0 @@ -/* - * @Company: hugeInfo - * @Author: ldh - * @Date: 2022-03-11 11:03:44 - * @LastEditTime: 2024-09-07 16:11:58 - * @LastEditors: dminyi 1301963064@qq.com - * @Version: 1.0.0 - * @Description: 大厅来访材料附件查看 - * 附件类型对照 - NULL("22_00017-0","未分类"), - AUDIO("22_00017-1", "音频"), - VIDEO("22_00017-2", "视频"), - IMAGE("22_00017-3", "图片"), - WORD("22_00017-4", "Word文档"), - EXCEL("22_00017-5", "Excel表格"), - PDF("22_00017-6", "PDF"), - TXT("22_00017-7", "txt文本"), - ZIP("22_00017--8", "压缩文件"), - POWERPOINT("22_00017-9", "PowerPoint"), - UNKNOWN("22_00017-99", "其它文件"); - */ -import React, { useState, useEffect, useRef } from 'react'; -import { Button, Menu, Tooltip, Row, Col, Form, Space } from 'antd'; -import { Select, DatePicker } from '@arco-design/web-react'; -import { useSearchParams } from 'react-router-dom'; -import { - CaretRightOutlined, - CaretDownOutlined, - FileOutlined, - FileImageOutlined, - FilePdfOutlined, - FileWordOutlined, - FileExcelOutlined, - RotateRightOutlined, - RotateLeftOutlined, - DownloadOutlined, - LeftOutlined, - RightOutlined, -} from '@ant-design/icons'; -import * as $$ from '../../utils/utility'; - - -const { SubMenu } = Menu; -const FormItem = Form.Item; -const Option = Select.Option; - -// 获取附件 -function getFileListDataApi(data) { - return $$.ax.request({ url: `fileInfo/listFileByCat`, type: 'get', service: 'sys', data }); -} - -const NewFileCheck = ({ caseId }) => { - let appUrl = $$.appUrl; - - const [searchParams] = useSearchParams(); - - const fileId = searchParams.get('fileId'); - - const [data, setData] = useState([]); - - const [openKeys, setOpenKeys] = useState([]); - - // files数组 - const [files, setFiles] = useState([{}]); - - // 当前点击的file的index - const [fileIndex, setFileIndex] = useState(0); - - const imgBgRef = useRef(); - - const imgRef = useRef(); - const formRef = useRef(); - - useEffect(() => { - getFileListData(); - }, []); - - // 图片旋转 - function handleRotateImg(type) { - if (!imgRef || !imgRef.current) { - return false; - } - let transform = imgRef.current.style.transform, - reg = /(-)?[0-9][0-9]*/g, - arr = transform.split('rotate'), - rotate = Number(transform.match(reg)[4] || 0), - num = 0; - if (type === 'right') { - num = rotate + 90; - } else { - num = rotate + -90; - } - imgRef.current.style.transform = `${arr[0]}rotate(${num}deg)`; - } - - // 监听图片滚动事件放大,缩小 - function imgScrollFunc(e) { - if (!imgRef || !imgRef.current) { - return false; - } - let transform = imgRef.current.style.transform, - reg = /\((.+?)\)/g, - scale3d = transform.match(reg)[0], - scale3dNum = scale3d.substring(1, 2); - let num = Number(scale3dNum); - if (e.wheelDelta) { - //判断浏览器IE,谷歌滑轮事件 - if (e.wheelDelta > 0) { - //当滑轮向上滚动时 - num = num + 1; - } - if (e.wheelDelta < 0) { - //当滑轮向下滚动时 - num = num - 1; - } - } else if (e.detail) { - //Firefox滑轮事件 - if (e.detail > 0) { - //当滑轮向上滚动时 - num = num + 1; - } - if (e.detail < 0) { - //当滑轮向下滚动时 - num = num - 1; - } - } - let res = `scale3d(${num < 1 ? 1 : num},${num < 1 ? 1 : num},1) rotate${transform.match(reg)[1]}`; - imgRef.current.style.transform = res; - } - - // 判断文件的icon - function iconType(fileType) { - let result = <FileOutlined />; - if (fileType === '22_00017-3') { - result = <FileImageOutlined />; - } - if (fileType === '22_00017-5') { - result = <FileExcelOutlined />; - } - if (fileType === '22_00017-4') { - result = <FileWordOutlined />; - } - if (fileType === '22_00017-6') { - result = <FilePdfOutlined />; - } - return result; - } - - // 切换下一个,上一个 - async function handleNext(type) { - global.setSpinning(true); - let index = fileIndex + (type === 'next' ? 1 : -1); - if (files[index]) { - setFileIndex(index); - } else { - global.setSpinning(false); - if (index < 0) { - setFileIndex(files.length - 1); - return; - } - setFileIndex(0); - } - } - - // 获取附件数据 - async function getFileListData() { - global.setSpinning(true); - const res = await getFileListDataApi(caseId || searchParams.get('caseId')); - global.setSpinning(false); - if (res.type) { - let resData = res.data || []; - let arr = []; - let filesArr = []; - let index = 0; - resData.forEach((x, t) => { - arr.push(x.ownerCatName); - filesArr = filesArr.concat(x.fileList || []); - }); - forEach: for (let i = 0; i < filesArr.length - 1; i++) { - if (filesArr[i].id === fileId) { - index = i; - break forEach; - } - } - setData({ data: resData, caseNo: res.data?.caseNo }); - setFileIndex(index); - setFiles(filesArr); - setOpenKeys(arr); - } - } - console.log(files,'filesfiles') - - - - // 监听鼠标滚动事件 - useEffect(() => { - if (imgRef.current) { - imgRef.current.onload = () => { - imgBgRef.current.onmousewheel = imgScrollFunc; - }; - } - }, [files]); - - // 切换文件加载 - useEffect(() => { - if (imgRef.current) { - imgRef.current.src = `${appUrl.fileUrl}${appUrl.fileShowUrl}${files[fileIndex]?.id}`; - imgRef.current.onload = () => { - global.setSpinning(false, 'only'); - }; - } else { - global.setSpinning(false, 'only'); - } - }, [appUrl.fileShowUrl, fileIndex, appUrl.baseUrl, files]); - - return ( - <> - <nav className="filesCheck-nav" style={{ borderRight: '1px solid transparent' }}> - <Form - ref={formRef} - layout='horizontal' - style={{ marginTop: '24px', marginBottom: '20px' }} - requiredSymbol={false} - scrollToFirstError={true} - initialValues={{ - level: '三级', - isSerious: '否', - }}//默认值 - > - <Row gutter={24} style={{ marginRight: '0px' }}> - <Col span={7}> - <FormItem label='材料类型:' field='level'> - <Select placeholder='Select city' allowClear> - {['一级', '二级', '三级', '四级'].map((option, index) => ( - <Option key={option} value={option}> - {option} - </Option> - ))} - </Select> - </FormItem> - </Col> - <Col span={7}> - <FormItem - label='上传时间:' - field='name' - onChange={(e) => console.log(e.target.value, 'vvv')} - > - <DatePicker.RangePicker - defaultValue={['2020-08-08', '2020-08-18']} - separator='~' - style={{ width: '100%' }} - /> - </FormItem> - </Col> - <Col span={7}> - <FormItem - label='上传人类型:' - field='name' - onChange={(e) => console.log(e.target.value, 'vvv')} - > - <Select placeholder='Select city' allowClear style={{ width: '100%' }}> - {['一级', '二级', '三级', '四级'].map((option, index) => ( - <Option key={option} value={option}> - {option} - </Option> - ))} - </Select> - </FormItem> - - </Col> - <Col span={3}> - <Space> - <Button size="middle " type='primary'>查询</Button> - <Button size="middle ">查询</Button> - </Space> - </Col> - - </Row> - - </Form> - <div style={{ display: 'flex' }}> - <div style={{ width: '200px' }}> - <Menu - // className="filesCheck-nav-menu" - style={{ width: '200px' }} - onOpenChange={(openKeys) => setOpenKeys(openKeys)} - mode="inline" - selectedKeys={[files[fileIndex]?.id]} - openKeys={openKeys} - > - {data.data?.map((x, t) => { - return ( - <SubMenu - key={x.ownerCatName} - expandIcon={openKeys.includes(x.ownerCatName) ? <CaretRightOutlined /> : <CaretDownOutlined />} - title={x.ownerCatName} - > - {x.fileList?.map((y, z) => { - return ( - <Menu.Item - onClick={async () => { - global.setSpinning(true); - for (let i = 0; i < files.length; i++) { - if (files[i].id === y.id) { - setFileIndex(i); - break; - } - } - }} - icon={iconType(y.cat)} - key={y.id} - > - {y.name} - </Menu.Item> - ); - })} - </SubMenu> - ); - })} - </Menu> - - </div> - <div style={{ flex: 1 }}> - {files[fileIndex] ? ( - <main className="filesCheck-main"> - {/* 头部操作区 */} - <div className="filesCheck-main-action"> - <div className="filesCheck-main-action-title"> - <h3>{files[fileIndex]?.name}</h3> - </div> - {files[fileIndex]?.cat === '22_00017-3' && ( - <> - <div className="filesCheck-main-action-item"> - <Tooltip title="左转"> - <RotateLeftOutlined onClick={() => handleRotateImg('left')} /> - </Tooltip> - </div> - <div className="filesCheck-main-action-item"> - <Tooltip title="右转"> - <RotateRightOutlined onClick={() => handleRotateImg('right')} /> - </Tooltip> - </div> - </> - )} - <div className="filesCheck-main-action-item"> - <Tooltip title="下载"> - <a href={`${appUrl.fileUrl}${appUrl.fileDownUrl}${files[fileIndex]?.id}`}> - <DownloadOutlined /> - </a> - </Tooltip> - </div> - </div> - {files[fileIndex]?.ownerCat === '22_00014_1' ? ( - <div className="filesCheck-main-imgBg" ref={imgBgRef}> - <img - ref={imgRef} - style={{ transform: 'scale3d(1,1,1) rotate(0deg)' }} - className="filesCheck-main-img" - src={`${appUrl.fileUrl}${appUrl.fileShowUrl}${files[fileIndex]?.id}`} - alt="图片加载中..." - /> - </div> - ) : ( - <div className="filesCheck-main-other"> - <div className="filesCheck-main-other-icon">{iconType(files[fileIndex]?.cat)}</div> - <div className="filesCheck-main-other-text"> - 您所查看的附件不支持预览,请下载查看{files[fileIndex]?.cat === '22_00017-6' ? '或跳转预览' : ''}。 - </div> - <div> - {files[fileIndex]?.cat === '22_00017-6' && ( - <Button - className="public-buttonMargin" - onClick={() => window.open(`${appUrl.fileUrl}${appUrl.fileShowUrl}${files[fileIndex]?.id}`)} - > - 跳转查看 - </Button> - )} - <a href={`${appUrl.fileUrl}${appUrl.fileDownUrl}${files[fileIndex]?.id}`}> - <Button type="primary">下载</Button> - </a> - </div> - </div> - )} - <div className="filesCheck-imgLeft" onClick={() => handleNext('back')}> - <LeftOutlined /> - </div> - <div className="filesCheck-imgRight" onClick={() => handleNext('next')}> - <RightOutlined /> - </div> - </main> - ) : ( - <div style={{ width: '100%', paddingTop: '20%' }}>{$$.MyEmpty()}</div> - )} - </div> - </div> - </nav> - {/*图片查看*/} - </> - ); -}; - -export default NewFileCheck; diff --git a/gz-customerSystem/src/views/register/closingReview/component/AssignedModel.jsx b/gz-customerSystem/src/views/register/closingReview/component/AssignedModel.jsx deleted file mode 100644 index caf18e2..0000000 --- a/gz-customerSystem/src/views/register/closingReview/component/AssignedModel.jsx +++ /dev/null @@ -1,130 +0,0 @@ -import React, { useRef, useState } from 'react' -import { Row, Col } from 'antd'; -import { Form, Input, Button, Select } from '@arco-design/web-react'; -import ArcoUpload from '@/components/ArcoUpload'; -import { Scrollbars } from "react-custom-scrollbars"; -import SelectObjModal from '@/components/SelectObjModal/selectPerson'; - -const FormItem = Form.Item; -const TextArea = Input.TextArea; -const Option = Select.Option; -const options = ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Chengdu', 'Wuhan']; - -export default function BackModel(props) { - const formRef = useRef(); - const [isModalVisible, setIsModalVisible] = useState(false); - const [wantUser, setWantUser] = useState({}); - - const handleSubmit = () => { - formRef.current.validate(undefined, (errors, values) => { - console.log(errors, values); - }) - } - - const handleTemplate = (type) => { - if (type === 1) { - formRef.current.setFieldValue('trueName', '本事项经初步核实,认为属于贵部门职责范围内的矛盾纠纷化解工作。请组织专门人员负责此事,尽快查明事实真相,依法依规进行处理,并在处理过程中充分考虑当事人的合理诉求,确保公平公正,维护当事人的合法权益。同时,请务必保持与当事人的沟通畅通,及时反馈办理进展,以增强矛盾纠纷化解工作的透明度和公信力。') - } else { - formRef.current.setFieldValue('trueName', '') - } - } - - const handleFocus = (e) => { - e.stopPropagation() - setIsModalVisible(true) - } - - return ( - <div> - <Scrollbars style={{ height: '550px' }} autoHide> - <Form - ref={formRef} - layout='vertical' - requiredSymbol={false} - initialValues={{ - }}//默认值 - scrollToFirstError - > - <Row> - <Col span={24}> - <FormItem - label={(<div style={{ display: 'flex' }}>承办部门<div className="must">必填</div></div>)} - field='bumen' - > - <Select - mode='multiple' - placeholder='请选择承办部门' - allowClear - onFocus={handleFocus} - > - </Select> - </FormItem> - </Col> - <Col span={24}> - <FormItem - label={(<div style={{ display: 'flex' }}>配合部门<div style={{ color: '#86909C' }}>(可多选)</div></div>)} - field='peihe' - > - <Select - mode='multiple' - placeholder='请选择配合部门' - allowClear - > - {options.map((option) => ( - <Option key={option} value={option}> - {option} - </Option> - ))} - </Select> - </FormItem> - </Col> - <Col span={24} style={{ position: 'relative' }}> - <div style={{ position: 'absolute', display: 'flex ', top: '28px', zIndex: 1 }}> - <div className='myTag' style={{ marginRight: '22px' }} onClick={() => { handleTemplate(1) }}>公共模板1:通用上报意见范本</div> - <div className='myTag' onClick={() => { handleTemplate(2) }}>个人模板1:张三的交办意见范本</div> - </div> - <FormItem - label={(<div style={{ display: 'flex' }}>交办意见<div className="must">必填</div></div>)} - field='trueName' - rules={[{ required: true, message: '请选择回退理由' }]} - > - <TextArea - autoSize={{ minRows: 4, maxRows: 8 }} - placeholder='请填写回退的具体理由' - style={{ marginTop: '40px' }} - /> - </FormItem> - </Col> - <Col span={24} className="doubleFile"> - <ArcoUpload - params={{ - action: ``, - }} - field='file' - label='附件材料' - /> - </Col> - </Row> - </Form> - </Scrollbars> - <div className='dialogFooter'> - <Button - type="primary" - className="dialogPrimary" - onClick={handleSubmit} - > - 提交 - </Button> - </div> - <SelectObjModal - visible={isModalVisible} - checkKeys={wantUser.wantUserId ? [{ label: wantUser.wantUserName, value: wantUser.wantUserId }] : undefined} - onOk={(value) => { - setIsModalVisible(false); - setWantUser({ wantUserId: value.keys[0], wantUserName: value.items[0].name }); - }} - onClose={() => setIsModalVisible(false)} - /> - </div> - ) -} \ No newline at end of file diff --git a/gz-customerSystem/src/views/register/closingReview/component/BackModel.jsx b/gz-customerSystem/src/views/register/closingReview/component/BackModel.jsx deleted file mode 100644 index a353b0c..0000000 --- a/gz-customerSystem/src/views/register/closingReview/component/BackModel.jsx +++ /dev/null @@ -1,95 +0,0 @@ -import React, { useRef } from 'react' -import { Row, Col } from 'antd'; -import { Form, Input, Button, Radio } from '@arco-design/web-react'; -import ArcoUpload from '@/components/ArcoUpload'; -import { Scrollbars } from "react-custom-scrollbars"; - -const RadioGroup = Radio.Group; -const FormItem = Form.Item; -const TextArea = Input.TextArea; - -export default function BackModel(props) { - const formRef = useRef(); - const options = [ - { - label: '不属于本部门的职能范围', - value: 1 - }, - { - label: '超出本部门管辖范围', - value: 2 - }, - { - label: '重复上报', - value: 3 - }, - { - label: '无法与当事人取得联系', - value: 4 - }, - { - label: '其他', - value: 5 - }, - ] - const handleSubmit = () => { - - } - return ( - <div> - <Scrollbars style={{ height: '550px' }} autoHide> - <Form - ref={formRef} - layout='vertical' - requiredSymbol={false} - initialValues={{ - }}//默认值 - scrollToFirstError - > - <Row> - <Col span={24}> - <FormItem - label={(<div style={{ display: 'flex' }}>回退理由<div className="must">必填</div></div>)} - field='trueName' - rules={[{ required: true, message: '请选择回退理由' }]} - > - <RadioGroup direction='vertical' options={options}> - </RadioGroup> - </FormItem> - </Col> - <Col span={24}> - <FormItem - label=' ' - field='luyou' - rules={[{ required: true, message: '回退理由不能为空' }]} - > - <TextArea - autoSize={{ minRows: 4, maxRows: 8 }} - placeholder='请填写回退的具体理由' - /> - </FormItem> - </Col> - <Col span={24} className="doubleFile"> - <ArcoUpload - params={{ - action: ``, - }} - field='file' - label='附件材料' - /> - </Col> - </Row> - </Form> - </Scrollbars> - <div className='dialogFooter'> - <Button - type="primary" - className="dialogPrimary" - onClick={handleSubmit} - > - 提交 - </Button> - </div> - </div> - ) -} diff --git a/gz-customerSystem/src/views/register/closingReview/component/EscalationModel.jsx b/gz-customerSystem/src/views/register/closingReview/component/EscalationModel.jsx deleted file mode 100644 index 6ccf1a5..0000000 --- a/gz-customerSystem/src/views/register/closingReview/component/EscalationModel.jsx +++ /dev/null @@ -1,91 +0,0 @@ -import React, { useRef } from 'react' -import { Row, Col } from 'antd'; -import { Form, Input, Button } from '@arco-design/web-react'; -import ArcoUpload from '@/components/ArcoUpload'; -import { Scrollbars } from "react-custom-scrollbars"; -import { escalation } from '@/assets/images/icon'; - -const FormItem = Form.Item; -const TextArea = Input.TextArea; - -export default function BackModel(props) { - const formRef = useRef(); - - const handleSubmit = () => { - formRef.current.validate(undefined, (errors, values) => { - console.log(errors, values); - }) - } - - const handleTemplate = (type) => { - if(type === 1) { - formRef.current.setFieldValue('trueName', '经初步核查,该事项较为复杂,且涉及多个相关部门的协调配合,为确保能够高效、妥善地解决当事人的问题,特此请求上级给予指导和支持。') - } else { - formRef.current.setFieldValue('trueName', '') - } - } - - return ( - <div> - <Scrollbars style={{ height: '550px' }} autoHide> - <Form - ref={formRef} - layout='vertical' - requiredSymbol={false} - initialValues={{ - }}//默认值 - scrollToFirstError - > - <Row> - <Col span={24}> - <FormItem - label='上报至' - field='trueName' - > - <div className='myTag' > - <img src={escalation} alt="" className="title-file" />白云区综治中心 - </div> - </FormItem> - </Col> - <Col span={24} style={{ position: 'relative' }}> - <div style={{ position: 'absolute', display: 'flex ', top: '28px', zIndex: 1 }}> - <div className='myTag' style={{ marginRight: '22px' }} onClick={() => { handleTemplate(1) }}>公共模板1:通用上报意见范本</div> - <div className='myTag' onClick={() => { handleTemplate(2) }}>个人模板1:超过处置范围的上报意见</div> - </div> - <FormItem - label={(<div style={{ display: 'flex' }}>上报意见<div className="must">必填</div></div>)} - field='trueName' - rules={[{ required: true, message: '请选择回退理由' }]} - > - - <TextArea - autoSize={{ minRows: 4, maxRows: 8 }} - placeholder='请填写回退的具体理由' - style={{ marginTop: '40px' }} - /> - </FormItem> - </Col> - <Col span={24} className="doubleFile"> - <ArcoUpload - params={{ - action: ``, - }} - field='file' - label='附件材料' - /> - </Col> - </Row> - </Form> - </Scrollbars> - <div className='dialogFooter'> - <Button - type="primary" - className="dialogPrimary" - onClick={handleSubmit} - > - 提交 - </Button> - </div> - </div> - ) -} \ No newline at end of file diff --git a/gz-customerSystem/src/views/register/closingReview/component/EventFlow.jsx b/gz-customerSystem/src/views/register/closingReview/component/EventFlow.jsx deleted file mode 100644 index 96ba746..0000000 --- a/gz-customerSystem/src/views/register/closingReview/component/EventFlow.jsx +++ /dev/null @@ -1,184 +0,0 @@ -import React, { useState, useRef, useEffect } from 'react'; -import { Button, Modal, Tabs, Badge } from '@arco-design/web-react'; -import { Space } from 'antd'; -import ProgressStep from '@/components/ProgressStep/VisitStep'; -import BackModel from "./BackModel"; -import { Scrollbars } from "react-custom-scrollbars"; -import { getOffset, getSize } from '@/utils/utility'; -import EscalationModel from './EscalationModel'; -import AssignedModel from './AssignedModel'; - -const TabPane = Tabs.TabPane; - -const fakeData = [ - { - handlerUserName: '天河区棠下街综治中心', - finishTime: new Date().getTime() - 24 * 60 * 60 * 1000, // 一天前的时间 - handleResult: '1', - status: '2', - taskNodeName: '来访登记', - mediResult: '22_00025-1', - handleContent: '调解成功,双方达成一致意见。', - operationName: '李晓明' - }, - { - handlerUserName: '系统派单', - finishTime: new Date().getTime() - 12 * 60 * 60 * 1000, // 半天前的时间 - handleResult: '1', - status: '2', - taskNodeName: '事件流转', - mediResult: '22_00025-1', - handleContent: '派单至:白云区新市街市场监管所', - }, - { - handlerUserName: '白云区新市街市场监管所', - finishTime: new Date().getTime() - 11 * 60 * 60 * 1000, // 半天前的时间 - handleResult: '1', - status: '2', - taskNodeName: '事件流转', - mediResult: '22_00025-1', - handleContent: '已签收', - operationName: '赵菲菲' - }, - { - handlerUserName: '白云区新市街市场监管所', - finishTime: new Date().getTime() - 10 * 60 * 60 * 1000, // 半天前的时间 - handleResult: '1', - status: '3', - taskNodeName: '事件回退', - mediResult: '22_00025-1', - // handleContent: '已签收', - operationName: '赵菲菲' - }, - { - handlerUserName: '白云区新市街综治中心', - finishTime: new Date().getTime() - 9 * 60 * 60 * 1000, // 半天前的时间 - handleResult: '1', - status: '2', - taskNodeName: '回退审核', - mediResult: '22_00025-1', - handleContent: '通过', - operationName: '赵菲菲' - }, - { - handlerUserName: '天河区棠下街综治中心', - finishTime: new Date().getTime() - 6 * 60 * 60 * 1000, // 6小时前的时间 - handleResult: '2', - status: '1', - taskNodeName: '事件流转', - mediResult: '22_00025-1', - handleContent: '案件已被签收,准备开始调解。', - operationName: '李晓明' - }, -]; - -export default function EventFlow(props) { - const scrollRef = useRef(null) - const [backVisible, setBackVisible] = useState(false) - const [height, setHeight] = useState(500) - const [escalationVisible, setEscalationVisible] = useState(false) - const [assignedVisible, setAssignedVisible] = useState(false) - - useEffect(() => { - onWindowResize() - window.addEventListener("resize", onWindowResize); - }, []) - - const onWindowResize = () => { - let offsetLeft = 0; - let offsetTop = 0; - if (scrollRef.current.container) { - offsetLeft = getOffset(scrollRef.current.container).left; - offsetTop = getOffset(scrollRef.current.container).top; - } - setHeight(getSize().windowH - offsetTop - 65) - }; - - return ( - <div className='dataSync'> - <div className='dataSync-hasTabPage' > - <Tabs defaultActiveTab='1' > - <TabPane - key='1' - title={ - <span style={{ fontSize: '15px' }}> - 流转进度 - </span> - } - > - <Scrollbars - style={{ height: height }} - ref={scrollRef} - autoHide - > - <ProgressStep progressData={fakeData} /> - </Scrollbars> - </TabPane> - <TabPane - key='2' - title={ - <span style={{ fontSize: '15px' }}> - 督办信息 - <Badge maxCount={99} count={1000} /> - </span> - } - > - <Scrollbars - style={{ height: height }} - ref={scrollRef} - ></Scrollbars> - </TabPane> - </Tabs> - - </div> - <div className="dataSync-excel"> - <Space size="large" style={{ margin: '4px 14px' }}> - <Button type="primary" >受理</Button> - <Button type="primary" >提交</Button> - <Button type="primary" >自行受理</Button> - <Button type='outline' status='danger' onClick={() => setBackVisible(true)}>回退</Button> - <Button type='outline' onClick={() => setAssignedVisible(true)}>交办</Button> - <Button type='outline' onClick={() => setEscalationVisible(true)}>上报</Button> - <Button type='secondary' >返回上级页面</Button> - </Space> - </div> - <Modal - title='回退' - visible={backVisible} - onOk={() => setBackVisible(false)} - onCancel={() => { setBackVisible(false) }} - autoFocus={false} - focusLock={true} - footer={null} - unmountOnExit={true} - maskClosable={false} - > - <BackModel /> - </Modal> - <Modal - title='上报' - visible={escalationVisible} - onOk={() => setEscalationVisible(false)} - onCancel={() => { setEscalationVisible(false) }} - autoFocus={false} - focusLock={true} - footer={null} - unmountOnExit={true} - maskClosable={false} - > - <EscalationModel /> - </Modal> - <Modal - title='交办' - visible={assignedVisible} - onOk={() => setAssignedVisible(false)} - onCancel={() => { setAssignedVisible(false) }} - footer={null} - unmountOnExit={true} - maskClosable={false} - > - <AssignedModel /> - </Modal> - </div> - ) -} diff --git a/gz-customerSystem/src/views/register/closingReview/component/Examine.jsx b/gz-customerSystem/src/views/register/closingReview/component/Examine.jsx deleted file mode 100644 index 913bd84..0000000 --- a/gz-customerSystem/src/views/register/closingReview/component/Examine.jsx +++ /dev/null @@ -1,186 +0,0 @@ -import React, { useRef, useState } from 'react' -import { Row, Col, Space } from 'antd'; -import { link, register } from '@/assets/images'; -import { Form, Input, Button, Radio } from '@arco-design/web-react'; -import ArcoUpload from '@/components/ArcoUpload'; -import { Scrollbars } from "react-custom-scrollbars"; -import ReviewProgress from './ReviewProgress'; - -const RadioGroup = Radio.Group; -const FormItem = Form.Item; -const TextArea = Input.TextArea; - -export default function Examine(props) { - const formRef = useRef(); - const [result, setResult] = useState() - const infoData = { - result: '化解不成功', - time: '2024-7-21 12:00', - people: '白云区新市街市场监管所', - person: '张晓霞', - reason: '当事人拒绝参加调解,对调解工作极为抗拒', - opinion: `针对该事项,我部门高度重视并立即启动了调解程序。然而,在调解过程中遇到的主要困难是当事人李晓明未能积极配合我们的工作,具体表现为: - 1、拒绝提供必要的证据材料; - 2、不接听我们拨打的相关电话; - 3、拒绝到场参加任何调解行为 - 由于上述原因,我们目前无法进一步查清事实真相,也无法制定出切实可行的解决方案。为了保障当事人的合法权益得到维护,已引导当事人走司法途径,目前已在法院立案,特申请结案。`, - isProceeding: '是', - proceeding: '(粤)云调20240811号' - } - - const handleSubmit = () => { - - } - - return ( - <div className='dataSync'> - <div className='dataSync-noBackTabPage'> - <Scrollbars style={{ height: '100%' }} autoHide> - <div className='whiteBox'> - <Space size='small'> - <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>结案申请</h5> - </Space> - <Row gutter={[16, 16]}> - <Col span={24}> - <div><div className="title-text">化解结果</div></div> - <div>{infoData?.result || '-'}</div> - </Col> - <Col span={24}> - <div><div className="title-text">无法化解理由</div></div> - <div>{infoData?.reason || '-'}</div> - </Col> - <Col span={24}> - <div><div className="title-text">结案意见</div></div> - <div>{infoData?.opinion || '-'}</div> - </Col> - <Col span={24}> - <div><div className="title-text">是否转诉讼案件</div></div> - <div>{infoData?.isProceeding || '-'}</div> - </Col> - <Col span={24}> - <div><div className="title-text">诉讼案号</div></div> - <div>{infoData?.proceeding || '-'}</div> - </Col> - <Col span={24}> - <div><div className="title-text">申请时间</div></div> - <div>{infoData?.time || '-'}</div> - </Col> - <Col span={24}> - <div><div className="title-text">申请人</div></div> - <div>{infoData?.people} {infoData?.person}<img src={register} alt="" className="title-register" /></div> - </Col> - </Row> - </div> - <div style={{ display: 'flex', marginTop: '8px' }}> - <div className='whiteBox' style={{ flex: 1, marginRight: '8px' }}> - <Space size='small'> - <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核</h5> - </Space> - <Form - ref={formRef} - layout='vertical' - requiredSymbol={false} - initialValues={{ - }}//默认值 - scrollToFirstError - > - <Row> - <Col span={24}> - <FormItem - label={(<div style={{ display: 'flex' }}>审核结果</div>)} - field='result' - > - <RadioGroup - direction='vertical' - options={[ - { - label: '同意', - value: 1 - }, - { - label: '不同意', - value: 0 - }, - ]} - onChange={(v) => { setResult(v) }} - > - </RadioGroup> - </FormItem> - </Col> - {result === 0 && - <> - <Col span={24}> - <FormItem - label={(<div style={{ display: 'flex' }}>理由说明<div className="must">必填</div></div>)} - field='trueName' - rules={[{ required: true, message: '请选择理由说明' }]} - > - <RadioGroup direction='vertical' options={[ - { - label: '材料不完整', - value: '0' - }, - { - label: '办理流程有问题', - value: '1' - }, - { - label: '当事人不满意调解结果', - value: '2' - }, - { - label: '其他', - value: '3' - }, - ]}> - </RadioGroup> - </FormItem> - </Col> - <Col span={24}> - <FormItem - label=' ' - field='luyou' - rules={[{ required: true, message: '理由不能为空' }]} - > - <TextArea - autoSize={{ minRows: 4, maxRows: 8 }} - placeholder='请填写回退的具体理由' - /> - </FormItem> - </Col> - <Col span={24} className="doubleFile"> - <ArcoUpload - params={{ - action: ``, - }} - field='file' - label='附件材料' - /> - </Col> - </> - } - </Row> - </Form> - <div className='dialogFooter'> - <Button - type="primary" - className="dialogPrimary" - onClick={handleSubmit} - > - 提交 - </Button> - </div> - </div> - <div className='whiteBox' style={{ width: '400px' }}> - <Space size='small'> - <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核进度</h5> - </Space> - <ReviewProgress /> - </div> - </div> - - </Scrollbars> - </div> - </div> - ) -} diff --git a/gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx b/gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx new file mode 100644 index 0000000..a43ce32 --- /dev/null +++ b/gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx @@ -0,0 +1,269 @@ +import React, { useRef, useState, useEffect } from 'react' +import { Row, Col, Space } from 'antd'; +import { link, register } from '@/assets/images'; +import { Form, Input, Button, Radio } from '@arco-design/web-react'; +import ArcoUpload from '@/components/ArcoUpload'; +import { Scrollbars } from "react-custom-scrollbars"; +import ReviewProgress from './ReviewProgress'; +import * as $$ from '@/utils/utility'; + +const RadioGroup = Radio.Group; +const FormItem = Form.Item; +const TextArea = Input.TextArea; +const appUrl = $$.appUrl; + +function getData(data) { + return $$.ax.request({ url: `caseTask/getWindupApplyInfo`, type: 'get', service: 'mediate', data }); +} + +function getId() { + return $$.ax.request({ url: `caseUtils/getNewTimeId`, type: 'get', service: 'utils' }); +} + +function delFile(id) { + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); +} + +function submit(data) { + return $$.ax.request({ url: `caseTask/windupAudit`, type: 'post', service: 'mediate', data }); +} + +function getListCaseFlow(data) { + return $$.ax.request({ url: `caseTask/listCaseFlow`, type: 'get', service: 'mediate', data }); +} + +export default function ReviewExamine(props) { + const formRef = useRef(); + const [result, setResult] = useState() + const [infoData, setInfoData] = useState({}); + const [id, setId] = useState(); + const [progressData, setProgressData] = useState({}) + const options = [ + { + label: '材料不完整', + value: '1' + }, + { + label: '办理流程有问题', + value: '2' + }, + { + label: '当事人不满意调解结果', + value: '3' + }, + { + label: '其他', + value: '4' + }, + ] + + useEffect(() => { + getInfoData() + getAppId() + getProData() + }, []) + + //获取id + const getAppId = async () => { + const res = await getId() + if (res.type) { + setId(res.data) + } + } + + //回显数据 + const getInfoData = async () => { + const res = await getData({ caseTaskId: props.caseTaskId }) + if (res.type) { + setInfoData(res.data || {}) + } + } + + //获取流程信息 + const getProData = async () => { + const res = await getListCaseFlow({ + caseId: props.caseId + }) + if (res.type) { + setProgressData(res.data) + } + } + + const handleSubmit = () => { + if (formRef.current) { + formRef.current.validate(undefined, (errors, values) => { + if (!errors) { + const { file, myNoUp, ...rest } = formRef.current.getFields() + requestSubmit({ + id, + caseId: props.caseId, + caseTaskId: props.caseTaskId, + ...rest + }) + } + }) + } + } + + const requestSubmit = async (data) => { + const res = await submit(data) + if (res.type) { + $$.infoSuccess({ content: '提交成功!' }); + } + } + + //删除文件 + const handleDelFile = async (id) => { + const res = await delFile(id) + if (res.type) { + $$.infoSuccess({ content: '删除成功!' }); + } + } + + return ( + <div className='dataSync'> + <div className='dataSync-noBackTabPage'> + <Scrollbars style={{ height: '100%' }} autoHide> + <div className='whiteBox'> + <Space size='small'> + <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>结案申请</h5> + </Space> + <Row gutter={[16, 16]}> + <Col span={24}> + <div><div className="title-text">化解结果</div></div> + <div style={{ color: infoData.mediResult == '22_00025-1' ? '#00B42A' : '#F53F3F' }}>{infoData?.mediResultName || '-'}</div> + </Col> + <Col span={24}> + <div><div className="title-text">无法化解理由</div></div> + <div>{infoData?.failReason || '-'}</div> + </Col> + <Col span={24}> + <div><div className="title-text">结案意见</div></div> + <div>{infoData?.windupContent || '-'}</div> + </Col> + {/* <Col span={24}> + <div><div className="title-text">是否转诉讼案件</div></div> + <div>{infoData?.isProceeding || '-'}</div> + </Col> + <Col span={24}> + <div><div className="title-text">诉讼案号</div></div> + <div>{infoData?.proceeding || '-'}</div> + </Col> */} + <Col span={24}> + <div><div className="title-text">申请时间</div></div> + <div>{infoData?.applyTime || '-'}</div> + </Col> + <Col span={24}> + <div><div className="title-text">申请人</div></div> + <div> + {infoData?.applyUnitName} + {infoData?.applyUserName} + <img src={register} alt="" className="title-register" /> + </div> + </Col> + </Row> + </div> + <div style={{ display: 'flex', marginTop: '8px' }}> + <div className='whiteBox' style={{ flex: 1, marginRight: '8px' }}> + <Space size='small'> + <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核</h5> + </Space> + <Form + ref={formRef} + layout='vertical' + requiredSymbol={false} + initialValues={{ + }}//默认值 + scrollToFirstError + > + <Row> + <Col span={24}> + <FormItem + label={(<div style={{ display: 'flex' }}>审核结果</div>)} + field='auditResult' + > + <RadioGroup + direction='vertical' + options={$$.options.auditResult} + onChange={(value) => { + setResult(value) + if (value) { + const data = $$.options.auditResult.find(item => item.value === value) + formRef.current.setFieldValue('auditResultName', data.label) + } else { + formRef.current.setFieldValue('auditResultName', '') + } + }} + /> + </FormItem> + </Col> + {result === '24_00004-2' && + <> + <Col span={24}> + <FormItem + label={(<div style={{ display: 'flex' }}>理由说明<div className="must">必填</div></div>)} + field='myNoUp' + rules={[{ required: true, message: '请选择理由说明' }]} + > + <RadioGroup + direction='vertical' + options={options} + onChange={(value) => { + const obj = options.find(item => item.value === value) + formRef.current.setFieldValue('audit_content', obj.label) + }} + > + </RadioGroup> + </FormItem> + </Col> + <Col span={24}> + <FormItem + label=' ' + field='audit_content' + rules={[{ required: true, message: '理由不能为空' }]} + > + <TextArea + autoSize={{ minRows: 4, maxRows: 8 }} + placeholder='请填写回退的具体理由' + /> + </FormItem> + </Col> + <Col span={24} className="doubleFile"> + <ArcoUpload + params={{ + action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=22_00018-514`, + }} + field='file' + label='附件材料' + handleDelFile={handleDelFile} + /> + </Col> + </> + } + </Row> + </Form> + <div className='dialogFooter'> + <Button + type="primary" + className="dialogPrimary" + onClick={handleSubmit} + > + 提交 + </Button> + </div> + </div> + { + (infoData.caseLevel === 1 || infoData.caseLevel === 2) && + <div className='whiteBox' style={{ width: '400px' }}> + <Space size='small'> + <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核进度</h5> + </Space> + <ReviewProgress progressData={progressData} /> + </div> + } + </div> + </Scrollbars> + </div> + </div> + ) +} diff --git a/gz-customerSystem/src/views/register/closingReview/component/ReviewProgress.jsx b/gz-customerSystem/src/views/register/closingReview/component/ReviewProgress.jsx index 9ffec8f..1fbad93 100644 --- a/gz-customerSystem/src/views/register/closingReview/component/ReviewProgress.jsx +++ b/gz-customerSystem/src/views/register/closingReview/component/ReviewProgress.jsx @@ -1,86 +1,30 @@ import React from 'react'; import { register } from '@/assets/images'; +import * as $$ from '@/utils/utility'; export default function ReviewProgress(props) { - const fakeData = [ - { - handlerUserName: '天河区棠下街综治中心', - finishTime: new Date().getTime() - 24 * 60 * 60 * 1000, // 一天前的时间 - handleResult: '1', - status: '2', - taskNodeName: '来访登记', - mediResult: '22_00025-1', - handleContent: '调解成功,双方达成一致意见。', - operationName: '李晓明' - }, - { - handlerUserName: '系统派单', - finishTime: new Date().getTime() - 12 * 60 * 60 * 1000, // 半天前的时间 - handleResult: '1', - status: '2', - taskNodeName: '事件流转', - mediResult: '22_00025-1', - handleContent: '派单至:白云区新市街市场监管所', - }, - { - handlerUserName: '白云区新市街市场监管所', - finishTime: new Date().getTime() - 11 * 60 * 60 * 1000, // 半天前的时间 - handleResult: '1', - status: '2', - taskNodeName: '事件流转', - mediResult: '22_00025-1', - handleContent: '已签收', - operationName: '赵菲菲' - }, - { - handlerUserName: '白云区新市街市场监管所', - finishTime: new Date().getTime() - 10 * 60 * 60 * 1000, // 半天前的时间 - handleResult: '1', - status: '3', - taskNodeName: '事件回退', - mediResult: '22_00025-1', - // handleContent: '已签收', - operationName: '赵菲菲' - }, - { - handlerUserName: '白云区新市街综治中心', - finishTime: new Date().getTime() - 9 * 60 * 60 * 1000, // 半天前的时间 - handleResult: '1', - status: '2', - taskNodeName: '回退审核', - mediResult: '22_00025-1', - handleContent: '通过', - operationName: '赵菲菲' - }, - { - handlerUserName: '白云区综治中心', - finishTime: new Date().getTime() - 6 * 60 * 60 * 1000, // 6小时前的时间 - handleResult: '2', - status: '1', - taskNodeName: '审核中', - mediResult: '22_00025-1', - handleContent: '案件已被签收,准备开始调解。', - operationName: '李晓明' - }, - ]; return ( <div className='reviewProgress'> - {fakeData.map((item, index) => { - const flag = index + 1 === fakeData.length + {props.progressData['handleCaseFlowList']?.map((item, index) => { + const flag = index + 1 === props.progressData['handleCaseFlowList'].length return <div style={{ display: 'flex' }}> + <div style={{ marginRight: '10px' }}> <div className='reviewCircle' style={flag ? { borderColor: '#EF6C24' } : {}}></div> {!flag && <div className='reviewLine'></div>} </div> + <div> - <div className='deepTitle'>{item.handlerUserName}({item.taskNodeName})</div> + <div className='deepTitle'>{item.handleUnitName}({item.nodeShowName})</div> {!flag && <> + { + item.handleUserName && <div className='shallowTitle'> + 操作人:<span>{item.handleUserName}<img src={register} alt="" className="title-register" /></span> + </div> + } <div className='shallowTitle'> - 操作人:<span>{item.operationName}<img src={register} alt="" className="title-register" /></span> - </div> - <div className='shallowTitle'> - 操作时间:<span>{item.mediResult}</span> + 操作时间:<span>{$$.timeFormat(item.handleTime)}</span> </div> <div style={{ height: '34px' }}></div> </> @@ -89,7 +33,6 @@ </div> })} - </div> ) } diff --git a/gz-customerSystem/src/views/register/closingReview/index.jsx b/gz-customerSystem/src/views/register/closingReview/index.jsx index 746f3ba..684c094 100644 --- a/gz-customerSystem/src/views/register/closingReview/index.jsx +++ b/gz-customerSystem/src/views/register/closingReview/index.jsx @@ -1,49 +1,84 @@ -/* - * @Author: dminyi 1301963064@qq.com - * @Date: 2024-08-09 09:59:43 - * @LastEditors: dminyi 1301963064@qq.com - * @LastEditTime: 2024-08-31 17:13:53 - * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx - * @Description: 来访登记 - */ - -import React, { useState, useRef, Fragment } from "react"; +import React, { useState, useRef, Fragment, useEffect } from "react"; import NewPage from '@/components/NewPage'; import * as $$ from '@/utils/utility'; import "@arco-themes/react-gzzz/css/arco.css"; import '../index.less'; -import { Steps, Tabs } from '@arco-design/web-react'; -import { examine, Matter, transfer } from '@/assets/images' -import EventFlow from './component/EventFlow'; -import MatterDetail from '../matterDetail'; -import Examine from "./component/Examine"; +import { Tabs } from '@arco-design/web-react'; +import { examine, Matter, transfer, applyRecord } from '@/assets/images' +import EventFlow from '../eventFlow/component/EventFlow'; +import ApplyInfo from "../matterDetail/ApplyInfo"; +import { useParams } from 'react-router-dom'; +import ReviewExamine from './component/ReviewExamine'; -const Step = Steps.Step; const TabPane = Tabs.TabPane; +function getTabButton(data) { + return $$.ax.request({ url: `caseTask/getTabButton`, type: 'get', service: 'mediate', data }); +} -const Organization = () => { - const [current, setCurrent] = useState(2); - const [tabsActive, setTabsActive] = useState('3'); - const [tabsList, setTabList] = useState([ - { - img: Matter, - label: '事项详情', - key: '1' - }, - { - img: transfer, - label: '流转办理', - key: '2', - isNeedStep: true,//加上这个就有进度条 - }, - { - img: examine, - label: '审核', - key: '3', - }, - ]) +const myTab = [ + { + img: Matter, + label: '事项详情', + key: 'sxxq', + }, + { + img: applyRecord, + label: '申请记录', + key: 'sqjl', + }, + { + img: examine, + label: '结案审核', + key: 'jash', + }, +] +const ClosingReview = () => { + const routeData = useParams(); + const [authorData, setAuthorData] = useState({}); + const [tabsList, setTabsList] = useState([]); + const [tabsActive, setTabsActive] = useState(); + useEffect(() => { + getAuthor() + }, []) + + //获取权限tab和按钮权限 + const getAuthor = async () => { + const res = await getTabButton({ + caseTaskId: routeData.caseTaskId + }) + if (res.type) { + const { tabList } = res.data + setAuthorData(res.data) + if (tabList.length === 0) { + //没有tab就不展示 + } else { + setTabsList(myTab.filter(item => { + const flag = tabList.some(result => { + if (result.id === item.key) { + return true + } + }) + return flag + })) + setTabsActive(tabList[0].id) + } + } + } + + //根据id定义组件 + const getTypeDom = (key) => { + if (key === 'dslxq' || key === 'sxxq') { + return <EventFlow authorData={authorData} caseId={routeData.caseId} /> + } + if (key === 'sqjl') { + return <ApplyInfo /> + } + if (key === 'jash') { + return <ReviewExamine caseTaskId={routeData.caseTaskId} caseId={routeData.caseId} /> + } + } return ( <div style={{ position: 'relative' }}> @@ -53,9 +88,9 @@ } > <Tabs - activeTab={tabsActive} onChange={(v) => setTabsActive(v)} className='myTabContent' + activeTab={tabsActive} > {tabsList?.map(item => { return <TabPane @@ -67,21 +102,7 @@ </span> } > - { - item.isNeedStep && <div style={{ backgroundColor: '#fff', margin: '0 16px 0px 16px', paddingTop: '16px', paddingLeft: '91px' }}> - <Steps type='navigation' current={current}> - <Step title='来访登记' disabled /> - <Step title='事件流转' disabled /> - <Step title='办理反馈' disabled /> - <Step title='结案审核' disabled /> - <Step title='当事人评价' disabled /> - <Step title='结案归档' disabled /> - </Steps> - </div> - } - {tabsActive === '1' && <MatterDetail />} - {tabsActive === '2' && <EventFlow />} - {tabsActive === '3' && <Examine />} + {getTypeDom(item.key)} </TabPane> })} </Tabs> @@ -90,4 +111,4 @@ ) } -export default Organization; \ No newline at end of file +export default ClosingReview; \ No newline at end of file diff --git a/gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx b/gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx index fbcbc7c..ce47fb4 100644 --- a/gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx +++ b/gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx @@ -16,7 +16,7 @@ } function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } export default function BackModel(props) { diff --git a/gz-customerSystem/src/views/register/eventFlow/component/BackModel.jsx b/gz-customerSystem/src/views/register/eventFlow/component/BackModel.jsx index a7e9b0e..66f9761 100644 --- a/gz-customerSystem/src/views/register/eventFlow/component/BackModel.jsx +++ b/gz-customerSystem/src/views/register/eventFlow/component/BackModel.jsx @@ -15,7 +15,7 @@ } function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } function returnApply(data) { @@ -134,7 +134,7 @@ <Col span={24} className="doubleFile"> <ArcoUpload params={{ - action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=22_00018-520`, + action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=22_00018-510`, }} field='file' label='附件材料' diff --git a/gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx b/gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx index 9db6691..5ec4abf 100644 --- a/gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx +++ b/gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx @@ -15,7 +15,7 @@ } function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } function appearApply(data) { diff --git a/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx b/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx index 252ab71..0f4785b 100644 --- a/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx +++ b/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx @@ -15,7 +15,11 @@ const Step = Steps.Step; function getListCaseFlow(data) { - return $$.ax.request({ url: `caseTask/listCaseFlow`, type: 'get', service: 'mediate', data }); + return $$.ax.request({ url: `caseTask/listCaseFlow`, type: 'get', service: 'mediate', data }); +} + +function accept(data) { + return $$.ax.request({ url: `caseTask/accept`, type: 'post', service: 'mediate', data }); } export default function EventFlow(props) { @@ -23,7 +27,20 @@ { label: '受理', type: 'primary', - click: () => { }, + click: () => { + Modal.confirm({ + title: '受理确认', + content: '确认受理该事件?', + onOk: async () => { + const res = await accept({ + caseTaskId: props.caseTaskId + }) + if(res.type) { + $$.infoSuccess({ content: '受理成功!' }); + } + }, + }); + }, key: 'sl', }, { @@ -106,7 +123,7 @@ const res = await getListCaseFlow({ caseId: props.caseId }) - if(res.type) { + if (res.type) { setProgressData(res.data) } } @@ -130,7 +147,7 @@ ref={scrollRef} autoHide > - <MatterDetail caseId={props.caseId}/> + <MatterDetail caseId={props.caseId} /> <div className='dataSync-hasTabPage' style={{ marginTop: '-8px' }}> <Tabs defaultActiveTab='1' > <TabPane @@ -168,7 +185,7 @@ unmountOnExit={true} maskClosable={false} > - <BackModel caseId={props.caseId} onCancel={() => { setBackVisible(false) }}/> + <BackModel caseId={props.caseId} onCancel={() => { setBackVisible(false) }} /> </Modal> <Modal title='上报' @@ -179,7 +196,7 @@ unmountOnExit={true} maskClosable={false} > - <EscalationModel caseId={props.caseId} onCancel={() => { setEscalationVisible(false) }}/> + <EscalationModel caseId={props.caseId} onCancel={() => { setEscalationVisible(false) }} /> </Modal> <Modal title='交办' @@ -192,7 +209,7 @@ autoFocus={false} focusLock={false} > - <AssignedModel caseId={props.caseId} onCancel={() => { setAssignedVisible(false) }}/> + <AssignedModel caseId={props.caseId} onCancel={() => { setAssignedVisible(false) }} /> </Modal> <div className="dataSync-excel"> <Space size="large" style={{ margin: '4px 14px' }}> diff --git a/gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx b/gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx index d6e00e3..80d6a84 100644 --- a/gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx +++ b/gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx @@ -1,26 +1,106 @@ -import React, { useRef } from 'react' +import React, { useRef, useEffect, useState } from 'react' import { Row, Col, Space } from 'antd'; import { link, register } from '@/assets/images'; import { Form, Input, Button, Radio } from '@arco-design/web-react'; import ArcoUpload from '@/components/ArcoUpload'; import { Scrollbars } from "react-custom-scrollbars"; +import * as $$ from '@/utils/utility'; const RadioGroup = Radio.Group; const FormItem = Form.Item; const TextArea = Input.TextArea; +const appUrl = $$.appUrl; + +function getData(type, data) { + let url = type === 'htsh' ? `caseTask/getReturnApplyInfo` : `caseTask/getAppearApplyInfo` + return $$.ax.request({ url: url, type: 'get', service: 'mediate', data }); +} + +function submit(type, data) { + let url = type === 'htsh' ? `caseTask/returnAudit` : `caseTask/appearAudit` + return $$.ax.request({ url: url, type: 'post', service: 'mediate', data }); +} + +function getId() { + return $$.ax.request({ url: `caseUtils/getNewTimeId`, type: 'get', service: 'utils' }); +} + +function delFile(id) { + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); +} export default function Examine(props) { const formRef = useRef(); - const infoData = { - reason: '已经与双方当事人沟通,其中被申请方反应所谓的“个性化学习计划”费用是得到了白云区教育局的批准,而该费用收取是否合理,本部门无法判断', - file: '广东明智教育培训机构资质合理性调查记录.pdf', - time: '2024-7-21 12:00', - people: '白云区新市街市场监管所', - person: '张晓霞', + const [infoData, setInfoData] = useState({}); + const [id, setId] = useState(); + const mainFlag = props.type == 'htsh' ? 'return' : 'appear' + const options = [ + { + label: '回退理由不充分', + value: '0' + }, + { + label: '回退延迟', + value: '1' + }, + { + label: '其他', + value: '2' + }, + ] + + useEffect(() => { + getInfoData() + getAppId() + }, [props.type]) + + //获取id + const getAppId = async () => { + const res = await getId() + if (res.type) { + setId(res.data) + } + } + + //回显数据 + const getInfoData = async () => { + const res = await getData(props.type, { + caseTaskId: props.caseTaskId + }) + if (res.type) { + setInfoData(res.data || {}) + } } const handleSubmit = () => { + if (formRef.current) { + formRef.current.validate(undefined, (errors, values) => { + if (!errors) { + const { file, myNoUp, ...rest } = formRef.current.getFields() + requestSubmit({ + id, + caseId: props.caseId, + caseTaskId: props.caseTaskId, + ...rest + }) + } + }) + } + } + const requestSubmit = async (data) => { + const res = await submit(props.type, data) + if (res.type) { + $$.infoSuccess({ content: '提交成功!' }); + } + } + + //删除文件 + const handleDelFile = async (id) => { + const res = await delFile(id) + if (res.type) { + $$.infoSuccess({ content: '删除成功!' }); + } } return ( @@ -28,24 +108,30 @@ <div className='dataSync-noBackTabPage'> <div className='whiteBox'> <Space size='small'> - <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>回退申请</h5> + <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>{props.type === 'htsh' ? '回退申请' : '上报申请'}</h5> </Space> <Row gutter={[16, 16]}> <Col span={24}> - <div><div className="title-text">回退理由</div></div> - <div>{infoData?.reason || '-'}</div> + <div><div className="title-text">{props.type === 'htsh' ? '回退理由' : '上报理由'}</div></div> + <div>{infoData[mainFlag + 'Content'] || '-'}</div> </Col> <Col span={24}> <div><div className="title-text">附件材料</div></div> - <div style={{ color: '#1A6FB8' }}><img src={link} alt="" className="title-file" />{infoData?.file || '-'}</div> + <div style={{ color: '#1A6FB8' }}> + <img src={link} alt="" className="title-file" />{infoData?.file || '-'} + </div> </Col> <Col span={24}> <div><div className="title-text">申请时间</div></div> - <div>{infoData?.time || '-'}</div> + <div>{infoData[mainFlag + 'Time'] || '-'}</div> </Col> <Col span={24}> <div><div className="title-text">申请人</div></div> - <div>{infoData?.people} {infoData?.person}<img src={register} alt="" className="title-register" /></div> + <div> + {infoData[mainFlag + 'UnitName']} + {infoData[mainFlag + 'UserName'] || '-'} + <img src={register} alt="" className="title-register" /> + </div> </Col> </Row> </div> @@ -66,48 +152,43 @@ <Col span={24}> <FormItem label={(<div style={{ display: 'flex' }}>审核结果</div>)} - field='result' + field='auditResult' > - <RadioGroup direction='vertical' options={[ - { - label: '同意', - value: 1 - }, - { - label: '不同意', - value: 0 - }, - ]}> - </RadioGroup> + <RadioGroup + direction='vertical' + options={$$.options.auditResult} + onChange={(value) => { + if (value) { + const data = $$.options.auditResult.find(item => item.value === value) + formRef.current.setFieldValue('auditResultName', data.label) + } else { + formRef.current.setFieldValue('auditResultName', '') + } + }} + /> </FormItem> </Col> <Col span={24}> <FormItem label={(<div style={{ display: 'flex' }}>理由说明<div className="must">必填</div></div>)} - field='trueName' + field='myNoUp' rules={[{ required: true, message: '请选择理由说明' }]} > - <RadioGroup direction='vertical' options={[ - { - label: '回退理由不充分', - value: '0' - }, - { - label: '回退延迟', - value: '1' - }, - { - label: '其他', - value: '2' - }, - ]}> + <RadioGroup + direction='vertical' + options={options} + onChange={(value) => { + const obj = options.find(item => item.value === value) + formRef.current.setFieldValue('audit_content', obj.label) + }} + > </RadioGroup> </FormItem> </Col> <Col span={24}> <FormItem label=' ' - field='luyou' + field='audit_content' rules={[{ required: true, message: '理由不能为空' }]} > <TextArea @@ -119,10 +200,11 @@ <Col span={24} className="doubleFile"> <ArcoUpload params={{ - action: ``, + action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=${props.type == 'htsh' ? '22_00018-511' : '22_00018-513'}`, }} field='file' label='附件材料' + handleDelFile={handleDelFile} /> </Col> </Row> diff --git a/gz-customerSystem/src/views/register/eventFlow/index.jsx b/gz-customerSystem/src/views/register/eventFlow/index.jsx index c6453a2..5fa937c 100644 --- a/gz-customerSystem/src/views/register/eventFlow/index.jsx +++ b/gz-customerSystem/src/views/register/eventFlow/index.jsx @@ -1,12 +1,3 @@ -/* - * @Author: dminyi 1301963064@qq.com - * @Date: 2024-08-09 09:59:43 - * @LastEditors: dminyi 1301963064@qq.com - * @LastEditTime: 2024-08-31 17:13:53 - * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx - * @Description: 来访登记 - */ - import React, { useState, useRef, Fragment, useEffect } from "react"; import NewPage from '@/components/NewPage'; import * as $$ from '@/utils/utility'; @@ -51,16 +42,6 @@ img: examine, label: '上报审核', key: 'sbsh', - }, - { - img: examine, - label: '结案审核', - key: 'jash', - }, - { - img: examine, - label: '联合处置申请审核', - key: 'lhczsh', }, ] const Organization = () => { @@ -107,8 +88,8 @@ if (key === 'sqjl') { return <ApplyInfo /> } - if (key === 'htsh' || key === 'sbsh' || key === 'jash' || key === 'lhczsh') { - return <Examine type={key} /> + if (key === 'htsh' || key === 'sbsh' || key === 'lhczsh') { + return <Examine type={key} caseTaskId={routeData.caseTaskId} caseId={routeData.caseId} /> } } diff --git a/gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx b/gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx index fb9456b..7f00526 100644 --- a/gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx +++ b/gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx @@ -12,7 +12,7 @@ function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } diff --git a/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx b/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx index e48314f..e426f52 100644 --- a/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx +++ b/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx @@ -2,33 +2,42 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-09-02 14:49:13 * @LastEditors: dminyi 1301963064@qq.com - * @LastEditTime: 2024-09-03 14:44:14 + * @LastEditTime: 2024-09-08 18:25:54 * @FilePath: \gzDyh\gz-customerSystem\src\views\register\handleFeedback\component\CaseResult.jsx * @Description: 结案申请 */ -import React, { useState } from 'react'; +import React, { useState, useRef } from 'react'; import { Modal, Form, Select, Upload, Input } from '@arco-design/web-react'; -import { Col, Space, Button, Tooltip, Radio } from 'antd'; +import { Col, Space, Button, Tooltip, Radio, Row } from 'antd'; import DocumentScanner from '../../matterDetail/FileUpLoad' import { scan } from '@/assets/images/icon' import { tip, question1 } from '@/assets/images' -import { NoHandleReason } from '../../visit/component/levelDetail' +import ArcoUpload from '../../../../components/ArcoUpload' +import { NoHandleReason } from '../../visit/component/levelDetail'; +import ModeSelect from '../../matterDetail/ModeSelect' +import * as $$ from '@/utils/utility'; +const appUrl = $$.appUrl; const FormItem = Form.Item; - -const CaseResult = ({ visible = false, handleOnCancel }) => { +function windupApplyApi(data) { + return $$.ax.request({ url: `caseTask/windupApply`, type: 'post', service: 'mediate', data }); +} +const CaseResult = ({ visible = false, handleOnCancel, caseResultId, caseId }) => { + const formRef = useRef(); + const formRefWrite = useRef(); + const failRef = useRef(); const [selectedTab, setSelectedTab] = useState('1'); // 默认选中第一个 tab const [scanFile, setScanFile] = useState(false); const [selectedTab1, setSelectedTab1] = useState('1'); // 默认选中第一个 tab const [fileTip, setFileTip] = useState('0'); const [value, setValue] = useState(1) const [noHandleReason, setNoHandleReason] = useState(false); - const [radioValue, setRadioValue] = useState(1) - + const [radioValue, setRadioValue] = useState(1); + const [mode, setMode] = useState(false) const tabs = [ { index: '1', label: '化解成功' }, @@ -54,9 +63,11 @@ setSelectedTab1(newTabIndex); }; - const handleConfirm = () => { + const handleConfirm = (scanContent) => { // 处理确认逻辑 + formRef.current.setFieldValue('agreeContent', scanContent) setScanFile(false); + }; const handleCancel = () => { @@ -69,10 +80,59 @@ setRadioValue(e.target.value); }; + const handleSubmit = () => { + if (value === 1) { + const data = formRef?.current.getFields() + console.log(data, 'handleSubmit') + windupApply(data) + } + if (value === 2) { + const data = formRefWrite?.current.getFields() + console.log(data, 'handleSubmit') + windupApply(data) + } + if (selectedTab === '2') { + const data = failRef?.current.getFields() + console.log(data, 'handleSubmit') + // windupApply(data) + + + } + + } + const handleSubmit1 = () => { + if (selectedTab === '2') { + const data = failRef?.current.getFields() + console.log(data, 'handleSubmit') + windupApply(data) + } + + } + + const windupApply = async (submitData) => { + const res = await windupApplyApi({ + caseResultId: caseResultId, + ...submitData + }) + if (res.type) { + $$.infoSuccess({ content: '提交成功' }); + handleOnCancel() + } + } + return ( <> - <Modal visible={visible} onCancel={handleOnCancel} title='申请结案' centered footer={null} style={{ overflow: 'auto' }}> + <Modal + visible={visible} + onCancel={handleOnCancel} + title='申请结案' + centered + footer={null} + style={{ overflow: 'auto' }} + unmountOnExit={true} + maskClosable={false} + > <div className='caseResult-title'>化解结果</div> <div className='caseResult-tabs'> {tabs.map((tab) => ( @@ -91,13 +151,14 @@ </div> ))} </div> + {/*化解成功*/} {selectedTab === '1' && <Form layout='vertical' scrollToFirstError={true} requiredSymbol={false} initialValues={{ - caseLevel: 1, + agreeType: 1, }} //默认值 > <Col span={8}> @@ -106,271 +167,277 @@ 达成的协议类型 </div> } - field='caseLevel' - + field='agreeType' > <Select options={agreement} onChange={(v) => { setValue(v); console.log(typeof v, 'vvv') }}> </Select> </FormItem> </Col> + {/*口头协议 */} {value === 1 && <> - <Col span={24}> - <FormItem - label={ - <> - <div style={{ display: 'flex' }}> - 协议要点 - <div className="must" style={{ marginLeft: '4px' }}>必填</div> - <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} /> - <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={() => setScanFile(true)}>识别材料</div> - </div> - <div className='caseResult-tips'> - <img src={tip} alt='' style={{ width: '16px', marginRight: '8px' }} /> - <span>协议要点应尽量简洁,当事人大厅来访或小程序线上反映问题时,可在小程序中查看到填写的协议要点内容</span> - </div> - </> - } - field='caseDes' - rules={[{ message: '请填写事项概况', required: true }]} - > - <div className='caseResult-textarea'>公共模板1:调解成功口头协议</div> - <Input.TextArea - rows={5} - maxLength={{ length: 200, errorOnly: true }} - showWordLimit - wrapperStyle={{ width: '100%' }} - value='根据纠纷化解人员的协调,当事人双方同意如下调解协议: - [简要说明协议第一条] - [简要说明协议第二条] - [……] - 本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。' - /> - </FormItem> - </Col> - <Col span={24}> - <FormItem - label={ - <> - <div style={{ display: 'flex' }}> - 结案意见 - <div className="must" style={{ marginLeft: '4px' }}>必填</div> - </div> - </> - } - field='caseDes' - rules={[{ message: '请填写事项概况', required: true }]} - > - <div className='tabs1' > - {tabs1.map((tab) => ( - <div - key={tab.index} - style={{ - color: selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(0,0,0,0.45)', - border: `1px solid ${selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(229,230,235,1)'}`, - borderRadius: '2px', - cursor: 'pointer', - padding: '0px 8px', - }} - onClick={() => handleTabChange1(tab.index)} - > - {tab.label} - </div> - ))} - </div> + <Form + ref={formRef} + layout='vertical' + requiredSymbol={false} + scrollToFirstError={true} + > + <Row> + <Col span={24}> + <FormItem + label={ + <> + <div style={{ display: 'flex' }}> + 协议要点 + <div className="must" style={{ marginLeft: '4px' }}>必填</div> + <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} /> + <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={() => setScanFile(true)}>识别材料</div> + </div> + <div className='caseResult-tips'> + <img src={tip} alt='' style={{ width: '16px', marginRight: '8px' }} /> + <span>协议要点应尽量简洁,当事人大厅来访或小程序线上反映问题时,可在小程序中查看到填写的协议要点内容</span> + </div> + <div className='modeMore'> + <div className='caseResult-textarea'>公共模板1:调解成功口头协议</div> + <div style={{ color: '#1A6FB8' }} onClick={() => setMode(!mode)}>更多模板</div> + </div> + </> + } + field='agreeContent' + > + <Input.TextArea + rows={5} + maxLength={{ length: 200, errorOnly: true }} + showWordLimit + wrapperStyle={{ width: '100%' }} + /> + </FormItem> + </Col> + <Col span={24}> + <FormItem + label={ + <> + <div style={{ display: 'flex' }}> + 结案意见 + <div className="must" style={{ marginLeft: '4px' }}>必填</div> + </div> + <div className='modeMore'> + <div className='tabs1' > + {tabs1.map((tab) => ( + <div + key={tab.index} + style={{ + color: selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(0,0,0,0.45)', + border: `1px solid ${selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(229,230,235,1)'}`, + borderRadius: '2px', + cursor: 'pointer', + padding: '0px 8px', + }} + onClick={() => handleTabChange1(tab.index)} + > + {tab.label} + </div> + ))} + </div> + <div style={{ color: '#1A6FB8' }} onClick={() => setMode(!mode)}>更多模板</div> - <Input.TextArea - rows={5} - wrapperStyle={{ width: '100%' }} - value='鉴于以上协议内容已经双方确认,并认为该协议内容公平合理,能够妥善解决双方的纠纷。建议双方当事人按照协议内容执行,以实现纠纷的最终解决。' - /> - </FormItem> - </Col> - + </div> + </> + } + field='windupContent' + > + <Input.TextArea + rows={5} + wrapperStyle={{ width: '100%' }} + /> + </FormItem> + </Col> + </Row> + </Form> </> - } + {/*书面协议 */} {value === 2 && <> - <Col span={24}> - <FormItem - label={ - <> - <div style={{ display: 'flex' }}> - 协议文书 - <div className="must" style={{ marginLeft: '4px' }}>必填</div> - </div> - <div className='caseResult-tips'> - <img src={tip} alt='' style={{ width: '16px', marginRight: '8px' }} /> - <span>如通过人民调解工作成功化解纠纷事项,建议上传签字盖章后的人民调解协议书</span> - </div> - </> - } - field='caseDes' - rules={[{ message: '请填写事项概况', required: true }]} - > - <Upload - drag - multiple - accept='image/*' - action='/' - height={158} - onDrop={(e) => { - }} - onChange={(v) => { - setFileTip((prevLength) => { - if (v.length > 0) { - console.log(v, 'vvvvvvv'); - return v.length; - } - return v.length; - }); - }} - tip='支持png、 jpg、excel、word、pdf等格式的文件上传,每次上传大小不超过10M' - /> - - - </FormItem> - </Col> - <Col span={24}> - <FormItem - label={ - <> - <div style={{ display: 'flex' }}> - 协议要点 - <div className="must" style={{ marginLeft: '4px' }}>必填</div> - <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} /> - <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={() => setScanFile(true)}>识别材料</div> - </div> - <div className='caseResult-tips'> - <img src={tip} alt='' style={{ width: '16px', marginRight: '8px' }} /> - <span>协议要点应尽量简洁,当事人大厅来访或小程序线上反映问题时,可在小程序中查看到填写的协议要点内容</span> - </div> - </> - } - field='caseDes' - rules={[{ message: '请填写事项概况', required: true }]} - > - <div className='caseResult-textarea'>公共模板1:调解成功口头协议</div> - <Input.TextArea - rows={5} - maxLength={{ length: 200, errorOnly: true }} - showWordLimit - wrapperStyle={{ width: '100%' }} - value='根据纠纷化解人员的协调,当事人双方同意如下调解协议: - [简要说明协议第一条] - [简要说明协议第二条] - [……] - 本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。' - /> - </FormItem> - </Col> - <Col span={24}> - <FormItem - label={ - <> - <div style={{ display: 'flex' }}> - 结案意见 - <div className="must" style={{ marginLeft: '4px' }}>必填</div> - </div> - </> - } - field='caseDes' - rules={[{ message: '请填写事项概况', required: true }]} - > - <div className='tabs1' > - {tabs1.map((tab) => ( - <div - key={tab.index} - style={{ - color: selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(0,0,0,0.45)', - border: `1px solid ${selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(229,230,235,1)'}`, - borderRadius: '2px', - cursor: 'pointer', - padding: '0px 8px', + <Form + ref={formRefWrite} + layout='vertical' + requiredSymbol={false} + scrollToFirstError={true} + > + <Row> + <Col span={24}> + <FormItem + label={ + <> + <div style={{ display: 'flex' }}> + 协议文书 + <div className="must" style={{ marginLeft: '4px' }}>必填</div> + </div> + <div className='caseResult-tips'> + <img src={tip} alt='' style={{ width: '16px', marginRight: '8px' }} /> + <span>如通过人民调解工作成功化解纠纷事项,建议上传签字盖章后的人民调解协议书</span> + </div> + </> + } + field='caseDes' + rules={[{ message: '请填写事项概况', required: true }]} + > + <ArcoUpload + params={{ + action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${caseId}&ownerId=${caseResultId}&ownerType=22_00018-302`, }} - onClick={() => handleTabChange1(tab.index)} - > - {tab.label} - </div> - ))} - </div> + field='file' + label='代理人委托书' + // editData={props.editData} + ownerType='22_00018-302' + /> + </FormItem> + </Col> + <Col span={24}> + <FormItem + label={ + <> + <div style={{ display: 'flex' }}> + 结案意见 + <div className="must" style={{ marginLeft: '4px' }}>必填</div> + </div> + <div className='modeMore'> + <div className='tabs1' > + {tabs1.map((tab) => ( + <div + key={tab.index} + style={{ + color: selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(0,0,0,0.45)', + border: `1px solid ${selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(229,230,235,1)'}`, + borderRadius: '2px', + cursor: 'pointer', + padding: '0px 8px', + }} + onClick={() => handleTabChange1(tab.index)} + > + {tab.label} + </div> + ))} + </div> + <div style={{ color: '#1A6FB8' }} onClick={() => setMode(!mode)}>更多模板</div> - <Input.TextArea - rows={5} - wrapperStyle={{ width: '100%' }} - value='鉴于以上协议内容已经双方确认,并认为该协议内容公平合理,能够妥善解决双方的纠纷。建议双方当事人按照协议内容执行,以实现纠纷的最终解决。' - /> - </FormItem> - </Col> + </div> + </> + } + field='windupContent' + rules={[{ message: '请填写事项概况', required: true }]} + > + {/* <div className='tabs1' > + {tabs1.map((tab) => ( + <div + key={tab.index} + style={{ + color: selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(0,0,0,0.45)', + border: `1px solid ${selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(229,230,235,1)'}`, + borderRadius: '2px', + cursor: 'pointer', + padding: '0px 8px', + }} + onClick={() => handleTabChange1(tab.index)} + > + {tab.label} + </div> + ))} + </div> */} + <Input.TextArea + rows={5} + wrapperStyle={{ width: '100%' }} + value='鉴于以上协议内容已经双方确认,并认为该协议内容公平合理,能够妥善解决双方的纠纷。建议双方当事人按照协议内容执行,以实现纠纷的最终解决。' + /> + </FormItem> + </Col> + </Row> + </Form> </> } <Space style={{ marginBottom: '16px' }}> - <Button type='primary'>提交</Button> + <Button type='primary' onClick={handleSubmit}>提交</Button> <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>保存</Button> </Space> </Form> } + {/*化解不成功*/} {selectedTab === '2' && <Form + ref={failRef} layout='vertical' requiredSymbol={false} scrollToFirstError={true} - initialValues={{ - caseLevel: 3, - }}//默认值 > <Col span={24}> - <FormItem - label={<div style={{ display: 'flex' }}> - 无法化解理由 - <Tooltip onClick={() => setNoHandleReason(!noHandleReason)}> - <img src={question1} alt="" style={{ width: '13px', height: '13px', margin: '4px 4px 0px 4px' }} /> - </Tooltip> - <div className="must" style={{ marginLeft: '4px' }}>必填</div> - </div> - } - field='caseDes' - rules={[{ message: '请填写事项概况', required: true }]} - > - <table border="1" align="center" cellpadding="8" className="table"> - <tr> - <th bgcolor="#F7F8FA" className="table-title" width="120">调解过程中提供的解决方案</th> - <td> + <div style={{ display: 'flex', marginBottom: '16px' }}> + 无法化解理由 + <img src={question1} alt="" style={{ width: '13px', height: '13px', margin: '4px 4px 0px 4px' }} /> + <div className="must" style={{ marginLeft: '4px' }}>必填</div> + </div> + <table border="1" align="center" cellpadding="8" className="table"> + <tr> + <th bgcolor="#F7F8FA" className="table-title" width="120">当事人的主要诉求</th> + <td> + <div> + 鉴于上述情况,申请方希望综治中心可以帮忙解决:<br /> + 1. 请求判决被申请人张三立即偿还借款本金人民币20万元整;<br /> + 2. 请求判决被申请人支付自借款之日起至实际还款之日止按合同约定的年利率计算的利息; + </div> + </td> + </tr> + <tr> + <th bgcolor="#F7F8FA" className="table-title" width="120">调解过程中提供的解决方案</th> + <td> + <FormItem + label='' + field='failReason1' + > <Input.TextArea showWordLimit rows={3} placeholder='请完整描述事项概况,应具备5要素:发生时间+发生地点+人物情况+事项起因+事项经过' wrapperStyle={{ width: '100%' }} /> - </td> - </tr> - <tr> - <th bgcolor="#F7F8FA" className="table-title">调解过程中的主要分歧点</th> - <td> + </FormItem> + </td> + </tr> + <tr> + <th bgcolor="#F7F8FA" className="table-title">调解过程中的主要分歧点</th> + <td> + <FormItem + label='' + field='failReason2' + > <Input.TextArea showWordLimit rows={3} placeholder='请完整描述事项概况,应具备5要素:发生时间+发生地点+人物情况+事项起因+事项经过' wrapperStyle={{ width: '100%' }} /> - </td> - </tr> - <tr> - <th bgcolor="#F7F8FA" className="table-title">最终难以调和的原因</th> - <td> + </FormItem> + </td> + </tr> + <tr> + <th bgcolor="#F7F8FA" className="table-title">最终难以调和的原因</th> + <td> + <FormItem + label='' + field='failReason3' + > <Input.TextArea showWordLimit rows={3} placeholder='请完整描述事项概况,应具备5要素:发生时间+发生地点+人物情况+事项起因+事项经过' wrapperStyle={{ width: '100%' }} /> - </td> - </tr> - </table> - </FormItem> + </FormItem> + </td> + </tr> + </table> </Col> <Col span={24}> <FormItem @@ -380,12 +447,15 @@ 结案意见 <div className="must" style={{ marginLeft: '4px' }}>必填</div> </div> + <div className='modeMore'> + <div className='caseResult-textarea'>公共模板:化解不成功结案意见范本</div> + <div style={{ color: '#1A6FB8' }} onClick={() => setMode(!mode)}>更多模板</div> + </div> </> } - field='caseDes' + field='windupContent' rules={[{ message: '请填写事项概况', required: true }]} > - <div className='caseResult-textarea'>公共模板1:化解不成功结案意见范本</div> <Input.TextArea rows={5} wrapperStyle={{ width: '100%' }} @@ -393,34 +463,13 @@ /> </FormItem> </Col> - <Col span={24}> - <FormItem - label='是否转诉讼案件' - field='caseDes' - > - <Radio.Group onChange={onChange} value={radioValue}> - <Space direction="vertical"> - <Radio value={1}>否</Radio> - <Radio value={2}>是</Radio> - </Space> - </Radio.Group> - </FormItem> - </Col> - <Col span={24}> - <FormItem - label='是否转诉诉讼案号讼案件' - field='caseDes' - > - <Input style={{ width: 350 }} placeholder='请输入法院立案号' /> - </FormItem> - </Col> <Space style={{ marginBottom: '16px' }}> - <Button type='primary'>提交</Button> + <Button type='primary' onClick={handleSubmit1}>提交</Button> <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>保存</Button> </Space> </Form> } - </Modal> + </Modal > <DocumentScanner visible={scanFile} onConfirm={handleConfirm} @@ -430,6 +479,8 @@ visible={noHandleReason} onClose={() => setNoHandleReason(false)} /> + <ModeSelect onCancel={() => setMode(false)} mode={mode} /> + </> ) } diff --git a/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx b/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx index 0340129..332190d 100644 --- a/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx +++ b/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx @@ -1,4 +1,5 @@ import React, { useState, useRef, useEffect } from 'react'; +import { useParams } from 'react-router-dom'; import { Col, Space, Row, Tooltip } from 'antd'; import { register, aiPerson } from '@/assets/images'; import { Form, Input, Tabs, Typography, Button, Modal, Select } from '@arco-design/web-react'; @@ -81,7 +82,7 @@ } function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } function getNewTimeIdApi(id) { @@ -112,6 +113,7 @@ const Handle = () => { const formRef = useRef(); + const routeData = useParams(); const [selectedTab, setSelectedTab] = useState('1'); // 默认选中第一个 tab const [selectedTab1, setSelectedTab1] = useState('1'); // 默认选中第一个 tab const [wantUser, setWantUser] = useState({}); @@ -128,6 +130,8 @@ const [isModalVisible, setIsModalVisible] = useState(false); const [id, setId] = useState(''); const [uniteHandleId, setUniteHandleId] = useState(''); + const [caseResultId, setCaseResultId] = useState(''); + const tabs = [ @@ -251,6 +255,9 @@ } if (type === 'addMark') setId(res.data) + if (type === 'caseResult') { + setCaseResultId(res.data) + } } } @@ -301,6 +308,11 @@ const handlePersonView = () => { setPersonView(!personView) + } + + const handleCaseResultApply = () => { + SetCaseResult(!caseResult) + getNewTimeId('caseResult') } @@ -447,7 +459,7 @@ <Space style={{ marginTop: '38px', bottom: '4px' }}> <Button type="primary" style={{ backgroundColor: '#1A6FB8' }} onClick={() => addMark()}>添加办理记录</Button> <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={() => uniteHandle()}>联合处置申请</Button> - <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={() => SetCaseResult(!caseResult)}>结案申请</Button> + <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={() => handleCaseResultApply()} >结案申请</Button> <Button type='outline' style={{ color: '#EF6C24', border: '1px solid #EF6C24' }} onClick={() => Supervising()}>督办</Button> <Button type='secondary'>返回上级页面</Button> </Space> @@ -629,7 +641,7 @@ </Form> </Modal> <UniteHandle id={uniteHandleId} visible={uniteHandleView} handleOnCancel={() => setUniteHandleView(false)} /> - <CaseResult visible={caseResult} handleOnCancel={() => SetCaseResult(false)} /> + <CaseResult visible={caseResult} handleOnCancel={() => SetCaseResult(false)} caseResultId={caseResultId} caseId={routeData.caseId} /> </div> </> diff --git a/gz-customerSystem/src/views/register/handleFeedback/index.jsx b/gz-customerSystem/src/views/register/handleFeedback/index.jsx index 2aa9934..8c2488e 100644 --- a/gz-customerSystem/src/views/register/handleFeedback/index.jsx +++ b/gz-customerSystem/src/views/register/handleFeedback/index.jsx @@ -3,22 +3,25 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-08-09 09:59:43 * @LastEditors: dminyi 1301963064@qq.com - * @LastEditTime: 2024-09-06 17:43:15 + * @LastEditTime: 2024-09-08 11:53:51 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx * @Description: 来访登记 * */ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import NewPage from '@/components/NewPage'; import "@arco-themes/react-gzzz/css/arco.css"; import '../index.less'; import { Typography, Steps, Tabs } from '@arco-design/web-react'; -import { Audit, Matter, transfer, aiPerson } from '@/assets/images' +import { Audit, Matter, applyRecord, transfer, aiPerson } from '@/assets/images' import MatterDetail from '../matterDetail'; import Handle from './component/handle'; import AuditView from './component/AuditView'; -import {AiQuestion} from '../visit/component/levelDetail' +import { AiQuestion } from '../visit/component/levelDetail'; +import * as $$ from '@/utils/utility'; +import { useParams } from 'react-router-dom'; + const Step = Steps.Step; const TabPane = Tabs.TabPane; @@ -27,40 +30,128 @@ // marginTop: 20, }; +function getCaseApi(data) { + return $$.ax.request({ urlAi: `case-law/get-case`, typeAi: 'post', service: 'mediate', data }); +} + +function getLawApi(data) { + return $$.ax.request({ urlAi: `case-law/get-law`, typeAi: 'post', service: 'mediate', data }); +} + + + +function getTabButton(data) { + return $$.ax.request({ url: `caseTask/getTabButton`, type: 'get', service: 'mediate', data }); +} + + const Organization = () => { + const routeData = useParams(); const [current, setCurrent] = useState(3); - const [tabsActive, setTabsActive] = useState('1'); + const [tabsActive, setTabsActive] = useState('sxxq'); const [AiQuestionView, setAiQuestionView] = useState(false) - const [tabsList, setTabList] = useState([ + const [aiData, setAiData] = useState([]) + const [aiLawData, setAiLawData] = useState([]) + const [caseDetailView, setCaseDetail] = useState({}) + const [authorData, setAuthorData] = useState({}); + const [disTab, setDisTab] = useState(true); + const [tabsList, setTabsList] = useState([]); + const myTab = [ { img: Matter, label: '事项详情', - key: '1' + key: "sxxq" }, { img: transfer, - label: '流转办理', - key: '2', - isNeedStep: true,//加上这个就有进度条 + label: '事项办理', + key: "sxbl", + isNeedStep: true, }, { - img: Audit, - label: '审核', - key: '3', + img: applyRecord, + label: '申请记录', + key: "sqjl", }, - ]) + ] + + const handleAi = () => { + setAiQuestionView(true) + } + + const getCase = async () => { + const res = await getCaseApi({ + caseDes: '牛某某诉称:其在上海某物流有限公司(以下简称物流公司)担任叉车工。某日上班与领导的车辆碰擦,对方全责,领导要求私了,因其未同意而被物流公司开除。物流公司解除劳动合同违法,应当支付赔偿金。物流公司辩称:物流公司要求劳动者“健康”,牛某某持有残疾证,影响其从事叉车工作。牛某某入职前故意隐瞒身体残疾的情况,有违诚信,入职后以此为由索要优待未果,辱骂领导。物流公司并非因牛某某身体残疾而解除,而是因其隐瞒持有残疾证及威胁领导,解除劳动合同合法。法院经审理查明,牛某某左手大拇指部分缺失,其于2019年10月10日到物流公司工作,担任叉车工。牛某某入职时提交了在有效期内的叉车证,并参加了入职体检,体检合格。物流公司要求填写员工登记表,登记表上列明有无大病病史、家族病史、工伤史、传染病史,并列了“其他”栏。牛某某均勾选了“无”。牛某某正常完成了工作。2020年7月4日,物流公司以牛某某隐瞒持有残疾证,且威胁领导恐吓上级,属于严重违纪为由解除劳动合同。2020年7月10日,牛某某向上海市浦东新区劳动人事争议仲裁委员会申请仲裁,要求物流公司支付违法解除劳动合同赔偿金30,000元。审理中牛某某表示,其可以正常工作,并不要求物流公司额外支付残疾人的福利待遇,所以没有告知物流公司其身有残疾。2020年10月13日,该仲裁委员会按牛某某工资2,930元为标准裁决物流公司支付牛某某违法解除劳动合同赔偿金5,860元。', + caseClaim: '牛某某向一审法院起诉请求物流公司支付其违法解除劳动合同赔偿金30,000元。', + caseId: '10086' + }) + console.log(res.data, 'res') + if (res.type) { + setAiData(res.data) + } + } + + const getLaw = async () => { + const res = await getLawApi({ + caseDes: '牛某某诉称:其在上海某物流有限公司(以下简称物流公司)担任叉车工。某日上班与领导的车辆碰擦,对方全责,领导要求私了,因其未同意而被物流公司开除。物流公司解除劳动合同违法,应当支付赔偿金。物流公司辩称:物流公司要求劳动者“健康”,牛某某持有残疾证,影响其从事叉车工作。牛某某入职前故意隐瞒身体残疾的情况,有违诚信,入职后以此为由索要优待未果,辱骂领导。物流公司并非因牛某某身体残疾而解除,而是因其隐瞒持有残疾证及威胁领导,解除劳动合同合法。法院经审理查明,牛某某左手大拇指部分缺失,其于2019年10月10日到物流公司工作,担任叉车工。牛某某入职时提交了在有效期内的叉车证,并参加了入职体检,体检合格。物流公司要求填写员工登记表,登记表上列明有无大病病史、家族病史、工伤史、传染病史,并列了“其他”栏。牛某某均勾选了“无”。牛某某正常完成了工作。2020年7月4日,物流公司以牛某某隐瞒持有残疾证,且威胁领导恐吓上级,属于严重违纪为由解除劳动合同。2020年7月10日,牛某某向上海市浦东新区劳动人事争议仲裁委员会申请仲裁,要求物流公司支付违法解除劳动合同赔偿金30,000元。审理中牛某某表示,其可以正常工作,并不要求物流公司额外支付残疾人的福利待遇,所以没有告知物流公司其身有残疾。2020年10月13日,该仲裁委员会按牛某某工资2,930元为标准裁决物流公司支付牛某某违法解除劳动合同赔偿金5,860元。', + caseClaim: '牛某某向一审法院起诉请求物流公司支付其违法解除劳动合同赔偿金30,000元。', + caseId: '10086' + }) + if (res.type) { + setAiLawData(res.data) + } + } + + + + const getAuthor = async () => { + const res = await getTabButton({ + caseTaskId: routeData.caseTaskId + }) + if (res.type) { + const { tabList } = res.data + console.log(tabList, 'tabList1') + setAuthorData(res.data) + if (tabList.length === 0) { + //没有tab就不展示 + setDisTab(false) + } else { + setTabsList(myTab.filter(item => { + const flag = tabList.some(result => { + if (result.id === item.key) { + return true + } + }) + return flag + })) + console.log(tabsList, 'tabsList2') + setTabsActive(tabList[0].id) + } + } + } + + + + + useEffect(() => { + getAuthor(); + getCase(); + getLaw(); + }, []) + + return ( - <div style={{ position: 'relative' }}> + <div style={{ position: 'relative' ,height:'100vh'}}> <NewPage pageHead={ { breadcrumbData: [{ title: '工作台' }, { title: '事件中心' }], title: '办理反馈' } } > <Tabs - defaultActiveTab='1' + defaultActiveTab='sxxq' onChange={(v) => setTabsActive(v)} className='myTabContent' > @@ -86,16 +177,16 @@ </Steps> </div> } - {tabsActive === '1' && + {tabsActive === 'sxxq' && <MatterDetail hasApplet={true} hasEditBtn={true} /> } { - tabsActive === '2' && <Typography.Paragraph style={style}> + tabsActive === 'sxbl' && <Typography.Paragraph style={style}> <Handle /> </Typography.Paragraph> } { - tabsActive === '3' && <Typography.Paragraph style={style}> + tabsActive === 'sqjl' && <Typography.Paragraph style={style}> <AuditView /> </Typography.Paragraph> } @@ -103,14 +194,16 @@ })} </Tabs> </NewPage> - <div className="gradient-box" onClick={() => setAiQuestionView(true)}> + <div className="gradient-box" onClick={() => handleAi()}> <div><img src={aiPerson} alt='' style={{ width: '24px', height: '24px', marginRight: '6px' }} /></div> <div style={{ color: '#FFFFFF' }}>智能调解助理</div> </div> <AiQuestion - visible={AiQuestionView} - onClose={() => setAiQuestionView(false)} - /> + visible={AiQuestionView} + onClose={() => setAiQuestionView(false)} + aiData={aiData} + aiLawData={aiLawData} + /> </div> ) } diff --git a/gz-customerSystem/src/views/register/index.jsx b/gz-customerSystem/src/views/register/index.jsx new file mode 100644 index 0000000..30c32d4 --- /dev/null +++ b/gz-customerSystem/src/views/register/index.jsx @@ -0,0 +1,511 @@ +/* + * @Author: dminyi 1301963064@qq.com + * @Date: 2024-09-08 15:14:12 + * @LastEditors: dminyi 1301963064@qq.com + * @LastEditTime: 2024-09-09 10:05:35 + * @FilePath: \gzDyh\gz-customerSystem\src\views\register\index.jsx + * @Description: 工作台 + */ +import React, { useState } from 'react'; +import { tab1, tab2, tab3, tab4, tab5, tab6,visitInto,checkInto } from '@/assets/images' +import TableView from '../../components/TableView'; +import { Space } from 'antd'; +import { Tabs, Typography } from '@arco-design/web-react'; + +const TabPane = Tabs.TabPane; + + + +const VisitWorkBench = () => { + const [tabActivekey, setTabActivekey] = useState('1') + const [column, setColumn] = useState('1') + const tabsList = [ + { + key: '1', + label: '待分派', + bgColor: '#E8F8FF', + num: 10, + img: tab1 + }, + { + key: '2', + label: '待签收', + bgColor: '#E8FFEA', + num: 30, + img: tab2 + + }, + { + key: '3', + label: '待受理', + bgColor: '#F5E8FF', + num: 50, + img: tab3 + + }, + { + key: '4', + label: '办理中', + bgColor: '#E6FFFB', + num: 60, + img: tab4 + + }, + { + key: '5', + label: '待审核', + bgColor: '#E8F7FF', + num: 70, + img: tab5 + + }, + { + key: '6', + label: '督办', + bgColor: '#FFF7E6', + num: 80, + img: tab6 + + }, + ] + + const [fakeData1, setFakeData1] = useState( + [ + { + id: 1, + caseNo: 'A20230101', + judicNo: '申请材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + { + id: 2, + caseNo: 'A20230101', + judicNo: '证据材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + { + id: 2, + caseNo: 'A20230101', + judicNo: '证据材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + { + id: 2, + caseNo: 'A20230101', + judicNo: '证据材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + { + id: 2, + caseNo: 'A20230101', + judicNo: '证据材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + { + id: 2, + caseNo: 'A20230101', + judicNo: '证据材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + { + id: 2, + caseNo: 'A20230101', + judicNo: '证据材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + { + id: 2, + caseNo: 'A20230101', + judicNo: '证据材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + { + id: 2, + caseNo: 'A20230101', + judicNo: '证据材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + { + id: 2, + caseNo: 'A20230101', + judicNo: '证据材料', + perClassName: '李晓明的纠纷化解申请表、身份证...', + inputUserName: '0', + mediateUserName: '2024-7-12 12:00', + judgeName: '王五', + mediator: '赵六', + handlerUserName: '钱七', + returnUserName: '孙八', + expireTime: '2023-08-10T08:00:00.000Z', + processName: '进行中', + otherMediator: '周九', + canalName: '网络', + judicResult: '通过', + assistName: '吴十', + mediTypeName: '民事调解', + serieStatus: '1', // 1 表示非系列案,2 表示系列案 + // 更多字段... + }, + + // 更多数据... + ] + ) + + // 列配置 + const [fakeColumns, setFakeColumns] = useState([ + { + title: tabActivekey === '5' ? '回退时间' : tabActivekey === '6' ? '督办时间' : '流转时间', + dataIndex: 'caseNo', + key: 'caseNo', + width: 100, + render: (text, record, index) => <span>{index + 1}</span>, + }, + { + title: '分派时限', + dataIndex: 'dispatchDeadline', + key: 'dispatchDeadline', + width: 60, + }, + { + title: '签收时限', + dataIndex: 'receiptDeadline', + key: 'receiptDeadline', + width: 60, + }, + { + title: '受理时限', + dataIndex: 'acceptanceDeadline', + key: 'acceptanceDeadline', + width: 60, + }, + { + title: '已办天数', + dataIndex: 'processedDays', + key: 'processedDays', + width: 60, + }, + { + title: '回复时限', + dataIndex: 'replyDeadline', + key: 'replyDeadline', + width: 60, + }, + { + title: '事项等级', + dataIndex: 'matterLevel', + key: 'matterLevel', + width: 180, + render: (text) => ( + <> + {text}份 + </> + ), + }, + { + title: '事项来源', + dataIndex: 'matterSource', + key: 'matterSource', + width: 180, + }, + { + title: '事项类型', + dataIndex: 'matterType', + key: 'matterType', + width: 180, + }, + { + title: '承办部门', + dataIndex: 'handlingDepartment', + key: 'handlingDepartment', + width: 180, + }, + { + title: '配合部门', + dataIndex: 'cooperatingDepartment', + key: 'cooperatingDepartment', + width: 180, + }, + { + title: '督办部门', + dataIndex: 'supervisionDepartment', + key: 'supervisionDepartment', + width: 180, + }, + { + title: '督办意见', + dataIndex: 'supervisionOpinion', + key: 'supervisionOpinion', + width: 180, + }, + { + title: '经办人', + dataIndex: 'handler', + key: 'handler', + width: 180, + }, + { + title: '申请方', + dataIndex: 'applicant', + key: 'applicant', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'respondent', + key: 'respondent', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space> + <div>详情</div> + <div>处理</div> + </Space> + ), + }, + ]); + + const tabActive = (key) => { + setTabActivekey(key) + } + + // const columnChange = async () => { + // const res = await columnChangeApi() + // if (res.type) { + // setColumn(res.data) + // } + // } + + const handleColumnType = () => { + const columnList = column.filter(item => fakeColumns.some(itemNew => itemNew.title === item.title)) + setFakeColumns(columnList) + } + + + + return ( + <div className='VisitWorkBench'> + <div className='VisitWorkBench-top'> + <span style={{ fontWeight: 600 }}>工作总览</span> + <div className='VisitWorkBench-top-list'> + { + tabsList.map((item, index) => ( + <div key={index} className='VisitWorkBench-top-list-tabsItem' style={{ backgroundColor: item.bgColor }} onClick={() => tabActive(item.key)}> + <div> + <div>{item.label}</div> + <span className='VisitWorkBench-top-list-tabsItem-title'>{item.num}</span>件 + </div> + <div> + <img src={item.img} alt='' className='VisitWorkBench-top-list-tabsItem-imgView' /> + </div> + </div> + )) + } + </div> + </div> + <div className='VisitWorkBench-middle'> + <Tabs defaultActiveTab='1'> + <TabPane + onChange={handleColumnType} + key='1' + title={ + <span style={{ fontSize: '15px' }}> + {tabActivekey === '1' ? '待分派' : + tabActivekey === '2' ? '待签收' : + tabActivekey === '3' ? '待受理' : + tabActivekey === '4' ? '办理中' : + tabActivekey === '5' ? '待审核' : '督办-未回复' + } + </span> + } + > + <Typography.Paragraph> + <TableView + columns={fakeColumns} + dataSource={fakeData1} + size="small" + rowKey="id" + bordered={true} + // style={{ marginBottom: '65px', marginTop: '-16px' }} + rowSelection={{ + type: 'Checkbox' + }} + /> + </Typography.Paragraph> + </TabPane> + <TabPane + key='2' + title={ + <span style={{ fontSize: '15px' }}> + {tabActivekey === '1' ? '已分派' : + tabActivekey === '2' ? '已签收' : + tabActivekey === '3' ? '已受理' : + tabActivekey === '4' ? '结案申请' : + tabActivekey === '5' ? '已审核' : '督办-未回复' + } + </span> + } + > + <Typography.Paragraph> + </Typography.Paragraph> + </TabPane> + </Tabs> + + </div> + <div className='VisitWorkBench-bottom'> + 自行排查 + <div style={{ display: 'flex',justifyContent:'space-evenly' }}> + <div style={{display:'flex'}}> + <div className='VisitWorkBench-bottom-title'>大厅来访</div> + <img src={visitInto} alt='' className='VisitWorkBench-bottom-img'/> + </div> + <div style={{display:'flex'}}> + <div className='VisitWorkBench-bottom-title'>自行排查</div> + <img src={checkInto} alt='' className='VisitWorkBench-bottom-img'/> + </div> + </div> + </div> + </div> + ) +} + +export default VisitWorkBench; \ No newline at end of file diff --git a/gz-customerSystem/src/views/register/index.less b/gz-customerSystem/src/views/register/index.less index 1bc0930..6a31642 100644 --- a/gz-customerSystem/src/views/register/index.less +++ b/gz-customerSystem/src/views/register/index.less @@ -465,7 +465,7 @@ padding: 0px 8px; color: #1A6FB8; width: fit-content; - margin: 4px 0px 8px 0px; + margin: 12px 0px 8px 0px; } } @@ -473,6 +473,7 @@ display: flex; gap: 8px; margin-bottom: 8px; + margin-top: 12px; } .MyDrawer { @@ -704,7 +705,7 @@ } .gradient-box { - position: absolute; + position: fixed; right: 0; top: 50%; transform: translateY(-50%); @@ -719,6 +720,7 @@ flex: 1 1 0%; background-color: rgb(242, 243, 245); height: 100vh; + overflow-y: auto; &-case { display: flex; @@ -745,54 +747,126 @@ padding: 8px 12px; border-radius: 8px; margin-bottom: 8px; + margin-right: 16px; + align-items: center; + &-type { border: 1px solid #1A6FB8; padding: 0px 8px; color: #1A6FB8; border-radius: 4px; + width: 79px; + height: 24px; } - &-name{ + &-name { margin: 0px 16px 0px 8px; + max-width: 828px; + width: fit-content; } - &-btn{ + &-btn { color: #1A6FB8; + width: 30px; } } } } -.marginLeft{ +.marginLeft { margin-left: 55px; //fontWeight: '600', marginBottom: '16px' - &-title{ + &-title { font-weight: 600; margin-bottom: 16px; } } -.layerDetail{ +.layerDetail { margin-top: -8px; - &-title{ + &-title { color: rgb(26, 111, 184); margin-bottom: 16px; } - &-name{ + &-name { font-size: 16px; margin-bottom: 16px; + max-width: 400px; } - &-littleTitle{ + &-littleTitle { margin-bottom: 16px; } - &-content{ + &-content { margin-bottom: 16px; } +} + +.VisitWorkBench { + margin: 16px; + + &-top { + background: #ffffff; + padding: 12px 16px 16px 16px; + + &-list { + display: flex; + gap: 24px; + margin-top: 16px; + + &-tabsItem { + display: flex; + padding: 12px 16px; + flex: 1; + justify-content: space-between; + + &-title { + font-size: 18px; + margin-right: 4px; + } + + &-imgView { + width: 48px; + height: 48px; + } + } + + } + + } + + &-middle { + background: #ffffff; + padding: 12px 16px 16px 16px; + margin-top: 12px; + + } + + &-bottom { + background-color: #fff; + padding: 12px 16px 16px 16px; + margin-top: 12px; + + &-title{ + width: 140px; + } + + &-img { + width: 72px; + height: 72px; + } + } + +} + +.modeMore { + display: flex; + justify-content: space-between; + align-items: center; } \ No newline at end of file diff --git a/gz-customerSystem/src/views/register/matterDetail/FileTable.jsx b/gz-customerSystem/src/views/register/matterDetail/FileTable.jsx index a5812c4..84e9d1e 100644 --- a/gz-customerSystem/src/views/register/matterDetail/FileTable.jsx +++ b/gz-customerSystem/src/views/register/matterDetail/FileTable.jsx @@ -1,8 +1,7 @@ import React, { Fragment, useEffect, useState, useRef } from 'react'; import * as $$ from '@/utils/utility'; import ArcoUpload from '@/components/ArcoUpload'; -import NewFileCheck from '../../filesCheck/newFileCheck'; -import { IconLink } from '@arco-design/web-react/icon'; +import NewFileCheck from './NewFileCheck'; import { Row, Col, Button } from 'antd'; import { Form, Modal } from '@arco-design/web-react'; import { @@ -114,6 +113,10 @@ { value: '22_00018-102', label: '证据材料' }, ] + useEffect(() => { + console.log(props.fileInfoList); + },[props.fileInfoList]) + const personIconType = (v) => { switch (v) { case '22_00018-101': @@ -134,7 +137,7 @@ const handleUpload = () => { const newList = tableData.map(item => { - if(item.ownerType == sourceType) { + if (item.ownerType == sourceType) { const data = fileMap[sourceType] return { ...item, @@ -164,7 +167,7 @@ label='' // editData={props.editData} handleDelFile={handleDelFile} - onFileListChange={(v) => { + onFileListChange={(v) => { setFileMap({ '22_00018-101': v }) @@ -188,7 +191,7 @@ label='' // editData={props.editData} handleDelFile={handleDelFile} - onFileListChange={(v) => { + onFileListChange={(v) => { setFileMap({ '22_00018-102': v }) @@ -257,7 +260,16 @@ </div> </Modal > - <Modal style={{ width: '1200px' }} visible={filesCheck} onCancel={() => setFilesCheck(false)} footer={null} title='查看事件材料' centered> + <Modal + style={{ width: '1200px' }} + visible={filesCheck} + onCancel={() => setFilesCheck(false)} + footer={null} + title='查看事件材料' + centered + unmountOnExit={true} + maskClosable={false} + > <div style={{ marginTop: '-16px' }}> <NewFileCheck /> </div> diff --git a/gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx b/gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx new file mode 100644 index 0000000..a65d6a0 --- /dev/null +++ b/gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx @@ -0,0 +1,99 @@ +import React, { useState, useEffect, useRef } from 'react'; +import { Row, Col, Space } from 'antd'; +import { Select, DatePicker, Form, Button } from '@arco-design/web-react'; +import * as $$ from '@/utils/utility'; + +const FormItem = Form.Item; +const appUrl = $$.appUrl; + + +const NewFileCheck = (props) => { + const formRef = useRef() + + return ( + <nav className="filesCheck-nav" style={{ borderRight: '1px solid transparent' }}> + <Form + ref={formRef} + layout='horizontal' + style={{ marginTop: '24px', marginBottom: '20px' }} + scrollToFirstError={true} + initialValues={{ + }}//默认值 + > + <Row gutter={24} style={{ marginRight: '0px' }}> + <Col span={7}> + <FormItem label='材料类型:' field='type'> + <Select + placeholder='请选择' + allowClear + options={[ + { + label: '全部', + value: '', + }, + { + label: '申请材料', + value: '22_00018-101', + }, + { + label: '证据材料', + value: '22_00018-102', + }, + ]} + /> + </FormItem> + </Col> + <Col span={7}> + <FormItem + label='上传时间:' + field='time' + > + <DatePicker.RangePicker + separator='~' + style={{ width: '100%' }} + /> + </FormItem> + </Col> + <Col span={7}> + <FormItem + label='上传人类型:' + field='name' + onChange={(e) => console.log(e.target.value, 'vvv')} + > + <Select + allowClear + style={{ width: '100%' }} + options={[ + { + label: '工作人员', + value: 1 + }, + { + label: '当事人', + value: 2 + } + ]} + /> + </FormItem> + </Col> + <Col span={3}> + <Space> + <Button size="middle " type='primary'>查询</Button> + <Button size="middle ">查询</Button> + </Space> + </Col> + </Row> + + </Form> + <div style={{ display: 'flex' }}> + <div style={{ width: '200px' }}> + </div> + <div style={{ flex: 1 }}> + + </div> + </div> + </nav> + ); +}; + +export default NewFileCheck; diff --git a/gz-customerSystem/src/views/register/matterDetail/Supervising.jsx b/gz-customerSystem/src/views/register/matterDetail/Supervising.jsx index ab8b43b..4398e73 100644 --- a/gz-customerSystem/src/views/register/matterDetail/Supervising.jsx +++ b/gz-customerSystem/src/views/register/matterDetail/Supervising.jsx @@ -22,7 +22,7 @@ const appUrl = $$.appUrl; function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } diff --git a/gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx b/gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx index 53965fa..0f71759 100644 --- a/gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx +++ b/gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx @@ -10,7 +10,7 @@ const appUrl = $$.appUrl; function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } diff --git a/gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx b/gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx index 2bb5a4f..a0bc307 100644 --- a/gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx +++ b/gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx @@ -1,7 +1,7 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import NewPage from '@/components/NewPage'; import { Row, Col, Space } from 'antd'; -import { Steps, Tabs, Typography, Rate,Button } from '@arco-design/web-react'; +import { Steps, Tabs, Typography, Rate, Button } from '@arco-design/web-react'; import { apply } from '@/assets/images'; import { result } from '@/assets/images/icon'; import * as $$ from '@/utils/utility'; @@ -10,17 +10,24 @@ import { register, fold, down, empty, link } from '@/assets/images'; import ProgressStep from '@/components/ProgressStep/VisitStep'; - - - const Step = Steps.Step; const TabPane = Tabs.TabPane; + +function getTransactResultApi(caseId) { + return $$.ax.request({ url: `caseInfoUnfold/getTransactResult?caseId=${caseId}`, type: 'get', service: 'mediate' }); +} + +function getByCaseIdApi(caseId) { + return $$.ax.request({ url: `caseEvaluate/getByCaseId?caseId=${caseId}`, type: 'get', service: 'mediate' }); +} const FileMessage = (props) => { const [tabsActive, setTabsActive] = useState('1'); const [current, setCurrent] = useState(7); + const [grade, setGrade] = useState(0); + const [TransactResult, setTransactResult] = useState({}) const [filesCheck, setFilesCheck] = useState(false); const [infoData, setInfoData] = useState({}); const [tabsList, setTabList] = useState([ @@ -99,6 +106,19 @@ const handleTabChange = (newTabIndex) => { setSelectedTab(newTabIndex); }; + + const getTransactResult = async () => { + const res = await getTransactResultApi('24083010062110001') + if (res.type) { + setTransactResult({ ...res.data, fileName: res.data.fileInfoBaseDTOList.map(item => item.trueName) }) + } + } + + const getByCaseId = async () => { + const res = await getByCaseIdApi('24083010062110001') + setGrade(res.data) + console.log(res, 'resrs') + } const applyDialog = [ { @@ -327,6 +347,11 @@ }; + useEffect(() => { + getByCaseId(); + getTransactResult(); + }, []) + @@ -470,33 +495,33 @@ <table border="1" align="center" cellpadding="8" className="table" > <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">化解结果</th> - <td width='380'>化解成功</td> + <td width='380'>{TransactResult.mediResultName || '-'}</td> <th bgcolor="#F7F8FA" className="table-title" width="120">经办人</th> - <td width='380'>李晓明</td> + <td width='380'>{TransactResult.mediator || '-'}</td> </tr> <tr> <th bgcolor="#F7F8FA" className="table-title">承办部门</th> - <td>天河区棠下街综治中心</td> + <td>{TransactResult.mediateUnitName || '-'}</td> <th bgcolor="#F7F8FA" className="table-title">配合部门</th> - <td>-</td> + <td>{TransactResult.applyAssistUnitName || '-'}</td> </tr> <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">受理时间</th> <td width='380'>2024-7-1 10:00</td> <th bgcolor="#F7F8FA" className="table-title" width="120">办结时间</th> - <td width='380'>2024-7-15 11:45</td> + <td width='380'>{TransactResult?.fileTime || '-'}</td> </tr> <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">办理意见</th> - <td width='380' colspan='3'>调解开始,我首先安抚双方情绪,确保对话在一个平和的氛围中展开。随后,我引导被申请人详细说明了他的财务困境及还款意愿,同时让银行代表理解其处境,强调长期合作的重要性。经过反复沟通,被申请人理解了自身行为给申请人带来的不便,在相关证据的出示下,被申请人同意了申请方的申请请求,双方最终达成一致,签署了调解协议。</td> + <td width='380' colspan='3'>{TransactResult?.windupContent || '-'}</td> </tr> <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">协议要点</th> - <td width='380' colspan='3'>经过协商,李女士同意承担主要维修费用,但考虑到水管老化属自然磨损,张先生也表示愿意承担一小部分费用以示友好特申请结案。</td> + <td width='380' colspan='3'>{TransactResult?.agreeContent || '-'}</td> </tr> <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">结案意见</th> - <td width='380' colspan='3'>考虑到事项已经得到平息,过程材料也都比较完善,现申请结案</td> + <td width='380' colspan='3'>{TransactResult?.windupContent || '-'}</td> </tr> <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">协议文书</th> @@ -518,10 +543,10 @@ size="small" rowKey="id" bordered={true} - style={{marginBottom:'16px'}} + style={{ marginBottom: '16px' }} /> <div className='gap'></div> - <Col span={24} style={{marginTop:'12px'}}> + <Col span={24} style={{ marginTop: '12px' }}> <div style={{ color: 'rgb(134, 144, 156)' }}>办理记录</div> <div> {records.map(record => ( @@ -601,7 +626,7 @@ </div> <div className='gap'></div> - <Col span={24} style={{ display: 'flex', alignItems: 'center', margin:'12px 0px 4px 0px'}}> + <Col span={24} style={{ display: 'flex', alignItems: 'center', margin: '12px 0px 4px 0px' }}> <Space size='small'> <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>当事人评价</h4> </Space> @@ -611,34 +636,34 @@ <div className="title"> <div className="title-text">评价等级</div> </div> - <div style={{ display: 'flex' }}><Rate defaultValue={3} disabled /></div> + <div style={{ display: 'flex' }}><Rate value={grade?.evaluateGrade} disabled /></div> </Col> <Col span={8}> <div className="title"> <div className="title-text">评价时间</div> </div> - <div>2024-8-1 12:00</div> + <div>{grade?.createTime || '-'}</div> </Col> <Col span={8}> <div className="title"> <div className="title-text">评价人</div> </div> - <div>张梦雨</div> + <div>{grade?.evaluateUserName || '-'}</div> </Col> <Col span={12}> <div className="title"> <div className="title-text">评语</div> </div> - <div>实名表扬天河区棠下街综治中心,真的很有耐心处置我提出的问题,得到满意的答复。</div> + <div>{grade?.evaluateContent}</div> </Col> </Row> <div className='gap'></div> - <Col span={24} style={{ display: 'flex', alignItems: 'center', margin:'12px 0px 4px 0px' }}> + <Col span={24} style={{ display: 'flex', alignItems: 'center', margin: '12px 0px 4px 0px' }}> <Space size='small'> <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>登记信息</h4> </Space> </Col> - <Row gutter={[16, 16]} style={{marginBottom:'90px'}}> + <Row gutter={[16, 16]} style={{ marginBottom: '90px' }}> <Col span={8}> <div className="title"> <div className="title-text">登记机构</div> diff --git a/gz-customerSystem/src/views/register/matterDetail/index.jsx b/gz-customerSystem/src/views/register/matterDetail/index.jsx index 18e733b..8690c0f 100644 --- a/gz-customerSystem/src/views/register/matterDetail/index.jsx +++ b/gz-customerSystem/src/views/register/matterDetail/index.jsx @@ -10,6 +10,10 @@ return $$.ax.request({ url: 'caseInfo/getCaseInfo?id=' + id, type: 'get', service: 'mediate' }); } +function listIdTypeInfoApi(data) { + return $$.ax.request({ url: `fileInfo/listIdTypeInfo`, type: 'post', service: 'sys', data }); +} + export default function MatterDetail(props) { const [fakeData, setFakeData] = useState([]);//当事人信息数据 @@ -27,35 +31,30 @@ }, { title: '材料类型', - dataIndex: 'judicNo', - key: 'judicNo', + dataIndex: 'ownerTypeName', + key: 'ownerTypeName', width: 60, }, { title: '材料数量', - dataIndex: 'inputUserName', - key: 'perClassName', + dataIndex: 'size', + key: 'size', width: 180, - render: (text) => ( - <> - {text}份 - </> - ) - + render: (text) => <span>{text}份</span>, }, { title: '材料名称', - dataIndex: 'perClassName', - key: 'perClassName', + dataIndex: 'fileNames', + key: 'fileNames', width: 180, }, { title: '最新上传时间', - dataIndex: 'mediateUserName', - key: 'mediateUserName', + dataIndex: 'fileNames', + key: 'fileNames', width: 180, }, @@ -75,70 +74,92 @@ }, // 更多列配置... ]; - const fakeData1 = [ + + + const [fakeData1, setFakeData1] = useState([ { - id: 1, - caseNo: 'A20230101', - judicNo: '申请材料', - perClassName: '李晓明的纠纷化解申请表、身份证...', - inputUserName: '0', - mediateUserName: '2024-7-12 12:00', - judgeName: '王五', - mediator: '赵六', - handlerUserName: '钱七', - returnUserName: '孙八', - expireTime: '2023-08-10T08:00:00.000Z', - processName: '进行中', - otherMediator: '周九', - canalName: '网络', - judicResult: '通过', - assistName: '吴十', - mediTypeName: '民事调解', - serieStatus: '1', // 1 表示非系列案,2 表示系列案 - // 更多字段... + ownerTyp: "22_00018-101", + ownerTypeName: "申请材料", + size: '0', + ownerId: null, + ownerName: null, + perType: null, + agentStatus: null, + fileNames: "-", + fileList: [] }, { - id: 2, - caseNo: 'A20230101', - judicNo: '证据材料', - perClassName: '李晓明的纠纷化解申请表、身份证...', - inputUserName: '0', - mediateUserName: '2024-7-12 12:00', - judgeName: '王五', - mediator: '赵六', - handlerUserName: '钱七', - returnUserName: '孙八', - expireTime: '2023-08-10T08:00:00.000Z', - processName: '进行中', - otherMediator: '周九', - canalName: '网络', - judicResult: '通过', - assistName: '吴十', - mediTypeName: '民事调解', - serieStatus: '1', // 1 表示非系列案,2 表示系列案 - // 更多字段... + ownerType: "22_00018-102", + ownerTypeName: "证据材料", + size: '0', + ownerId: null, + ownerName: null, + perType: null, + agentStatus: null, + fileNames: "-", + fileList: [] }, - // 更多数据... - ]; - + ]); + + const listIdTypeInfo = async () => { + const res = await listIdTypeInfoApi({ + mainId: props.id, //事项ID + ownerIdList: [props.id], //具体所属编号 + typeList: [] + }) + if (res.type) { + let data = res.data?.[0]?.fileList + if (res.data.length > 0) { + setFakeData1(data) + } + } + } + useEffect(() => { console.log(props); - getCaseInfo(props.caseId) - }, [props.caseId]) + getCaseInfo(props.id) + listIdTypeInfo() + }, [props.id]) //获取id const getCaseInfo = async (id) => { - const res = await getCaseInfoApi(id) + const res = await getCaseInfoApi('24083010062110001') if (res.type) { let data = res.data + const partyList = data.personList.concat(data.agentList) setInfoData({ ...data, questionName: data.queProvName === null ? '-' : data.queProvName + '/' + data.queCityName + '/' + data.queAreaName + '/' + data.queRoadName + '/' + data.queVillageName, caseType: data.caseTypeFirstName === null ? '-' : data.caseTypeFirstName + '/' + data.caseTypeName }) - setFakeData(data.personList.concat(data.agentList)) + setFakeData(partyList.map(item => { + const fileInfoList = item.fileInfoList + let file = [];//身份证明材料、企业登记材料 + let file1 = [];//法人、机构身份证明材料、代理人授权委托书 + if (fileInfoList && fileInfoList.length != 0) { + fileInfoList.forEach(item => { + if (item.ownerType == '22_00018-202' || item.ownerType == '22_00018-203') { + file.push({ + name: item.fileList[0].trueName, + uid: item.fileList[0].id, + }) + } + if (item.ownerType == '22_00018-204' || item.ownerType == '22_00018-207') { + file1.push({ + name: item.fileList[0].trueName, + uid: item.fileList[0].id, + }) + } + }) + } + return { + ...item, + file, + file1 + } + })) } } @@ -232,7 +253,7 @@ </Col> <Col span={16}> <div className="title"><div className="title-text">是否重大矛盾纠纷</div></div> - <div>{infoData.majorStatus === '0' ? '否' : '是'}</div> + <div>{infoData.majorStatus === '0' ? '否' : infoData.majorStatus === '1' ? '是' : '-'}</div> </Col> </Row> <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px', marginTop: '20px' }}> diff --git a/gz-customerSystem/src/views/register/visit/component/agentDialog.jsx b/gz-customerSystem/src/views/register/visit/component/agentDialog.jsx index 911d774..2f1bc3c 100644 --- a/gz-customerSystem/src/views/register/visit/component/agentDialog.jsx +++ b/gz-customerSystem/src/views/register/visit/component/agentDialog.jsx @@ -18,7 +18,7 @@ } function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } export default function AgentDialog(props) { @@ -131,16 +131,18 @@ label='身份证明材料' editData={props.editData} handleDelFile={handleDelFile} + ownerType='22_00018-202' /> </Col> <Col span={24} className="doubleFile"> <ArcoUpload params={{ - action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-202`, + action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-207`, }} field='file1' label='代理人委托书' editData={props.editData} + ownerType='22_00018-207' /> </Col> <Col span={12}> @@ -318,9 +320,9 @@ </Row> {/* 重复来访重点人员 */} - <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}> + {/* <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}> <KeyVisits /> - </div> + </div> */} </Scrollbars> <div className='dialogFooter'> <Button diff --git a/gz-customerSystem/src/views/register/visit/component/applyDialog.jsx b/gz-customerSystem/src/views/register/visit/component/applyDialog.jsx index 1004661..121fed4 100644 --- a/gz-customerSystem/src/views/register/visit/component/applyDialog.jsx +++ b/gz-customerSystem/src/views/register/visit/component/applyDialog.jsx @@ -30,7 +30,7 @@ } function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } export default function ApplyDialog(props) { @@ -41,6 +41,7 @@ useEffect(() => { if (props.editData) { + console.log(props.editData); //编辑 formRef.current.setFieldsValue({ ...props.editData @@ -108,6 +109,7 @@ label='身份证明材料' editData={props.editData} handleDelFile={handleDelFile} + ownerType='22_00018-202' /> </Col> <Col span={12}> @@ -238,23 +240,25 @@ <Col span={24} className="doubleFile"> <ArcoUpload params={{ - action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-202`, + action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-203`, }} field='file' label={isLegal ? '企业登记材料' : '机构登记材料'} editData={props.editData} handleDelFile={handleDelFile} + ownerType='22_00018-203' /> </Col> <Col span={24} className="doubleFile"> <ArcoUpload params={{ - action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-202`, + action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-204`, }} field='file1' label={isLegal ? '法定代表人身份证明材料' : '机构代表人身份证明材料'} editData={props.editData} handleDelFile={handleDelFile} + ownerType='22_00018-204' /> </Col> <Col span={12}> @@ -328,7 +332,6 @@ formRef.current.validate(undefined, (errors, values) => { if (!errors) { const fieldValue = formRef.current.getFields() - console.log(fieldValue); if (props.editData) { props.handleAddParty({ ...fieldValue @@ -393,9 +396,9 @@ </Row> {/* 重复来访重点人员 */} - <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}> + {/* <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}> <KeyVisits /> - </div> + </div> */} </Scrollbars> <div className='dialogFooter'> <Button diff --git a/gz-customerSystem/src/views/register/visit/component/levelDetail.jsx b/gz-customerSystem/src/views/register/visit/component/levelDetail.jsx index 14556eb..c48c6e5 100644 --- a/gz-customerSystem/src/views/register/visit/component/levelDetail.jsx +++ b/gz-customerSystem/src/views/register/visit/component/levelDetail.jsx @@ -2,13 +2,19 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-08-27 16:47:12 * @LastEditors: dminyi 1301963064@qq.com - * @LastEditTime: 2024-09-07 15:35:53 + * @LastEditTime: 2024-09-08 15:06:05 * @FilePath: \gzDyh\gz-customerSystem\src\views\register\visit\component\levelDetail.jsx * @Description: 右抽屉提示 */ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import MyDrawer from '@/components/MyDrawer'; import { caselogo } from '@/assets/images'; +import * as $$ from '@/utils/utility'; + + +function getCaseDetailApi(data) { + return $$.ax.request({ urlAi: `case-law/get-case-detail`, typeAi: 'get', service: 'mediate', data }); +} const EventLevelDrawer = ({ visible, onClose }) => { @@ -104,24 +110,28 @@ } -const AiQuestion = ({ visible, onClose }) => { +const AiQuestion = ({ visible, onClose, aiData, aiLawData }) => { const [list, setList] = useState([ - { - id: '1', - type: '典型案例', - name: '唐某某诉重庆某工业有限公司劳动合同纠纷案' - }, - { - id: '2', - type: '相似案例', - name: '曾某某诉某网络科技公司劳动争议案' - }, - { - id: '3', - type: '相似案例', - name: '曾某某诉某网络科技公司劳动争议案' - }, + // { + // id: '1', + // type: '典型案例', + // name: '唐某某诉重庆某工业有限公司劳动合同纠纷案' + // }, + // { + // id: '2', + // type: '相似案例', + // name: '曾某某诉某网络科技公司劳动争议案' + // }, + // { + // id: '3', + // type: '相似案例', + // name: '曾某某诉某网络科技公司劳动争议案' + // }, ]) + const [caseDetailView, setCaseDetailView] = useState({}) + + const [modalType, setModalType] = useState('case') + const [lawDetail, setLawDetail] = useState({}) const [layerList, setLayerList] = useState([ { @@ -138,22 +148,48 @@ }, ]) - const [caseDetail,setCaseDetail] = useState(false) - const toggleView = (id) => { - console.log(id, 'iddddddd') + const [caseDetail, setCaseDetail] = useState(false) + const toggleView = (type, id) => { setCaseDetail(true) - aiCaseDetail(id) + setModalType(type) + + if (type === 'case') { + getCaseDetail(id); + } + if (type === 'law') { + console.log(id,'idddddd') + + const lawItem = aiLawData.find(item => item.lawInfoId === id) + console.log(lawItem,'lawItem') + setLawDetail(lawItem) + } }; + const caseDetailOnClose = () => { setCaseDetail(false) } - const aiCaseDetail = () => { - + const getCaseDetail = async (id) => { + const res = await getCaseDetailApi({ + caseId: id, + type: '1' + }) + if (res.type) { + setCaseDetailView(res.data) + } } + + + + + useEffect(() => { + setList(aiData); + setLayerList(aiLawData); + + }, [aiData, aiLawData]) return ( <> @@ -161,7 +197,7 @@ visible={visible} onClose={onClose} title="智能调解助理" - width={1000} + width={1200} style={{ position: 'absolute' }} bodyStyle={{ marginTop: '-8px' }} titleBefore={true} @@ -180,14 +216,12 @@ <div className='aiBox-list'> {list?.map((item, index) => ( <div className='aiBox-list-item'> - <div className='aiBox-list-item-type'>{item.type}</div> - <div className='aiBox-list-item-name'>{item.name}</div> - <div className='aiBox-list-item-btn' onClick={() => toggleView(item.id)}>查看</div> + <div className='aiBox-list-item-type'>{item.caseType === 1 ? '典型案例' : '相似案例'}</div> + <div className='aiBox-list-item-name'>{item.caseName}</div> + <div className='aiBox-list-item-btn' onClick={() => toggleView('case', item.caseId)}>查看</div> </div> ))} </div> - - </div> <div className='marginLeft'> <div className='marginLeft-title'>相关法条:</div> @@ -195,8 +229,8 @@ {layerList?.map((item, index) => ( <div className='aiBox-list-item'> <div className='aiBox-list-item-type'>相关法条</div> - <div className='aiBox-list-item-name'>{item.name}</div> - <div className='aiBox-list-item-btn' onClick={() => toggleView(item.id)}>查看</div> + <div className='aiBox-list-item-name'>{item.lawTitle}{item.lawIndex}</div> + <div className='aiBox-list-item-btn' onClick={() => toggleView('law', item.lawInfoId)}>查看</div> </div> ))} </div> @@ -206,24 +240,35 @@ </div> </MyDrawer> <div className='MyDrawer'> - <MyDrawer - visible={caseDetail} - onClose={caseDetailOnClose} - title="查看相关案例" - width={400} - style={{ position: 'absolute' }} - bodyStyle={{ marginTop: '-8px' }} - titleBefore={true} - > - <div className='layerDetail'> - <div className='layerDetail-title'>参考案例</div> - <div className='layerDetail-name'>唐某某诉重庆某工业有限公司劳动合同纠纷案</div> - <div className='layerDetail-littleTitle'>智能摘要</div> - <div className='layerDetail-content'>法院生效裁判认为,本案是肖某某要求某工业公司支付经济补偿金,原审法院已经确认某工业公司存在未足额支付肖某某工资、未休年休假工资情形,故依照《中华人民共和国劳动合同法》(以下简称劳动合同法)第三十八条第一款的规定,某工业公司应当支付解除合同的经济补偿金。</div> - </div> - </MyDrawer> - - </div> + <MyDrawer + visible={caseDetail} + onClose={caseDetailOnClose} + title={modalType === 'case'?"查看相关案例":"查看相关法条"} + width={400} + style={{ position: 'absolute' }} + bodyStyle={{ marginTop: '-8px' }} + titleBefore={true} + > + { + modalType === 'case' && + <div className='layerDetail'> + <div className='layerDetail-title'>参考案例</div> + <div className='layerDetail-name'>{caseDetailView?.caseTitle || '-'}</div> + <div className='layerDetail-littleTitle'>基本案情</div> + <div className='layerDetail-content'>{caseDetailView?.caseDesc || '-'}</div> + <div className='layerDetail-littleTitle'>结果</div> + <div className='layerDetail-content'>{caseDetailView?.caseClaim || '-'}</div> + </div> + } + { + modalType === 'law' && + <div className='layerDetail'> + <div className='layerDetail-title'>{lawDetail?.lawIndex} {lawDetail?.lawTitle}</div> + <div className='layerDetail-littleTitle'>{lawDetail.lawDesc}</div> + </div> + } + </MyDrawer> + </div> </> diff --git a/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx b/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx index 40078ea..decb012 100644 --- a/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx +++ b/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx @@ -48,6 +48,35 @@ } }, [fakeData]) + useEffect(() => { + setFakeData(props.partyList?.map(item => { + const fileInfoList = item.fileInfoList + let file = [];//身份证明材料、企业登记材料 + let file1 = [];//法人、机构身份证明材料、代理人授权委托书 + if (fileInfoList && fileInfoList.length != 0) { + fileInfoList.forEach(item => { + if (item.ownerType == '22_00018-202' || item.ownerType == '22_00018-203') { + file.push({ + name: item.fileList[0].trueName, + uid: item.fileList[0].id, + }) + } + if (item.ownerType == '22_00018-204' || item.ownerType == '22_00018-207') { + file1.push({ + name: item.fileList[0].trueName, + uid: item.fileList[0].id, + }) + } + }) + } + return { + ...item, + file, + file1 + } + }) || []) + }, [props.partyList]) + //获取当前时间 const getFormattedDateTime = () => { let now = new Date(); @@ -85,7 +114,7 @@ //添加当事人 const handleAddParty = (value, isEdit) => { - console.log(value, isEdit); + console.log(value); if (isEdit) { //编辑 const newList = fakeData.map(item => { @@ -361,7 +390,7 @@ <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>事件材料</h4> </Space> </Col> - <FileTable mainId={props.mainId}/> + <FileTable mainId={props.mainId} fileInfoList={props.fileInfoList}/> <DocumentScanner visible={scanFile} diff --git a/gz-customerSystem/src/views/register/visit/index.jsx b/gz-customerSystem/src/views/register/visit/index.jsx index c32fc7c..74a56cc 100644 --- a/gz-customerSystem/src/views/register/visit/index.jsx +++ b/gz-customerSystem/src/views/register/visit/index.jsx @@ -2,12 +2,13 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-08-09 09:59:43 * @LastEditors: dminyi 1301963064@qq.com - * @LastEditTime: 2024-09-04 10:20:40 + * @LastEditTime: 2024-09-07 17:27:08 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx * @Description: 来访登记 */ import React, { useState, useRef, Fragment, useEffect } from "react"; +import { useSearchParams, useNavigate } from 'react-router-dom'; import NewPage from '@/components/NewPage'; import * as $$ from '@/utils/utility'; import "@arco-themes/react-gzzz/css/arco.css"; @@ -33,17 +34,18 @@ } function getDetailData(id) { - return $$.ax.request({ url: `/casedraftInfo/getCasedraftInfo?id=${id}`, type: 'get', service: 'mediate' }); + return $$.ax.request({ url: `casedraftInfo/getCasedraftInfo?id=${id}`, type: 'get', service: 'mediate' }); } const Organization = (props) => { const formRef = useRef(); const routeData = useParams(); - + const navigate = useNavigate(); const [isReview, setIsReview] = useState(false);//预览页面控制 const [current, setCurrent] = useState(1); const [id, setId] = useState(); + const [editData, setEditData] = useState({});//回显数据 useEffect(() => { if (routeData.id) { @@ -59,14 +61,16 @@ const getDeatil = async (id) => { const res = await getDetailData(id) if (res.type) { - console.log(res); const { agentList, personList, ...rest } = res.data - formRef.current.setFieldsValue({ + const parList = agentList.concat(personList) + const obj = { ...rest, - fakeData: agentList.concat(personList), + fakeData: parList, myCaseType: [rest.caseTypeFirst, rest.caseType], myQuesAddress: rest.queRoad ? [rest.queProv, rest.queCity, rest.queArea, rest.queRoad] : undefined - }) + } + formRef.current.setFieldsValue(obj) + setEditData(obj) } } @@ -146,7 +150,8 @@ okText: '确定受理', cancelText: '我再想想', onOk: async () => { - setCurrent(3) + setCurrent(3); + navigate(`mediate/visit/handleFeedback`, { replace: true }) }, }); } @@ -187,7 +192,13 @@ </Steps> </div> <Preview style={{ display: isReview ? '' : 'none' }} data={formRef?.current?.getFields()} /> - <VisitorRegister formRef={formRef} style={{ display: isReview ? 'none' : '' }} mainId={id} /> + <VisitorRegister + formRef={formRef} + style={{ display: isReview ? 'none' : '' }} + mainId={id} + partyList={editData.fakeData} + fileInfoList={editData.fileInfoList} + /> <div className="dataSync-excel"> <Space size="large" style={{ margin: '4px 14px' }}> <Button type="primary" style={{ backgroundColor: '#1A6FB8' }} onClick={handleSave} >保存</Button> diff --git a/gz-customerSystem/src/views/register/visit/preview.jsx b/gz-customerSystem/src/views/register/visit/preview.jsx index 254c18a..2d2c797 100644 --- a/gz-customerSystem/src/views/register/visit/preview.jsx +++ b/gz-customerSystem/src/views/register/visit/preview.jsx @@ -12,7 +12,7 @@ import '../index.less'; import TableView from '../../../components/TableView'; import { Modal } from '@arco-design/web-react'; -import NewFileCheck from '../../filesCheck/newFileCheck'; +import NewFileCheck from '../matterDetail/NewFileCheck'; import * as $$ from '../../../utils/utility'; import { ApplyDialog, AgentDialog, Respondent, Company } from './component/previewTable' -- Gitblit v1.8.0