From 71e242b85800588e66645aa0df1ed24469dfad45 Mon Sep 17 00:00:00 2001 From: liuwh <964324856@qq.com> Date: Tue, 10 Sep 2024 10:14:41 +0800 Subject: [PATCH] Merge branch 'master' of http://120.79.193.119:9090/r/gzzfw/frontEnd/gzDyh into master --- gz-customerSystem/src/assets/font/douYuZhuiGuangTi2.0.ttf | 0 gz-customerSystem/src/styles/public.less | 9 gz-customerSystem/src/assets/images/index.js | 6 gz-customerSystem/src/components/personCard/DetailDialog.jsx | 12 gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx | 15 gz-customerSystem/src/api/appUrl.js | 73 - gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx | 203 +++-- gz-customerSystem/src/views/register/index.jsx | 924 +++++++++++++++++++++--- gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx | 76 + gz-customerSystem/src/utils/download.js | 41 + gz-customerSystem/src/router/router.js | 4 gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx | 8 gz-customerSystem/src/utils/caseTypeSelect.js | 414 ++++++++++ gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx | 53 + gz-customerSystem/src/views/register/matterDetail/index.jsx | 128 --- gz-customerSystem/src/views/register/visit/component/previewTable.jsx | 8 gz-customerSystem/src/views/register/index.less | 18 gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx | 2 gz-customerSystem/src/views/register/matterDetail/FileTable.jsx | 194 ++++ gz-customerSystem/src/views/register/handleFeedback/index.jsx | 14 gz-customerSystem/src/views/register/eventFlow/index.jsx | 9 gz-customerSystem/src/utils/utility.js | 2 gz-customerSystem/src/assets/images/floating.png | 0 23 files changed, 1,748 insertions(+), 465 deletions(-) diff --git a/gz-customerSystem/src/api/appUrl.js b/gz-customerSystem/src/api/appUrl.js index 88a915c..cece9e5 100644 --- a/gz-customerSystem/src/api/appUrl.js +++ b/gz-customerSystem/src/api/appUrl.js @@ -8,42 +8,41 @@ * @Description: api地址 */ export const debug = { - // web服务 - // baseUrl: 'http://gz.hugeinfo.com.cn', - // baseUrl: "http://192.168.3.108:9002", - // baseUrl: 'http://6dycet.natappfree.cc', //yj - baseUrl: 'http://8pxgs3.natappfree.cc', - // 附件服务 - // fileUrl: "http://192.168.3.108:9002", - // fileUrl: 'http://gz.hugeinfo.com.cn', - // fileUrl: 'http://6dycet.natappfree.cc', - fileUrl: 'http://8pxgs3.natappfree.cc', - // 文件查看url 后面接附件编号 - fileShowUrl: '/dyh-sys/api/v1/fileInfo/show/', - // 文件下载url 后面接附件编号 - fileDownUrl: '/dyh-sys/api/v1/fileInfo/down/', - // 在线文档编辑链接 - fileDocx: '/word/docDraft/showWord', - // 签章的文档编辑链接 - fileDocx2: '/InsertSeal/Word/AddSeal1/Word1', + // web服务 + // baseUrl: 'http://gz.hugeinfo.com.cn', + baseUrl: "http://w88bsz.natappfree.cc", + // baseUrl: 'http://mdqgnh.natappfree.cc', - // 不同服务接口type - mediate: 'dyh-mediate', // dyh-mediate - cust: 'dyh-cust', // dyh-cust - oper: 'dyh-oper', // dyh-oper - sys: 'dyh-sys', // dyh-sys - disp: 'dyh-disp', //dyh-disp - utils: 'dyh-utils', + // 附件服务 + fileUrl: "http://w88bsz.natappfree.cc", + // fileUrl: 'http://gz.hugeinfo.com.cn', + + // 文件查看url 后面接附件编号 + fileShowUrl: "/dyh-sys/api/v1/fileInfo/show/", + // 文件下载url 后面接附件编号 + fileDownUrl: "/dyh-sys/api/v1/fileInfo/down/", + // 在线文档编辑链接 + fileDocx: "/word/docDraft/showWord", + // 签章的文档编辑链接 + fileDocx2: "/InsertSeal/Word/AddSeal1/Word1", + + // 不同服务接口type + mediate: "dyh-mediate", // dyh-mediate + cust: "dyh-cust", // dyh-cust + oper: "dyh-oper", // dyh-oper + sys: "dyh-sys", // dyh-sys + disp: "dyh-disp", //dyh-disp + utils: "dyh-utils", }; // 正式版 export const web = { - // web服务 - baseUrl: '/gz-dyh', - // baseUrl: 'http://146.4.99.61:8088/byzfw', + // web服务 + baseUrl: "https://zfw-dyh.by.gov.cn", + // baseUrl: 'http://146.4.99.61:8088/byzfw', - // 附件服务 - fileUrl: 'https://dyh.hugeinfo.com.cn', + // 附件服务 + fileUrl: "https://zfw-dyh.by.gov.cn", // 文件查看url 后面接附件编号 fileShowUrl: '/dyh-sys/api/v1/fileInfo/show/', @@ -54,11 +53,11 @@ // 签章的文档编辑链接 fileDocx2: '/InsertSeal/Word/AddSeal1/Word1', - // 不同服务接口type - mediate: 'dyh-mediate', // dyh-mediate - cust: 'dyh-cust', // dyh-cust - oper: 'dyh-oper', // dyh-oper - sys: 'dyh-sys', // dyh-sys - disp: 'dyh-disp', //dyh-disp - utils: 'dyh-utils', + // 不同服务接口type + mediate: "gzdyh-mediate", // dyh-mediate + cust: "gzdyh-cust", // dyh-cust + oper: "gzdyh-oper", // dyh-oper + sys: "gzdyh-sys", // dyh-sys + disp: "gzdyh-disp", //dyh-disp + utils: "gzdyh-utils", }; diff --git a/gz-customerSystem/src/assets/font/douYuZhuiGuangTi2.0.ttf b/gz-customerSystem/src/assets/font/douYuZhuiGuangTi2.0.ttf new file mode 100644 index 0000000..6ef0c63 --- /dev/null +++ b/gz-customerSystem/src/assets/font/douYuZhuiGuangTi2.0.ttf Binary files differ diff --git a/gz-customerSystem/src/assets/images/floating.png b/gz-customerSystem/src/assets/images/floating.png new file mode 100644 index 0000000..9229380 --- /dev/null +++ b/gz-customerSystem/src/assets/images/floating.png Binary files differ diff --git a/gz-customerSystem/src/assets/images/index.js b/gz-customerSystem/src/assets/images/index.js index 91af7c6..9c21414 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-09 09:44:30 + * @LastEditTime: 2024-09-09 15:35:32 * @LastEditors: dminyi 1301963064@qq.com * @Version: 1.0.0 * @Description: @@ -72,6 +72,7 @@ import tab6 from "./tab6.png"; import visitInto from "./visitInto.png"; import checkInto from "./checkInto.png"; +import floating from "./floating.png"; export { ledger_1, @@ -138,5 +139,6 @@ tab5, tab6, visitInto, - checkInto + checkInto, + floating }; \ No newline at end of file diff --git a/gz-customerSystem/src/components/personCard/DetailDialog.jsx b/gz-customerSystem/src/components/personCard/DetailDialog.jsx index 183501d..f5f7dce 100644 --- a/gz-customerSystem/src/components/personCard/DetailDialog.jsx +++ b/gz-customerSystem/src/components/personCard/DetailDialog.jsx @@ -1,6 +1,7 @@ import React, { useEffect, useState } from 'react' import KeyVisits from "./KeyVisits"; -import { link } from '@/assets/images' +import { link } from '@/assets/images'; +import { Scrollbars } from "react-custom-scrollbars"; export default function DetailDialog(props) { const nuturalList = [ @@ -359,7 +360,12 @@ }, []) return ( - <div style={{ maxHeight: '590px', overflowY: 'scroll' }}> + <Scrollbars + autoHide + autoHeight + autoHeightMin={200} // 最小高度为300px + autoHeightMax={590} + > <table border="1" align="center" cellpadding="8" className="table" style={{ marginBottom: '20px' }}> { tableList?.map((item, index) => { @@ -385,6 +391,6 @@ {/* <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}> <KeyVisits /> </div> */} - </div> + </Scrollbars> ) } diff --git a/gz-customerSystem/src/router/router.js b/gz-customerSystem/src/router/router.js index d8852de..6c5ada9 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-10 09:35:19 + * @LastEditTime: 2024-09-10 10:14:40 * @LastEditors: lwh * @Version: 1.0.0 * @Description: 路由 @@ -219,7 +219,7 @@ <Route path="visit/:id?" element={<Visit />} /> <Route path="visit/eventFlow/:caseTaskId?/:caseId?" element={<EventFlow />} /> <Route path="visit/handleFeedback/:caseTaskId?/:caseId?" element={<HandleFeedback />} /> - <Route path="visit/fileMessage" element={<FileMessage />} /> + <Route path="visit/fileMessage/:caseTaskId?/:caseId?" element={<FileMessage />} /> <Route path="visit/closingReview/:caseTaskId?/:caseId?" element={<ClosingReview />} /> <Route path="visit/visitWorkBench" element={<VisitWorkBench />} /> diff --git a/gz-customerSystem/src/styles/public.less b/gz-customerSystem/src/styles/public.less index e824b98..d54605e 100644 --- a/gz-customerSystem/src/styles/public.less +++ b/gz-customerSystem/src/styles/public.less @@ -15,6 +15,11 @@ src: url('../assets/font/DingTalk_JinBuTi_Regular.ttf'); } +@font-face { + font-family: DouYu; + src: url('../assets/font/DingTalk_JinBuTi_Regular.ttf'); +} + html, body { margin: 0; @@ -800,10 +805,12 @@ .arco-modal-header { padding: 0; + margin-bottom: 0; } - .arco-modal-header { + .arco-modal-footer { text-align: right; + margin-top: 0; } } diff --git a/gz-customerSystem/src/utils/caseTypeSelect.js b/gz-customerSystem/src/utils/caseTypeSelect.js index bf234b7..ef41fe4 100644 --- a/gz-customerSystem/src/utils/caseTypeSelect.js +++ b/gz-customerSystem/src/utils/caseTypeSelect.js @@ -10,40 +10,412 @@ let caseTypeSelect = [ { - 'label': '家庭邻里', - 'value': '24_000010-1', - 'parentId': 'root', - 'children': [ + "label": "城市管理", + "value": "24_01-3", + "icon": null, + "parentId": "root", + "children": [ { - 'label': '邻里纠纷', - 'value': '24_000011-1', - 'parentId': '24_000010-1', + "label": "施工问题", + "value": "24_02-20", + "icon": null, + "parentId": "24_01-3", + "children": null }, { - 'label': '婚姻家庭纠纷', - 'value': '24_000011-2', - 'parentId': '24_000010-1', + "label": "违章建筑", + "value": "24_02-21", + "icon": null, + "parentId": "24_01-3", + "children": null + }, + { + "label": "路桥坑洼、破损", + "value": "24_02-22", + "icon": null, + "parentId": "24_01-3", + "children": null + }, + { + "label": "消防隐患举报", + "value": "24_02-23", + "icon": null, + "parentId": "24_01-3", + "children": null + }, + { + "label": "噪声、气味、污水等环境问题", + "value": "24_02-25", + "icon": null, + "parentId": "24_01-3", + "children": null + }, + { + "label": "乱摆卖、垃圾清理等街面问题", + "value": "24_02-24", + "icon": null, + "parentId": "24_01-3", + "children": null } ] }, { - 'label': '劳动社保', - 'value': '24_000010-2', - 'parentId': 'root', - 'children': [ + "label": "家庭邻里", + "value": "24_01-8", + "icon": null, + "parentId": "root", + "children": [ { - 'label': '拖欠、克扣工资', - 'value': '24_000011-3', - 'parentId': '24_000010-2', + "label": "邻里纠纷", + "value": "24_02-48", + "icon": null, + "parentId": "24_01-8", + "children": null }, { - 'label': '门诊及住院待遇', - 'value': '24_000011-4', - 'parentId': '24_000010-2', + "label": "婚姻家庭纠纷", + "value": "24_02-47", + "icon": null, + "parentId": "24_01-8", + "children": null + }, + { + "label": "男女情感问题", + "value": "24_02-49", + "icon": null, + "parentId": "24_01-8", + "children": null } ] }, - + { + "label": "交通运输", + "value": "24_01-4", + "icon": null, + "parentId": "root", + "children": [ + { + "label": "出租车、公交车、站点等营运问题", + "value": "24_02-32", + "icon": null, + "parentId": "24_01-4", + "children": null + }, + { + "label": "交通灯、电子警察等公安设施", + "value": "24_02-28", + "icon": null, + "parentId": "24_01-4", + "children": null + }, + { + "label": "交通拥堵", + "value": "24_02-27", + "icon": null, + "parentId": "24_01-4", + "children": null + }, + { + "label": "道路违章举报", + "value": "24_02-29", + "icon": null, + "parentId": "24_01-4", + "children": null + }, + { + "label": "物流快递管理", + "value": "24_02-30", + "icon": null, + "parentId": "24_01-4", + "children": null + }, + { + "label": "驾校纠纷", + "value": "24_02-31", + "icon": null, + "parentId": "24_01-4", + "children": null + }, + { + "label": "车辆乱停放", + "value": "24_02-26", + "icon": null, + "parentId": "24_01-4", + "children": null + }, + { + "label": "电动车违规问题", + "value": "24_02-33", + "icon": null, + "parentId": "24_01-4", + "children": null + }, + { + "label": "其他(社会治安、限行、养犬等)", + "value": "24_02-34", + "icon": null, + "parentId": "24_01-4", + "children": null + } + ] + }, + { + "label": "教育医疗", + "value": "24_01-5", + "icon": null, + "parentId": "root", + "children": [ + { + "label": "教育事务、培训机构投诉", + "value": "24_02-35", + "icon": null, + "parentId": "24_01-5", + "children": null + }, + { + "label": "医疗服务", + "value": "24_02-36", + "icon": null, + "parentId": "24_01-5", + "children": null + } + ] + }, + { + "label": "劳动社保", + "value": "24_01-2", + "icon": null, + "parentId": "root", + "children": [ + { + "label": "社保费用补缴", + "value": "24_02-16", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "生育待遇", + "value": "24_02-12", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "异地就医办理", + "value": "24_02-13", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "养老待遇", + "value": "24_02-14", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "失业保险待遇", + "value": "24_02-15", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "参保流程", + "value": "24_02-17", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "其他(职业技能、社保补贴等)", + "value": "24_02-18", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "港澳青年来穗服务", + "value": "24_02-19", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "医保个人账户", + "value": "24_02-11", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "门诊及住院待遇", + "value": "24_02-10", + "icon": null, + "parentId": "24_01-2", + "children": null + }, + { + "label": "拖欠、克扣工资", + "value": "24_02-9", + "icon": null, + "parentId": "24_01-2", + "children": null + } + ] + }, + { + "label": "房屋规划", + "value": "24_01-7", + "icon": null, + "parentId": "root", + "children": [ + { + "label": "物业/业委会管理", + "value": "24_02-41", + "icon": null, + "parentId": "24_01-7", + "children": null + }, + { + "label": "不动产登记", + "value": "24_02-42", + "icon": null, + "parentId": "24_01-7", + "children": null + }, + { + "label": "开发商/中介纠纷", + "value": "24_02-43", + "icon": null, + "parentId": "24_01-7", + "children": null + }, + { + "label": "电梯加装", + "value": "24_02-44", + "icon": null, + "parentId": "24_01-7", + "children": null + }, + { + "label": "建设项目规划", + "value": "24_02-45", + "icon": null, + "parentId": "24_01-7", + "children": null + }, + { + "label": "租赁纠纷", + "value": "24_02-46", + "icon": null, + "parentId": "24_01-7", + "children": null + } + ] + }, + { + "label": "公共服务", + "value": "24_01-6", + "icon": null, + "parentId": "root", + "children": [ + { + "label": "个人危险行为", + "value": "24_02-40", + "icon": null, + "parentId": "24_01-6", + "children": null + }, + { + "label": "停水/电/气", + "value": "24_02-37", + "icon": null, + "parentId": "24_01-6", + "children": null + }, + { + "label": "自然灾害", + "value": "24_02-38", + "icon": null, + "parentId": "24_01-6", + "children": null + }, + { + "label": "公共卫生安全", + "value": "24_02-39", + "icon": null, + "parentId": "24_01-6", + "children": null + } + ] + }, + { + "label": "市场监管", + "value": "24_01-1", + "icon": null, + "parentId": "root", + "children": [ + { + "label": "金融纠纷", + "value": "24_02-6", + "icon": null, + "parentId": "24_01-1", + "children": null + }, + { + "label": "网购及其他消费纠纷", + "value": "24_02-5", + "icon": null, + "parentId": "24_01-1", + "children": null + }, + { + "label": "其他经济违法举报", + "value": "24_02-7", + "icon": null, + "parentId": "24_01-1", + "children": null + }, + { + "label": "无证/无照/冒用信息等违法经营行为举报", + "value": "24_02-4", + "icon": null, + "parentId": "24_01-1", + "children": null + }, + { + "label": "食品消费纠纷", + "value": "24_02-3", + "icon": null, + "parentId": "24_01-1", + "children": null + }, + { + "label": "旅游消费纠纷", + "value": "24_02-2", + "icon": null, + "parentId": "24_01-1", + "children": null + }, + { + "label": "通讯、宽带消费纠纷", + "value": "24_02-1", + "icon": null, + "parentId": "24_01-1", + "children": null + }, + { + "label": "电费问题", + "value": "24_02-8", + "icon": null, + "parentId": "24_01-1", + "children": null + } + ] + } ] const obj = { diff --git a/gz-customerSystem/src/utils/download.js b/gz-customerSystem/src/utils/download.js new file mode 100644 index 0000000..5ce3b11 --- /dev/null +++ b/gz-customerSystem/src/utils/download.js @@ -0,0 +1,41 @@ +import axios from 'axios' +import qs from 'qs' +import * as $$ from '@/utils/utility'; + +export default function downloadFile(url, params) { + const link = document.createElement('a') + return axios({ + url, + params, + method: 'GET', + headers: { + Authorization: $$.getSessionStorage('customerSystemToken') + }, + responseType: 'blob', + paramsSerializer: (v) => qs.stringify(v, { + arrayFormat: 'repeat' + }), + }) + .then((res) => { + // 切割文件名 + const fileNameEncode = res.headers['content-disposition'].split('filename=')[1] + // 解码 + const fileName = decodeURIComponent(fileNameEncode) + // 设置type类型 + const blob = new Blob([res.data], { + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; application/octet-stream', + }) + const fileUrl = window.URL.createObjectURL(blob) + link.href = fileUrl + link.setAttribute('download', fileName) + link.style.display = 'none' + link.click() + link.remove() + }) + .catch(() => { + $$.info({ + type: 'error', + content: '文件下载请求失败' + }); + }) +} \ No newline at end of file diff --git a/gz-customerSystem/src/utils/utility.js b/gz-customerSystem/src/utils/utility.js index ad223f4..8eebc56 100644 --- a/gz-customerSystem/src/utils/utility.js +++ b/gz-customerSystem/src/utils/utility.js @@ -165,6 +165,8 @@ return info({ type: 'success', content }); } + + // 手机号码正则 export const mobileRegExp = new RegExp('^1([0-9][0-9]|[0-9][0-9]|[0-9][0-9]|[0-9][0-9]|[0-9][0-9])\\d{8}$', 'g'); diff --git a/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx b/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx index 0f4785b..d76dd19 100644 --- a/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx +++ b/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx @@ -14,8 +14,8 @@ const TabPane = Tabs.TabPane; const Step = Steps.Step; -function getListCaseFlow(data) { - return $$.ax.request({ url: `caseTask/listCaseFlow`, type: 'get', service: 'mediate', data }); +function getListCaseFlow(caseId) { + return $$.ax.request({ url: `caseTask/listCaseFlow?caseId=${caseId}`, type: 'get', service: 'mediate' }); } function accept(data) { @@ -35,7 +35,7 @@ const res = await accept({ caseTaskId: props.caseTaskId }) - if(res.type) { + if (res.type) { $$.infoSuccess({ content: '受理成功!' }); } }, @@ -120,14 +120,17 @@ //获取流程信息 const getData = async () => { - const res = await getListCaseFlow({ - caseId: props.caseId - }) + const res = await getListCaseFlow( + props.caseId + ) if (res.type) { setProgressData(res.data) } } + + + return ( <Fragment> <div style={{ backgroundColor: '#fff', margin: '0 16px 0px 16px', paddingTop: '16px', paddingLeft: '91px' }}> diff --git a/gz-customerSystem/src/views/register/eventFlow/index.jsx b/gz-customerSystem/src/views/register/eventFlow/index.jsx index 5fa937c..b96e734 100644 --- a/gz-customerSystem/src/views/register/eventFlow/index.jsx +++ b/gz-customerSystem/src/views/register/eventFlow/index.jsx @@ -46,6 +46,8 @@ ] const Organization = () => { const routeData = useParams(); + const caseTaskId = $$.getQueryString('caseTaskId') + const caseId = $$.getQueryString('caseId') const [authorData, setAuthorData] = useState({}); const [tabsList, setTabsList] = useState([]); const [tabsActive, setTabsActive] = useState(); @@ -57,8 +59,9 @@ //获取权限tab和按钮权限 const getAuthor = async () => { + console.log(routeData, 'routeData') const res = await getTabButton({ - caseTaskId: routeData.caseTaskId + caseTaskId: caseTaskId }) if (res.type) { const { tabList } = res.data @@ -83,7 +86,7 @@ //根据id定义组件 const getTypeDom = (key) => { if (key === 'dslxq' || key === 'sxxq') { - return <EventFlow authorData={authorData} caseId={routeData.caseId} /> + return <EventFlow authorData={authorData} caseId={caseId} caseTaskId={caseTaskId}/> } if (key === 'sqjl') { return <ApplyInfo /> @@ -93,6 +96,8 @@ } } + console.log(caseId, 'caseId') + return ( <div style={{ position: 'relative' }}> <NewPage diff --git a/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx b/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx index e426f52..f5c29ad 100644 --- a/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx +++ b/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx @@ -2,7 +2,7 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-09-02 14:49:13 * @LastEditors: dminyi 1301963064@qq.com - * @LastEditTime: 2024-09-08 18:25:54 + * @LastEditTime: 2024-09-09 22:14:40 * @FilePath: \gzDyh\gz-customerSystem\src\views\register\handleFeedback\component\CaseResult.jsx * @Description: 结案申请 */ @@ -26,7 +26,7 @@ -const CaseResult = ({ visible = false, handleOnCancel, caseResultId, caseId }) => { +const CaseResult = ({ visible = false, handleOnCancel, caseResultId, caseId ,caseTaskId}) => { const formRef = useRef(); const formRefWrite = useRef(); const failRef = useRef(); @@ -111,7 +111,9 @@ const windupApply = async (submitData) => { const res = await windupApplyApi({ - caseResultId: caseResultId, + caseTaskId: caseTaskId, + caseId:caseId, + caseResultId:caseResultId, ...submitData }) if (res.type) { diff --git a/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx b/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx index 332190d..c27d1d1 100644 --- a/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx +++ b/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx @@ -77,8 +77,8 @@ ]; -function choosePrincipalApi(id) { - return $$.ax.request({ url: 'caseInfoUnfold/choosePrincipal?caseId=24083010062110001&userId=' + id, type: 'get', service: 'mediate' }); +function choosePrincipalApi(caseId, userId) { + return $$.ax.request({ url: `caseInfoUnfold/choosePrincipal?caseId=${caseId}&userId=` + userId, type: 'get', service: 'mediate' }); } function delFile(id) { @@ -111,7 +111,7 @@ -const Handle = () => { +const Handle = ({ authorData, caseTaskId, caseId }) => { const formRef = useRef(); const routeData = useParams(); const [selectedTab, setSelectedTab] = useState('1'); // 默认选中第一个 tab @@ -131,7 +131,7 @@ const [id, setId] = useState(''); const [uniteHandleId, setUniteHandleId] = useState(''); const [caseResultId, setCaseResultId] = useState(''); - + const [managerName,setManagerName] = useState('') const tabs = [ @@ -148,9 +148,8 @@ { value: '1', label: '一' }, { value: '2', label: '二' }, { value: '3', label: '三' } ]; - const tabs2 = [ - { index: '1', label: '公共模板1:回复督办内容收到通用范本' }, - ] + + const handleTabChange = (newTabIndex) => { @@ -180,7 +179,7 @@ const choosePrincipal = async (id) => { console.log(id, 'choosePrincipalId') - const res = await choosePrincipalApi(id) + const res = await choosePrincipalApi(caseId, id) if (res.type) { let data = res.data console.log(data, 'choosePrincipalchoosePrincipal') @@ -215,24 +214,24 @@ }) if (res.type) { $$.infoSuccess({ content: '修改成功' }); - listFeedback('24083010062110001') + listFeedback(caseId) } } else { const res = await saveFeedbackApi({ ...submitData, - caseId: "24083010062110001", + caseId: caseId, id: id, caseTaskId: '', }) if (res.type) { $$.infoSuccess({ content: '保存成功' }); - listFeedback('24083010062110001') + listFeedback(caseId) } } } const getFeedbackInfo = async () => { - const res = await getFeedbackInfoApi('24083010062110001') + const res = await getFeedbackInfoApi(caseTaskId) setFeedbackInfoData(res.data) console.log(res.data, 'res.data') } @@ -241,8 +240,10 @@ const listFeedback = async (id) => { const res = await listFeedbackApi(id) if (res.type) { - let data = res.data.caseFeedbackList + let data = res.data.caseFeedbackList; + let manager = res.data.manager setList(data) + setManagerName(manager) } } @@ -317,10 +318,25 @@ useEffect(() => { - listFeedback('24083010062110001'); + listFeedback(caseId); getFeedbackInfo(); getByIdRole(); }, []) + + // useEffect(() => { + // if (authorData) { + // const { buttonList } = authorData; + // setStaticButtonList(myButton.filter(item => { + // const flag = buttonList.some(result => { + // if (result.id === item.key) { + // return true + // } + // }) + // return flag + // })) + // } + // }, [authorData]) + return ( @@ -380,7 +396,10 @@ {wantUser.wantUserId ? <WantUserTag name={wantUser.wantUserName} onClose={() => setWantUser({ wantUserId: null, wantUserName: null })} /> : - <Button onClick={() => setIsModalVisible(true)} style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} type='outline'>选择</Button> + caseId ? + <WantUserTag name={managerName} onClose={() => setWantUser({ wantUserId: null, wantUserName: null })} /> + : + <Button onClick={() => setIsModalVisible(true)} style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} type='outline'>选择</Button> } </FormItem> </Col> @@ -521,12 +540,14 @@ visible={isModalVisible} checkKeys={wantUser.wantUserId ? [{ label: wantUser.wantUserName, value: wantUser.wantUserId }] : undefined} onOk={(value) => { + console.log(value, 'value') console.log(value.key, value, 'value.key', 'value') setIsModalVisible(false); setWantUser({ wantUserId: value.keys[0], wantUserName: value.items[0].name }); handleCheckedKeys(value.keys?.[0]) }} onClose={() => setIsModalVisible(false)} + type='person' /> <DocumentScanner @@ -641,7 +662,7 @@ </Form> </Modal> <UniteHandle id={uniteHandleId} visible={uniteHandleView} handleOnCancel={() => setUniteHandleView(false)} /> - <CaseResult visible={caseResult} handleOnCancel={() => SetCaseResult(false)} caseResultId={caseResultId} caseId={routeData.caseId} /> + <CaseResult visible={caseResult} handleOnCancel={() => SetCaseResult(false)} caseResultId={caseResultId} caseId={caseId} caseTaskId={caseTaskId}/> </div> </> diff --git a/gz-customerSystem/src/views/register/handleFeedback/index.jsx b/gz-customerSystem/src/views/register/handleFeedback/index.jsx index 8c2488e..b928d2e 100644 --- a/gz-customerSystem/src/views/register/handleFeedback/index.jsx +++ b/gz-customerSystem/src/views/register/handleFeedback/index.jsx @@ -3,7 +3,7 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-08-09 09:59:43 * @LastEditors: dminyi 1301963064@qq.com - * @LastEditTime: 2024-09-08 11:53:51 + * @LastEditTime: 2024-09-10 09:16:47 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx * @Description: 来访登记 * @@ -48,6 +48,8 @@ const Organization = () => { const routeData = useParams(); + const caseTaskId = $$.getQueryString('caseTaskId') + const caseId = $$.getQueryString('caseId') const [current, setCurrent] = useState(3); const [tabsActive, setTabsActive] = useState('sxxq'); const [AiQuestionView, setAiQuestionView] = useState(false) @@ -107,7 +109,7 @@ const getAuthor = async () => { const res = await getTabButton({ - caseTaskId: routeData.caseTaskId + caseTaskId: caseTaskId }) if (res.type) { const { tabList } = res.data @@ -144,7 +146,7 @@ return ( - <div style={{ position: 'relative' ,height:'100vh'}}> + <div style={{ position: 'relative', height: '100vh' }}> <NewPage pageHead={ { breadcrumbData: [{ title: '工作台' }, { title: '事件中心' }], title: '办理反馈' } @@ -178,16 +180,16 @@ </div> } {tabsActive === 'sxxq' && - <MatterDetail hasApplet={true} hasEditBtn={true} /> + <MatterDetail hasApplet={true} hasEditBtn={true} authorData={authorData} /> } { tabsActive === 'sxbl' && <Typography.Paragraph style={style}> - <Handle /> + <Handle authorData={authorData} caseId={caseId} caseTaskId={caseTaskId}/> </Typography.Paragraph> } { tabsActive === 'sqjl' && <Typography.Paragraph style={style}> - <AuditView /> + <AuditView authorData={authorData} /> </Typography.Paragraph> } </TabPane> diff --git a/gz-customerSystem/src/views/register/index.jsx b/gz-customerSystem/src/views/register/index.jsx index 30c32d4..26359b2 100644 --- a/gz-customerSystem/src/views/register/index.jsx +++ b/gz-customerSystem/src/views/register/index.jsx @@ -2,36 +2,70 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-09-08 15:14:12 * @LastEditors: dminyi 1301963064@qq.com - * @LastEditTime: 2024-09-09 10:05:35 + * @LastEditTime: 2024-09-09 22:29:34 * @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 React, { useEffect, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +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'; +import { Tabs, Typography, Radio } from '@arco-design/web-react'; +import * as $$ from '@/utils/utility'; const TabPane = Tabs.TabPane; +function pageMyTaskBlApi(data) { + return $$.ax.request({ url: `caseTask/pageMyTaskBl`, type: 'get', service: 'mediate', data }); +} +function getCountListApi(data) { + return $$.ax.request({ url: `caseTask/getCountList`, type: 'get', service: 'mediate', data }); +} +//分派 +function pageMyTaskFpApi(data) { + return $$.ax.request({ url: `caseTask/pageMyTaskFp?page=1&size=10&sortType=1&sortColmn=1&status=1`, type: 'get', service: 'mediate', data }); +} + +//签收 +function pageMyTaskQsApi(data) { + return $$.ax.request({ url: `caseTask/pageMyTaskQs?page=1&size=10&sortType=1&sortColmn=1&status=1`, type: 'get', service: 'mediate', data }); +} + +//受理 +function pageMyTaskSlApi(data) { + return $$.ax.request({ url: `caseTask/pageMyTaskSl?page=1&size=10&sortType=1&sortColmn=1&status=1`, type: 'get', service: 'mediate', data }); +} + +//办理中 +function pageMyTaskBlzApi(data) { + return $$.ax.request({ url: `caseTask/pageMyTaskBlz?page=1&size=10&sortType=1&sortColmn=1&status=1`, type: 'get', service: 'mediate', data }); +} + +//签收 +function signApi(data) { + return $$.ax.request({ url: `caseTask/sign`, type: 'post', service: 'mediate', data }); +} const VisitWorkBench = () => { + const navigate = useNavigate(); const [tabActivekey, setTabActivekey] = useState('1') - const [column, setColumn] = useState('1') + const [CountList, setCountList] = useState({}) + const [direction, setDirection] = useState('回退审核') const tabsList = [ { key: '1', label: '待分派', bgColor: '#E8F8FF', - num: 10, + num: `${CountList?.waitDisp || '0'}`, img: tab1 }, { key: '2', label: '待签收', bgColor: '#E8FFEA', - num: 30, + num: `${CountList?.waitSign || '0'}`, img: tab2 }, @@ -39,7 +73,7 @@ key: '3', label: '待受理', bgColor: '#F5E8FF', - num: 50, + num: `${CountList?.waitAccept || '0'}`, img: tab3 }, @@ -47,7 +81,7 @@ key: '4', label: '办理中', bgColor: '#E6FFFB', - num: 60, + num: `${CountList?.waitReview || '0'}`, img: tab4 }, @@ -55,7 +89,7 @@ key: '5', label: '待审核', bgColor: '#E8F7FF', - num: 70, + num: `${CountList?.supervise || '0'}`, img: tab5 }, @@ -63,7 +97,7 @@ key: '6', label: '督办', bgColor: '#FFF7E6', - num: 80, + num: `${CountList?.processing || '0'}`, img: tab6 }, @@ -114,7 +148,7 @@ // 更多字段... }, { - id: 2, + id: 3, caseNo: 'A20230101', judicNo: '证据材料', perClassName: '李晓明的纠纷化解申请表、身份证...', @@ -135,7 +169,7 @@ // 更多字段... }, { - id: 2, + id: 4, caseNo: 'A20230101', judicNo: '证据材料', perClassName: '李晓明的纠纷化解申请表、身份证...', @@ -156,7 +190,7 @@ // 更多字段... }, { - id: 2, + id: 5, caseNo: 'A20230101', judicNo: '证据材料', perClassName: '李晓明的纠纷化解申请表、身份证...', @@ -177,7 +211,7 @@ // 更多字段... }, { - id: 2, + id: 6, caseNo: 'A20230101', judicNo: '证据材料', perClassName: '李晓明的纠纷化解申请表、身份证...', @@ -198,7 +232,7 @@ // 更多字段... }, { - id: 2, + id: 7, caseNo: 'A20230101', judicNo: '证据材料', perClassName: '李晓明的纠纷化解申请表、身份证...', @@ -219,7 +253,7 @@ // 更多字段... }, { - id: 2, + id: 8, caseNo: 'A20230101', judicNo: '证据材料', perClassName: '李晓明的纠纷化解申请表、身份证...', @@ -240,7 +274,7 @@ // 更多字段... }, { - id: 2, + id: 9, caseNo: 'A20230101', judicNo: '证据材料', perClassName: '李晓明的纠纷化解申请表、身份证...', @@ -261,7 +295,7 @@ // 更多字段... }, { - id: 2, + id: 10, caseNo: 'A20230101', judicNo: '证据材料', perClassName: '李晓明的纠纷化解申请表、身份证...', @@ -283,111 +317,465 @@ }, // 更多数据... - ] - ) + ]) + + const [columnType, setColumnType] = useState([ + { + title: '流转时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', + width: 100, + }, + { + title: '分派时限', + dataIndex: 'timeLimit', + key: 'timeLimit', + width: 60, + }, + { + title: '事项等级', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 180, + }, + { + title: '事项来源', + dataIndex: 'caseSource', + key: 'caseSource', + width: 180, + }, + { + title: '事项类型', + dataIndex: 'caseType', + key: 'caseType', + width: 180, + }, + { + title: '申请方', + dataIndex: 'plaintiffs', + key: 'plaintiffs', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'defendants', + key: 'defendants', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space style={{ color: '#1A6FB8' }}> + <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${record.ownerId}&caseId=${record.caseId}`)} style={{ cursor: 'pointer' }}>详情</div> + <div onClick={() => navigate(`/mediate/visit/eventFlow?caseTaskId=${record.ownerId}&caseId=${record.caseId}`)} style={{ cursor: 'pointer' }}>处理</div> + </Space> + ), + }, + ]) // 列配置 - const [fakeColumns, setFakeColumns] = useState([ + const fakeColumns3 = [ { - title: tabActivekey === '5' ? '回退时间' : tabActivekey === '6' ? '督办时间' : '流转时间', - dataIndex: 'caseNo', - key: 'caseNo', + title: '流转时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', 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', + dataIndex: 'timeLimit', + key: 'timeLimit', width: 60, }, { title: '事项等级', - dataIndex: 'matterLevel', - key: 'matterLevel', + dataIndex: 'caseGrade', + key: 'caseGrade', width: 180, - render: (text) => ( - <> - {text}份 - </> - ), }, { title: '事项来源', - dataIndex: 'matterSource', - key: 'matterSource', + dataIndex: 'caseSource', + key: 'caseSource', 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', + dataIndex: 'caseType', + key: 'caseType', width: 180, }, { title: '申请方', - dataIndex: 'applicant', - key: 'applicant', + dataIndex: 'plaintiffs', + key: 'plaintiffs', width: 180, }, { title: '被申请方', - dataIndex: 'respondent', - key: 'respondent', + dataIndex: 'defendants', + key: 'defendants', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space style={{ color: '#1A6FB8' }}> + <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>详情</div> + <div onClick={() => navigate(`/mediate/visit/eventFlow?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>处理</div> + </Space> + ), + }, + ]; + const fakeColumns3Info = [ + { + title: '流转时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', + width: 100, + render: (text, record, index) => <span>{index + 1}</span>, + }, + { + title: '分派时限', + dataIndex: 'timeLimit', + key: 'timeLimit', + width: 60, + }, + { + title: '事项等级', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 180, + }, + { + title: '事项来源', + dataIndex: 'caseSource', + key: 'caseSource', + width: 180, + }, + { + title: '事项类型', + dataIndex: 'caseType', + key: 'caseType', + width: 180, + }, + { + title: '申请方', + dataIndex: 'plaintiffs', + key: 'plaintiffs', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'defendants', + key: 'defendants', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space style={{ color: '#1A6FB8' }}> + <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>详情</div> + </Space> + ), + }, + ]; + const fakeColumns1 = [ + { + title: '流转时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', + width: 100, + render: (text, record, index) => <span>{index + 1}</span>, + }, + { + title: '签收时限', + dataIndex: 'timeLimit', + key: 'timeLimit', + width: 60, + }, + { + title: '事项等级', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 180, + }, + { + title: '事项来源', + dataIndex: 'caseSource', + key: 'caseSource', + width: 180, + }, + { + title: '事项类型', + dataIndex: 'caseType', + key: 'caseType', + width: 180, + }, + { + title: '申请方', + dataIndex: 'plaintiffs', + key: 'plaintiffs', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'defendants', + key: 'defendants', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space style={{ color: '#1A6FB8' }}> + <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>详情</div> + <div onClick={() => handleSign(record.caseId, record.ownerId)}>签收</div> + </Space> + ), + }, + ]; + const fakeColumns1Info = [ + { + title: '流转时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', + width: 100, + render: (text, record, index) => <span>{index + 1}</span>, + }, + { + title: '签收时限', + dataIndex: 'timeLimit', + key: 'timeLimit', + width: 60, + }, + { + title: '事项等级', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 180, + }, + { + title: '事项来源', + dataIndex: 'caseSource', + key: 'caseSource', + width: 180, + }, + { + title: '事项类型', + dataIndex: 'caseType', + key: 'caseType', + width: 180, + }, + { + title: '申请方', + dataIndex: 'plaintiffs', + key: 'plaintiffs', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'defendants', + key: 'defendants', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space style={{ color: '#1A6FB8' }}> + <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>详情</div> + <div>签收</div> + </Space> + ), + }, + ]; + const fakeColumns2 = [ + { + title: '流转时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', + width: 100, + }, + { + title: '受理时限', + dataIndex: 'timeLimit', + key: 'timeLimit', + width: 60, + }, + { + title: '事项等级', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 180, + }, + { + title: '事项来源', + dataIndex: 'caseSource', + key: 'caseSource', + width: 180, + }, + { + title: '事项类型', + dataIndex: 'caseType', + key: 'caseType', + width: 180, + }, + { + title: '申请方', + dataIndex: 'plaintiffs', + key: 'plaintiffs', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'defendants', + key: 'defendants', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space style={{ color: '#1A6FB8' }}> + <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>详情</div> + <div onClick={() => navigate(`/mediate/visit/eventFlow?caseTaskId=${record.ownerId}&caseId=${record.caseId}`)} style={{ cursor: 'pointer' }}>处理</div> + </Space> + ), + }, + ]; + const fakeColumns2Info = [ + { + title: '流转时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', + width: 100, + }, + { + title: '受理时限', + dataIndex: 'timeLimit', + key: 'timeLimit', + width: 60, + }, + { + title: '事项等级', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 180, + }, + { + title: '事项来源', + dataIndex: 'caseSource', + key: 'caseSource', + width: 180, + }, + { + title: '事项类型', + dataIndex: 'caseType', + key: 'caseType', + width: 180, + }, + { + title: '申请方', + dataIndex: 'plaintiffs', + key: 'plaintiffs', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'defendants', + key: 'defendants', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space style={{ color: '#1A6FB8' }}> + <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>详情</div> + <div onClick={() => navigate(`/mediate/visit/eventFlow?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>处理</div> + </Space> + ), + }, + ]; + + const [column, setColumn] = useState([ + { + title: '流转时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', + width: 100, + }, + { + title: '已办天数', + dataIndex: 'processingDays', + key: 'processingDays', + width: 100, + }, + { + title: '事项等级', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 100, + }, + { + title: '事项来源', + dataIndex: 'caseSource', + key: 'caseSource', + width: 100, + }, + { + title: '事项类型', + dataIndex: 'caseType', + key: 'caseType', + width: 100, + }, + { + title: '承办部门', + dataIndex: 'organizingUnit', + key: 'organizingUnit', + width: 180, + }, + { + title: '配合部门', + dataIndex: 'cooperatingUnit', + key: 'cooperatingUnit', + width: 180, + }, + { + title: '经办人', + dataIndex: 'manager', + key: 'manager', + width: 180, + }, + { + title: '申请方', + dataIndex: 'plaintiffs', + key: 'plaintiffs', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'defendants', + key: 'defendants', width: 180, }, { @@ -397,28 +785,287 @@ width: 180, render: (text, record) => ( <Space> - <div>详情</div> - <div>处理</div> + <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer', color: '#1A6FB8' }}>详情</div> + <div onClick={() => navigate(`/mediate/visit/handleFeedback?caseTaskId=${record.ownerId}&caseId=${record.caseId}`)} style={{ cursor: 'pointer', color: '#1A6FB8' }}>处理</div> </Space> ), }, - ]); + ]) + + const [backColumn, setBackColumn] = useState([ + { + title: '回退时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', + width: 100, + }, + { + title: '回退部门', + dataIndex: 'backUnit', + key: 'backUnit', + width: 60, + }, + { + title: '回退理由', + dataIndex: 'reason', + key: 'reason', + width: 180, + }, + { + title: '事项等级', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 180, + }, + { + title: '事项来源', + dataIndex: 'caseSource', + key: 'caseSource', + width: 180, + }, + { + title: '事项类型', + dataIndex: 'caseType', + key: 'caseType', + width: 180, + }, + { + title: '申请方', + dataIndex: 'plaintiffs', + key: 'plaintiffs', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'defendants', + key: 'defendants', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space> + <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>详情</div> + {/* <div onClick={() => navigate(`/mediate/visit/handleFeedback?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>处理</div> */} + {(direction === '回退审核' || direction === '上报审核') && + <div onClick={() => navigate(`/mediate/visit/eventFlow?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>处理</div> + + } + {(direction === '结案申请审核' || direction === '联合处置审核') && + <div onClick={() => navigate(`/mediate/visit/handleFeedback?caseTaskId=${'1'}&caseId=${'1'}`)} style={{ cursor: 'pointer' }}>处理</div> + } + </Space> + ), + }, + ]) + + const [mangeColumn, setMangeColumn] = useState([ + { + title: '督办时间', + dataIndex: 'turnaroundTime', + key: 'turnaroundTime', + width: 100, + render: (text, record, index) => <span>{index + 1}</span>, + }, + { + title: '回复时限', + dataIndex: 'timeLimit', + key: 'timeLimit', + width: 60, + }, + { + title: '督办部门', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 180, + }, + { + title: '督办意见', + dataIndex: 'opinion', + key: 'opinion', + width: 180, + }, + { + title: '事项等级', + dataIndex: 'caseGrade', + key: 'caseGrade', + width: 180, + }, + { + title: '事项来源', + dataIndex: 'caseSource', + key: 'caseSource', + width: 180, + }, + { + title: '事项类型', + dataIndex: 'caseType', + key: 'caseType', + width: 180, + }, + { + title: '申请方', + dataIndex: 'plaintiffs', + key: 'plaintiffs', + width: 180, + }, + { + title: '被申请方', + dataIndex: 'defendants', + key: 'defendants', + width: 180, + }, + { + title: '操作', + dataIndex: 'actions', + key: 'actions', + width: 180, + render: (text, record) => ( + <Space> + <div>回复</div> + <div>详情</div> + </Space> + ), + }, + ]) + + const sign = async (caseId, ownerId) => { + const res = await signApi({ caseId: caseId, caseTaskId: ownerId }) + if (res.type) { + $$.infoSuccess('签收成功') + } + + } + + const handleSign = (caseId, ownerId) => { + sign(caseId, ownerId) + } + + const pageMyTaskFpNew = async () => { + const res = await pageMyTaskFpApi() + if (res.type) { + setFakeData1(res.data?.content) + } + } + + const pageMyTaskFp = async (type) => { + if (type === '1') { + const res = await pageMyTaskFpApi() + if (res.type) { + setFakeData1(res.data?.content) + } + } + if (type === '2') { + const res = await pageMyTaskQsApi() + if (res.type) { + setFakeData1(res.data?.content) + } + } + if (type === '3') { + const res = await pageMyTaskSlApi() + if (res.type) { + setFakeData1(res.data?.content) + } + } + if (type === '4') { + const res = await pageMyTaskBlzApi() + if (res.type) { + setFakeData1(res.data?.content) + } + } + + } + + const handleColumnType = (type) => { + console.log(type, 'type') + if (type === '2') { + if (tabActivekey === '1') { + setColumnType(fakeColumns3Info) + } + if (tabActivekey === '2') { + setColumnType(fakeColumns1Info) + } + if (tabActivekey === '3') { + setColumnType(fakeColumns2Info) + } + } + if (type === '1') { + if (tabActivekey === '1') { + setColumnType(fakeColumns3) + } + } + + } + + + const tabActive = (key) => { - setTabActivekey(key) + console.log(key, 'key') + setTabActivekey(key); + if (key === '1') { + setColumnType(fakeColumns3) + pageMyTaskFp('1') + } + if (key === '2') { + setColumnType(fakeColumns1) + pageMyTaskFp('2') + + } + if (key === '3') { + setColumnType(fakeColumns2) + pageMyTaskFp('3') + + } + if (key === '4') { + setColumnType(column) + pageMyTaskFp('4') + } + if (key === '5') { + setColumnType(backColumn) + pageMyTaskFp('5') + + } + if (key === '6') { + setColumnType(mangeColumn) + pageMyTaskFp('6') + + } } - // 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) + const pageMyTaskBl = async () => { + const res = await pageMyTaskBlApi({ page: 1, size: 10, timeStart: '', timeEnd: '', partyName: '', sortType: '', sortColmn: '' }) + if (res.type) { + console.log(res.data, 'res.data') + // setColumn(res.data) + } } + + const getCountList = async () => { + const res = await getCountListApi() + if (res.type) { + const data = res.data + setCountList(data) + } + } + + + + + + + + + + useEffect(() => { + + pageMyTaskFpNew() + // pageMyTaskBl(); + getCountList(); + }, []) @@ -443,9 +1090,9 @@ </div> </div> <div className='VisitWorkBench-middle'> - <Tabs defaultActiveTab='1'> + <Tabs defaultActiveTab='1' onChange={handleColumnType}> <TabPane - onChange={handleColumnType} + // onChange={handleColumnType} key='1' title={ <span style={{ fontSize: '15px' }}> @@ -459,11 +1106,21 @@ } > <Typography.Paragraph> + {tabActivekey === '5' && + <Radio.Group + type='button' + name='direction' + value={direction} + onChange={(e) => setDirection(e)} + style={{ marginBottom: 16 }} + options={['回退审核', '上报审核', '结案申请审核', '联合处置审核']} + ></Radio.Group> + } <TableView - columns={fakeColumns} + columns={columnType} dataSource={fakeData1} size="small" - rowKey="id" + rowKey="caseId" bordered={true} // style={{ marginBottom: '65px', marginTop: '-16px' }} rowSelection={{ @@ -486,21 +1143,46 @@ } > <Typography.Paragraph> + <TableView + columns={columnType} + dataSource={fakeData1} + size="small" + rowKey="id" + bordered={true} + // style={{ marginBottom: '65px', marginTop: '-16px' }} + rowSelection={{ + type: 'Checkbox' + }} + /> </Typography.Paragraph> </TabPane> + {tabActivekey === '4' && + <TabPane + key='3' + title={ + <span style={{ fontSize: '15px' }}> + 已结案 + </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 style={{ display: 'flex', justifyContent: 'space-evenly' }}> + <div className='bottomTab1'> + <div className='VisitWorkBench-bottom-title' onClick={() => navigate(`/mediate/visit`)} style={{ color: '#206BCD' }}>大厅来访</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 className='bottomTab2'> + <div className='VisitWorkBench-bottom-title' style={{ color: '#D46B08' }}>自行排查</div> + <img src={checkInto} alt='' className='VisitWorkBench-bottom-img' /> </div> </div> </div> diff --git a/gz-customerSystem/src/views/register/index.less b/gz-customerSystem/src/views/register/index.less index 6a31642..97b121f 100644 --- a/gz-customerSystem/src/views/register/index.less +++ b/gz-customerSystem/src/views/register/index.less @@ -845,7 +845,7 @@ background: #ffffff; padding: 12px 16px 16px 16px; margin-top: 12px; - + height: 54vh; } &-bottom { @@ -855,6 +855,8 @@ &-title{ width: 140px; + font-family: DingTalk; + font-size: 22px; } &-img { @@ -869,4 +871,18 @@ display: flex; justify-content: space-between; align-items: center; +} + +.bottomTab1{ + // display: 'flex', background: linear-gradient(to right, #6a1b9a, #e040fb) + display: flex; + background: linear-gradient(to right, #E8F7FF, #9FD4FD); + padding: 12px 16px 16px 16px; +} + +.bottomTab2{ + display: flex; + background: linear-gradient(to right, #FFF7E6, #FFD591); + padding: 12px 16px 16px 16px; + } \ 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 84e9d1e..f1cc458 100644 --- a/gz-customerSystem/src/views/register/matterDetail/FileTable.jsx +++ b/gz-customerSystem/src/views/register/matterDetail/FileTable.jsx @@ -2,7 +2,7 @@ import * as $$ from '@/utils/utility'; import ArcoUpload from '@/components/ArcoUpload'; import NewFileCheck from './NewFileCheck'; -import { Row, Col, Button } from 'antd'; +import { Row, Col, Button, Typography, Space } from 'antd'; import { Form, Modal } from '@arco-design/web-react'; import { applyMaterials, @@ -12,19 +12,17 @@ } from '@/assets/images'; import { CheckOutlined, } from '@ant-design/icons'; import TableView from '@/components/TableView'; +import downloadFile from "@/utils/download" +const { Link, Text } = Typography; const appUrl = $$.appUrl; function delFile(id) { return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } }); } -function listIdTypeInfoApi(data) { - return $$.ax.request({ url: `fileInfo/listIdTypeInfo`, type: 'post', service: 'sys', data }); -} - function deleteFileByIdApi(data) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data }); + return $$.ax.request({ url: `fileInfo/deleteFileByIds`, type: 'delete', service: 'sys', data }); } //表格数据 @@ -35,6 +33,7 @@ size: 0, fileNames: "-", updateTime: '', + id: 1, }, { ownerType: "22_00018-102", @@ -42,16 +41,24 @@ size: 0, fileNames: "-", updateTime: '', + id: 2, }, ] + +/** + * mainId*,//就是caseId,事件id + * fileInfoList*, //文件列表 + * isReview,//是否查看,查看的话就不能删除上传,只能查看下载 + */ export default function FileTable(props) { const formRef = useRef(); const [sourceType, setSourceType] = useState(); const [filesCheck, setFilesCheck] = useState(false); - const [upload, setUpLoad] = useState(false); + const [uploadVisible, setUpLoadVisible] = useState(false); const [tableData, setTableData] = useState(staticTableData); const [fileMap, setFileMap] = useState({}); + const [fileInfoList, setFileInfoList] = useState([]); // 列配置 const fakeColumns = [ @@ -93,17 +100,47 @@ title: '操作', dataIndex: 'perClassName', key: 'perClassName', - width: 200, + width: props.isReview ? 60 : 125, + fixed: 'right', render: (text, record) => ( - <div style={{ display: 'flex', color: '#1A6FB8', gap: '16px' }}> - <div onClick={() => setFilesCheck(true)}>查看</div> - <div>删除</div> - <div>下载</div> - <div onClick={() => { + <Space size="middle"> + <Link onClick={() => { setSourceType(record.ownerType) - setUpLoad(true) - }}>上传</div> - </div> + setFilesCheck(true) + }}> + 查看 + </Link> + {!props.isReview && <Link onClick={() => { + if (record.fileInfoList && record.fileInfoList.length != 0) { + let ids = record.fileInfoList?.map(item => item.id).join(',') + handleDelete(ids) + } else { + $$.info({ type: 'warning', content: '还没上传关于该材料的文件!' }); + } + }}> + 删除 + </Link>} + <Link onClick={() => { + if (record.fileInfoList && record.fileInfoList.length != 0) { + let ids = record.fileInfoList?.map(item => item.id).join(',') + handleDownlod(ids) + } else { + $$.info({ type: 'warning', content: '还没上传关于该材料的文件!' }); + } + }}> + 下载 + </Link> + {!props.isReview && <Link onClick={() => { + setSourceType(record.ownerType) + setUpLoadVisible(true) + setFileInfoList(record.fileInfoList) + setTimeout(() => { + formRef.current.setFieldValue('file', record.fileInfoList) + }, 0) + }}> + 上传 + </Link>} + </Space> ) }, // 更多列配置... @@ -114,9 +151,53 @@ ] useEffect(() => { - console.log(props.fileInfoList); - },[props.fileInfoList]) + if (props.fileInfoList && props.fileInfoList.length != 0) { + //证明材料 + const applyFile = props.fileInfoList.find(item => item.ownerType == "22_00018-101") + //证据材料 + const evidenceFile = props.fileInfoList.find(item => item.ownerType == "22_00018-102") + setFileMap({ + '22_00018-101': applyFile?.fileList || [], + '22_00018-102': evidenceFile?.fileList || [] + }) + const newList = tableData.map(item => { + if (item.ownerType == '22_00018-101' && applyFile) { + return { + ...item, + size: applyFile.fileList.length, + fileNames: applyFile.fileList?.map(item => item.trueName).join(','), + updateTime: $$.timeFormat(applyFile.fileList[applyFile.fileList.length - 1].updateTime), + fileInfoList: applyFile.fileList.map(item => { + return { + ...item, + uid: item.id, + name: item.trueName + } + }) + } + } + if (item.ownerType == '22_00018-102' && evidenceFile) { + return { + ...item, + size: evidenceFile.fileList.length, + fileNames: evidenceFile.fileList?.map(item => item.trueName).join(','), + updateTime: $$.timeFormat(evidenceFile.fileList[evidenceFile.fileList.length - 1].updateTime), + fileInfoList: evidenceFile.fileList.map(item => { + return { + ...item, + uid: item.id, + name: item.trueName + } + }) + } + } + return item + }) + setTableData(newList) + } + }, [props.fileInfoList]) + //上传弹窗判断用哪种种图标 const personIconType = (v) => { switch (v) { case '22_00018-101': @@ -135,24 +216,34 @@ } } + //上传弹窗完成后的事件 const handleUpload = () => { const newList = tableData.map(item => { if (item.ownerType == sourceType) { const data = fileMap[sourceType] + console.log(data); return { ...item, size: data.length, - fileNames: data.map(item => item.name).join(','), - updateTime: $$.timeFormat(data[data.length - 1].response.data[0].updateTime) + fileNames: data.map(item => item.trueName).join(','), + updateTime: $$.timeFormat(data[data.length - 1].updateTime), + fileInfoList: data.map(item => { + return { + ...item, + name: item.trueName, + uid: item.id, + } + }), } } else { return item } }) setTableData(newList) - setUpLoad(false); + setUpLoadVisible(false); }; + //根据sourceType生成组件 const formType = (type) => { if (type === '22_00018-101') { //申请材料 @@ -165,11 +256,21 @@ }} field='file' label='' - // editData={props.editData} + editData={{ + file: fileInfoList + }} handleDelFile={handleDelFile} onFileListChange={(v) => { + let newList = v?.map(item => { + if (item.response) { + return item.response.data[0] + } else { + return item + } + }) setFileMap({ - '22_00018-101': v + ...fileMap, + '22_00018-101': newList }) }} /> @@ -187,22 +288,50 @@ params={{ action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&&ownerId=${props.mainId}&ownerType=22_00018-102`, }} - field='file1' + field='file' label='' - // editData={props.editData} + editData={{ + file: fileInfoList + }} handleDelFile={handleDelFile} onFileListChange={(v) => { + let newList = v?.map(item => { + if (item.response) { + return item.response.data[0] + } else { + return item + } + }) setFileMap({ - '22_00018-102': v + ...fileMap, + '22_00018-102': newList }) }} - /> {fileMap[sourceType]?.length > 0 && <div style={{ position: 'absolute', top: '198px', left: '16px', color: '#86909C' }}>证据材料累计上传:<span style={{ color: '#1A6FB8' }}>{fileMap[sourceType]?.length}</span></div>} </Col> </> ) } + } + + //删除 + const handleDelete = (ids) => { + Modal.confirm({ + title: '删除确认', + content: '确认全部删除该材料?', + onOk: async () => { + const res = await deleteFileByIdApi({ ids }) + if (res.type) { + $$.infoSuccess({ content: '删除成功!' }); + } + }, + }); + } + + //下载 + const handleDownlod = async (ids) => { + await downloadFile(`${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/down/batch`, { ids }) } return ( @@ -214,14 +343,19 @@ rowKey="ownerType" bordered={true} style={{ marginBottom: '65px' }} + scroll={{ x: 1300 }} /> <Modal style={{ width: '512px' }} - visible={upload} - onCancel={() => setUpLoad(false)} + visible={uploadVisible} + onCancel={() => setUpLoadVisible(false)} footer={null} title='上传材料' centered + mountOnEnter={false} + unmountOnExit={true} + maskClosable={false} + focusLock={false} > <div style={{ paddingTop: '8px' }}> <Row gutter={[30, 24]}> @@ -271,7 +405,7 @@ maskClosable={false} > <div style={{ marginTop: '-16px' }}> - <NewFileCheck /> + <NewFileCheck menuList={tableData} sourceType={sourceType} /> </div> </Modal> </Fragment> diff --git a/gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx b/gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx index a65d6a0..ebabd3c 100644 --- a/gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx +++ b/gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx @@ -1,14 +1,42 @@ -import React, { useState, useEffect, useRef } from 'react'; +import React, { useState, useEffect, useRef, Fragment } from 'react'; import { Row, Col, Space } from 'antd'; -import { Select, DatePicker, Form, Button } from '@arco-design/web-react'; +import { Select, DatePicker, Form, Button, Menu } from '@arco-design/web-react'; import * as $$ from '@/utils/utility'; const FormItem = Form.Item; +const MenuItem = Menu.Item; +const SubMenu = Menu.SubMenu; const appUrl = $$.appUrl; +const formItemLayout = { + labelCol: { + span: 8, + }, + wrapperCol: { + span: 16, + }, +}; const NewFileCheck = (props) => { - const formRef = useRef() + const formRef = useRef(); + const [fileUrl, setFileUrl] = useState('') + const [itemData, setItemData] = useState(null) + + const peopleTypeMap = { + 1: '工作人员', + 2: '当事人' + } + + useEffect(() => { + console.log(props.menuList, props.sourceType); + }, []) + + //点击菜单 + const clickItem = (data) => { + console.log(data); + setItemData(data) + setFileUrl(`${appUrl.fileUrl}/${appUrl.sys}${data.showUrl}`) + } return ( <nav className="filesCheck-nav" style={{ borderRight: '1px solid transparent' }}> @@ -17,8 +45,7 @@ layout='horizontal' style={{ marginTop: '24px', marginBottom: '20px' }} scrollToFirstError={true} - initialValues={{ - }}//默认值 + {...formItemLayout} > <Row gutter={24} style={{ marginRight: '0px' }}> <Col span={7}> @@ -79,17 +106,50 @@ <Col span={3}> <Space> <Button size="middle " type='primary'>查询</Button> - <Button size="middle ">查询</Button> + <Button size="middle ">重置</Button> </Space> </Col> </Row> </Form> - <div style={{ display: 'flex' }}> - <div style={{ width: '200px' }}> + <div style={{ display: 'flex', height: '550px' }}> + <div style={{ width: '256px' }}> + <Menu + style={{ width: '100%', height: '100%' }} + > + {props.menuList?.map(item => { + return <SubMenu + key={item.id} + title={item.ownerTypeName + `(${item.fileInfoList && item.fileInfoList.length || 0})`} + > + {item.fileInfoList?.map(res => { + return <MenuItem key={res.id} onClick={() => { clickItem(res) }}>{res.trueName}</MenuItem> + })} + </SubMenu> + })} + </Menu> </div> <div style={{ flex: 1 }}> + { + itemData ? <Fragment> + <div style={{ background: '#e8f3ff', color: '#1A6FB8', padding: '5px 10px', marginBottom: '16px' }}> + <span>材料名称:{itemData.trueName}</span> | + <span>上传时间:{itemData.updateTime}</span> | + <span>上传人:{itemData.uploaderName} {itemData.uploaderType && <span>({peopleTypeMap[itemData.uploaderType]})</span>}</span> + </div> + <div style={{ width: '100%', height: '470px' }}> + { + itemData.suffix === 'pdf' ? + <embed src={fileUrl} type="application/pdf" width="100%" height="100%"></embed> + : + <img src={fileUrl} alt="" style={{ width: '100%', height: '100%' }} /> + } + </div> + </Fragment> : <Fragment> + <div style={{ padding: '100px 0' }}>{$$.MyEmpty()}</div> + </Fragment> + } </div> </div> </nav> diff --git a/gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx b/gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx index a0bc307..13869c8 100644 --- a/gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx +++ b/gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx @@ -2,13 +2,17 @@ import NewPage from '@/components/NewPage'; import { Row, Col, Space } from 'antd'; import { Steps, Tabs, Typography, Rate, Button } from '@arco-design/web-react'; -import { apply } from '@/assets/images'; +import { apply,floating } from '@/assets/images'; import { result } from '@/assets/images/icon'; import * as $$ from '@/utils/utility'; -import { ApplyDialog, AgentDialog, Respondent } from '../visit/component/previewTable'; import TableView from '../../../components/TableView'; import { register, fold, down, empty, link } from '@/assets/images'; import ProgressStep from '@/components/ProgressStep/VisitStep'; +import { ApplyDialog, AgentDialog, Respondent, Company } from '../visit/component/previewTable'; +import HandleRecord from './HandleRecord'; +import { useParams } from 'react-router-dom'; +import ApplyInfo from './ApplyInfo' + const Step = Steps.Step; const TabPane = Tabs.TabPane; @@ -21,15 +25,27 @@ return $$.ax.request({ url: `caseEvaluate/getByCaseId?caseId=${caseId}`, type: 'get', service: 'mediate' }); } +function getCaseInfoApi(id) { + return $$.ax.request({ url: 'caseInfo/getCaseInfo?id=' + id, type: 'get', service: 'mediate' }); +} + +function listFeedbackApi(id) { + return $$.ax.request({ url: `caseFeedback/listFeedback?id=` + id, type: 'get', service: 'mediate' }); +} + +function getListCaseFlow(data) { + return $$.ax.request({ url: `caseTask/listCaseFlow`, type: 'get', service: 'mediate', data }); +} + const FileMessage = (props) => { - + const routeData = useParams(); const [tabsActive, setTabsActive] = useState('1'); const [current, setCurrent] = useState(7); const [grade, setGrade] = useState(0); + const [caseInfo, setCaseInfo] = useState({}) const [TransactResult, setTransactResult] = useState({}) const [filesCheck, setFilesCheck] = useState(false); - const [infoData, setInfoData] = useState({}); const [tabsList, setTabList] = useState([ { img: result, @@ -38,13 +54,19 @@ isNeedStep: true }, { + img: floating, + label: '流转督办', + key: '2', + }, + { img: apply, label: '申请记录', - key: '2', - isNeedStep: true,//加上这个就有进度条 + key: '3', }, ]) const [selectedTab, setSelectedTab] = useState('1'); // 默认选中第一个 tab + const [list, setList] = useState([]) + const [progressData, setProgressData] = useState({}) const tabs = [ @@ -120,59 +142,29 @@ console.log(res, 'resrs') } - const applyDialog = [ - { - trueName: '李四', - perClassName: '高级', - phone: '13700137000', - sex: '女', - certiTypeName: '护照', - certiNo: 'G12345678', - nationName: '满', - addr: '上海市浦东新区某公寓2号楼2单元202室', - placeAddr: '上海市黄浦区某路3号', - extreme: '否', - workUnit: '上海某金融公司', - person: '/path/to/anotherPerson.jpg', // 这应该是图片的实际路径 - link: '/path/to/anotherLink.png', // 这应该是链接图标的实际路径 + const getCaseInfo = async () => { + const res = await getCaseInfoApi('24083010062110001') + if (res.type) { + setCaseInfo(res.data) } - // 可以根据需要添加更多的对象来模拟更多条目的数据 - ]; + } - const agentDialog = [ - { - trueName: '王五', - perClassName: '自然人', - phone: '13600136000', - sex: '男', - certiTypeName: '身份证', - certiNo: '110101199501012345', - nationName: '汉', - addr: '广州市天河区某大厦A座501室', - placeAddr: '广州市越秀区某街4号', - extreme: '否', - workUnit: '广州某贸易公司', - agentRelateName: '配偶', - agentTypeName: '法定代理人', - perTypeName: '成年人', - person: '/path/to/person.jpg', // 应该是图片的实际路径 - link: '/path/to/link.png', // 应该是链接图标的实际路径 - }, - ]; + const listFeedback = async (id) => { + const res = await listFeedbackApi(id) + if (res.type) { + let data = res.data.caseFeedbackList + setList(data) + } + } - const respondent = [ - { - orgaType: '广东好又多贸易有限公司', - perClassName: '企业法人', - phone: '020-12345678', - address: '广州市天河区珠江新城花城大道66号', - companyType: '有限责任公司', - legalPerson: '江照月', - creditCode: '914401011234567890', - president: '广州市天河区珠江新城花城大道66号A座20层', - link: '/path/to/link.png', // 应该是链接图标的实际路径 - }, - ]; + const getData = async () => { + const res = await getListCaseFlow({ + caseId: routeData.caseId + }) + if (res.type) { + setProgressData(res.data) + } + } const fakeColumns = [ { @@ -350,9 +342,21 @@ useEffect(() => { getByCaseId(); getTransactResult(); + getCaseInfo(); + listFeedback('24083010062110001'); + getData() }, []) + const applyData = caseInfo?.personList?.filter(item => item.perTypeName === "申请方当事人" && item.perClassName === "自然人"); + const agentData = caseInfo?.personList?.filter(item => item.perTypeName === "申请方代理人"); + const company = caseInfo?.personList?.filter(item => item.perTypeName === "申请方当事人" && item.perClassName === "非法人组织"); + const respondentData = caseInfo?.personList?.filter(item => item.perTypeName === "申请方当事人" && item.perClassName === "法人"); + + const applyData1 = caseInfo?.personList?.filter(item => item.perTypeName === "被申请方当事人" && item.perClassName === "自然人"); + const agentData1 = caseInfo?.personList?.filter(item => item.perTypeName === "被申请方代理人"); + const company1 = caseInfo?.personList?.filter(item => item.perTypeName === "被申请方当事人" && item.perClassName === "非法人组织"); + const respondentData1 = caseInfo?.personList?.filter(item => item.perTypeName === "被申请方当事人" && item.perClassName === "法人"); @@ -399,22 +403,52 @@ <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>当事人信息</h4> </Space> </Col> - <div style={{ marginBottom: '8px' }}>申请方</div> <div className="line-container" style={{ marginBottom: '20px' }}> <div className="line left-line"></div> <div className="line middle-line"></div> <div className="line right-line"></div> </div> - <ApplyDialog applyDialog={applyDialog} /> - <AgentDialog agentDialog={agentDialog} /> + {/* ApplyDialog 只有在 applyData 存在且不为空时才渲染 */} + {applyData && applyData.length > 0 ? ( + <ApplyDialog applyDialog={applyData} /> + ) : null} + + {/* AgentDialog 只有在 agentData 存在且不为空时才渲染 */} + {agentData && agentData.length > 0 ? ( + <AgentDialog agentDialog={agentData} /> + ) : null} + + {/* Respondent 只有在 respondentData 存在且不为空时才渲染 */} + {respondentData && respondentData.length > 0 ? ( + <Respondent respondent={respondentData} /> + ) : null} + + {company && company.length > 0 ? ( + <Company company={company} /> + ) : null} + <div style={{ marginBottom: '8px' }}>被申请方</div> <div className="line-container" style={{ marginBottom: '20px' }}> <div className="line left-line"></div> <div className="line middle-line"></div> <div className="line right-line"></div> </div> - <Respondent respondent={respondent} /> + {applyData1 && applyData1.length > 0 ? ( + <ApplyDialog applyDialog={applyData1} /> + ) : null} + + {agentData1 && agentData1.length > 0 ? ( + <AgentDialog agentDialog={agentData1} /> + ) : null} + + {respondentData1 && respondentData1.length > 0 ? ( + <Respondent respondent={respondentData1} /> + ) : null} + + {company1 && company1.length > 0 ? ( + <Company company={company1} /> + ) : null} <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '4px' }}> <Space size='small'> <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>纠纷基本情况</h5> @@ -423,68 +457,68 @@ <Row gutter={[16, 16]}> <Col span={8}> <div><div className="title-text">事项状态</div></div> - <div style={{ color: '#1A6FB8' }}>{infoData?.statusName || '-'}</div> + <div style={{ color: '#1A6FB8' }}>{caseInfo?.statusName || '-'}</div> </Col> <Col span={16}> <div><div className="title-text">事项编号</div></div> - <div>{infoData?.caseRef || '-'}</div> + <div>{caseInfo?.caseRef || '-'}</div> </Col> {/*事项等级分为三级,颜色需要做判断*/} <Col span={8}> <div className="title"><div className="title-text">事项等级</div></div> - <div style={{ display: 'flex' }}><div style={{ backgroundColor: '#00B42A', marginRight: '4px', borderRadius: '4px' }}><div style={{ color: '#FFFFFF', padding: '0px 6px' }}>{infoData.caseLevel || '-'}</div></div>级</div> + <div style={{ display: 'flex' }}><div style={{ backgroundColor: '#00B42A', marginRight: '4px', borderRadius: '4px' }}><div style={{ color: '#FFFFFF', padding: '0px 6px' }}>{caseInfo?.caseLevel || '-'}</div></div>级</div> </Col> <Col span={8}> <div><div className="title-text">来访时间</div></div> - <div>{infoData.visitTime || '-'}</div> + <div>{caseInfo?.visitTime || '-'}</div> </Col> <Col span={8}> <div ><div className="title-text">来访人数(人)</div></div> - <div>{infoData.visitPeopleNum || '-'}</div> + <div>{caseInfo?.visitPeopleNum || '-'}</div> </Col> <Col span={8}> <div ><div className="title-text">纠纷类型</div></div> - <div>{infoData.caseType || '-'}</div> + <div>{caseInfo?.caseType || '-'}</div> </Col> <Col span={8}> <div ><div className="title-text">纠纷发生时间</div></div> - <div>{infoData.occurTime || '-'}</div> + <div>{caseInfo?.occurTime || '-'}</div> </Col> <Col span={8}> <div ><div className="title-text">纠纷发生地点</div></div> - <div>{infoData.addr || '-'}</div> + <div>{caseInfo?.addr || '-'}</div> </Col> <Col span={8}> <div ><div className="title-text">问题属地</div></div> - <div>{infoData.questionName || '-'}</div> + <div>{caseInfo?.questionName || '-'}</div> </Col> <Col span={8}> <div ><div className="title-text">涉及人数(人)</div></div> - <div>{infoData.peopleNum || '-'}</div> + <div>{caseInfo?.peopleNum || '-'}</div> </Col> <Col span={8}> <div ><div className="title-text">涉及金额(元)</div></div> - <div>{$$.thousands(infoData.amount) || '-'}</div> + <div>{$$.thousands(caseInfo?.amount) || '-'}</div> </Col> <Col span={8}> <div ><div className="title-text">事项来源</div></div> - <div>{infoData.canalName || '-'}</div> + <div>{caseInfo?.canalName || '-'}</div> </Col> <Col span={16}> <div ><div className="title-text">来访形式</div></div> - <div>{infoData.visitWayName || '-'}</div> + <div>{caseInfo?.visitWayName || '-'}</div> </Col> <Col span={24}> <div className="title"><div className="title-text">事项概况</div></div> - <div>{infoData.caseDes || '-'}</div> + <div>{caseInfo?.caseDes || '-'}</div> </Col> <Col span={24}> <div className="title"><div className="title-text">事项申请</div></div> - <div>{infoData.caseClaim || '-'}</div> + <div>{caseInfo?.caseClaim || '-'}</div> </Col> <Col span={16}> <div className="title"><div className="title-text">是否重大矛盾纠纷</div></div> - <div>{infoData.majorStatus === '0' ? '否' : '是'}</div> + <div>{caseInfo?.majorStatus === '0' ? '否' : '是'}</div> </Col> </Row> <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '16px', marginTop: '20px' }}> @@ -548,7 +582,9 @@ <div className='gap'></div> <Col span={24} style={{ marginTop: '12px' }}> <div style={{ color: 'rgb(134, 144, 156)' }}>办理记录</div> - <div> + <HandleRecord isReview={false} data={list} /> + + {/* <div> {records.map(record => ( <div key={record.id} className='container-bottom-left-record'> <div className='container-bottom-left-record-top'> @@ -574,7 +610,7 @@ </div> </div> ))} - </div> + </div> */} </Col> <div className='gap'></div> <div style={{ marginLeft: '-16px' }}> @@ -668,14 +704,14 @@ <div className="title"> <div className="title-text">登记机构</div> </div> - <div>天河区棠下街道综治中心</div> + <div>{caseInfo?.inputUnitName || '-'}</div> </Col> <Col span={8}> <div className="title"> <div className="title-text">登记人</div> </div> <div> - 李晓明 + {caseInfo.inputUserName} <img src={register} alt='' style={{ width: '14px', height: '14px', marginLeft: '8px', marginTop: '4px' }} /> </div> </Col> @@ -683,7 +719,7 @@ <div className="title"> <div className="title-text">登记时间</div> </div> - <div>2024-7-8 10:00</div> + <div>{caseInfo?.visitTime || '-'}</div> </Col> </Row> </div> @@ -697,7 +733,10 @@ } { tabsActive === '2' && - <></> + <ProgressStep progressData={progressData} /> + } + {tabsActive === '3' && + <ApplyInfo /> } </TabPane> })} diff --git a/gz-customerSystem/src/views/register/matterDetail/index.jsx b/gz-customerSystem/src/views/register/matterDetail/index.jsx index 8690c0f..6b957bb 100644 --- a/gz-customerSystem/src/views/register/matterDetail/index.jsx +++ b/gz-customerSystem/src/views/register/matterDetail/index.jsx @@ -1,131 +1,29 @@ import React, { useState, useEffect } from 'react'; import { Row, Col, Space, Button, Switch } from 'antd'; import PersonCard from '@/components/personCard'; -import TableView from '@/components/TableView'; import * as $$ from '@/utils/utility'; -import { Typography, Steps } from '@arco-design/web-react'; -import { question, register, Matter, transfer } from '@/assets/images' +import { Typography } from '@arco-design/web-react'; +import { question, register } from '@/assets/images'; +import FileTable from "./FileTable"; function getCaseInfoApi(id) { 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([]);//当事人信息数据 - const [upload, setUpLoad] = useState(false); - const [filesCheck, setFilesCheck] = useState(false); const [infoData, setInfoData] = useState({}); - - const fakeColumns = [ - { - title: '序号', - dataIndex: 'caseNo', - key: 'caseNo', - width: 100, - render: (text, record, index) => <span>{index + 1}</span>, - }, - { - title: '材料类型', - dataIndex: 'ownerTypeName', - key: 'ownerTypeName', - width: 60, - - }, - { - title: '材料数量', - dataIndex: 'size', - key: 'size', - width: 180, - render: (text) => <span>{text}份</span>, - - }, - { - title: '材料名称', - dataIndex: 'fileNames', - key: 'fileNames', - width: 180, - - }, - { - title: '最新上传时间', - dataIndex: 'fileNames', - key: 'fileNames', - width: 180, - - }, - { - title: '操作', - dataIndex: 'perClassName', - key: 'perClassName', - width: 200, - render: (text) => ( - <div style={{ display: 'flex', color: '#1A6FB8', gap: '16px' }}> - <div onClick={() => setFilesCheck(true)}>查看</div> - <div>删除</div> - <div>下载</div> - <div onClick={() => setUpLoad(true)}>上传</div> - </div> - ) - }, - // 更多列配置... - ]; - - - const [fakeData1, setFakeData1] = useState([ - { - ownerTyp: "22_00018-101", - ownerTypeName: "申请材料", - size: '0', - ownerId: null, - ownerName: null, - perType: null, - agentStatus: null, - fileNames: "-", - fileList: [] - }, - { - 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.id) - listIdTypeInfo() - }, [props.id]) + getCaseInfo(props.caseId) + }, [props.caseId]) + //获取id const getCaseInfo = async (id) => { - const res = await getCaseInfoApi('24083010062110001') - + const res = await getCaseInfoApi(id) if (res.type) { let data = res.data const partyList = data.personList.concat(data.agentList) @@ -261,15 +159,7 @@ <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>事件材料</h5> </Space> </Col> - - <TableView - columns={fakeColumns} - dataSource={fakeData1} - size="small" - rowKey="id" - bordered={true} - style={{ marginBottom: '20px' }} - /> + <FileTable mainId={props.caseId} fileInfoList={infoData.fileInfoList} isReview={true}/> <Col span={24} className='title'> <Space size='small'> <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>登记信息</h5> @@ -293,7 +183,7 @@ <div>{infoData.createTime || '-'}</div> </Col> </Row> - {props.hasEditBtn && <Button type='primary' style={{ marginTop: '20px' }}>修改</Button>} + {/* {props.hasEditBtn && <Button type='primary' style={{ marginTop: '20px' }}>修改</Button>} */} </div> </Typography.Paragraph> diff --git a/gz-customerSystem/src/views/register/visit/component/previewTable.jsx b/gz-customerSystem/src/views/register/visit/component/previewTable.jsx index b4a700a..6ab1329 100644 --- a/gz-customerSystem/src/views/register/visit/component/previewTable.jsx +++ b/gz-customerSystem/src/views/register/visit/component/previewTable.jsx @@ -7,7 +7,7 @@ <> { applyDialog?.map((item, index) => ( - <table border="1" align="center" cellpadding="6" className="table"> + <table border="1" align="center" cellpadding="6" className="table" key={item.id}> <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">姓名</th> <td width='380'><div style={{ display: 'flex' }}><div>{item.trueName || '-'}</div><div className="title-personRemark">自然人</div></div></td> @@ -65,7 +65,7 @@ return ( <> {agentDialog?.map((item, index) => ( - <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }}> + <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }} key={item.id}> <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">姓名</th> <td width='380'><div style={{ display: 'flex' }}><div>{item.trueName || '-'}</div><div className="title-personRemark">代理人</div></div></td> @@ -129,7 +129,7 @@ return ( <> {respondent?.map((item, index) => ( - <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }}> + <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }} key={item.id}> <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">企业名称</th> <td width='380'><div style={{ display: 'flex' }}><div>{item.trueName}</div><div className="title-personRemark">{item.perClassName}</div></div></td> @@ -175,7 +175,7 @@ return ( <> {company?.map((item, index) => ( - <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }}> + <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }} key={item.id}> <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">机构名称</th> <td width='380'><div style={{ display: 'flex' }}><div>{item.trueName}</div><div className="title-personRemark">{item.perClassName}</div></div></td> diff --git a/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx b/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx index decb012..0a883e8 100644 --- a/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx +++ b/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx @@ -390,7 +390,7 @@ <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>事件材料</h4> </Space> </Col> - <FileTable mainId={props.mainId} fileInfoList={props.fileInfoList}/> + <FileTable mainId={props.mainId} fileInfoList={props.fileInfoList} isReview={false}/> <DocumentScanner visible={scanFile} -- Gitblit v1.8.0