From 544148eddae96db824423cd059ebecb9d13c392e Mon Sep 17 00:00:00 2001 From: xusd <330628789@qq.com> Date: Thu, 19 Jun 2025 20:52:50 +0800 Subject: [PATCH] fix:市平台项目更新 --- src/views/judicialSubmit/courtAuditDetail.jsx | 30 src/components/personCard/DetailDialog.jsx | 975 ++++---- src/utils/selectOption.js | 17 src/views/register/matterDetail/DismissModule.jsx | 8 src/views/register/eventFlow/component/EscalationModel.jsx | 7 src/views/windowDetail/ApplyInfo.jsx | 5 src/views/workDash/index.jsx | 7 src/views/register/matterDetail/HandleRecord.jsx | 8 src/components/MyPDF/index.jsx | 159 src/components/MyDOCX/index.less | 13 src/utils/utility.js | 4 src/components/SelectObjModal/selectPerson.jsx | 4 src/views/register/closeCaseEdit/preview.jsx | 8 src/components/SelectObjModal/selectJudge.jsx | 332 +- src/components/ArcoUpload/index.jsx | 4 src/views/comprehensive/index.jsx | 4 src/views/register/index.jsx | 1178 +++++---- src/views/register/matterDetail/UniteHandle.jsx | 2 src/views/register/visit/preview.jsx | 70 src/api/appUrl.js | 37 src/views/register/visit/component/SelfVisitorRegister.jsx | 28 src/views/register/visit/index.jsx | 3 src/views/register/matterDetail/ApplyInfo.jsx | 25 src/views/gridDetail/ApplyInfo.jsx | 1196 +++++---- src/views/register/visit/component/visitorRegister.jsx | 28 src/components/NewPage/index.jsx | 46 src/views/disputeLedger/index.jsx | 28 src/views/register/matterDetail/NewFileCheck.jsx | 354 +- src/components/MyDOCX/index.jsx | 127 + package.json | 1 src/views/judicialSubmit/courtEdit.jsx | 1605 +++++++------ src/views/register/matterDetail/Judicial.jsx | 531 ++- src/views/windowDetail/index.jsx | 1 src/views/register/eventFlow/component/AssignedModel.jsx | 2 src/views/register/handleFeedback/component/CaseResult.jsx | 84 src/views/register/matterDetail/index.jsx | 8 src/views/judicialSubmit/courtAuditEdit.jsx | 30 src/views/register/visit/SelfPreview.jsx | 10 38 files changed, 3,837 insertions(+), 3,142 deletions(-) diff --git a/package.json b/package.json index 3f6e999..8ee42d7 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "axios": "^0.26.0", "craco-less": "^2.0.0", "crypto-js": "^4.1.1", + "docx-preview": "^0.3.5", "echarts": "^5.4.2", "html2canvas": "^1.4.1", "import": "0.0.6", diff --git a/src/api/appUrl.js b/src/api/appUrl.js index e6ae60a..e06879c 100644 --- a/src/api/appUrl.js +++ b/src/api/appUrl.js @@ -2,7 +2,7 @@ * @Company: hugeInfo * @Author: ldh * @Date: 2022-02-16 11:25:57 - * @LastEditTime: 2025-05-26 15:03:51 + * @LastEditTime: 2025-06-10 17:33:34 * @LastEditors: lwh * @Version: 1.0.0 * @Description: api地址 @@ -71,15 +71,44 @@ }; // 测试 +// export const test = { +// // web服务 +// baseUrl: 'http://10.202.1.71:80', +// // baseUrl: 'https://zfw-dyh.by.gov.cn', +// // baseUrl: 'http://146.4.99.61:8088/byzfw', + +// // 附件服务 +// fileUrl: 'http://10.202.1.71:80', +// // fileUrl: 'https://zfw-dyh.by.gov.cn', + +// // 文件查看url 后面接附件编号 +// fileShowUrl: '/gzdyh-test-sys/api/web/fileInfo/show/', +// // 文件下载url 后面接附件编号 +// fileDownUrl: '/gzdyh-test-sys/api/web/fileInfo/down/', +// // 在线文档编辑链接 +// fileDocx: '/word/docDraft/showWord', +// // 签章的文档编辑链接 +// fileDocx2: '/InsertSeal/Word/AddSeal1/Word1', + +// // 不同服务接口type +// mediate: 'gzdyh-test-mediate', // dyh-mediate +// cust: 'gzdyh-test-cust', // dyh-cust +// oper: 'gzdyh-test-oper', // dyh-oper +// sys: 'gzdyh-test-sys', // dyh-sys +// disp: 'gzdyh-test-disp', //dyh-disp +// utils: 'gzdyh-test-utils', +// know: 'gzdyh-test-know', +// }; + + +// 测试 export const test = { // web服务 baseUrl: 'http://10.202.1.71:80', -// baseUrl: 'https://zfw-dyh.by.gov.cn', // baseUrl: 'http://146.4.99.61:8088/byzfw', // 附件服务 fileUrl: 'http://10.202.1.71:80', -// fileUrl: 'https://zfw-dyh.by.gov.cn', // 文件查看url 后面接附件编号 fileShowUrl: '/gzdyh-test-sys/api/web/fileInfo/show/', @@ -98,4 +127,4 @@ disp: 'gzdyh-test-disp', //dyh-disp utils: 'gzdyh-test-utils', know: 'gzdyh-test-know', -}; +}; \ No newline at end of file diff --git a/src/components/ArcoUpload/index.jsx b/src/components/ArcoUpload/index.jsx index b1a7727..c9f460d 100644 --- a/src/components/ArcoUpload/index.jsx +++ b/src/components/ArcoUpload/index.jsx @@ -2,7 +2,7 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-09-02 19:56:05 * @LastEditors: lwh - * @LastEditTime: 2024-12-10 15:46:19 + * @LastEditTime: 2025-06-10 16:23:39 * @FilePath: \gzDyh\gz-customerSystem\src\components\ArcoUpload\index.jsx * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -70,7 +70,7 @@ drag multiple style={{ ...props.style }} - accept='.png,.jpg,.pdf' + accept='.png,.jpg,.pdf,.doc,.docx' onDrop={(e) => { }} tip='支持png、jpg、pdf格式的图片上传,每次上传大小不超过10M' diff --git a/src/components/MyDOCX/index.jsx b/src/components/MyDOCX/index.jsx new file mode 100644 index 0000000..0c14318 --- /dev/null +++ b/src/components/MyDOCX/index.jsx @@ -0,0 +1,127 @@ +import React, { Fragment, useState, useEffect, useRef } from 'react'; +import PropTypes from 'prop-types'; +import { Button, Space } from 'antd'; +import { Modal } from '@arco-design/web-react'; +import { CloseCircleFilled, DownloadOutlined } from '@ant-design/icons'; +import { IconAttachment } from '@arco-design/web-react/icon'; +import { Document, Page, pdfjs } from 'react-pdf'; +import * as $$ from '@/utils/utility'; +import './index.less'; + +// 设置pdf.js工作器路径 +pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.min.js`; + +const appUrl = $$.appUrl; +const MyPDF = ({ name, fileUrl }) => { + const [visible, setVisible] = useState(false); + const [numPages, setNumPages] = useState(null); + const [pageNumber, setPageNumber] = useState(1); + + // 成功加载PDF文件时的回调 + function onDocumentLoadSuccess({ numPages }) { + setNumPages(numPages); + setPageNumber(1); + } + + function changePage(offset) { + setPageNumber((prevPageNumber) => prevPageNumber + offset); + } + + function previousPage() { + changePage(-1); + } + + function nextPage() { + changePage(1); + } + + return ( + <div> + {fileUrl ? ( + <div + onClick={() => { + setVisible(true); + }} + className="pdf-title" + > + <IconAttachment style={{ color: '#1A6FB8' }} /> + <div className="pdf-name">{name}</div> + </div> + ) : ( + '-' + )} + + <Modal + style={{ width: '80%' }} + closable={false} + title={name} + footer={ + <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', gap: '10px' }}> + <button + type="button" + disabled={pageNumber <= 1} + onClick={previousPage} + style={{ padding: '4px 15px', cursor: pageNumber <= 1 ? 'not-allowed' : 'pointer' }} + > + 上一页 + </button> + <p style={{ margin: 0 }}> + 第 {pageNumber} 页 / 共 {numPages || '--'} 页 + </p> + <button + type="button" + disabled={pageNumber >= numPages} + onClick={nextPage} + style={{ padding: '4px 15px', cursor: pageNumber >= numPages ? 'not-allowed' : 'pointer' }} + > + 下一页 + </button> + <Button + type="primary" + icon={<DownloadOutlined />} + onClick={() => { + window.open(`${appUrl.fileUrl}${appUrl.fileDownUrl}${fileUrl.split('/').pop()}`); + }} + style={{ marginLeft: '10px' }} + > + 下载 + </Button> + </div> + } + centered + unmountOnExit={true} + visible={visible} + onCancel={() => { + setVisible(false); + }} + > + <div style={{ width: '100%', height: 'calc(100vh - 200px)', display: 'flex', justifyContent: 'center', overflow: 'auto' }}> + <Document + file={`${appUrl.fileUrl}/${appUrl.sys}${fileUrl}`} + onLoadSuccess={onDocumentLoadSuccess} + loading={<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>PDF加载中...</div>} + error={<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>PDF加载失败,请稍后重试</div>} + > + <Page pageNumber={pageNumber} renderTextLayer={false} renderAnnotationLayer={false} scale={1.2} /> + </Document> + </div> + </Modal> + </div> + ); +}; + +MyPDF.propTypes = { + title: PropTypes.any, + visible: PropTypes.bool, + onCancel: PropTypes.func, + onOk: PropTypes.func, + footer: PropTypes.any, + onText: PropTypes.string, + cancelText: PropTypes.string, + zIndex: PropTypes.number, + bodyStyle: PropTypes.object, + closable: PropTypes.bool, + centered: PropTypes.bool, +}; + +export default MyPDF; diff --git a/src/components/MyDOCX/index.less b/src/components/MyDOCX/index.less new file mode 100644 index 0000000..71e6866 --- /dev/null +++ b/src/components/MyDOCX/index.less @@ -0,0 +1,13 @@ +@import '../../styles/theme.less'; + +.pdf { + &-title { + display: flex; + align-items: center; + gap: 4px; + cursor: pointer; + } + &-name { + color: @main-color; + } +} \ No newline at end of file diff --git a/src/components/MyPDF/index.jsx b/src/components/MyPDF/index.jsx index 0c14318..72cf13e 100644 --- a/src/components/MyPDF/index.jsx +++ b/src/components/MyPDF/index.jsx @@ -5,17 +5,20 @@ import { CloseCircleFilled, DownloadOutlined } from '@ant-design/icons'; import { IconAttachment } from '@arco-design/web-react/icon'; import { Document, Page, pdfjs } from 'react-pdf'; +import * as docx from 'docx-preview'; import * as $$ from '@/utils/utility'; +import PreviewImage from '@/components/PreviewImage'; import './index.less'; // 设置pdf.js工作器路径 pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.min.js`; const appUrl = $$.appUrl; -const MyPDF = ({ name, fileUrl }) => { +const MyPDF = ({ name, fileUrl, fileType }) => { const [visible, setVisible] = useState(false); const [numPages, setNumPages] = useState(null); const [pageNumber, setPageNumber] = useState(1); + const containerRef = useRef(null); // 成功加载PDF文件时的回调 function onDocumentLoadSuccess({ numPages }) { @@ -36,77 +39,101 @@ } return ( - <div> - {fileUrl ? ( - <div - onClick={() => { - setVisible(true); - }} - className="pdf-title" - > - <IconAttachment style={{ color: '#1A6FB8' }} /> - <div className="pdf-name">{name}</div> - </div> + <> + {fileType === 'jpg' || fileType === 'png' ? ( + <PreviewImage name={name} src={fileUrl} /> ) : ( - '-' - )} - - <Modal - style={{ width: '80%' }} - closable={false} - title={name} - footer={ - <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', gap: '10px' }}> - <button - type="button" - disabled={pageNumber <= 1} - onClick={previousPage} - style={{ padding: '4px 15px', cursor: pageNumber <= 1 ? 'not-allowed' : 'pointer' }} - > - 上一页 - </button> - <p style={{ margin: 0 }}> - 第 {pageNumber} 页 / 共 {numPages || '--'} 页 - </p> - <button - type="button" - disabled={pageNumber >= numPages} - onClick={nextPage} - style={{ padding: '4px 15px', cursor: pageNumber >= numPages ? 'not-allowed' : 'pointer' }} - > - 下一页 - </button> - <Button - type="primary" - icon={<DownloadOutlined />} + <div> + {fileUrl ? ( + <div onClick={() => { - window.open(`${appUrl.fileUrl}${appUrl.fileDownUrl}${fileUrl.split('/').pop()}`); + setVisible(true); + if (fileType === 'docx' || fileType === 'doc') { + const renderDocx = async () => { + try { + const response = await fetch(`${appUrl.fileUrl}/${appUrl.sys}${fileUrl}`); + const blob = await response.blob(); + await docx.renderAsync(blob, containerRef.current); + } catch (error) { + console.error('文档加载失败', error); + } + }; + renderDocx(); + } }} - style={{ marginLeft: '10px' }} + className="pdf-title" > - 下载 - </Button> - </div> - } - centered - unmountOnExit={true} - visible={visible} - onCancel={() => { - setVisible(false); - }} - > - <div style={{ width: '100%', height: 'calc(100vh - 200px)', display: 'flex', justifyContent: 'center', overflow: 'auto' }}> - <Document - file={`${appUrl.fileUrl}/${appUrl.sys}${fileUrl}`} - onLoadSuccess={onDocumentLoadSuccess} - loading={<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>PDF加载中...</div>} - error={<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>PDF加载失败,请稍后重试</div>} + <IconAttachment style={{ color: '#1A6FB8' }} /> + <div className="pdf-name">{name}</div> + </div> + ) : ( + '-' + )} + + <Modal + style={{ width: '80%' }} + closable={false} + title={name} + footer={ + <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', gap: '10px' }}> + <button + type="button" + disabled={pageNumber <= 1} + onClick={previousPage} + style={{ padding: '4px 15px', cursor: pageNumber <= 1 ? 'not-allowed' : 'pointer' }} + > + 上一页 + </button> + <p style={{ margin: 0 }}> + 第 {pageNumber} 页 / 共 {numPages || '--'} 页 + </p> + <button + type="button" + disabled={pageNumber >= numPages} + onClick={nextPage} + style={{ padding: '4px 15px', cursor: pageNumber >= numPages ? 'not-allowed' : 'pointer' }} + > + 下一页 + </button> + <Button + type="primary" + icon={<DownloadOutlined />} + onClick={() => { + window.open(`${appUrl.fileUrl}${appUrl.fileDownUrl}${fileUrl.split('/').pop()}`); + }} + style={{ marginLeft: '10px' }} + > + 下载 + </Button> + </div> + } + centered + unmountOnExit={true} + visible={visible} + onCancel={() => { + setVisible(false); + }} > - <Page pageNumber={pageNumber} renderTextLayer={false} renderAnnotationLayer={false} scale={1.2} /> - </Document> + <div style={{ width: '100%', height: 'calc(100vh - 200px)', display: 'flex', justifyContent: 'center', overflow: 'auto' }}> + {fileType === 'pdf' && ( + <Document + file={`${appUrl.fileUrl}/${appUrl.sys}${fileUrl}`} + onLoadSuccess={onDocumentLoadSuccess} + loading={<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>PDF加载中...</div>} + error={ + <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>PDF加载失败,请稍后重试</div> + } + > + <Page pageNumber={pageNumber} renderTextLayer={false} renderAnnotationLayer={false} scale={1.2} /> + </Document> + )} + {fileType === 'docx' && <div ref={containerRef} className="docx-container" />} + {fileType === 'doc' && <div ref={containerRef} className="docx-container" />} + </div> + </Modal> </div> - </Modal> - </div> + )} + </> ); }; diff --git a/src/components/NewPage/index.jsx b/src/components/NewPage/index.jsx index e32befb..44c870c 100644 --- a/src/components/NewPage/index.jsx +++ b/src/components/NewPage/index.jsx @@ -2,7 +2,7 @@ * @Company: hugeInfo * @Author: ldh * @Date: 2022-03-04 14:29:11 - * @LastEditTime: 2024-10-24 10:25:23 + * @LastEditTime: 2025-06-12 17:24:36 * @LastEditors: lwh * @Version: 1.0.0 * @Description: 页面框架 @@ -13,26 +13,42 @@ import './index.less'; import * as $$ from '../../utils/utility'; import RegisterChooseModal from '../RegisterChooseModal'; +import { Watermark } from '@arco-design/web-react'; const NewPage = ({ children, pageHead, registerChooseModalVisible }) => { - if (!$$.getSessionStorage('customerSystemToken')) { - $$.catchApiError({ content: '抱歉!登录状态已失效请重新登录', loginStatus: 'lose' }); - return null; - } + if (!$$.getSessionStorage('customerSystemToken')) { + $$.catchApiError({ content: '抱歉!登录状态已失效请重新登录', loginStatus: 'lose' }); + return null; + } - return ( - <> - {!!pageHead && <PageHead {...pageHead} />} - {children} - {/* 纠纷登录入口modal */} - {!!registerChooseModalVisible && <RegisterChooseModal visible={registerChooseModalVisible} />} - </> - ); + let customerSystemUser = $$.getSessionStorage('customerSystemUser'); + + const getCurrentTime = () => { + const now = new Date(); + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, '0'); + const day = String(now.getDate()).padStart(2, '0'); + const hours = String(now.getHours()).padStart(2, '0'); + const minutes = String(now.getMinutes()).padStart(2, '0'); + const seconds = String(now.getSeconds()).padStart(2, '0'); + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + }; + + const watermarkContent = `${customerSystemUser.trueName} ${getCurrentTime()}`; + + return ( + <Watermark style={{ height: '100%' }} gap={[200, 200]} content={watermarkContent}> + {!!pageHead && <PageHead {...pageHead} />} + {children} + {/* 纠纷登录入口modal */} + {!!registerChooseModalVisible && <RegisterChooseModal visible={registerChooseModalVisible} />} + </Watermark> + ); }; NewPage.propTypes = { - pageHead: PropTypes.any, - registerChooseModalVisible: PropTypes.any, + pageHead: PropTypes.any, + registerChooseModalVisible: PropTypes.any, }; export default NewPage; diff --git a/src/components/SelectObjModal/selectJudge.jsx b/src/components/SelectObjModal/selectJudge.jsx index 6f05a89..50b2db3 100644 --- a/src/components/SelectObjModal/selectJudge.jsx +++ b/src/components/SelectObjModal/selectJudge.jsx @@ -10,7 +10,7 @@ // 获取法官数据 function getDataApi(searchData) { - return $$.ax.request({ url: 'ctUserole/listJudge', type: 'get', data: searchData, service: 'cust' }); + return $$.ax.request({ url: 'ctUserole/listJudge', type: 'get', data: searchData, service: 'cust' }); } /** @@ -22,94 +22,99 @@ * onOk, // 点击确定的回调 */ const SelectObjModal = ({ visible = false, courtId, checkKeys = [], nameStr, isCheckbox = false, searchData = {}, onClose, onOk }) => { - const [data, setData] = useState([]); + const [data, setData] = useState([]); - const [checkedKeys, setCheckedKeys] = useState({ keys: [], items: [] }); + const [checkedKeys, setCheckedKeys] = useState({ keys: [], items: [] }); - const [expandedKeys, setExpandedKeys] = useState([]); + const [expandedKeys, setExpandedKeys] = useState([]); - const [searchValue, setSearchValue] = useState(''); + const [searchValue, setSearchValue] = useState(''); - const [autoExpandParent, setAutoExpandParent] = useState(true); + const [autoExpandParent, setAutoExpandParent] = useState(true); - const [dataList, setDataList] = useState([]); + const [dataList, setDataList] = useState([]); - // tree复选框选择 - function handleCheck(checkedKeys, e) { - if (!isCheckbox && checkedKeys.checked.length > 1) { - $$.info({ type: 'warning', content: '当前选择只可单选' }); - return; - } - let checkedNodes = e.checkedNodes; - checkedNodes.forEach((x) => delete x.children); - setCheckedKeys({ keys: checkedKeys.checked, items: checkedNodes }); - } + // tree复选框选择 + function handleCheck(checkedKeys, e) { + if (!isCheckbox && checkedKeys.checked.length > 1) { + $$.info({ type: 'warning', content: '当前选择只可单选' }); + return; + } + let checkedNodes = e.checkedNodes; + checkedNodes.forEach((x) => delete x.children); + setCheckedKeys({ keys: checkedKeys.checked, items: checkedNodes }); + } - // 删除选项 - function handleDelete(t) { - checkedKeys.keys.splice(t, 1); - checkedKeys.items.splice(t, 1); - setCheckedKeys({ ...checkedKeys }); - } + // 删除选项 + function handleDelete(t) { + checkedKeys.keys.splice(t, 1); + checkedKeys.items.splice(t, 1); + setCheckedKeys({ ...checkedKeys }); + } - // 搜索 - useEffect(() => { - if (!visible) return; - const arr = []; - const generateList = (data) => { - for (let i = 0; i < data.length; i++) { - const node = data[i]; - const { value, label } = node; - arr.push({ value, label }); - if (node.children) { - generateList(node.children); - } - } - }; - generateList(data); - setDataList(arr); - handleSearch('', arr); - }, [data]); - + // 搜索 + useEffect(() => { + if (!visible) return; + const arr = []; + const generateList = (data) => { + for (let i = 0; i < data.length; i++) { + const node = data[i]; + const { value, label } = node; + arr.push({ value, label }); + if (node.children) { + generateList(node.children); + } + } + }; + generateList(data); + setDataList(arr); + handleSearch('', arr); + }, [data]); - const getParentKey = (key, tree) => { - let parentKey; - for (let i = 0; i < tree.length; i++) { - const node = tree[i]; - if (node.children) { - if (node.children.some((item) => item.value === key)) { - parentKey = node.value; - } else if (getParentKey(key, node.children)) { - parentKey = getParentKey(key, node.children); - } - } - } - return parentKey; - }; + const getParentKey = (key, tree) => { + let parentKey; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (node.children) { + if (node.children.some((item) => item.value === key)) { + parentKey = node.value; + } else if (getParentKey(key, node.children)) { + parentKey = getParentKey(key, node.children); + } + } + } + return parentKey; + }; - function handleSearch(value, dataList) { + function handleSearch(value, dataList) { + console.log('value, dataList', value, dataList); + const newExpandedKeys = dataList + .map((item) => { + if (item.label.indexOf(value) > -1) { + return getParentKey(item.value, data); + } + return null; + }) + .filter((item, i, self) => item && self.indexOf(item) === i); - console.log('value, dataList', value, dataList); - const newExpandedKeys = dataList - .map((item) => { - if (item.label.indexOf(value) > -1) { - return getParentKey(item.value, data); - } - return null; - }) - .filter((item, i, self) => item && self.indexOf(item) === i); - - console.log('newExpandedKeys', newExpandedKeys); - setExpandedKeys(newExpandedKeys); - setSearchValue(value); - setAutoExpandParent(true); - } + console.log('newExpandedKeys', newExpandedKeys); + setExpandedKeys(newExpandedKeys); + setSearchValue(value); + setAutoExpandParent(true); + } const treeData = useMemo(() => { - const loop = (data) => - data.map((item) => { + const loop = (data) => { + const copiedData = JSON.parse(JSON.stringify(data)); + return copiedData.map((item, idx) => { const strTitle = item.label; const index = strTitle.indexOf(searchValue); + + // 只保留包含 searchValue 的项 + if (index <= -1 && !item.children) { + return null; // 返回 null 表示不包含在最终结果中 + } + const beforeStr = strTitle.substring(0, index); const afterStr = strTitle.slice(index + searchValue.length); const label = @@ -122,113 +127,122 @@ ) : ( <span>{strTitle}</span> ); + if (item.children) { + const filteredChildren = loop(item.children).filter(Boolean); // 递归处理子项并过滤掉 null return { label, name: strTitle, value: item.value, checkable: item.checkable, - children: loop(item.children), + children: filteredChildren.length > 0 ? filteredChildren : undefined, }; } + return { label, name: strTitle, checkable: item.checkable, value: item.value, }; - }); - // data = data.filter(i => i.label?.indexOf(searchValue) > -1); - // console.log('data.filter',data.filter(i => i.label?.indexOf(searchValue) > -1)); - console.log('loop(data)', loop(data)); + }).filter(Boolean); // 过滤掉 null + }; return loop(data); - }, [searchValue, data]); + useEffect(() => { + if (!visible) return; + // 获取数据 + async function getData() { + global.setSpinning(true); + const res = await getDataApi({ courtId }); + global.setSpinning(false); + if (res.type) { + setData(res.data || []); + } + } + if (checkKeys.length !== 0) { + let keys = []; + checkKeys.forEach((x) => keys.push(x.value)); + setCheckedKeys({ keys, items: checkKeys }); + } else { + setCheckedKeys({ keys: [], items: [] }); + } + getData(); + }, [visible]); - useEffect(() => { - if (!visible) return; - // 获取数据 - async function getData() { - global.setSpinning(true); - const res = await getDataApi({ courtId }); - global.setSpinning(false); - if (res.type) { - setData(res.data || []); - } - } - if (checkKeys.length !== 0) { - let keys = []; - checkKeys.forEach((x) => keys.push(x.value)); - setCheckedKeys({ keys, items: checkKeys }); - } else { - setCheckedKeys({ keys: [], items: [] }); - } - getData(); - }, [visible]); - - return ( - <MyModal visible={!!visible} title={`选择${nameStr}`} width={560} footer={false} onCancel={onClose}> - <div className="selectObjModal-main"> - <div className="selectObjModal-left"> - <div className="selectObjModal-left-search"> - <Search placeholder={`查询${nameStr}名称`} onChange={(e) => handleSearch(e.target.value, dataList)} /> - </div> - <div className="selectObjModal-left-main"> - {data.length > 0 ? ( - <Tree - checkable - checkStrictly - defaultExpandAll - onExpand={(newExpandedKeys) => { - setExpandedKeys(newExpandedKeys); - setAutoExpandParent(false); - }} - expandedKeys={expandedKeys} - autoExpandParent={autoExpandParent} - selectable={false} - onCheck={(checkedKeys, e) => handleCheck(checkedKeys, e)} - checkedKeys={checkedKeys.keys} - treeData={treeData} - fieldNames={{ title: 'label', key: 'value' }} - /> - ) : ( - $$.MyEmpty() - )} - </div> - </div> - <div className="selectObjModal-right"> - {checkedKeys.items.map((x, t) => ( - <div className="selectObjModal-right-item" key={x.value}> - <span className="selectObjModal-right-item-name">{x.label}</span> - <CloseOutlined onClick={() => handleDelete(t)} className="selectObjModal-right-item-icon" /> - </div> - ))} - {checkedKeys.items.length === 0 && <div className="selectObjModal-none">{$$.MyEmpty({ description: '尚未选择' + nameStr })}</div>} - </div> - </div> - <div className="selectObjModal-footer"> - <div>已选中:{checkedKeys.keys.length}人</div> - <Space size="middle"> - <Button onClick={onClose}>取消</Button> - <Button type="primary" onClick={() => onOk && onOk(checkedKeys)}> - 确定 - </Button> - </Space> - </div> - </MyModal> - ); + return ( + <MyModal visible={!!visible} title={`选择${nameStr}`} width={560} footer={false} onCancel={onClose}> + <div className="selectObjModal-main"> + <div className="selectObjModal-left"> + <div className="selectObjModal-left-search"> + <Search + placeholder={`查询${nameStr}名称`} + onSearch={(e) => { + // handleSearch('', dataList) + if (!e) { + handleSearch('', dataList); + } else { + handleSearch(e, dataList); + } + }} + /> + </div> + <div className="selectObjModal-left-main"> + {data.length > 0 ? ( + <Tree + checkable + checkStrictly + defaultExpandAll + onExpand={(newExpandedKeys) => { + setExpandedKeys(newExpandedKeys); + setAutoExpandParent(false); + }} + expandedKeys={expandedKeys} + autoExpandParent={autoExpandParent} + selectable={false} + onCheck={(checkedKeys, e) => handleCheck(checkedKeys, e)} + checkedKeys={checkedKeys.keys} + treeData={treeData} + fieldNames={{ title: 'label', key: 'value' }} + /> + ) : ( + $$.MyEmpty() + )} + </div> + </div> + <div className="selectObjModal-right"> + {checkedKeys.items.map((x, t) => ( + <div className="selectObjModal-right-item" key={x.value}> + <span className="selectObjModal-right-item-name">{x.label}</span> + <CloseOutlined onClick={() => handleDelete(t)} className="selectObjModal-right-item-icon" /> + </div> + ))} + {checkedKeys.items.length === 0 && <div className="selectObjModal-none">{$$.MyEmpty({ description: '尚未选择' + nameStr })}</div>} + </div> + </div> + <div className="selectObjModal-footer"> + <div>已选中:{checkedKeys.keys.length}人</div> + <Space size="middle"> + <Button onClick={onClose}>取消</Button> + <Button type="primary" onClick={() => onOk && onOk(checkedKeys)}> + 确定 + </Button> + </Space> + </div> + </MyModal> + ); }; SelectObjModal.propTypes = { - visible: PropTypes.any, - checkKeys: PropTypes.array, - type: PropTypes.string, - isCheckbox: PropTypes.bool, - searchData: PropTypes.object, - onClose: PropTypes.func, - onOk: PropTypes.func, + visible: PropTypes.any, + checkKeys: PropTypes.array, + type: PropTypes.string, + isCheckbox: PropTypes.bool, + searchData: PropTypes.object, + onClose: PropTypes.func, + onOk: PropTypes.func, }; export default SelectObjModal; diff --git a/src/components/SelectObjModal/selectPerson.jsx b/src/components/SelectObjModal/selectPerson.jsx index 9df0ac6..77605d5 100644 --- a/src/components/SelectObjModal/selectPerson.jsx +++ b/src/components/SelectObjModal/selectPerson.jsx @@ -19,6 +19,7 @@ const txtMap = { supUnit: '组织', dept: '部门', + dept_union: '部门', person: '人', unit: '组织' } @@ -30,6 +31,9 @@ case 'dept': url = `ctUnit/unitChoose` break; + case 'dept_union': + url = `ctUnit/unitChoose4Union` + break; case 'person': url = 'ctUser/userChoose' break diff --git a/src/components/personCard/DetailDialog.jsx b/src/components/personCard/DetailDialog.jsx index 7f0cbc8..1c00f46 100644 --- a/src/components/personCard/DetailDialog.jsx +++ b/src/components/personCard/DetailDialog.jsx @@ -1,510 +1,523 @@ -import React, { useEffect, useState } from 'react' -import KeyVisits from "./KeyVisits"; +import React, { useEffect, useState } from 'react'; +import KeyVisits from './KeyVisits'; import { majorStatus_1 } from '@/assets/images'; -import { Scrollbars } from "react-custom-scrollbars"; +import { Scrollbars } from 'react-custom-scrollbars'; import PreviewImage from '../PreviewImage'; import MyPDF from '../MyPDF'; -import { checkIdCard } from "../../utils/utility"; +import { checkIdCard } from '../../utils/utility'; import { Tooltip } from '@arco-design/web-react'; import * as $$ from '@/utils/utility'; const appUrl = $$.appUrl; // 重点人员信息 function getLabelInfoApi(data) { - return $$.ax.request({ url: `special/getLabelInfo`, type: 'post', serviceType: 'thrid', service: 'sys', data }); + return $$.ax.request({ url: `special/getLabelInfo`, type: 'post', serviceType: 'thrid', service: 'sys', data }); } // 个人案件统计 function countPersonApi(data) { - return $$.ax.request({ url: `caseInfo/countPerson`, type: 'get', service: 'mediate', data }); + return $$.ax.request({ url: `caseInfo/countPerson`, type: 'get', service: 'mediate', data }); } // 个人案件查询 function pagePersonApi(data) { - return $$.ax.request({ url: `/caseInfo/pagePerson`, type: 'get', service: 'mediate', data }); + return $$.ax.request({ url: `/caseInfo/pagePerson`, type: 'get', service: 'mediate', data }); } export default function DetailDialog(props) { - const nuturalList = [ - [ - { - label: '姓名', - perClass: '', - value: '', - isName: true,//判断是否是姓名标签 - field: 'trueName', - }, - { - label: '联系方式', - value: '', - field: 'mobile', - }, - ], - [ - { - label: '证件类型', - value: '', - field: 'certiTypeName', - }, - { - label: '证件号码', - value: '', - field: 'certiNo', - }, - ], - [ - { - label: '联系地址', - value: '', - field: 'addr', - }, - { - label: '户籍地址', - value: '', - field: 'placeAddr', - }, - ], - [ - { - label: '工作单位', - value: '', - field: 'workUnit', - }, - { - label: '民族', - value: '', - field: 'nationName', - }, - ], - [ - { - label: '性别', - value: '', - field: 'sexName', - }, - { - label: '年龄', - value: '', - field: 'age', - }, + const nuturalList = [ + [ + { + label: '姓名', + perClass: '', + value: '', + isName: true, //判断是否是姓名标签 + field: 'trueName', + }, + { + label: '联系方式', + value: '', + field: 'mobile', + }, + ], + [ + { + label: '证件类型', + value: '', + field: 'certiTypeName', + }, + { + label: '证件号码', + value: '', + field: 'certiNo', + }, + ], + [ + { + label: '联系地址', + value: '', + field: 'addr', + }, + { + label: '户籍地址', + value: '', + field: 'placeAddr', + }, + ], + [ + { + label: '工作单位', + value: '', + field: 'workUnit', + }, + { + label: '民族', + value: '', + field: 'nationName', + }, + ], + [ + { + label: '性别', + value: '', + field: 'sexName', + }, + { + label: '年龄', + value: '', + field: 'age', + }, + ], + [ + { + label: '身份证明材料', + value: '', + isFile: true, + field: 'file', + }, + { + label: '是否有个人极端倾向', + value: '', + field: 'extreme', + }, + ], + ]; + const legalList = [ + [ + { + label: '企业名称', + perClass: '', + value: '', + isName: true, //判断是否是姓名标签 + field: 'trueName', + }, + { + label: '联系方式', + value: '', + field: 'mobile', + }, + ], + [ + { + label: '企业所在地', + value: '', + field: 'addr', + }, + { + label: '统一社会信用代码', + value: '', + field: 'orgaCode', + }, + ], + [ + { + label: '法定代表人', + value: '', + field: 'deputy', + }, + { + label: '企业类型', + value: '', + field: 'orgaTypeName', + }, + ], + [ + { + label: '住所', + value: '', + field: 'placeAddr', + isRow: true, + }, + ], + [ + { + label: '登记企业材料', + value: '', + isFile: true, + field: 'file', + }, + { + label: '法定代表人身份证明材料', + value: '', + isFile: true, + field: 'file1', + }, + ], + ]; + const organizationList = [ + [ + { + label: '机构名称', + perClass: '', + value: '', + isName: true, //判断是否是姓名标签 + field: 'trueName', + }, + { + label: '联系方式', + value: '', + field: 'mobile', + }, + ], + [ + { + label: '机构所在地', + value: '', + field: 'addr', + }, + { + label: '机构组织代码', + value: '', + field: 'orgaCode', + }, + ], + [ + { + label: '机构代表人', + value: '', + field: 'deputy', + }, + { + label: '机构类型', + value: '', + field: 'orgaTypeName', + }, + ], + [ + { + label: '住所', + value: '', + field: 'placeAddr', + isRow: true, + }, + ], + [ + { + label: '机构登记材料', + value: '', + isFile: true, + field: 'file', + }, + { + label: '机构代表人身份证明材料', + value: '', + isFile: true, + field: 'file1', + }, + ], + ]; + const agentList = [ + [ + { + label: '姓名', + perClass: '', + value: '', + isName: true, //判断是否是姓名标签 + field: 'trueName', + }, + { + label: '联系方式', + value: '', + field: 'mobile', + }, + ], + [ + { + label: '证件类型', + value: '', + field: 'certiTypeName', + }, + { + label: '证件号码', + value: '', + field: 'certiNo', + }, + ], + [ + { + label: '联系地址', + value: '', + field: 'addr', + }, + { + label: '户籍地址', + value: '', + field: 'placeAddr', + }, + ], + [ + { + label: '工作单位', + value: '', + field: 'workUnit', + }, + { + label: '民族', + value: '', + field: 'nationName', + }, + ], + [ + { + label: '性别', + value: '', + field: 'sexName', + }, + { + label: '是否有个人极端倾向', + value: '', + field: 'extreme', + }, + ], + [ + { + label: '委托关系', + value: '', + field: 'agentRelateName', + }, + { + label: '委托类型', + value: '', + field: 'agentTypeName', + }, + ], + [ + { + label: '代理对象', + value: '', + field: 'personId', + isRow: true, + }, + ], + [ + { + label: '身份证明材料', + value: '', + isFile: true, + field: 'file', + }, + { + label: '代理人授权委托书', + value: '', + isFile: true, + field: 'file1', + }, + ], + ]; + const [tableList, setTableList] = useState([]); + const [certiNo, setCertiNo] = useState(''); + const [certiShow, setCertiShow] = useState(false); + // 反应诉求记录 + const [hisData, setHisData] = useState({}); + const [labelInfo, setLabelInfo] = useState([]); + const [fakeData, setFakeData] = useState({ tableData: [] }); + const [search, setSearch] = useState({ page: 1, size: 5 }); - ], - [ - { - label: '身份证明材料', - value: '', - isFile: true, - field: 'file', - }, - { - label: '是否有个人极端倾向', - value: '', - field: 'extreme', - }, - ], - ] - const legalList = [ - [ - { - label: '企业名称', - perClass: '', - value: '', - isName: true,//判断是否是姓名标签 - field: 'trueName', - }, - { - label: '联系方式', - value: '', - field: 'mobile', - }, - ], - [ - { - label: '企业所在地', - value: '', - field: 'addr', - }, - { - label: '统一社会信用代码', - value: '', - field: 'orgaCode', - }, - ], - [ - { - label: '法定代表人', - value: '', - field: 'deputy', - }, - { - label: '企业类型', - value: '', - field: 'orgaTypeName', - }, - ], - [ - { - label: '住所', - value: '', - field: 'placeAddr', - isRow: true - }, - ], - [ - { - label: '登记企业材料', - value: '', - isFile: true, - field: 'file', - }, - { - label: '法定代表人身份证明材料', - value: '', - isFile: true, - field: 'file1', - }, - ], - ] - const organizationList = [ - [ - { - label: '机构名称', - perClass: '', - value: '', - isName: true,//判断是否是姓名标签 - field: 'trueName', - }, - { - label: '联系方式', - value: '', - field: 'mobile', - }, - ], - [ - { - label: '机构所在地', - value: '', - field: 'addr', - }, - { - label: '机构组织代码', - value: '', - field: 'orgaCode', - }, - ], - [ - { - label: '机构代表人', - value: '', - field: 'deputy', - }, - { - label: '机构类型', - value: '', - field: 'orgaTypeName', - }, - ], - [ - { - label: '住所', - value: '', - field: 'placeAddr', - isRow: true - }, - ], - [ - { - label: '机构登记材料', - value: '', - isFile: true, - field: 'file', - }, - { - label: '机构代表人身份证明材料', - value: '', - isFile: true, - field: 'file1', - }, - ], - ] - const agentList = [ - [ - { - label: '姓名', - perClass: '', - value: '', - isName: true,//判断是否是姓名标签 - field: 'trueName', - }, - { - label: '联系方式', - value: '', - field: 'mobile', - }, - ], - [ - { - label: '证件类型', - value: '', - field: 'certiTypeName', - }, - { - label: '证件号码', - value: '', - field: 'certiNo', - }, - ], - [ - { - label: '联系地址', - value: '', - field: 'addr', - }, - { - label: '户籍地址', - value: '', - field: 'placeAddr', - }, - ], - [ - { - label: '工作单位', - value: '', - field: 'workUnit', - }, - { - label: '民族', - value: '', - field: 'nationName', - }, - ], - [ - { - label: '性别', - value: '', - field: 'sexName', - }, - { - label: '是否有个人极端倾向', - value: '', - field: 'extreme', - }, - ], - [ - { - label: '委托关系', - value: '', - field: 'agentRelateName', - }, - { - label: '委托类型', - value: '', - field: 'agentTypeName', - }, - ], - [ - { - label: '代理对象', - value: '', - field: 'personId', - isRow: true - }, - ], - [ - { - label: '身份证明材料', - value: '', - isFile: true, - field: 'file', - }, - { - label: '代理人授权委托书', - value: '', - isFile: true, - field: 'file1', - }, - ], - ] - const [tableList, setTableList] = useState([]) - const [certiNo, setCertiNo] = useState(''); - const [certiShow, setCertiShow] = useState(false); - // 反应诉求记录 - const [hisData, setHisData] = useState({}); - const [labelInfo, setLabelInfo] = useState([]); - const [fakeData, setFakeData] = useState({ tableData: [] }); - const [search, setSearch] = useState({ page: 1, size: 5 }); + function getAllApi(num) { + countPerson(num); + pagePerson({ ...search, certiNo: num }); + } - function getAllApi(num) { - countPerson(num) - pagePerson({ ...search, certiNo: num }) - } + // 根据个人身份证号查询重点人员信息 + async function getLabelInfo(idCard) { + const res = await getLabelInfoApi({ idNumber: idCard }); + if (res.type) { + let data = res.data || {}; + console.log('res.data', res.data); + setLabelInfo(data?.labelList); + } + } - // 根据个人身份证号查询重点人员信息 - async function getLabelInfo(idCard) { - const res = await getLabelInfoApi({ idNumber: idCard }) - if (res.type) { - let data = res.data || {}; - console.log('res.data', res.data); - setLabelInfo(data?.labelList) - } - } + // 个人案件统计 + async function countPerson(idCard) { + const res = await countPersonApi({ certiNo: idCard }); + if (res.type) { + setHisData(res.data || {}); + } + } - // 个人案件统计 - async function countPerson(idCard) { - const res = await countPersonApi({ certiNo: idCard }) - if (res.type) { - setHisData(res.data || {}) - } - } + // 个人案件查询 + async function pagePerson(submitData) { + global.setSpinning(true); + const res = await pagePersonApi(submitData); + global.setSpinning(false); + if (res.type) { + setSearch(submitData); + setFakeData({ + total: res?.data?.totalElements || 0, + tableData: res?.data?.content || [], + }); + } + } - // 个人案件查询 - async function pagePerson(submitData) { - global.setSpinning(true); - const res = await pagePersonApi(submitData); - global.setSpinning(false); - if (res.type) { - setSearch(submitData); - setFakeData({ - total: res?.data?.totalElements || 0, - tableData: res?.data?.content || [], - }); - } - } + // 页码修改 + function handleChangePage(page, pageSize, field, order) { + let paramsObj = Object.assign(search, { page, size: pageSize }); + paramsObj = { ...paramsObj }; + setSearch(paramsObj); - // 页码修改 - function handleChangePage(page, pageSize, field, order) { - let paramsObj = Object.assign(search, { page, size: pageSize }); - paramsObj = { ...paramsObj } - setSearch(paramsObj); + pagePerson(paramsObj); + } - pagePerson(paramsObj); - } + useEffect(() => { + if (checkIdCard(props.editData?.certiNo)) { + setCertiShow(true); + setCertiNo(props.editData?.certiNo); + getAllApi(props.editData?.certiNo); + } + const data = props.editData; + let newList; + let mapList = []; + if (data.perClass === '09_01001-1') { + //自然人 + mapList = nuturalList; + } + if (data.perClass === '09_01001-2') { + //法人组织 + mapList = legalList; + } + if (data.perClass === '09_01001-3') { + //非法人组织 + mapList = organizationList; + } + if (data.perType === '24_00006-1' || data.perType === '24_00006-2') { + //代理人 + mapList = agentList; + } + newList = mapList.map((item) => { + return item.map((res) => { + if (res.isFile) { + return { + ...res, + value: ( + <> + {data[res.field]?.map((item, index) => { + if (item.response) { + //新上传的,前端数据 + const newData = item.response.data[0]; + return ( + <div style={{ display: 'inline-block' }}> + <MyPDF key={index} name={newData.name} fileUrl={newData.showUrl} fileType={newData.suffix} /> + {index !== data[res.field].length - 1 && <>,</>} + </div> + ); + } else { + return ( + <div style={{ display: 'inline-block' }}> + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> + {index !== data[res.field].length - 1 && <>,</>} + </div> + ); + } + })} + </> + ), + }; + } + if (res.isName) { + return { + ...res, + value: data[res.field], + perClass: data.perClassName || data.perTypeName, + }; + } else { + if (res.field === 'personId') { + const filterValue = props.personData + .filter((result) => data[res.field].indexOf(result.id) != -1) + .map((result) => result.trueName) + .join(','); + return { + ...res, + value: filterValue, + }; + } else if (res.field === 'extreme') { + return { + ...res, + label: ( + <div + style={{ + padding: '8px', + display: 'flex', + gap: '8px', + alignItems: 'center', + color: data[res.field] === 1 ? '#F53F3F' : 'inherit', + }} + className="title-text-red" + > + {data[res.field] === 1 && <img src={majorStatus_1} alt="" srcset="" />} + <Tooltip content="是否有个人极端倾向">{$$.ellipsis('是否有个人极端倾向', 6)}</Tooltip> + </div> + ), + value: data[res.field] === 1 ? '是' : data[res.field] === 0 ? '否' : '-', + }; + } else { + return { + ...res, + value: data[res.field], + }; + } + } + }); + }); - useEffect(() => { - if (checkIdCard(props.editData?.certiNo)) { - setCertiShow(true) - setCertiNo(props.editData?.certiNo) - getAllApi(props.editData?.certiNo) - } - const data = props.editData - let newList - let mapList = [] - if (data.perClass === "09_01001-1") { - //自然人 - mapList = nuturalList - } - if (data.perClass === "09_01001-2") { - //法人组织 - mapList = legalList - } - if (data.perClass === "09_01001-3") { - //非法人组织 - mapList = organizationList - } - if (data.perType === "24_00006-1" || data.perType === "24_00006-2") { - //代理人 - mapList = agentList - } - newList = mapList.map(item => { - return item.map(res => { - if (res.isFile) { - return { - ...res, - value: <> - {data[res.field]?.map((item, index) => { - if (item.response) { - //新上传的,前端数据 - const newData = item.response.data[0] - return <div style={{ display: 'inline-block' }}> - {newData.suffix === 'pdf' ? <MyPDF name={newData.name} fileUrl={newData.showUrl} /> : <PreviewImage name={newData.name} src={newData.showUrl} />} - {index !== data[res.field].length - 1 && <>,</>} - </div> - } else { - return <div style={{ display: 'inline-block' }}> - {item.suffix === 'pdf' ? <MyPDF name={item.name} fileUrl={item.showUrl} /> : <PreviewImage name={item.name} src={item.showUrl} />} - {index !== data[res.field].length - 1 && <>,</>} - </div> - } - })} - </> - } - } - if (res.isName) { - return { - ...res, - value: data[res.field], - perClass: data.perClassName || data.perTypeName - } - } else { - if (res.field === 'personId') { - const filterValue = props.personData.filter(result => data[res.field].indexOf(result.id) != -1).map(result => result.trueName).join(',') - return { - ...res, - value: filterValue - } - } else if (res.field === 'extreme') { - return { - ...res, - label: <div style={{ - padding: '8px', - display: 'flex', - gap: '8px', - alignItems: 'center', - color: data[res.field] === 1 ? '#F53F3F' : 'inherit' - }} className='title-text-red'> - {data[res.field] === 1 && <img src={majorStatus_1} alt="" srcset="" />} - <Tooltip content='是否有个人极端倾向'>{$$.ellipsis('是否有个人极端倾向', 6)}</Tooltip> - </div>, - value: data[res.field] === 1 ? '是' : data[res.field] === 0 ? '否' : '-' - } - } else { - return { - ...res, - value: data[res.field] - } - } - } - }) - }) + setTableList(newList); + }, []); - setTableList(newList) - }, []) - - - return ( - <Scrollbars - autoHide - autoHeight - autoHeightMin={200} // 最小高度为300px - autoHeightMax={590} - > - <table border="1" align="center" cellpadding="8" className="table" style={{ marginBottom: '20px' }}> - { - tableList?.map((item, index) => { - return <tr key={'tableList' + index}> - { - item?.map(res => { - return <> - <th bgcolor="#F7F8FA" className="table-title" width={150}>{res.label}</th> - <td width={320} colspan={res.isRow ? '3' : '1'}> - <div style={{ display: 'flex', minHeight: '22px' }}> - <div>{res.value}</div> - {res.isName && <div className="title-personRemark1">{res.perClass}</div>} - </div> - </td> - </> - }) - } - </tr> - }) - } - </table> - {/* 重复来访重点人员 */} - { - certiShow && - <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}> - <KeyVisits labelInfo={labelInfo} data={hisData} fakeData={fakeData} search={search} handleChangePage={handleChangePage} /> - </div> - } - </Scrollbars> - ) + return ( + <Scrollbars + autoHide + autoHeight + autoHeightMin={200} // 最小高度为300px + autoHeightMax={590} + > + <table border="1" align="center" cellpadding="8" className="table" style={{ marginBottom: '20px' }}> + {tableList?.map((item, index) => { + return ( + <tr key={'tableList' + index}> + {item?.map((res) => { + return ( + <> + <th bgcolor="#F7F8FA" className="table-title" width={150}> + {res.label} + </th> + <td width={320} colspan={res.isRow ? '3' : '1'}> + <div style={{ display: 'flex', minHeight: '22px' }}> + <div>{res.value}</div> + {res.isName && <div className="title-personRemark1">{res.perClass}</div>} + </div> + </td> + </> + ); + })} + </tr> + ); + })} + </table> + {/* 重复来访重点人员 */} + {certiShow && ( + <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}> + <KeyVisits labelInfo={labelInfo} data={hisData} fakeData={fakeData} search={search} handleChangePage={handleChangePage} /> + </div> + )} + </Scrollbars> + ); } diff --git a/src/utils/selectOption.js b/src/utils/selectOption.js index 66c244d..76c5fa7 100644 --- a/src/utils/selectOption.js +++ b/src/utils/selectOption.js @@ -496,10 +496,6 @@ label: '待分派', }, { - value: '2', - label: '待签收', - }, - { value: '3', label: '待受理', }, @@ -1512,7 +1508,20 @@ }, ] + +const systemSource = [ + { + value: '0', + label: '市平台', + }, + { + value: '1', + label: '白云区平台', + }, +] + const obj = { + systemSource, caseCanal, visitWay, personType, diff --git a/src/utils/utility.js b/src/utils/utility.js index 880512d..90e9154 100644 --- a/src/utils/utility.js +++ b/src/utils/utility.js @@ -2,7 +2,7 @@ * @Company: hugeInfo * @Author: ldh * @Date: 2022-02-16 11:57:54 - * @LastEditTime: 2025-05-30 16:51:32 + * @LastEditTime: 2025-06-10 17:40:29 * @LastEditors: lwh * @Version: 1.0.0 * @Description: 公共模块方法 @@ -18,7 +18,7 @@ import { empty } from '@/assets/images'; export const isDebug = false; // 是否开发环境 -export const isTest = false; // 是否测试环境 +export const isTest = true; // 是否测试环境 export const appUrl = isDebug ? debug : isTest ? test : web; // api diff --git a/src/views/comprehensive/index.jsx b/src/views/comprehensive/index.jsx index 2f931e1..41f5295 100644 --- a/src/views/comprehensive/index.jsx +++ b/src/views/comprehensive/index.jsx @@ -289,13 +289,14 @@ { type: 'RangePicker', name: 'fileTime', label: '归档时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 }, { type: 'Cascader', name: 'caseType', label: '纠纷类型', placeholder: '请选择', span: 8, changeSelect: true, treedata: $$.caseTypeSelect.caseTypeSelect }, { type: 'Select', name: 'mediResult', label: '化解结果', placeholder: '请选择', span: 8, selectdata: $$.options.mediResult }, + { type: 'Input', name: 'caseRef', label: '事项编号' }, { type: 'Select', name: 'canal', label: '事项来源', placeholder: '请选择', span: 8, selectdata: $$.options.caseCanal }, { type: 'Select', name: 'status', label: '事项状态', placeholder: '请选择', span: 8, selectdata: $$.options.caseStatus }, { type: 'Select', name: 'caseLevel', label: '事项等级', placeholder: '请选择', span: 8, selectdata: $$.options.caseLevelList }, + { type: 'Select', name: 'systemSource', label: '系统来源', placeholder: '请选择', span: 8, selectdata: $$.options.systemSource }, { type: 'Input', name: 'inputUnitName', label: '登记机构' }, { type: 'searchButton', name: 'mediateUnitId', maxLength: 0, onClear: () => { console.log('clear'); setSelectObjModalData({ ...selectObjModalData, mediateUnitId: {} }); form.setFieldValue('mediateUnitId', '') }, onSearch: () => { onChange('mediateUnitId') }, searchButton: '选择', placeholder: '请选择', label: '承办部门' }, { type: 'searchButton', name: 'assistUnitId', maxLength: 0, onClear: () => { setSelectObjModalData({ ...selectObjModalData, assistUnitId: {} }); form.setFieldValue('assistUnitId', '') }, onSearch: () => { onChange('assistUnitId') }, searchButton: '选择', placeholder: '请选择', label: '配合部门' }, - { type: 'Input', name: 'caseRef', label: '事项编号' }, { type: 'Input', name: 'plaintiffs', label: '申请方', labelStyle: { width: '56px' } }, { type: 'Input', name: 'defendants', label: '被申请方' }, { type: 'Select', name: 'peopleNum', placeholder: '请选择', label: '涉及人数', selectdata: $$.options.peopleNum }, @@ -306,6 +307,7 @@ { type: 'Select', name: 'isRisk', placeholder: '请选择', label: '是否扬言极端', selectdata: [{ label: '是', value: '1' }, { label: '否', value: '0' }] }, { type: 'Select', name: 'agreeType', placeholder: '请选择', label: '结案协议类型', selectdata: $$.options.caseAgreeType }, { type: 'Select', name: 'repeatCase', placeholder: '请选择', label: '合并事项', selectdata: $$.options.repeatCase }, + { type: 'Input', name: 'caseCityCode', label: '市民编号' }, ]} handleReset={() => { form.resetFields(); diff --git a/src/views/disputeLedger/index.jsx b/src/views/disputeLedger/index.jsx index bf82b39..88bd32e 100644 --- a/src/views/disputeLedger/index.jsx +++ b/src/views/disputeLedger/index.jsx @@ -2,7 +2,7 @@ * @Company: hugeInfo * @Author: lwh * @Date: 2024-09-14 15:59:17 - * @LastEditTime: 2025-06-04 21:18:43 + * @LastEditTime: 2025-06-14 11:35:43 * @LastEditors: lwh * @Version: 1.0.0 * @Description: @@ -383,17 +383,10 @@ > <div> <div className="disputeLedger-card-content"> - <div className={`disputeLedger-card-content-t`}> - {item.title} - </div> + <div className={`disputeLedger-card-content-t`}>{item.title}</div> <div> - <span className={`disputeLedger-card-title`}> - {item.value} - </span>{' '} - <span className={`disputeLedger-unit`}>件</span>{' '} - {item.per && ( - <span className={`disputeLedger-unit `}>| {item.per}</span> - )} + <span className={`disputeLedger-card-title`}>{item.value}</span> <span className={`disputeLedger-unit`}>件</span>{' '} + {item.per && <span className={`disputeLedger-unit `}>| {item.per}</span>} </div> </div> <img src={item.icon} style={{ width: activeKey === index && '52px', height: activeKey === index && '52px' }} alt="" /> @@ -443,9 +436,10 @@ <div style={{ paddingBottom: '12px' }}> <MyLTopChartPie1 data={[ - { value: data.data4.value1, name: '化解中' }, - { value: data.data4.value2, name: '化解成功' }, - { value: data.data4.value3, name: '化解不成功' }, + { value: data.rejectNum, name: '不予受理' }, + { value: data.processNum, name: '化解中' }, + { value: data.finishNum, name: '化解成功' }, + { value: data.failNum, name: '化解不成功' }, ]} allNum={allNum} /> @@ -688,6 +682,10 @@ }, data: [ { + name: '不予受理', + icon: 'circle', // 图例标记的形状 + }, + { name: '化解中', icon: 'circle', // 图例标记的形状 }, @@ -707,7 +705,7 @@ type: 'pie', radius: ['60%', '90%'], // 设置饼图的内半径和外半径,实现扇形区域 center: ['30%', '50%'], - color: ['#B6DDF1', '#3A8AC6', '#094282'], + color: ['#B6DDF1', '#5BA8E5', '#3A8AC6', '#094282'], data: data, label: { show: true, diff --git a/src/views/gridDetail/ApplyInfo.jsx b/src/views/gridDetail/ApplyInfo.jsx index 68a3949..ff8430b 100644 --- a/src/views/gridDetail/ApplyInfo.jsx +++ b/src/views/gridDetail/ApplyInfo.jsx @@ -5,7 +5,7 @@ * @LastEditTime: 2025-01-02 10:50:04 * @LastEditors: lwh * @Version: 1.0.0 - * @Description: + * @Description: */ import React, { useEffect, useState } from 'react'; import { downO, up, link } from '@/assets/images'; @@ -17,577 +17,653 @@ import NameCard2 from '../../components/NameCard2'; import MyPDF from '../../components/MyPDF'; import PersonCard from '../register/matterDetail/personCard'; -import { Scrollbars } from "react-custom-scrollbars"; +import { Scrollbars } from 'react-custom-scrollbars'; import TranferReviewProgress from '@/components/ReviewProgress/ReviewProgress.jsx'; function listMyApplyRecord(data) { - return $$.ax.request({ url: 'caseTask/listMyApplyRecord', type: 'get', service: 'mediate', data }); + return $$.ax.request({ url: 'caseTask/listMyApplyRecord', type: 'get', service: 'mediate', data }); } export default function ApplyInfo(props) { - const [list, setList] = useState([]); - const [loading, setLoading] = useState(false); - const [personView, setPersonView] = useState(false) - const [personId, setPersonId] = useState('') + const [list, setList] = useState([]); + const [loading, setLoading] = useState(false); + const [personView, setPersonView] = useState(false); + const [personId, setPersonId] = useState(''); + const map = { + '上报申请': [ + [ + { + value: 'subTitle', + label: '申请信息', + }, + { + value: 'auditUnitName', + label: '上报至', + }, + { + value: 'appearContent', + label: '上报意见', + }, + { + value: 'fileInfo', + label: '附件材料', + fileKey: '22_00018-512', + }, + { + value: 'applyTime', + label: '申请时间', + }, + { + value: 'applyPeople', + label: '申请人', + unitName: 'applyUnitName', + peopleName: 'applyUserName', + }, + ], + [ + { + value: 'subTitle', + label: '审核信息', + }, + { + value: 'auditResultName', + label: '审核结果', + }, + { + value: 'auditContent', + label: '理由说明', + }, + { + value: 'fileInfo', + label: '附件材料', + fileKey: '22_00018-513', + }, + { + value: 'auditTime', + label: '审核时间', + }, + { + value: 'auditPeople', + label: '审核人', + unitName: 'auditUnitName', + peopleName: 'auditUserName', + }, + ], + ], + '回退申请': [ + [ + { + value: 'subTitle', + label: '申请信息', + }, + { + value: 'returnContent', + label: '回退理由', + }, + { + value: 'fileInfo', + label: '附件材料', + fileKey: '22_00018-510', + }, + { + value: 'returnTime', + label: '申请时间', + }, + { + value: 'applyPeople', + label: '申请人', + unitName: 'returnUnitName', + peopleName: 'returnUserName', + }, + ], + [ + { + value: 'subTitle', + label: '审核信息', + }, + { + value: 'auditResultName', + label: '审核结果', + }, + { + value: 'auditContent', + label: '理由说明', + }, + { + value: 'fileInfo', + label: '附件材料', + fileKey: '22_00018-511', + }, + { + value: 'auditTime', + label: '审核时间', + }, + { + value: 'auditPeople', + label: '审核人', + unitName: 'auditUnitName', + peopleName: 'auditUserName', + }, + ], + ], + '联合处置申请': [ + [ + { + value: 'subTitle', + label: '申请信息', + }, + { + value: 'applyAssistUnitName', + label: '添加配合部门', + }, + { + value: 'applyContent', + label: '添加理由', + }, + { + value: 'fileInfo', + label: '附件材料', + fileKey: '22_00018-508', + }, + { + value: 'applyTime', + label: '申请时间', + }, + { + value: 'applyPeople', + label: '申请人', + unitName: 'applyUnitName', + peopleName: 'applyUserName', + }, + ], + [ + { + value: 'subTitle', + label: '审核信息', + }, + { + value: 'auditResultName', + label: '审核结果', + }, + { + value: 'auditContent', + label: '理由说明', + }, + { + value: 'fileInfo', + label: '附件材料', + fileKey: '22_00018-509', + }, + { + value: 'auditTime', + label: '审核时间', + }, + { + value: 'auditPeople', + label: '审核人', + unitName: 'auditUnitName', + peopleName: 'auditUserName', + }, + ], + ], + '结案申请': [ + [ + { + value: 'subTitle', + label: '申请信息', + }, + { + value: 'mediResultName', + label: '化解结果', + }, + { + value: 'failReason', + label: '无法化解理由', + }, + { + value: 'windupContent', + label: '协议履行情况', + }, + { + value: 'applyTime', + label: '申请时间', + }, + { + value: 'applyPeople', + label: '申请人', + unitName: 'applyUnitName', + peopleName: 'applyUserName', + }, + ], + [ + { + value: 'subTitle', + label: '审核信息', + }, + { + value: 'auditResultName', + label: '审核结果', + }, + { + value: 'auditContent', + label: '理由说明', + }, + { + value: 'fileInfo', + label: '附件材料', + fileKey: '22_00018-514', + }, + { + value: 'auditTime', + label: '审核时间', + }, + { + value: 'auditPeople', + label: '审核人', + unitName: 'auditUnitName', + peopleName: 'auditUserName', + }, + ], + ], + '结案申请1': [ + [ + { + value: 'subTitle', + label: '申请信息', + }, + { + value: 'mediResultName', + label: '化解结果', + }, + { + value: 'failReason', + label: '无法化解理由', + }, + { + value: 'windupContent', + label: '协议履行情况', + }, + { + value: 'applyTime', + label: '申请时间', + }, + { + value: 'applyPeople', + label: '申请人', + unitName: 'applyUnitName', + peopleName: 'applyUserName', + }, + ], + [ + { + value: 'subTitle', + label: '审核信息', + }, + { + value: 'reviewProgress', + }, + ], + ], //这个是1、2事件的结案申请 + '转入人民调解系统申请': [ + [ + { + value: 'subTitle', + label: '申请信息', + }, + { + value: 'applyTime', + label: '申请时间', + }, + { + value: 'applyPeople', + label: '申请人', + unitName: 'applyUnitName', + peopleName: 'applyUserName', + }, + ], + [ + { + value: 'subTitle', + label: '审核信息', + }, + { + value: 'tranferReviewProgress', + }, + ], + ], + '司法确认申请': [ + [ + { + value: 'subTitle', + label: '申请信息', + }, + { + value: 'courtName', + label: '司法确认部门', + }, + { + value: 'applyContent', + label: '申请理由', + }, + { + value: 'filePDF', + label: '调解协议书', + fileKey: '22_00018-302', + }, + { + value: 'filePDF', + label: '非诉讼调解协议司法确认申请书', + fileKey: '22_00018-402', + }, + { + value: 'filePDF', + label: '诉前联调协议案件移送函', + fileKey: '22_00018-403', + }, + { + value: 'filePDF', + label: '送达地址确认书', + fileKey: '22_00018-108', + }, + { + value: 'applyTime', + label: '申请时间', + }, + { + value: 'applyPeople', + label: '申请人', + unitName: 'applyUnitName', + peopleName: 'applyUserName', + }, + ], + ], + }; - const map = { - '上报申请': [ - [{ - value: 'subTitle', - label: '申请信息', - }, - { - value: 'auditUnitName', - label: '上报至', - }, - { - value: 'appearContent', - label: '上报意见', - }, - { - value: 'fileInfo', - label: '附件材料', - fileKey: '22_00018-512' - }, - { - value: 'applyTime', - label: '申请时间', - }, - { - value: 'applyPeople', - label: '申请人', - unitName: 'applyUnitName', - peopleName: 'applyUserName' - }, - ], - [ - { - value: 'subTitle', - label: '审核信息', - }, - { - value: 'auditResultName', - label: '审核结果', - }, - { - value: 'auditContent', - label: '理由说明', - }, - { - value: 'fileInfo', - label: '附件材料', - fileKey: '22_00018-513' - }, - { - value: 'auditTime', - label: '审核时间', - }, - { - value: 'auditPeople', - label: '审核人', - unitName: 'auditUnitName', - peopleName: 'auditUserName' - }, - ] - ], - '回退申请': [ - [{ - value: 'subTitle', - label: '申请信息', - }, - { - value: 'returnContent', - label: '回退理由', - }, - { - value: 'fileInfo', - label: '附件材料', - fileKey: '22_00018-510' - }, - { - value: 'returnTime', - label: '申请时间', - }, - { - value: 'applyPeople', - label: '申请人', - unitName: 'returnUnitName', - peopleName: 'returnUserName' - }, - ], - [ - { - value: 'subTitle', - label: '审核信息', - }, - { - value: 'auditResultName', - label: '审核结果', - }, - { - value: 'auditContent', - label: '理由说明', - }, - { - value: 'fileInfo', - label: '附件材料', - fileKey: '22_00018-511' - }, - { - value: 'auditTime', - label: '审核时间', - }, - { - value: 'auditPeople', - label: '审核人', - unitName: 'auditUnitName', - peopleName: 'auditUserName' - }, - ] - ], - '联合处置申请': [ - [{ - value: 'subTitle', - label: '申请信息', - }, - { - value: 'applyAssistUnitName', - label: '添加配合部门', - }, - { - value: 'applyContent', - label: '添加理由', - }, - { - value: 'fileInfo', - label: '附件材料', - fileKey: '22_00018-508' - }, - { - value: 'applyTime', - label: '申请时间', - }, - { - value: 'applyPeople', - label: '申请人', - unitName: 'applyUnitName', - peopleName: 'applyUserName' - }, - ], - [ - { - value: 'subTitle', - label: '审核信息', - }, - { - value: 'auditResultName', - label: '审核结果', - }, - { - value: 'auditContent', - label: '理由说明', - }, - { - value: 'fileInfo', - label: '附件材料', - fileKey: '22_00018-509' - }, - { - value: 'auditTime', - label: '审核时间', - }, - { - value: 'auditPeople', - label: '审核人', - unitName: 'auditUnitName', - peopleName: 'auditUserName' - }, - ] - ], - '结案申请': [ - [{ - value: 'subTitle', - label: '申请信息', - }, - { - value: 'mediResultName', - label: '化解结果', - }, - { - value: 'failReason', - label: '无法化解理由', - }, - { - value: 'windupContent', - label: '协议履行情况', - }, - { - value: 'applyTime', - label: '申请时间', - }, - { - value: 'applyPeople', - label: '申请人', - unitName: 'applyUnitName', - peopleName: 'applyUserName' - }, - ], - [ - { - value: 'subTitle', - label: '审核信息', - }, - { - value: 'auditResultName', - label: '审核结果', - }, - { - value: 'auditContent', - label: '理由说明', - }, - { - value: 'fileInfo', - label: '附件材料', - fileKey: '22_00018-514' - }, - { - value: 'auditTime', - label: '审核时间', - }, - { - value: 'auditPeople', - label: '审核人', - unitName: 'auditUnitName', - peopleName: 'auditUserName' - }, - ] - ], - '结案申请1': [ - [{ - value: 'subTitle', - label: '申请信息', - }, - { - value: 'mediResultName', - label: '化解结果', - }, - { - value: 'failReason', - label: '无法化解理由', - }, - { - value: 'windupContent', - label: '协议履行情况', - }, - { - value: 'applyTime', - label: '申请时间', - }, - { - value: 'applyPeople', - label: '申请人', - unitName: 'applyUnitName', - peopleName: 'applyUserName' - }, - ], - [ - { - value: 'subTitle', - label: '审核信息', - }, - { - value: 'reviewProgress', - }, - ] - ],//这个是1、2事件的结案申请 - '转入人民调解系统申请': [ - [{ - value: 'subTitle', - label: '申请信息', - }, - { - value: 'applyTime', - label: '申请时间', - }, - { - value: 'applyPeople', - label: '申请人', - unitName: 'applyUnitName', - peopleName: 'applyUserName' - }, - ], - [ - { - value: 'subTitle', - label: '审核信息', - }, - { - value: 'tranferReviewProgress', - }, - ] - ], - '司法确认申请': [ - [{ - value: 'subTitle', - label: '申请信息', - }, - { - value: 'courtName', - label: '司法确认部门', - }, - { - value: 'applyContent', - label: '申请理由', - }, - { - value: 'filePDF', - label: '调解协议书', - fileKey: '22_00018-302' - }, - { - value: 'filePDF', - label: '非诉讼调解协议司法确认申请书', - fileKey: '22_00018-402' - }, - { - value: 'filePDF', - label: '诉前联调协议案件移送函', - fileKey: '22_00018-403' - }, - { - value: 'filePDF', - label: '送达地址确认书', - fileKey: '22_00018-108' - }, - { - value: 'applyTime', - label: '申请时间', - }, - { - value: 'applyPeople', - label: '申请人', - unitName: 'applyUnitName', - peopleName: 'applyUserName' - }, - ] - ], - } + useEffect(() => { + getData(props.caseId); + }, []); - useEffect(() => { - getData(props.caseId) - }, []) + const getData = async (caseId) => { + setLoading(true); + const res = await listMyApplyRecord({ + caseId, + }); + if (res.type) { + setLoading(false); + setList(res.data); + } + }; - const getData = async (caseId) => { - setLoading(true) - const res = await listMyApplyRecord({ - caseId - }) - if (res.type) { - setLoading(false) - setList(res.data) - } - } + const toggleView = (id) => { + setList( + list.map((record, index) => { + if (index === id) { + return { + ...record, + showView: !record.showView, + }; + } + return record; + }) + ); + }; - const toggleView = (id) => { - setList(list.map((record, index) => { - if (index === id) { - return { - ...record, - showView: !record.showView, - }; - } - return record; - })); - }; + const handlePersonDetail = (id) => { + setPersonId(id); + setPersonView(true); + }; - const handlePersonDetail = (id) => { - setPersonId(id) - setPersonView(true) - } + const handleDom = (data, item) => { + console.log('111111111111', data, item); + const { object, fileList } = item; + if (data.value === 'subTitle') { + //标题 + return ( + <Col span={24} key={data.value}> + <Space size="small"> + <div className="MediationInfo-subTitle" style={{ marginTop: '-8px' }}></div> + <h5>{data.label}</h5> + </Space> + </Col> + ); + } else if (data.value === 'fileInfo') { + //文件 + let fileData = {}; + if (fileList && fileList.length != 0) { + fileData = fileList.find((item) => data.fileKey == item.ownerType) || {}; + } + return ( + <Col span={24} key={data.value}> + <div> + <div className="title-text">{data.label}</div> + </div> + <div style={{ color: '#1A6FB8' }}> + {fileData.fileList?.map((result, resIndex) => { + return ( + <div style={{ display: 'inline-block' }}> + <PreviewImage name={result.name} src={result.showUrl} /> + {resIndex !== fileData.fileList?.length - 1 && <>,</>} + </div> + ); + }) || '-'} + </div> + </Col> + ); + } else if (data.value === 'filePDF') { + //文件 + let fileData = {}; + if (fileList && fileList.length != 0) { + fileData = fileList.find((item) => data.fileKey == item.ownerType) || {}; + } + console.log('fileData', fileData); - const handleDom = (data, item) => { - console.log('111111111111', data, item); - const { object, fileList } = item - if (data.value === 'subTitle') { - //标题 - return <Col span={24} key={data.value}> - <Space size='small'> - <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>{data.label}</h5> - </Space> - </Col> - } else if (data.value === 'fileInfo') { - //文件 - let fileData = {} - if (fileList && fileList.length != 0) { - fileData = fileList.find(item => data.fileKey == item.ownerType) || {} - } - return <Col span={24} key={data.value}> - <div><div className="title-text">{data.label}</div></div> - <div style={{ color: '#1A6FB8' }}> - {fileData.fileList?.map((result, resIndex) => { - return <div style={{ display: 'inline-block' }}> - <PreviewImage name={result.name} src={result.showUrl} /> - {resIndex !== fileData.fileList?.length - 1 && <>,</>} - </div> - }) || '-'} - </div> - </Col> - } else if (data.value === 'filePDF') { - //文件 - let fileData = {} - if (fileList && fileList.length != 0) { - fileData = fileList.find(item => data.fileKey == item.ownerType) || {} - } - console.log('fileData', fileData); + return ( + <Col span={24} key={data.value}> + <div> + <div className="title-text">{data.label}</div> + </div> + <div style={{ color: '#1A6FB8' }}> + {fileData.fileList?.map((result, resIndex) => { + return ( + <div style={{ display: 'inline-block' }}> + <MyPDF name={result.name} fileUrl={result.showUrl} fileType={result.suffix} /> + {resIndex !== fileData.fileList?.length - 1 && <>,</>} + </div> + ); + }) || '-'} + </div> + </Col> + ); + } else if (data.value === 'applyPeople' || data.value === 'auditPeople') { + //申请人 + return ( + <Col span={24} key={data.value}> + <div> + <div className="title-text">{data.label}</div> + </div> + <span> + <span style={{ color: '#86909C' }}></span> + <span>{object[data.unitName]}</span> + </span> + <span> + <span className="public-infoSubTitle"> + <span className="public-nameCard"> + + <NameCard2 + name={data.value === 'auditPeople' ? object.auditUserName : object.applyUserName} + userId={data.value === 'auditPeople' ? object.auditUserId : object.applyUserId} + /> + </span> + </span> + </span> + </Col> + ); + } else if (data.value === 'applyTime' || data.value == 'auditTime' || data.value == 'returnTime') { + //时间格式化 + return ( + <Col span={24} key={data.value}> + <div> + <div className="title-text">{data.label}</div> + </div> + <div>{$$.minuteFormat(object[data.value]) || '-'}</div> + </Col> + ); + } else if (data.value == 'auditResultName') { + //审核结果 + return ( + <Col span={24} key={data.value}> + <div> + <div className="title-text">{data.label}</div> + </div> + <div style={{ color: object.auditResult == '24_00004-1' ? '#00b42a' : '#f53f3f' }}>{object[data.value] || '-'}</div> + </Col> + ); + } else if (data.value === 'reviewProgress') { + //这个是1、2级事件,结案申请的时候显示 + //注意:暂时还没做12级的流程,还没得数据 + return ( + <Col span={24} key={data.value}> + <ReviewProgress progressData={object.progressData || { handleCaseFlowList: [] }} /> + </Col> + ); + } else if (data.value === 'mediResultName') { + //化解结果 + return ( + <Col span={24} key={data.value}> + <div> + <div className="title-text">{data.label}</div> + </div> + <div style={{ color: object.mediResult == '22_00025-1' ? '#00b42a' : '#f53f3f' }}>{object[data.value] || '-'}</div> + </Col> + ); + } else if (data.value === 'failReason') { + //化解不成功原因 + return object.mediResult == '22_00025-1' ? ( + '' + ) : ( + <Col span={24} key={data.value}> + <div> + <div className="title-text">{data.label}</div> + </div> + <div>{object[data.value] || '-'}</div> + </Col> + ); + } else if (data.value === 'tranferReviewProgress') { + //转入人民调解申请 + return ( + <Col span={24} key={data.value}> + <TranferReviewProgress progressData={object.applyList || []} /> + </Col> + ); + } else { + return ( + <Col span={24} key={data.value}> + <div> + <div className="title-text">{data.label}</div> + </div> + <div>{object[data.value] || '-'}</div> + </Col> + ); + } + }; - return <Col span={24} key={data.value}> - <div><div className="title-text">{data.label}</div></div> - <div style={{ color: '#1A6FB8' }}> - {fileData.fileList?.map((result, resIndex) => { - return <div style={{ display: 'inline-block' }}> - {result.suffix === 'pdf' ? - <MyPDF name={result.name} fileUrl={result.showUrl} /> : - <PreviewImage name={result.name} src={result.showUrl} /> - } - {resIndex !== fileData.fileList?.length - 1 && <>,</>} - </div> - }) || '-'} - </div> - </Col> - } else if (data.value === 'applyPeople' || data.value === 'auditPeople') { - //申请人 - return <Col span={24} key={data.value}> - <div><div className="title-text">{data.label}</div></div> - <span> - <span style={{ color: '#86909C' }}></span><span>{object[data.unitName]}</span> - </span> - <span> - <span className='public-infoSubTitle'><span className='public-nameCard'> <NameCard2 name={data.value === 'auditPeople' ? object.auditUserName : object.applyUserName} userId={data.value === 'auditPeople' ? object.auditUserId : object.applyUserId} /></span></span> - </span> - </Col> - } else if (data.value === 'applyTime' || data.value == 'auditTime' || data.value == 'returnTime') { - //时间格式化 - return <Col span={24} key={data.value}> - <div><div className="title-text">{data.label}</div></div> - <div>{$$.minuteFormat(object[data.value]) || '-'}</div> - </Col> - } else if (data.value == 'auditResultName') { - //审核结果 - return <Col span={24} key={data.value}> - <div><div className="title-text">{data.label}</div></div> - <div style={{ color: object.auditResult == '24_00004-1' ? '#00b42a' : '#f53f3f' }}> - {object[data.value] || '-'} - </div> - </Col> - } else if (data.value === 'reviewProgress') { - //这个是1、2级事件,结案申请的时候显示 - //注意:暂时还没做12级的流程,还没得数据 - return <Col span={24} key={data.value}> - <ReviewProgress progressData={object.progressData || { handleCaseFlowList: [] }} /> - </Col> - } else if (data.value === 'mediResultName') { - //化解结果 - return <Col span={24} key={data.value}> - <div><div className="title-text">{data.label}</div></div> - <div style={{ color: object.mediResult == '22_00025-1' ? '#00b42a' : '#f53f3f' }}> - {object[data.value] || '-'} - </div> - </Col> - } else if (data.value === 'failReason') { - //化解不成功原因 - return object.mediResult == '22_00025-1' ? '' : - <Col span={24} key={data.value}> - <div><div className="title-text">{data.label}</div></div> - <div>{object[data.value] || '-'}</div> - </Col> - } else if (data.value === 'tranferReviewProgress') { - //转入人民调解申请 - return <Col span={24} key={data.value}> - <TranferReviewProgress progressData={object.applyList || []} /> - </Col> - } else { - return <Col span={24} key={data.value}> - <div><div className="title-text">{data.label}</div></div> - <div>{object[data.value] || '-'}</div> - </Col> - } - } - - return ( - <div style={{ margin: '0 16px' }}> - <Spin loading={loading} style={{ width: '100%', height: '100%', minHeight: '200px' }}> - <Scrollbars style={{ height: 'calc(100vh - 156px)',backgroundColor: '#ffff' }} autoHide> - {list && list.length !== 0 ? list?.map((item, listIndex) => { - const object = item.object || item - if (item.type == '回退申请') { - object.applyStatus = object.returnStatus - object.applyTime = object.returnTime - object.applyUnitName = object.returnUnitName - object.applyUserName = object.returnUserName - object.applyUserId = object.returnUserId - } - if (item.type == '上报申请') { - object.applyStatus = object.applyStatus - object.applyTime = object.appearTime - object.applyUnitName = object.appearUnitName - object.applyUserName = object.appearUserName - object.applyUserId = object.appearUserId - } - if (item.type == '司法确认申请') { - object.applyStatus = object.judicAudit === "24_00004-0" ? 0 : 1 - object.auditResult = object.judicAudit - } - return <div className='applyInfoClass' style={{ border: item.showView ? '1px solid #1a6fb8' : '' }} key={listIndex}> - <div className='applyInfoClass-img' onClick={() => { toggleView(listIndex) }}> - <img src={item.showView ? up : downO} alt="" className="title-downUp" /> - </div> - <div className='applyInfoClass-title'> - <div className='applyInfoClass-title-txt'>{item.type}</div> - <div className={`applyInfoClass-title-tag-${object.applyStatus === 0 ? '2' : object.auditResult == '24_00004-1' ? '1' : '3'}`} > - {object.applyStatus === 0 ? '审核中' : object.auditResult == '24_00004-1' ? '审核通过' : '审核不通过'} - </div> - </div> - {item.showView ? <div> - { - map[(object.caseLevel && object.caseLevel != 3) ? item.type + '1' : item.type]?.filter((fil, filIndex) => { - //如果是审核中就不需要审核栏 - if (object.applyStatus === 0) { - return filIndex === 0 - } else { - return true - } - }).map((res, index) => { - return <Row gutter={[16, 16]} key={index}> - {res.map(data => { - if (item.type == '转入人民调解系统申请') { - return handleDom(data, { object: item }) - } else { - return handleDom(data, item) - } - })} - </Row> - }) - } - </div> : <div> - <span style={{ marginRight: '32px' }}> - <span style={{ color: '#86909C' }}>申请时间:</span><span>{$$.minuteFormat(object.applyTime)}</span> - </span> - <span style={{ marginRight: '8px' }}> - <span style={{ color: '#86909C' }}>申请人:</span> - </span> - <span> - <span className='public-infoSubTitle'><span className='public-nameCard'>{(object?.applyUnitName)} <NameCard2 name={object.applyUserName} userId={object.applyUserId} /></span></span> - </span> - </div>} - - </div> - }) : <div className='handle-content-empty' style={{ marginTop: '10%' }}> - {$$.MyNewEmpty()} - </div>} - </Scrollbars> - </Spin> - <PersonCard personView={personView} handleCancel={() => setPersonView(false)} personId={personId} /> - </div> - ) + return ( + <div style={{ margin: '0 16px' }}> + <Spin loading={loading} style={{ width: '100%', height: '100%', minHeight: '200px' }}> + <Scrollbars style={{ height: 'calc(100vh - 156px)', backgroundColor: '#ffff' }} autoHide> + {list && list.length !== 0 ? ( + list?.map((item, listIndex) => { + const object = item.object || item; + if (item.type == '回退申请') { + object.applyStatus = object.returnStatus; + object.applyTime = object.returnTime; + object.applyUnitName = object.returnUnitName; + object.applyUserName = object.returnUserName; + object.applyUserId = object.returnUserId; + } + if (item.type == '上报申请') { + object.applyStatus = object.applyStatus; + object.applyTime = object.appearTime; + object.applyUnitName = object.appearUnitName; + object.applyUserName = object.appearUserName; + object.applyUserId = object.appearUserId; + } + if (item.type == '司法确认申请') { + object.applyStatus = object.judicAudit === '24_00004-0' ? 0 : 1; + object.auditResult = object.judicAudit; + } + return ( + <div className="applyInfoClass" style={{ border: item.showView ? '1px solid #1a6fb8' : '' }} key={listIndex}> + <div + className="applyInfoClass-img" + onClick={() => { + toggleView(listIndex); + }} + > + <img src={item.showView ? up : downO} alt="" className="title-downUp" /> + </div> + <div className="applyInfoClass-title"> + <div className="applyInfoClass-title-txt">{item.type}</div> + <div className={`applyInfoClass-title-tag-${object.applyStatus === 0 ? '2' : object.auditResult == '24_00004-1' ? '1' : '3'}`}> + {object.applyStatus === 0 ? '审核中' : object.auditResult == '24_00004-1' ? '审核通过' : '审核不通过'} + </div> + </div> + {item.showView ? ( + <div> + {map[object.caseLevel && object.caseLevel != 3 ? item.type + '1' : item.type] + ?.filter((fil, filIndex) => { + //如果是审核中就不需要审核栏 + if (object.applyStatus === 0) { + return filIndex === 0; + } else { + return true; + } + }) + .map((res, index) => { + return ( + <Row gutter={[16, 16]} key={index}> + {res.map((data) => { + if (item.type == '转入人民调解系统申请') { + return handleDom(data, { object: item }); + } else { + return handleDom(data, item); + } + })} + </Row> + ); + })} + </div> + ) : ( + <div> + <span style={{ marginRight: '32px' }}> + <span style={{ color: '#86909C' }}>申请时间:</span> + <span>{$$.minuteFormat(object.applyTime)}</span> + </span> + <span style={{ marginRight: '8px' }}> + <span style={{ color: '#86909C' }}>申请人:</span> + </span> + <span> + <span className="public-infoSubTitle"> + <span className="public-nameCard"> + {object?.applyUnitName} + <NameCard2 name={object.applyUserName} userId={object.applyUserId} /> + </span> + </span> + </span> + </div> + )} + </div> + ); + }) + ) : ( + <div className="handle-content-empty" style={{ marginTop: '10%' }}> + {$$.MyNewEmpty()} + </div> + )} + </Scrollbars> + </Spin> + <PersonCard personView={personView} handleCancel={() => setPersonView(false)} personId={personId} /> + </div> + ); } diff --git a/src/views/judicialSubmit/courtAuditDetail.jsx b/src/views/judicialSubmit/courtAuditDetail.jsx index 20204e1..97b2722 100644 --- a/src/views/judicialSubmit/courtAuditDetail.jsx +++ b/src/views/judicialSubmit/courtAuditDetail.jsx @@ -203,11 +203,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) @@ -223,11 +219,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) @@ -243,11 +235,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) @@ -263,11 +251,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) @@ -359,11 +343,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) diff --git a/src/views/judicialSubmit/courtAuditEdit.jsx b/src/views/judicialSubmit/courtAuditEdit.jsx index 37b5146..9c55840 100644 --- a/src/views/judicialSubmit/courtAuditEdit.jsx +++ b/src/views/judicialSubmit/courtAuditEdit.jsx @@ -316,11 +316,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) @@ -336,11 +332,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) @@ -356,11 +348,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) @@ -376,11 +364,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) @@ -623,11 +607,7 @@ ?.fileList?.map((item, index) => { return ( <> - {item.suffix === 'pdf' ? ( - <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> - ) : ( - <PreviewImage key={index} name={item.name} src={item.showUrl} /> - )} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> </> ); }) diff --git a/src/views/judicialSubmit/courtEdit.jsx b/src/views/judicialSubmit/courtEdit.jsx index 8583ad1..f33fc71 100644 --- a/src/views/judicialSubmit/courtEdit.jsx +++ b/src/views/judicialSubmit/courtEdit.jsx @@ -11,7 +11,7 @@ import { Row, Col, Space, Typography, Empty } from 'antd'; import { Input, Select, Radio, Modal, Button, Form, Divider, DatePicker, Alert } from '@arco-design/web-react'; import { IconInfoCircleFill } from '@arco-design/web-react/icon'; -import { Scrollbars } from "react-custom-scrollbars"; +import { Scrollbars } from 'react-custom-scrollbars'; import * as $$ from '../../utils/utility'; import { useNavigate } from 'react-router-dom'; import ArcoUpload from '@/components/ArcoUpload'; @@ -33,803 +33,946 @@ const appUrl = $$.appUrl; // 司法确认详情接口 function getJudicInfoApi(submitData) { - return $$.ax.request({ url: 'judicInfo/getJudicInfo', type: 'get', data: submitData, service: 'mediate' }); + return $$.ax.request({ url: 'judicInfo/getJudicInfo', type: 'get', data: submitData, service: 'mediate' }); } // 根据judicId获取案件信息 function getCaseDataApi(submitData) { - return $$.ax.request({ url: `caseInfo/getCaseInfo`, data: submitData, type: 'get', service: 'mediate' }); + return $$.ax.request({ url: `caseInfo/getCaseInfo`, data: submitData, type: 'get', service: 'mediate' }); } function delFile(id) { - return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); + return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } }); } // 提交审核 function judicConfirmApi(submitData) { - return $$.ax.request({ url: `judicInfo/judicConfirm`, type: 'post', service: 'mediate', data: submitData, }); + return $$.ax.request({ url: `judicInfo/judicConfirm`, type: 'post', service: 'mediate', data: submitData }); } // 获取助理列表 function listAssistApi(submitData) { - return $$.ax.request({ url: `ctUserole/listAssist`, type: 'get', service: 'cust', data: submitData }); + return $$.ax.request({ url: `ctUserole/listAssist`, type: 'get', service: 'cust', data: submitData }); } // 删除预约 function delMeetInfoApi(data) { - return $$.ax.request({ url: `meetJudic/delMeetInfo`, type: 'get', service: 'mediate', data }); + return $$.ax.request({ url: `meetJudic/delMeetInfo`, type: 'get', service: 'mediate', data }); } //添加预约 function addMeetInfoApi(data) { - return $$.ax.request({ url: `meetJudic/addMeetInfo`, type: 'post', service: 'mediate', data }); + return $$.ax.request({ url: `meetJudic/addMeetInfo`, type: 'post', service: 'mediate', data }); } //添加会议号 function addRoomInfoApi(data) { - return $$.ax.request({ url: `meetJudic/addRoomInfo`, type: 'post', service: 'mediate', data }); + return $$.ax.request({ url: `meetJudic/addRoomInfo`, type: 'post', service: 'mediate', data }); } //会议查询 function getMeetInfoApi(data) { - return $$.ax.request({ url: `meetJudic/getMeetInfo`, type: 'get', service: 'mediate', data }); + return $$.ax.request({ url: `meetJudic/getMeetInfo`, type: 'get', service: 'mediate', data }); } // 办理结果(化解结果、协议文书等结案信息) function getTransactResultApi(caseId) { - return $$.ax.request({ url: `caseInfoUnfold/getTransactResult?caseId=${caseId}`, type: 'get', service: 'mediate' }); + return $$.ax.request({ url: `caseInfoUnfold/getTransactResult?caseId=${caseId}`, type: 'get', service: 'mediate' }); } function saveVideoApi(data) { - return $$.ax.request({ url: `meetJudic/saveVideo`, type: 'post', service: 'mediate', data }); + return $$.ax.request({ url: `meetJudic/saveVideo`, type: 'post', service: 'mediate', data }); } - const CourtAuditEdit = () => { - const formRef = useRef(); - const form = useRef(); - const formVideo = useRef(); - let navigate = useNavigate(); - const judicId = $$.getQueryString('judicId') - const caseId = $$.getQueryString('caseId') - const caseTaskId = $$.getQueryString('caseTaskId') + const formRef = useRef(); + const form = useRef(); + const formVideo = useRef(); + let navigate = useNavigate(); + const judicId = $$.getQueryString('judicId'); + const caseId = $$.getQueryString('caseId'); + const caseTaskId = $$.getQueryString('caseTaskId'); - const [caseCheckModal, setCaseCheckModal] = useState(false); + const [caseCheckModal, setCaseCheckModal] = useState(false); - // 回显数据 - const [data, setData] = useState([]); - // 数据 - const [formData, setFormData] = useState({}); - const [caseData, setCaseData] = useState({}); + // 回显数据 + const [data, setData] = useState([]); + // 数据 + const [formData, setFormData] = useState({}); + const [caseData, setCaseData] = useState({}); + const [filesList, setFilesList] = useState([]); + // 司法确认部门单位 + const [listCourt, setListCourt] = useState([]); - const [filesList, setFilesList] = useState([]); - // 司法确认部门单位 - const [listCourt, setListCourt] = useState([]); + const [stepsNum, setStepsNum] = useState(0); - const [stepsNum, setStepsNum] = useState(0); + const [transactResult, setTransactResult] = useState(null); - const [transactResult, setTransactResult] = useState(null); + // 预添加预约 + const [preBookData, setPreBookData] = useState({}); + const [preBookVisible, setPreBookVisible] = useState(false); + const [radioVisible, setRadioVisible] = useState(false); - // 预添加预约 - const [preBookData, setPreBookData] = useState({}); - const [preBookVisible, setPreBookVisible] = useState(false); - const [radioVisible, setRadioVisible] = useState(false); + // 选择法官弹窗 + const [isModalVisible, setIsModalVisible] = useState(false); + const [selectObjModalData, setSelectObjModalData] = useState({}); + // 司法确认结果是否同意 + const [agree, setAgree] = useState(''); - // 选择法官弹窗 - const [isModalVisible, setIsModalVisible] = useState(false); - const [selectObjModalData, setSelectObjModalData] = useState({}) - // 司法确认结果是否同意 - const [agree, setAgree] = useState('') + function handleChangeFile(type, info, apiResult) { + console.log('handleChangeFile', type, info, apiResult); + let list = info.fileList ? info.fileList : []; + // .map(item => ({ ...item, name: item.trueName })) + setFilesList(list); + // setResult(apiResult) + console.log('list', list); + if (list.length >= 1) { + setStepsNum(1); + } else { + setStepsNum(0); + } + } - function handleChangeFile(type, info, apiResult) { - console.log('handleChangeFile', type, info, apiResult); - let list = info.fileList ? info.fileList : []; - // .map(item => ({ ...item, name: item.trueName })) - setFilesList(list) - // setResult(apiResult) - console.log('list', list); - if (list.length >= 1) { - setStepsNum(1) - } else { - setStepsNum(0) - } - } + //删除文件 + const handleDelFile = async (id) => { + const res = await delFile(id); + if (res.type) { + $$.infoSuccess({ content: '删除成功!' }); + } + }; - //删除文件 - const handleDelFile = async (id) => { - const res = await delFile(id) - if (res.type) { - $$.infoSuccess({ content: '删除成功!' }); - } - } + // 修改 + function handleChangeValue(key, value) { + formData[key] = value; + setFormData({ ...formData }); + } + // 提交申请 + function handleApply(type) { + if (type === 'submit') { + if (formRef.current) { + formRef.current.validate(undefined, (errors, values) => { + if (!errors) { + const data = formRef?.current.getFields(); + console.log('data', data); - // 修改 - function handleChangeValue(key, value) { - formData[key] = value; - setFormData({ ...formData }); - } + $$.arcoModalInfo({ + icon: <IconInfoCircleFill style={{ color: '#1A6FB8' }} />, + title: '提醒', + closable: false, + style: { borderRadius: '8px' }, + content: <span>确定办结该司法确认吗?</span>, + okText: '确定', + cancelText: '我再想想', + onOk: () => { + applyJudicial({ ...data, judicId, submitType: '1' }, type); + saveVideo(caseId); + }, + }); + } + }); + } + } + if (type === 'draft') { + const data = formRef?.current.getFields(); + applyJudicial({ ...data, judicId, submitType: '2' }, type); + } + } - // 提交申请 - function handleApply(type) { - if (type === 'submit') { - if (formRef.current) { - formRef.current.validate(undefined, (errors, values) => { - if (!errors) { - const data = formRef?.current.getFields() - console.log('data', data); + // 保存调解视频 + async function saveVideo(caseId) { + const res = await saveVideoApi({ caseId }); + if (res.type) { + } + } - $$.arcoModalInfo({ - icon: <IconInfoCircleFill style={{ color: '#1A6FB8' }} />, - title: '提醒', - closable: false, - style: { borderRadius: '8px' }, - content: <span>确定办结该司法确认吗?</span>, - okText: '确定', - cancelText: '我再想想', - onOk: () => { - applyJudicial({ ...data, judicId, submitType: '1' }, type) - saveVideo(caseId) - }, - }); + // 提交审核 + async function applyJudicial(data, type) { + global.setSpinning(true); + const res = await judicConfirmApi(data); + global.setSpinning(false); + if (res.type) { + navigate(-1); + type === 'draft' && $$.infoSuccess({ content: '保存成功' }); + } + } - } - }) - } - } - if (type === 'draft') { - const data = formRef?.current.getFields(); - applyJudicial({ ...data, judicId, submitType: '2' }, type) - } - } + // 助理列表字典值选择 + async function gatListCourt(data) { + global.setSpinning(true); + const res = await listAssistApi({ courtId: data?.courtId }); + global.setSpinning(false); + if (res.type) { + setListCourt(res.data || []); + } + } - // 保存调解视频 - async function saveVideo(caseId) { - const res = await saveVideoApi({ caseId }) - if (res.type) { - } - } + // 回显数据 + async function getJudicialApply() { + global.setSpinning(true); + const res = await getJudicInfoApi({ judicId }); + global.setSpinning(false); + if (res.type) { + setData(res.data); + gatListCourt(res.data || {}); + formRef.current.setFieldsValue(res.data || {}); + setAgree(res.data?.judicResult || ''); + } + } + async function getCaseData() { + global.setSpinning(true); + const res = await getCaseDataApi({ id: caseId }); + global.setSpinning(false); + if (res.type) { + const { agentList, personList, ...rest } = res.data; + const parList = agentList.concat(personList); + const newParList = + parList?.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') { + item.fileList.forEach((res) => { + file.push({ + ...res, + uid: res.id, + }); + }); + } + if (item.ownerType == '22_00018-204' || item.ownerType == '22_00018-207') { + item.fileList.forEach((res) => { + file1.push({ + ...res, + uid: res.id, + }); + }); + } + }); + } + return { + ...item, + file, + file1, + }; + }) || []; + const obj = { + ...rest, + fakeData: newParList, + }; + setCaseData(obj); + } + } - // 提交审核 - async function applyJudicial(data, type) { - global.setSpinning(true); - const res = await judicConfirmApi(data); - global.setSpinning(false); - if (res.type) { - navigate(-1); - type === 'draft' && $$.infoSuccess({ content: '保存成功' }); - } - } + // 视频调解部分 + // 添加预约重置 + function resetClick() { + form.current.resetFields(); + form.current.setFieldValue(); + } + function submitClick() { + if (form.current) { + form.current.validate(undefined, (errors, values) => { + if (!errors) { + let submitData = form.current.getFields(); + submitData.orderStartTime = submitData.time[0]; + submitData.orderEndTime = submitData.time[1]; + delete submitData.time; + console.log('submitData', submitData); + // submitData. + $$.modalInfo({ + title: '添加预约调解确认', + content: ( + <div> + 确认添加预约<span className="public-color">{submitData.orderStartTime}</span>- + <span className="public-color">{submitData.orderEndTime}</span>的调解吗? + </div> + ), + okText: '确定添加', + cancelText: '我再想想', + onOk: () => addMeetInfo({ caseId, ...submitData }), + }); + } + }); + } + } + // 添加预约提交 + async function addMeetInfo(submitData) { + global.setSpinning(true); + const res = await addMeetInfoApi(submitData); + global.setSpinning(false); + if (res.type) { + setPreBookVisible(false); + form.current.resetFields(); + getMeetInfo(caseId); + } + } + function radioSubmitClick() { + if (formVideo.current) { + formVideo.current.validate(undefined, (errors, values) => { + if (!errors) { + let submitData = formVideo.current.getFields(); + submitData.orderStartTime = submitData.time[0]; + submitData.orderEndTime = submitData.time[1]; + delete submitData.time; + console.log('submitData', submitData); + $$.modalInfo({ + title: '创建视频号确认', + content: ( + <div> + 确认创建<span className="public-color">{submitData.orderStartTime}</span>- + <span className="public-color">{submitData.orderEndTime}</span>的视频号吗? + </div> + ), + okText: '确定创建', + cancelText: '我再想想', + onOk: () => addRoomInfo({ caseId, ...submitData }), + }); + } + }); + } + } - // 助理列表字典值选择 - async function gatListCourt(data) { - global.setSpinning(true); - const res = await listAssistApi({ courtId: data?.courtId }); - global.setSpinning(false); - if (res.type) { - setListCourt(res.data || []) - } - } + // 添加预约提交 + async function addRoomInfo(submitData) { + global.setSpinning(true); + const res = await addRoomInfoApi(submitData); + global.setSpinning(false); + if (res.type) { + setRadioVisible(false); + formVideo.current.resetFields(); + getMeetInfo(caseId); + } + } - // 回显数据 - async function getJudicialApply() { - global.setSpinning(true); - const res = await getJudicInfoApi({ judicId }); - global.setSpinning(false); - if (res.type) { - setData(res.data); - gatListCourt(res.data || {}); - formRef.current.setFieldsValue(res.data || {}); - setAgree(res.data?.judicResult || '') - } - } - async function getCaseData() { - global.setSpinning(true); - const res = await getCaseDataApi({ id: caseId }); - global.setSpinning(false); - if (res.type) { - const { agentList, personList, ...rest } = res.data - const parList = agentList.concat(personList) - const newParList = parList?.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') { - item.fileList.forEach(res => { - file.push({ - ...res, - uid: res.id, - }) - }) - } - if (item.ownerType == '22_00018-204' || item.ownerType == '22_00018-207') { - item.fileList.forEach(res => { - file1.push({ - ...res, - uid: res.id, - }) - }) - } - }) - } - return { - ...item, - file, - file1 - } - }) || [] - const obj = { - ...rest, - fakeData: newParList, - } - setCaseData(obj) - } - } + function radioResetClick() { + formVideo.current.resetFields(); + } - // 视频调解部分 - // 添加预约重置 - function resetClick() { - form.current.resetFields() - form.current.setFieldValue() - } + function delClick() { + $$.modalInfo({ + title: '删除预约确认', + content: <div>确定删除该预约吗?</div>, + okText: '确定删除', + cancelText: '我再想想', + onOk: () => delMeetInfo({ id: preBookData.id }), + }); + } - function submitClick() { - if (form.current) { - form.current.validate(undefined, (errors, values) => { - if (!errors) { - let submitData = form.current.getFields(); - submitData.orderStartTime = submitData.time[0]; - submitData.orderEndTime = submitData.time[1]; - delete submitData.time - console.log('submitData', submitData); - // submitData. - $$.modalInfo({ - title: '添加预约调解确认', - content: <div>确认添加预约<span className='public-color'>{submitData.orderStartTime}</span>-<span className='public-color'>{submitData.orderEndTime}</span>的调解吗?</div>, - okText: '确定添加', - cancelText: '我再想想', - onOk: () => addMeetInfo({ caseId, ...submitData }), - }); - } - }); - } - } - // 添加预约提交 - async function addMeetInfo(submitData) { - global.setSpinning(true); - const res = await addMeetInfoApi(submitData); - global.setSpinning(false); - if (res.type) { - setPreBookVisible(false) - form.current.resetFields() - getMeetInfo(caseId); - } - } - function radioSubmitClick() { - if (formVideo.current) { - formVideo.current.validate(undefined, (errors, values) => { - if (!errors) { - let submitData = formVideo.current.getFields() - submitData.orderStartTime = submitData.time[0]; - submitData.orderEndTime = submitData.time[1]; - delete submitData.time - console.log('submitData', submitData); - $$.modalInfo({ - title: '创建视频号确认', - content: <div>确认创建<span className='public-color'>{submitData.orderStartTime}</span>-<span className='public-color'>{submitData.orderEndTime}</span>的视频号吗?</div>, - okText: '确定创建', - cancelText: '我再想想', - onOk: () => addRoomInfo({ caseId, ...submitData }), - }); - } - }); - } - } + async function delMeetInfo(submitData) { + global.setSpinning(true); + const res = await delMeetInfoApi(submitData); + global.setSpinning(false); + if (res.type) { + $$.infoSuccess({ content: '删除成功' }); + setPreBookData({}); + } + } - // 添加预约提交 - async function addRoomInfo(submitData) { - global.setSpinning(true); - const res = await addRoomInfoApi(submitData); - global.setSpinning(false); - if (res.type) { - setRadioVisible(false) - formVideo.current.resetFields() - getMeetInfo(caseId); - } - } + // 获取预约调解记录 + async function getMeetInfo(id) { + global.setSpinning(true); + const res = await getMeetInfoApi({ caseId: id }); + global.setSpinning(false); + if (res.type) { + let list = res.data || []; + if (list?.length > 0) { + setPreBookData(list[0]); + } + } + } - function radioResetClick() { - formVideo.current.resetFields() - } + function checkTimeRange(startTime, endTime, currentTime) { + if (currentTime < new Date(startTime)) { + return <div className="public-color">未开始</div>; // 当前时间在时间范围之前 + } else if (currentTime >= new Date(startTime) && currentTime <= new Date(endTime)) { + return <div style={{ color: '#EF6C24' }}>进行中</div>; // 当前时间在时间范围内 + } else { + return <div className="public-orange">已结束</div>; // 当前时间在时间范围之后 + } + } - function delClick() { - $$.modalInfo({ - title: '删除预约确认', - content: <div>确定删除该预约吗?</div>, - okText: '确定删除', - cancelText: '我再想想', - onOk: () => delMeetInfo({ id: preBookData.id }), - }); - } + async function getTransactResult(id) { + const res = await getTransactResultApi(id); + if (res.type) { + if (res.data) { + setTransactResult({ ...res.data }); + } else { + setTransactResult(null); + } + } + } - async function delMeetInfo(submitData) { - global.setSpinning(true); - const res = await delMeetInfoApi(submitData); - global.setSpinning(false); - if (res.type) { - $$.infoSuccess({ content: '删除成功' }); - setPreBookData({}) - } - } + //初始化 + useEffect(() => { + if (caseId) { + getMeetInfo(caseId); + getTransactResult(caseId); + } + if (judicId) { + getCaseData(); + getJudicialApply(); + } + }, []); - // 获取预约调解记录 - async function getMeetInfo(id) { - global.setSpinning(true); - const res = await getMeetInfoApi({ caseId: id }); - global.setSpinning(false); - if (res.type) { - let list = res.data || []; - if (list?.length > 0) { - setPreBookData(list[0]) - } - } - } + return ( + <NewPage pageHead={{ breadcrumbData: [{ title: '工作台' }, { title: '司法确认' }], title: '司法确认' }}> + <Fragment> + <Scrollbars style={{ height: 'calc(100vh - 219px)' }} autoHide> + <div className=" dataSync-noScrollPage"> + <Row gutter={[16, 16]}> + <Col span={24}> + <Space> + <div className="MediationInfo-subTitle"></div> + <span style={{ fontSize: '16px', lineHeight: '24px' }}>申请信息</span> + </Space> + </Col> + <Col span={24}> + <div className="public-infoTitle">案件信息</div> + {/* <div className='judicialSubmit-audit-case' onClick={() => setCaseCheckModal(true)}> */} - function checkTimeRange(startTime, endTime, currentTime) { - if (currentTime < new Date(startTime)) { - return <div className='public-color'>未开始</div>; // 当前时间在时间范围之前 - } else if (currentTime >= new Date(startTime) && currentTime <= new Date(endTime)) { - return <div style={{ color: '#EF6C24' }}>进行中</div>; // 当前时间在时间范围内 - } else { - return <div className='public-orange'>已结束</div>; // 当前时间在时间范围之后 - } - } - - async function getTransactResult(id) { - const res = await getTransactResultApi(id) - if (res.type) { - if (res.data) { - setTransactResult({ ...res.data }) - } else { - setTransactResult(null) - } - } - } - - //初始化 - useEffect(() => { - if (caseId) { - getMeetInfo(caseId); - getTransactResult(caseId) - } - if (judicId) { - getCaseData(); - getJudicialApply(); - } - }, []); - - - - return ( - <NewPage pageHead={{ breadcrumbData: [{ title: '工作台' }, { title: '司法确认' }], title: '司法确认' }}> - <Fragment> - <Scrollbars style={{ height: 'calc(100vh - 219px)' }} autoHide> - <div className=' dataSync-noScrollPage'> - <Row gutter={[16, 16]}> - <Col span={24}> - <Space> - <div className='MediationInfo-subTitle'></div><span style={{ fontSize: '16px', lineHeight: '24px' }}>申请信息</span> - </Space> - </Col> - <Col span={24}> - <div className='public-infoTitle'>案件信息</div> - {/* <div className='judicialSubmit-audit-case' onClick={() => setCaseCheckModal(true)}> */} - - <div className='judicialSubmit-audit-case' onClick={() => window.open(`${$$.windowUrl}/windowDetail?caseTaskId=${caseTaskId}&caseId=${caseId}`)}> - <div style={{ display: 'flex', gap: '16px', alignItems: 'center' }}> - <div><img src={judicial_5} alt="" srcset="" /></div> - <div> - <div className='judicialSubmit-audit-case-flex'> - <div>承办部门:{transactResult?.mediateUnitName || '-'}</div> - <div className='judicialSubmit-audit-case-subTitle'>申请方:{caseData.fakeData?.filter(i => i.perType === '15_020008-1')?.length === 1 ? caseData.fakeData?.filter(i => i.perType === '15_020008-1')[0].trueName : caseData.fakeData?.filter(i => i.perType === '15_020008-1')?.length > 1 ? `${caseData.fakeData?.filter(i => i.perType === '15_020008-1')[0].trueName}...等共${caseData.fakeData?.filter(i => i.perType === '15_020008-1')?.length}人` : '-'} | 被申请方:{caseData.fakeData?.filter(i => i.perType === '15_020008-2')?.length === 1 ? caseData.fakeData?.filter(i => i.perType === '15_020008-1')[0].trueName : caseData.fakeData?.filter(i => i.perType === '15_020008-2')?.length > 1 ? `${caseData.fakeData?.filter(i => i.perType === '15_020008-2')[0].trueName}...等共${caseData.fakeData?.filter(i => i.perType === '15_020008-2')?.length}人` : '-'}</div> - </div> - <div className='judicialSubmit-audit-case-subTitle'>办结时间:{$$.minuteFormat(transactResult?.closeTime)} | {transactResult?.mediResultName || '-'}</div> - </div> - </div> - <div><img src={judicial_6} alt="" srcset="" /></div> - </div> - </Col> - <Col span={24}> - <div className='public-infoTitle'>申请理由</div> - <div className='public-infoSubTitle'>{data?.applyContent || '-'}</div> - </Col> - <Col span={24}> - <div className='public-infoTitle'>调解协议书</div> - { - data?.fileList?.find(i => i.ownerType === '22_00018-302')?.fileList?.length ? - data?.fileList?.find(i => i.ownerType === '22_00018-302')?.fileList?.map((item, index) => { - return <>{item.suffix === 'pdf' ? <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> : <PreviewImage key={index} name={item.name} src={item.showUrl} />}</> - }) - : <div className='public-infoSubTitle'>-</div> - } - </Col> - <Col span={24}> - <div className='public-infoTitle'>非诉讼调解协议司法确认申请书</div> - { - data?.fileList?.find(i => i.ownerType === '22_00018-402')?.fileList?.length ? - data?.fileList?.find(i => i.ownerType === '22_00018-402')?.fileList?.map((item, index) => { - return <>{item.suffix === 'pdf' ? <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> : <PreviewImage key={index} name={item.name} src={item.showUrl} />}</> - }) - : <div className='public-infoSubTitle'>-</div> - } - </Col> - <Col span={24}> - <div className='public-infoTitle'>诉前联调协议案件移送函</div> - { - data?.fileList?.find(i => i.ownerType === '22_00018-403')?.fileList?.length ? - data?.fileList?.find(i => i.ownerType === '22_00018-403')?.fileList?.map((item, index) => { - return <>{item.suffix === 'pdf' ? <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> : <PreviewImage key={index} name={item.name} src={item.showUrl} />}</> - }) - : <div className='public-infoSubTitle'>-</div> - } - </Col> - <Col span={24}> - <div className='public-infoTitle'>送达地址确认书</div> - { - data?.fileList?.find(i => i.ownerType === '22_00018-108')?.fileList?.length ? - data?.fileList?.find(i => i.ownerType === '22_00018-108')?.fileList?.map((item, index) => { - return <>{item.suffix === 'pdf' ? <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> : <PreviewImage key={index} name={item.name} src={item.showUrl} />}</> - }) - : <div className='public-infoSubTitle'>-</div> - } - </Col> - <Col span={24}> - <div className='public-infoTitle'>申请时间</div> - <div className='public-infoSubTitle'>{$$.minuteFormat(data?.applyTime)}</div> - </Col> - <Col span={24}> - <div className='public-infoTitle'>申请人</div> - <div className='public-infoSubTitle'><span className='public-nameCard2'>{(data?.applyUnitName)} <NameCard2 name={data.applyUserName} userId={data.applyUserId} /></span></div> - </Col> - </Row> - </div> - <div style={{ height: '16px' }}></div> - <div className=' dataSync-noScrollPage'> - <Row gutter={[20, 20]}> - <Col span={24}> - <Space> - <div className='MediationInfo-subTitle'></div><span style={{ fontSize: '16px', lineHeight: '24px' }}>司法确认信息</span> - </Space> - </Col> - <Col span={24}> - <table style={{ marginBottom: '0px' }} border="1" align="center" cellpadding="6" className="table"> - <tr> - <th bgcolor="#F7F8FA" className="table-title" width="120" >承办法官</th> - <td width='380'><div className='public-infoSubTitle'><NameCard2 name={data.judgeName} userId={data.judicId} /></div></td> - <th bgcolor="#F7F8FA" className="table-title" width="120">助理/书记员</th> - <td width='380'><div style={{ display: 'flex', gap: '16px', flexWrap: 'wrap' }} className='public-infoSubTitle'>{data?.judicAssistList?.map(i => (<NameCard2 name={i.assUserName} userId={i.assUserId} />))}</div></td> - </tr> - </table> - </Col> - <Col span={24}> - <div className='judicial-item' style={{ marginTop: '0', marginRight: '0' }}> - <div className='handle-content-empty judicial-item-left' > - <div className='judicial-item-title'><img src={judicial_1} alt="" srcset="" />预约信息</div> - { - preBookData?.orderStartTime ? - <div className='judicial-item-content'> - <div className='judicial-item-content-left'> - <div onClick={() => delClick()} className='judicial-item-content-left-del public-a'><img src={judicial_3} alt="" srcset="" /></div> - <div className='judicial-item-content-left-t'> - <div className='judicial-item-content-left-t-l'><div className='judicial-item-content-left-bigTitle public-color'>{$$.myTimeFormat(preBookData?.orderStartTime, 'HH:mm')}</div><div className='public-color'>{$$.myTimeFormat(preBookData?.orderStartTime, 'YYYY年MM月DD日')}</div></div> - <div className='judicial-item-content-left-t-l'> - <Space size='small'> - <div className='judicial-item-content-left-inline'></div> - <div style={{ display: 'flex', flexDirection: 'column', gap: '4px', alignItems: 'center', justifyContent: 'center' }}>{checkTimeRange(preBookData?.orderStartTime, preBookData?.orderEndTime, new Date())}<div className='public-color judicial-item-content-left-time'>{$$.calculateTimeDifference(preBookData?.orderStartTime, preBookData?.orderEndTime)}</div></div> - <div className='judicial-item-content-left-inline'></div> - </Space> - </div> - <div className='judicial-item-content-left-t-l'><div className='judicial-item-content-left-bigTitle public-color'>{$$.myTimeFormat(preBookData?.orderEndTime, 'HH:mm')}</div><div className='public-color'>{$$.myTimeFormat(preBookData?.orderEndTime, 'YYYY年MM月DD日')}</div></div> - </div> - <Divider /> - <div className='judicial-item-content-left-c-flex'> - <div className='judicial-item-content-left-c'> - <div className='judicial-item-content-left-c-title'>司法确认方式</div> - <div className='judicial-item-content-left-c-content'>{preBookData?.meetWayName || '-'}</div> - </div> - <div className='judicial-item-content-left-c'> - <div className='judicial-item-content-left-c-title'>远程视频司法确认号</div> - <div className='judicial-item-content-left-c-content'><span style={{ fontSize: '16px', lineHeight: '24px' }}>{preBookData?.roomNo || '-'}</span> {preBookData?.roomNo && <span onClick={() => { - navigator.clipboard.writeText(preBookData?.roomNo).then(() => { - $$.infoSuccess({ content: '复制成功' }); - }).catch(err => { - $$.catchApiError('复制失败', err); - }); - }} className='public-color public-a'>复制</span>}</div> - </div> - <div className='judicial-item-content-left-c'> - <div className='judicial-item-content-left-c-title'>司法确认地点</div> - <div className='judicial-item-content-left-c-content'>{preBookData?.meetAddr || '-'}</div> - </div> - </div> - </div> - </div> : - <Empty description={<span className='empty-text'>暂无数据</span>} image={empty}><Button onClick={() => setPreBookVisible(true)} type='outline'>添加预约</Button></Empty> - } - </div> - <div className='handle-content-empty judicial-item-left'> - <div className='judicial-item-title'><img src={judicial_2} alt="" srcset="" />远程视频司法确认</div> - { - preBookData?.orderStartTime ? - <div className='judicial-item-video'> - <div className='judicial-item-video-flex'> - <div className='judicial-item-video-img'><img src={judicial_4} alt="" srcset="" /></div> - <div> - <div className='judicial-item-content-left-c-content'><span style={{ fontSize: '16px', lineHeight: '24px' }}>{preBookData?.roomNo || '-'}</span> {preBookData?.roomNo && <span onClick={() => { - navigator.clipboard.writeText(preBookData?.roomNo).then(() => { $$.infoSuccess({ content: '复制成功' }) }).catch(err => { $$.catchApiError('复制失败', err) }) - }} className='public-color public-a'>复制</span>}</div> - <div style={{ color: "#4E5969", marginTop: '4px' }}>{$$.myTimeFormat(preBookData?.orderStartTime, 'YYYY年MM月DD日')} {$$.myTimeFormat(preBookData?.orderStartTime, 'HH:mm')}-{$$.myTimeFormat(preBookData?.orderEndTime, 'HH:mm')}</div> - </div> - </div> - <Alert type='info' content={<span>请使用小鱼易连客户端加入该号码连线</span>} /> - </div> : - <Empty description={<span className='empty-text'>暂无数据</span>} image={empty}><Button onClick={() => setRadioVisible(true)} type='outline'>创建视频号</Button></Empty>} - </div> - </div> - </Col> - - </Row> - - </div> - <div className=' dataSync-noScrollPage'> - <Form - ref={formRef} - layout='vertical' - requiredSymbol={false} - scrollToFirstError={true} - onChange={(first, allValues) => { - if (first?.judicResult) { - setAgree(first?.judicResult) - formRef.current.clearFields() - formRef.current.setFieldsValue({ - judicResult: first.judicResult, - }); - } - }} - initialValues={{ - }}//默认值 - > - <Row> - <Col span={24}> - <FormItem - label={(<div style={{ display: 'flex' }}>司法确认结果</div>)} - field='judicResult' - rules={[{ required: true, message: '请选择司法确认结果' }]} - > - <Radio.Group> - <Space direction="vertical"> - {[{ value: '22_00028-1', label: '已达成', }, { value: '22_00028-2', label: '未达成' }].map((x) => ( - <Radio value={x.value} key={x.value} label={x.label}> - {x.label} - </Radio> - ))} - </Space> - </Radio.Group> - </FormItem> - </Col> - {/* 未达成 */} - {agree === '22_00028-2' && ( - <> - <Col span={24}> - <FormItem - label={(<div style={{ display: 'flex' }}>未达成原因<div className="must">必填</div></div>)} - field='judicFalseCause' - rules={[{ required: true, message: '未达成原因不能为空' }]} - > - <TextArea - rows={5} - maxLength={256} - autoSize={{ minRows: 4, maxRows: 8 }} - placeholder='请填写' - /> - </FormItem> - </Col> - </> - )} - {agree === '22_00028-1' && ( - <> - <Col span={24} className="doubleFile"> - <div style={{ display: 'flex', marginBottom: '8px' }}>裁定文书<div className="must">必填</div></div> - <ArcoUpload - params={{ - action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${caseId}&&ownerId=${judicId}&ownerType=22_00018-405`, - }} - formItemParams={{ - rules: [{ message: '请上传裁定文书', required: true }] - }} - field='filesList' - label='' - editData={{ - filesList: filesList || [] - }} - handleDelFile={handleDelFile} - onFileListChange={(v) => { - let newList = v?.map(item => { - if (item.response) { - return item.response.data[0] - } else { - return item - } - }) - setFilesList(newList) - }} - /> - </Col> - <Col span={24} className="doubleFile"> - <div style={{ display: 'flex', marginBottom: '8px' }}>询问笔录</div> - <ArcoUpload - params={{ - action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${caseId}&&ownerId=${judicId}&ownerType=22_00018-401`, - }} - field='filesList1' - label='' - editData={{ - filesList1: filesList || [] - }} - handleDelFile={handleDelFile} - onFileListChange={(v) => { - let newList = v?.map(item => { - if (item.response) { - return item.response.data[0] - } else { - return item - } - }) - setFilesList(newList) - }} - /> - </Col> - <Col span={24}> - <FormItem - label={(<div style={{ display: 'flex' }}>诉前调确号</div>)} - field='mediateJudicNo' - > - <Input style={{ width: '450px' }} placeholder='请填写审判系统中的诉前调确号(如有)' allowClear /> - </FormItem> - </Col> - <Col span={24}> - <FormItem - label={(<div style={{ display: 'flex' }}>结案说明</div>)} - field='judicContent' - > - <TextArea - rows={5} - maxLength={256} - autoSize={{ minRows: 4, maxRows: 8 }} - placeholder='请填写' - /> - </FormItem> - </Col> - </> - )} - - - </Row> - </Form > - </div> - </Scrollbars> - <div className="dataSync-excel"> - <Space size="large" style={{ margin: '4px 14px' }}> - <Button onClick={() => handleApply('submit')} type="primary" className="dialogPrimary">办结</Button> - <Button onClick={() => handleApply('draft')} type="outline" className="dialogPrimary">保存</Button> - <Button type='secondary' onClick={() => navigate(-1)}>返回上级页面</Button> - </Space> - </div> - </Fragment> - <MyModal width={1200} visible={caseCheckModal} onCancel={() => setCaseCheckModal(false)} footer={false}> - <CaseDetail caseId={caseId} caseData={caseData} /> - </MyModal> - <Modal - title='添加预约' - style={{ width: '40%' }} - className='judicial-handle-modal' - onCancel={() => setPreBookVisible(false)} - visible={preBookVisible} - footer={null} - > - <Row style={{ height: '480px', position: 'relative' }}> - <Col span={24} > - <Form - ref={form} - layout='vertical' - requiredSymbol={false} - initialValues={{ - meetWay: '22_00021-3', - meetWayName: '线上 + 线下' - }}//默认值 - scrollToFirstError - > - <Row> - <Col span={24}> - <Form.Item rules={[{ required: true, message: '请选择预约调解时间' }]} label={(<div style={{ display: 'flex' }}>预约调解时间<div className="must">必填</div></div>)} field="time"> - <RangePicker - showTime={{ format: 'HH:mm' }} - allowClear={true} - style={{ width: '100%' }} - /> - </Form.Item> - </Col> - <Col span={24}> - <FormItem - label='纠纷化解方式' - field='meetWay' - > - <Select - placeholder='请选择' - allowClear={false} - options={$$.options.meetWay} - onChange={(value, options) => { - form.current.setFieldValue('meetWayName', options && options.children) - }} - /> - </FormItem> - </Col> - <Col span={24}> - <FormItem label='纠纷化解地点' field='meetAddr'> - <Input placeholder='请填写' /> - </FormItem> - </Col> - </Row> - </Form> - <div style={{ display: 'flex', alignItems: 'center', gap: '16px', position: 'absolute', bottom: '0' }}> - <Button type="primary" onClick={() => submitClick()}>提交</Button> - <Button onClick={() => resetClick()} danger>重置</Button> - </div> - </Col> - </Row> - </Modal> - <Modal - title='创建远程调解视频号' - style={{ width: '40%' }} - className='judicial-handle-modal' - onCancel={() => setRadioVisible(false)} - visible={radioVisible} - footer={null} - > - <Row style={{ height: '480px', position: 'relative' }}> - <Col span={24} > - <Form - ref={formVideo} - layout='vertical' - requiredSymbol={false} - scrollToFirstError - > - <Row> - <Col span={24}> - <Form.Item style={{ marginBottom: '8px' }} rules={[{ required: true, message: '请选择有效期' }]} label={(<div style={{ display: 'flex' }}>有效期<div className="must">必填</div></div>)} field="time"> - <RangePicker - showTime={{ format: 'HH:mm' }} - allowClear={true} - style={{ width: '100%' }} - /> - </Form.Item> - <Alert type='info' content={<span>创建成功后请在有效期内使用小鱼易连客户端加入该号码连线</span>} /> - </Col> - </Row> - </Form> - <div style={{ display: 'flex', alignItems: 'center', gap: '16px', position: 'absolute', bottom: '0' }}> - <Button type="primary" onClick={() => radioSubmitClick()}>提交</Button> - <Button onClick={() => radioResetClick()} danger>重置</Button> - </div> - </Col> - </Row> - </Modal> - </NewPage > - ); + <div + className="judicialSubmit-audit-case" + onClick={() => window.open(`${$$.windowUrl}/windowDetail?caseTaskId=${caseTaskId}&caseId=${caseId}`)} + > + <div style={{ display: 'flex', gap: '16px', alignItems: 'center' }}> + <div> + <img src={judicial_5} alt="" srcset="" /> + </div> + <div> + <div className="judicialSubmit-audit-case-flex"> + <div>承办部门:{transactResult?.mediateUnitName || '-'}</div> + <div className="judicialSubmit-audit-case-subTitle"> + 申请方: + {caseData.fakeData?.filter((i) => i.perType === '15_020008-1')?.length === 1 + ? caseData.fakeData?.filter((i) => i.perType === '15_020008-1')[0].trueName + : caseData.fakeData?.filter((i) => i.perType === '15_020008-1')?.length > 1 + ? `${caseData.fakeData?.filter((i) => i.perType === '15_020008-1')[0].trueName}...等共${ + caseData.fakeData?.filter((i) => i.perType === '15_020008-1')?.length + }人` + : '-'}{' '} + | 被申请方: + {caseData.fakeData?.filter((i) => i.perType === '15_020008-2')?.length === 1 + ? caseData.fakeData?.filter((i) => i.perType === '15_020008-1')[0].trueName + : caseData.fakeData?.filter((i) => i.perType === '15_020008-2')?.length > 1 + ? `${caseData.fakeData?.filter((i) => i.perType === '15_020008-2')[0].trueName}...等共${ + caseData.fakeData?.filter((i) => i.perType === '15_020008-2')?.length + }人` + : '-'} + </div> + </div> + <div className="judicialSubmit-audit-case-subTitle"> + 办结时间:{$$.minuteFormat(transactResult?.closeTime)} | {transactResult?.mediResultName || '-'} + </div> + </div> + </div> + <div> + <img src={judicial_6} alt="" srcset="" /> + </div> + </div> + </Col> + <Col span={24}> + <div className="public-infoTitle">申请理由</div> + <div className="public-infoSubTitle">{data?.applyContent || '-'}</div> + </Col> + <Col span={24}> + <div className="public-infoTitle">调解协议书</div> + {data?.fileList?.find((i) => i.ownerType === '22_00018-302')?.fileList?.length ? ( + data?.fileList + ?.find((i) => i.ownerType === '22_00018-302') + ?.fileList?.map((item, index) => { + return ( + <> + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> + </> + ); + }) + ) : ( + <div className="public-infoSubTitle">-</div> + )} + </Col> + <Col span={24}> + <div className="public-infoTitle">非诉讼调解协议司法确认申请书</div> + {data?.fileList?.find((i) => i.ownerType === '22_00018-402')?.fileList?.length ? ( + data?.fileList + ?.find((i) => i.ownerType === '22_00018-402') + ?.fileList?.map((item, index) => { + return ( + <> + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> + </> + ); + }) + ) : ( + <div className="public-infoSubTitle">-</div> + )} + </Col> + <Col span={24}> + <div className="public-infoTitle">诉前联调协议案件移送函</div> + {data?.fileList?.find((i) => i.ownerType === '22_00018-403')?.fileList?.length ? ( + data?.fileList + ?.find((i) => i.ownerType === '22_00018-403') + ?.fileList?.map((item, index) => { + return ( + <> + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> + </> + ); + }) + ) : ( + <div className="public-infoSubTitle">-</div> + )} + </Col> + <Col span={24}> + <div className="public-infoTitle">送达地址确认书</div> + {data?.fileList?.find((i) => i.ownerType === '22_00018-108')?.fileList?.length ? ( + data?.fileList + ?.find((i) => i.ownerType === '22_00018-108') + ?.fileList?.map((item, index) => { + return ( + <> + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> + </> + ); + }) + ) : ( + <div className="public-infoSubTitle">-</div> + )} + </Col> + <Col span={24}> + <div className="public-infoTitle">申请时间</div> + <div className="public-infoSubTitle">{$$.minuteFormat(data?.applyTime)}</div> + </Col> + <Col span={24}> + <div className="public-infoTitle">申请人</div> + <div className="public-infoSubTitle"> + <span className="public-nameCard2"> + {data?.applyUnitName} + <NameCard2 name={data.applyUserName} userId={data.applyUserId} /> + </span> + </div> + </Col> + </Row> + </div> + <div style={{ height: '16px' }}></div> + <div className=" dataSync-noScrollPage"> + <Row gutter={[20, 20]}> + <Col span={24}> + <Space> + <div className="MediationInfo-subTitle"></div> + <span style={{ fontSize: '16px', lineHeight: '24px' }}>司法确认信息</span> + </Space> + </Col> + <Col span={24}> + <table style={{ marginBottom: '0px' }} border="1" align="center" cellpadding="6" className="table"> + <tr> + <th bgcolor="#F7F8FA" className="table-title" width="120"> + 承办法官 + </th> + <td width="380"> + <div className="public-infoSubTitle"> + <NameCard2 name={data.judgeName} userId={data.judicId} /> + </div> + </td> + <th bgcolor="#F7F8FA" className="table-title" width="120"> + 助理/书记员 + </th> + <td width="380"> + <div style={{ display: 'flex', gap: '16px', flexWrap: 'wrap' }} className="public-infoSubTitle"> + {data?.judicAssistList?.map((i) => ( + <NameCard2 name={i.assUserName} userId={i.assUserId} /> + ))} + </div> + </td> + </tr> + </table> + </Col> + <Col span={24}> + <div className="judicial-item" style={{ marginTop: '0', marginRight: '0' }}> + <div className="handle-content-empty judicial-item-left"> + <div className="judicial-item-title"> + <img src={judicial_1} alt="" srcset="" /> + 预约信息 + </div> + {preBookData?.orderStartTime ? ( + <div className="judicial-item-content"> + <div className="judicial-item-content-left"> + <div onClick={() => delClick()} className="judicial-item-content-left-del public-a"> + <img src={judicial_3} alt="" srcset="" /> + </div> + <div className="judicial-item-content-left-t"> + <div className="judicial-item-content-left-t-l"> + <div className="judicial-item-content-left-bigTitle public-color"> + {$$.myTimeFormat(preBookData?.orderStartTime, 'HH:mm')} + </div> + <div className="public-color">{$$.myTimeFormat(preBookData?.orderStartTime, 'YYYY年MM月DD日')}</div> + </div> + <div className="judicial-item-content-left-t-l"> + <Space size="small"> + <div className="judicial-item-content-left-inline"></div> + <div style={{ display: 'flex', flexDirection: 'column', gap: '4px', alignItems: 'center', justifyContent: 'center' }}> + {checkTimeRange(preBookData?.orderStartTime, preBookData?.orderEndTime, new Date())} + <div className="public-color judicial-item-content-left-time"> + {$$.calculateTimeDifference(preBookData?.orderStartTime, preBookData?.orderEndTime)} + </div> + </div> + <div className="judicial-item-content-left-inline"></div> + </Space> + </div> + <div className="judicial-item-content-left-t-l"> + <div className="judicial-item-content-left-bigTitle public-color"> + {$$.myTimeFormat(preBookData?.orderEndTime, 'HH:mm')} + </div> + <div className="public-color">{$$.myTimeFormat(preBookData?.orderEndTime, 'YYYY年MM月DD日')}</div> + </div> + </div> + <Divider /> + <div className="judicial-item-content-left-c-flex"> + <div className="judicial-item-content-left-c"> + <div className="judicial-item-content-left-c-title">司法确认方式</div> + <div className="judicial-item-content-left-c-content">{preBookData?.meetWayName || '-'}</div> + </div> + <div className="judicial-item-content-left-c"> + <div className="judicial-item-content-left-c-title">远程视频司法确认号</div> + <div className="judicial-item-content-left-c-content"> + <span style={{ fontSize: '16px', lineHeight: '24px' }}>{preBookData?.roomNo || '-'}</span> + {preBookData?.roomNo && ( + <span + onClick={() => { + navigator.clipboard + .writeText(preBookData?.roomNo) + .then(() => { + $$.infoSuccess({ content: '复制成功' }); + }) + .catch((err) => { + $$.catchApiError('复制失败', err); + }); + }} + className="public-color public-a" + > + 复制 + </span> + )} + </div> + </div> + <div className="judicial-item-content-left-c"> + <div className="judicial-item-content-left-c-title">司法确认地点</div> + <div className="judicial-item-content-left-c-content">{preBookData?.meetAddr || '-'}</div> + </div> + </div> + </div> + </div> + ) : ( + <Empty description={<span className="empty-text">暂无数据</span>} image={empty}> + <Button onClick={() => setPreBookVisible(true)} type="outline"> + 添加预约 + </Button> + </Empty> + )} + </div> + <div className="handle-content-empty judicial-item-left"> + <div className="judicial-item-title"> + <img src={judicial_2} alt="" srcset="" /> + 远程视频司法确认 + </div> + {preBookData?.orderStartTime ? ( + <div className="judicial-item-video"> + <div className="judicial-item-video-flex"> + <div className="judicial-item-video-img"> + <img src={judicial_4} alt="" srcset="" /> + </div> + <div> + <div className="judicial-item-content-left-c-content"> + <span style={{ fontSize: '16px', lineHeight: '24px' }}>{preBookData?.roomNo || '-'}</span> + {preBookData?.roomNo && ( + <span + onClick={() => { + navigator.clipboard + .writeText(preBookData?.roomNo) + .then(() => { + $$.infoSuccess({ content: '复制成功' }); + }) + .catch((err) => { + $$.catchApiError('复制失败', err); + }); + }} + className="public-color public-a" + > + 复制 + </span> + )} + </div> + <div style={{ color: '#4E5969', marginTop: '4px' }}> + {$$.myTimeFormat(preBookData?.orderStartTime, 'YYYY年MM月DD日')} + {$$.myTimeFormat(preBookData?.orderStartTime, 'HH:mm')}-{$$.myTimeFormat(preBookData?.orderEndTime, 'HH:mm')} + </div> + </div> + </div> + <Alert type="info" content={<span>请使用小鱼易连客户端加入该号码连线</span>} /> + </div> + ) : ( + <Empty description={<span className="empty-text">暂无数据</span>} image={empty}> + <Button onClick={() => setRadioVisible(true)} type="outline"> + 创建视频号 + </Button> + </Empty> + )} + </div> + </div> + </Col> + </Row> + </div> + <div className=" dataSync-noScrollPage"> + <Form + ref={formRef} + layout="vertical" + requiredSymbol={false} + scrollToFirstError={true} + onChange={(first, allValues) => { + if (first?.judicResult) { + setAgree(first?.judicResult); + formRef.current.clearFields(); + formRef.current.setFieldsValue({ + judicResult: first.judicResult, + }); + } + }} + initialValues={{}} //默认值 + > + <Row> + <Col span={24}> + <FormItem + label={<div style={{ display: 'flex' }}>司法确认结果</div>} + field="judicResult" + rules={[{ required: true, message: '请选择司法确认结果' }]} + > + <Radio.Group> + <Space direction="vertical"> + {[ + { value: '22_00028-1', label: '已达成' }, + { value: '22_00028-2', label: '未达成' }, + ].map((x) => ( + <Radio value={x.value} key={x.value} label={x.label}> + {x.label} + </Radio> + ))} + </Space> + </Radio.Group> + </FormItem> + </Col> + {/* 未达成 */} + {agree === '22_00028-2' && ( + <> + <Col span={24}> + <FormItem + label={ + <div style={{ display: 'flex' }}> + 未达成原因<div className="must">必填</div> + </div> + } + field="judicFalseCause" + rules={[{ required: true, message: '未达成原因不能为空' }]} + > + <TextArea rows={5} maxLength={256} autoSize={{ minRows: 4, maxRows: 8 }} placeholder="请填写" /> + </FormItem> + </Col> + </> + )} + {agree === '22_00028-1' && ( + <> + <Col span={24} className="doubleFile"> + <div style={{ display: 'flex', marginBottom: '8px' }}> + 裁定文书<div className="must">必填</div> + </div> + <ArcoUpload + params={{ + action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${caseId}&&ownerId=${judicId}&ownerType=22_00018-405`, + }} + formItemParams={{ + rules: [{ message: '请上传裁定文书', required: true }], + }} + field="filesList" + label="" + editData={{ + filesList: filesList || [], + }} + handleDelFile={handleDelFile} + onFileListChange={(v) => { + let newList = v?.map((item) => { + if (item.response) { + return item.response.data[0]; + } else { + return item; + } + }); + setFilesList(newList); + }} + /> + </Col> + <Col span={24} className="doubleFile"> + <div style={{ display: 'flex', marginBottom: '8px' }}>询问笔录</div> + <ArcoUpload + params={{ + action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${caseId}&&ownerId=${judicId}&ownerType=22_00018-401`, + }} + field="filesList1" + label="" + editData={{ + filesList1: filesList || [], + }} + handleDelFile={handleDelFile} + onFileListChange={(v) => { + let newList = v?.map((item) => { + if (item.response) { + return item.response.data[0]; + } else { + return item; + } + }); + setFilesList(newList); + }} + /> + </Col> + <Col span={24}> + <FormItem label={<div style={{ display: 'flex' }}>诉前调确号</div>} field="mediateJudicNo"> + <Input style={{ width: '450px' }} placeholder="请填写审判系统中的诉前调确号(如有)" allowClear /> + </FormItem> + </Col> + <Col span={24}> + <FormItem label={<div style={{ display: 'flex' }}>结案说明</div>} field="judicContent"> + <TextArea rows={5} maxLength={256} autoSize={{ minRows: 4, maxRows: 8 }} placeholder="请填写" /> + </FormItem> + </Col> + </> + )} + </Row> + </Form> + </div> + </Scrollbars> + <div className="dataSync-excel"> + <Space size="large" style={{ margin: '4px 14px' }}> + <Button onClick={() => handleApply('submit')} type="primary" className="dialogPrimary"> + 办结 + </Button> + <Button onClick={() => handleApply('draft')} type="outline" className="dialogPrimary"> + 保存 + </Button> + <Button type="secondary" onClick={() => navigate(-1)}> + 返回上级页面 + </Button> + </Space> + </div> + </Fragment> + <MyModal width={1200} visible={caseCheckModal} onCancel={() => setCaseCheckModal(false)} footer={false}> + <CaseDetail caseId={caseId} caseData={caseData} /> + </MyModal> + <Modal + title="添加预约" + style={{ width: '40%' }} + className="judicial-handle-modal" + onCancel={() => setPreBookVisible(false)} + visible={preBookVisible} + footer={null} + > + <Row style={{ height: '480px', position: 'relative' }}> + <Col span={24}> + <Form + ref={form} + layout="vertical" + requiredSymbol={false} + initialValues={{ + meetWay: '22_00021-3', + meetWayName: '线上 + 线下', + }} //默认值 + scrollToFirstError + > + <Row> + <Col span={24}> + <Form.Item + rules={[{ required: true, message: '请选择预约调解时间' }]} + label={ + <div style={{ display: 'flex' }}> + 预约调解时间<div className="must">必填</div> + </div> + } + field="time" + > + <RangePicker showTime={{ format: 'HH:mm' }} allowClear={true} style={{ width: '100%' }} /> + </Form.Item> + </Col> + <Col span={24}> + <FormItem label="纠纷化解方式" field="meetWay"> + <Select + placeholder="请选择" + allowClear={false} + options={$$.options.meetWay} + onChange={(value, options) => { + form.current.setFieldValue('meetWayName', options && options.children); + }} + /> + </FormItem> + </Col> + <Col span={24}> + <FormItem label="纠纷化解地点" field="meetAddr"> + <Input placeholder="请填写" /> + </FormItem> + </Col> + </Row> + </Form> + <div style={{ display: 'flex', alignItems: 'center', gap: '16px', position: 'absolute', bottom: '0' }}> + <Button type="primary" onClick={() => submitClick()}> + 提交 + </Button> + <Button onClick={() => resetClick()} danger> + 重置 + </Button> + </div> + </Col> + </Row> + </Modal> + <Modal + title="创建远程调解视频号" + style={{ width: '40%' }} + className="judicial-handle-modal" + onCancel={() => setRadioVisible(false)} + visible={radioVisible} + footer={null} + > + <Row style={{ height: '480px', position: 'relative' }}> + <Col span={24}> + <Form ref={formVideo} layout="vertical" requiredSymbol={false} scrollToFirstError> + <Row> + <Col span={24}> + <Form.Item + style={{ marginBottom: '8px' }} + rules={[{ required: true, message: '请选择有效期' }]} + label={ + <div style={{ display: 'flex' }}> + 有效期<div className="must">必填</div> + </div> + } + field="time" + > + <RangePicker showTime={{ format: 'HH:mm' }} allowClear={true} style={{ width: '100%' }} /> + </Form.Item> + <Alert type="info" content={<span>创建成功后请在有效期内使用小鱼易连客户端加入该号码连线</span>} /> + </Col> + </Row> + </Form> + <div style={{ display: 'flex', alignItems: 'center', gap: '16px', position: 'absolute', bottom: '0' }}> + <Button type="primary" onClick={() => radioSubmitClick()}> + 提交 + </Button> + <Button onClick={() => radioResetClick()} danger> + 重置 + </Button> + </div> + </Col> + </Row> + </Modal> + </NewPage> + ); }; - - export default CourtAuditEdit; diff --git a/src/views/register/closeCaseEdit/preview.jsx b/src/views/register/closeCaseEdit/preview.jsx index eec0d66..1d3bc1b 100644 --- a/src/views/register/closeCaseEdit/preview.jsx +++ b/src/views/register/closeCaseEdit/preview.jsx @@ -329,10 +329,10 @@ <div ><div className="title-text">事项来源</div></div> <div>{props.data?.canalName || '大厅来访'}</div> </Col> - <Col span={16}> + {/* <Col span={16}> <div ><div className="title-text">来访形式</div></div> <div>来访</div> - </Col> + </Col> */} <Col span={24}> <div className="title"><div className="title-text">事项概况</div></div> <div>{props.data?.caseDes || '-'} </div> @@ -341,6 +341,10 @@ <div className="title"><div className="title-text">事项申请</div></div> <div>{props.data?.caseClaim || '-'}</div> </Col> + <Col span={24}> + <div className="title"><div className="title-text">事项备注</div></div> + <div>{props.data?.caseRemark || '-'}</div> + </Col> <Col span={8}> <div className="title title-gap"> {props.data?.majorStatus === 1 && <img src={majorStatus_1} alt="" srcset="" />} diff --git a/src/views/register/eventFlow/component/AssignedModel.jsx b/src/views/register/eventFlow/component/AssignedModel.jsx index 68f5ea6..58e3809 100644 --- a/src/views/register/eventFlow/component/AssignedModel.jsx +++ b/src/views/register/eventFlow/component/AssignedModel.jsx @@ -54,7 +54,7 @@ if (type === 1) { formRef.current.setFieldValue( 'assignContent', - '本事项经初步核实,认为属于贵部门职责范围内的矛盾纠纷化解工作。请组织专门人员负责此事,尽快查明事实真相,依法依规进行处理,并在处理过程中充分考虑当事人的合理诉求,确保公平公正,维护当事人的合法权益。同时,请务必保持与当事人的沟通畅通,及时反馈办理进展,以增强矛盾纠纷化解工作的透明度和公信力。' + '经核查,本矛盾纠纷事项属于贵单位职能管辖范围,请组织专人跟进化解,并及时反馈化解进展情况。' ); } else { formRef.current.setFieldValue('assignContent', ''); diff --git a/src/views/register/eventFlow/component/EscalationModel.jsx b/src/views/register/eventFlow/component/EscalationModel.jsx index e4028b3..f1c1f7e 100644 --- a/src/views/register/eventFlow/component/EscalationModel.jsx +++ b/src/views/register/eventFlow/component/EscalationModel.jsx @@ -75,9 +75,9 @@ const handleTemplate = (type) => { if (type === 1) { - formRef.current.setFieldValue('appearContent', '经初步核查,该事项较为复杂,且涉及多个相关部门的协调配合,为确保能够高效、妥善地解决当事人的问题,特此请求上级给予指导和支持。') + formRef.current.setFieldValue('appearContent', '经我部门核查,该矛盾纠纷涉及XX业务,化解事权应由XX部门牵头,特请求上级协调交办XX部门牵头办理。') } else { - formRef.current.setFieldValue('appearContent', '') + formRef.current.setFieldValue('appearContent', '经综合研判,该纠纷事权在XX区/镇街,特请移交XX区/镇街牵头办理。') } } @@ -123,7 +123,8 @@ </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' style={{ marginRight: '22px' }} onClick={() => { handleTemplate(1) }}>公共模板1:申请移交上级职能部门范本</div> + <div className='myTag' style={{ marginRight: '22px' }} onClick={() => { handleTemplate(2) }}>公共模板2:跨区域纠纷移交上报范本</div> </div> <FormItem label={(<div style={{ display: 'flex' }}>上报意见<div className="must">必填</div></div>)} diff --git a/src/views/register/handleFeedback/component/CaseResult.jsx b/src/views/register/handleFeedback/component/CaseResult.jsx index 505b4cd..5e83457 100644 --- a/src/views/register/handleFeedback/component/CaseResult.jsx +++ b/src/views/register/handleFeedback/component/CaseResult.jsx @@ -87,25 +87,40 @@ const handleTemplate = (type) => { setSelectedTemplate(type); if (type === 1) { - formRef.current.setFieldValue('windupContent', '双方当事人于xx时间xx地址已达成xx协议,纠纷已化解。') - } else { - formRef.current.setFieldValue('windupContent', '') + formRef.current.setFieldValue('windupContent', '当事人XXX已于XX年X月X日支付赔偿金XX元,纠纷已化解。') + } else if (type === 2) { + formRef.current.setFieldValue('windupContent', '用人单位已于XX年X月X日补发劳动者工资差额人民币XX元整,纠纷已化解。') + } else if (type === 3) { + formRef.current.setFieldValue('windupContent', '双方当事人已达成协议,纠纷不涉及赔偿问题,纠纷已化解。') } } const handleTemplate1 = (type) => { setSelectedTemplate1(type); if (type === 1) { - formRef.current.setFieldValue('agreeContent', '根据纠纷化解人员的协调,当事人双方同意如下调解协议:[简要说明协议第一条][简要说明协议第二条][……]本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。') + formRef.current.setFieldValue('agreeContent', '据工作人员协调,当事人双方达成一致调解意见:\n1.被申请方一次性向申请方支付人民币 XX 元,于协议达成后XX日内付清;\n2.双方就此次纠纷不再追究任何法律责任。\n本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。') + } else if (type === 2) { + formRef.current.setFieldValue('agreeContent', '据工作人员协调,当事人双方达成一致调解意见:\n1.被申请方承诺每日XX时间段不得产生明显噪音;\n2.双方就此次纠纷不再追究任何法律责任。\n本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。') + } else if (type === 3) { + formRef.current.setFieldValue('agreeContent', '据工作人员协调,当事人双方达成一致调解意见:\n1.被申请方自即日起停止在公共区域堆放杂物;\n2.双方就此次纠纷不再追究任何法律责任。\n本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。') + } else if (type === 4) { + formRef.current.setFieldValue('agreeContent', '据工作人员协调,当事人双方达成一致调解意见:\n1.用人单位于XX时间补发劳动者工资XX元;\n2.双方就此次纠纷不再追究任何法律责任。\n本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。') } } const handleTemplate2 = (type) => { setSelectedTemplate2(type); + // if (type === 1) { + // formRefWrite.current.setFieldValue('windupContent', '双方当事人于xx时间xx地址已达成xx协议,纠纷已化解。') + // } else { + // formRefWrite.current.setFieldValue('windupContent', '') + // } if (type === 1) { - formRefWrite.current.setFieldValue('windupContent', '双方当事人于xx时间xx地址已达成xx协议,纠纷已化解。') - } else { - formRefWrite.current.setFieldValue('windupContent', '') + formRefWrite.current.setFieldValue('windupContent', '当事人XXX已于XX年X月X日支付赔偿金XX元,纠纷已化解。') + } else if (type === 2) { + formRefWrite.current.setFieldValue('windupContent', '用人单位已于XX年X月X日补发劳动者工资差额人民币XX元整,纠纷已化解。') + } else if (type === 3) { + formRefWrite.current.setFieldValue('windupContent', '双方当事人已达成协议,纠纷不涉及赔偿问题,纠纷已化解。') } } @@ -277,7 +292,28 @@ style={{ marginRight: '22px' }} onClick={() => handleTemplate1(1)} > - 公共模板:调解成功口头协议 + 口头协议范本(经济纠纷) + </div> + <div + className={`myTag ${selectedTemplate1 === 1 ? 'highlighted' : ''}`} // 条件样式 + style={{ marginRight: '22px' }} + onClick={() => handleTemplate1(2)} + > + 口头协议范本(邻里纠纷-噪音) + </div> + <div + className={`myTag ${selectedTemplate1 === 1 ? 'highlighted' : ''}`} // 条件样式 + style={{ marginRight: '22px' }} + onClick={() => handleTemplate1(3)} + > + 口头协议范本(邻里纠纷-公共区域) + </div> + <div + className={`myTag ${selectedTemplate1 === 1 ? 'highlighted' : ''}`} // 条件样式 + style={{ marginRight: '22px' }} + onClick={() => handleTemplate1(4)} + > + 口头协议范本(劳资纠纷) </div> </div> </> @@ -299,7 +335,21 @@ style={{ marginRight: '22px' }} onClick={() => handleTemplate(1)} > - 公共模板:化解成功协议履行情况范本 + 公共模板:赔偿纠纷和解协议 + </div> + <div + className={`myTag ${selectedTemplate === 1 ? 'highlighted' : ''}`} // 条件样式 + style={{ marginRight: '22px' }} + onClick={() => handleTemplate(2)} + > + 公共模板:劳资纠纷和解协议 + </div> + <div + className={`myTag ${selectedTemplate === 1 ? 'highlighted' : ''}`} // 条件样式 + style={{ marginRight: '22px' }} + onClick={() => handleTemplate(3)} + > + 公共模板:邻里纠纷和解协议 </div> </div> <FormItem @@ -363,7 +413,21 @@ style={{ marginRight: '22px' }} onClick={() => handleTemplate2(1)} > - 公共模板:化解成功协议履行情况范本 + 公共模板:赔偿纠纷和解协议 + </div> + <div + className={`myTag ${selectedTemplate2 === 1 ? 'highlighted' : ''}`} // 条件样式 + style={{ marginRight: '22px' }} + onClick={() => handleTemplate2(2)} + > + 公共模板:劳资纠纷和解协议 + </div> + <div + className={`myTag ${selectedTemplate2 === 1 ? 'highlighted' : ''}`} // 条件样式 + style={{ marginRight: '22px' }} + onClick={() => handleTemplate2(3)} + > + 公共模板:邻里纠纷和解协议 </div> </div> diff --git a/src/views/register/index.jsx b/src/views/register/index.jsx index d1989a8..5a040c7 100644 --- a/src/views/register/index.jsx +++ b/src/views/register/index.jsx @@ -10,6 +10,7 @@ import { useNavigate } from 'react-router-dom'; import { tab0, tab1, tab2, tab3, tab4, tab5, tab6, allSign, tab1bg } from '@/assets/images'; import TableView from '../../components/TableView'; +import NewPage from '../../components/NewPage'; import TableDraftSearch from '../../components/TableDraftSearch'; import TableSearch from '../../components/TableSearch'; import MyTabsNew from '../../components/MyTabsNew'; @@ -499,7 +500,12 @@ title: '事项来源', dataIndex: 'caseSource', key: 'caseSource', - width: 120, + width: 150, + render: (text, record) => { + return record.caseSecondSource && record.caseSecondSource !== null + ? `${text}/${record.caseSecondSource}` + : text; + }, }, { title: '问题属地', @@ -2863,7 +2869,7 @@ sortColmn: 2, status: '1', }); - }else { + } else { setSearchData({ sortType: 2, sortColmn: 1, @@ -3570,603 +3576,619 @@ console.log('tableTab', tableTab, tabActivekey, tableData); return ( - <div className="VisitWorkBench"> - <div className="VisitWorkBench-top"> - <span style={{ fontWeight: 600 }}>工作总览</span> - <div className="VisitWorkBench-top-list"> - {Object.keys(tabsMap).map((key) => ( - <div - key={key} - className="VisitWorkBench-top-list-tabsItem" - style={{ - ...(tabActivekey !== key ? { backgroundColor: tabsMap[key].workTotal.bgColor } : {}), - ...(tabActivekey === key - ? { - backgroundImage: `url(${require(`../../assets/images/${tabsMap[key].workTotal.bgImage}`)})`, - border: `1px solid ${tabsMap[key].workTotal.borderColor}`, - backgroundRepeat: 'no-repeat', - backgroundSize: 'cover', - maxWidth: '100%', - height: 'auto', - } - : {}), - }} - onClick={() => tabActive(key, tabsMap[key])} - > - <div> - <div>{tabsMap[key].workTotal.label}</div> - <span className="VisitWorkBench-top-list-tabsItem-title">{countData[tabsMap[key].workTotal.value] || 0}</span>件 - </div> - <div> - <img src={tabsMap[key].workTotal.img} alt="" className="VisitWorkBench-top-list-tabsItem-imgView" /> - </div> - </div> - ))} - </div> - </div> - <div - className="VisitWorkBench-middle" - onKeyUp={(e) => { - if (e.key === 'Enter') { - handleSubmit(); - } - }} - > - <Tabs activeTab={searchData.status} onChange={handleColumnType} destroyOnHide> - {tableTab?.map((item) => { - return ( - <TabPane - key={item.value} - title={ - <span style={{ fontSize: '15px' }}> - {item.label} - {item.numberKey ? `(${countData[item.numberKey] || 0})` : ''} - </span> - } - > - <Typography.Paragraph key={tabActivekey + item.value}> - {tabActivekey == '5' && searchData.status != '2' && ( - <Radio.Group - type="button" - value={searchData.type} - onChange={(value) => { - setSearchData({ - ...searchData, - type: value, - }); - }} - style={{ marginBottom: 16 }} - options={[ - { - label: `回退审核${searchData.status === '0' ? `(${countData.returnReview || 0})` : ''}`, - value: 1, - }, - { - label: `上报审核${searchData.status === '0' ? `(${countData.appearReview || 0})` : ''}`, - value: 2, - }, - { - label: `结案申请审核${searchData.status === '0' ? `(${countData.windupReview || 0})` : ''}`, - value: 3, - }, - { - label: `联合处置审核${searchData.status === '0' ? `(${countData.assistReview || 0})` : ''}`, - value: 4, - }, - ]} - /> - )} - {tabActivekey == '4' && ( - <Radio.Group - type="button" - value={searchData.caseTaskType} - onChange={(value) => { - setSearchData({ - ...searchData, - caseTaskType: value, - }); - }} - style={{ marginBottom: 16 }} - options={[ - { - label: '我承办的', - value: 1, - }, - { - label: '我配合的', - value: 2, - }, - ]} - /> - )} - <TableView - rowSelection={tabActivekey == '2' && item.value === '1' ? rowSelection : null} - columns={item.columnsMap ? item.columnsMap[tabActivekey == '4' ? searchData.caseTaskType : searchData.type] : item.columns} - dataSource={tableData} - // tableHeight={'100%'} - size="small" - rowKey="ownerId" - bordered={true} - isScroll={true} //兼容以前的,当需要表格竖向滚动,请设置这个 - scroll={{ - x: 1300, - }} - offsetHeight={165} - loading={loading} - pagination={{ - current: pageData.page, - pageSize: pageData.size, - total: total, - onChange: (page, pageSize) => { - setPageData({ - ...pageData, - page, - size: pageSize, - }); - }, - }} - onChange={(pagination, filters, sorter) => { - handleSort(sorter); - }} - /> - </Typography.Paragraph> - {tabActivekey == '2' && item.value === '1' && selectedRowKeys.length != 0 && ( - <div className="VisitWorkBench-middle-select"> - <span>已选{selectedRowKeys.length}项</span> - <span - className="linkBtnColor" - onClick={() => { - setSelectedRowKeys([]); - setSelectedRows([]); - }} - > - 取消 - </span> - <span className="linkBtnColor" onClick={handleBatchQs}> - 批量签收 - </span> - </div> - )} - </TabPane> - ); - })} - </Tabs> - <div className="VisitWorkBench-middle-search"> - <Form ref={formRef} layout="vertical"> - <div style={{ display: 'flex' }}> - {tabActivekey == '2' && searchData.status === '1' && selectedRowKeys.length != 0 && ( - <div - onClick={handleAllSign} - style={{ color: '#1a6fb8', cursor: 'pointer', marginRight: '16px', width: '85px', textAlign: 'center', paddingTop: '3px' }} - > - <img src={allSign} alt="" className="title-file" /> - 全部签收 - </div> - )} - {tabActivekey == '0' && ( - <FormItem label=" " field="caseStatus" style={{ width: '160px' }}> - <Select allowClear placeholder="请选择"> - {[ - { value: '1', label: '未办结' }, - { value: '2', label: '已办结' }, - { value: '3', label: '不予受理' }, - ]?.map((y) => ( - <Option value={y.value}>事项状态:{y.label}</Option> - ))} - </Select> - </FormItem> - )} - <FormItem label=" " field="time" style={{ width: '300px' }}> - <RangePicker - style={{ width: '100%' }} - shortcutsPlacementLeft={true} - shortcuts={$$.shortcutsList()} - format="YYYY-MM-DD HH:mm" - showTime={true} - placeholder={getPlaceholder()} - /> - </FormItem> - <FormItem label=" " field="partyName" style={{ width: '250px' }}> - <Input allowClear placeholder="查询申请方/被申请方关键词" /> - </FormItem> - <Button type="primary" className="dialogPrimary" onClick={handleSubmit}> - 查询 - </Button> - </div> - </Form> - </div> - </div> - <div className="VisitWorkBench-bottom"> - <div className="VisitWorkBench-bottom-list"> - <div style={{ backgroundColor: '#fff', padding: '12px 16px 16px 16px', flex: '1' }}> - <div className="VisitWorkBench-bottom-head"> - <span>事项登记</span> - <span - onClick={() => modalClick('his')} - style={{ cursor: 'pointer', display: 'flex', alignItems: 'center', gap: '4px' }} - className="public-color" - > - <img style={{ width: '18px' }} src={workDash_15} alt="" srcset="" /> 登记历史 - </span> - </div> - <div className="VisitWorkBench-bottom-list-l"> + <NewPage> + <div className="VisitWorkBench"> + <div className="VisitWorkBench-top"> + <span style={{ fontWeight: 600 }}>工作总览</span> + <div className="VisitWorkBench-top-list"> + {Object.keys(tabsMap).map((key) => ( <div - className="bottomTab3" - onClick={() => { - navigate(`/mediate/visit`); - // let userInfo = $$.getSessionStorage('customerSystemUser'); - // if (userInfo?.unit.endsWith('综治中心')) { - // navigate(`/mediate/visit`); - // } else { - // // 提示您所在的机构无法使用大厅来访 - // $$.info({ type: 'error', content: '您所在的机构无法使用大厅来访' }); - // } + key={key} + className="VisitWorkBench-top-list-tabsItem" + style={{ + ...(tabActivekey !== key ? { backgroundColor: tabsMap[key].workTotal.bgColor } : {}), + ...(tabActivekey === key + ? { + backgroundImage: `url(${require(`../../assets/images/${tabsMap[key].workTotal.bgImage}`)})`, + border: `1px solid ${tabsMap[key].workTotal.borderColor}`, + backgroundRepeat: 'no-repeat', + backgroundSize: 'cover', + maxWidth: '100%', + height: 'auto', + } + : {}), }} + onClick={() => tabActive(key, tabsMap[key])} > - <div className="VisitWorkBench-bottom-title" style={{ color: '#206BCD' }}> - 大厅来访 - </div> - {/* <img src={visitInto} alt='' className='VisitWorkBench-bottom-img' /> */} - </div> - <div - className="bottomTab4" - onClick={() => { - setInspectionVisible(true); - }} - > - <div className="VisitWorkBench-bottom-title" style={{ color: '#D46B08' }}> - 自行排查 - </div> - {/* <img src={checkInto} alt='' className='VisitWorkBench-bottom-img' /> */} - </div> - </div> - </div> - <div className="VisitWorkBench-bottom-list-r"> - <div className="VisitWorkBench-bottom-list-r-item"> - <div className="VisitWorkBench-bottom-head">已办事项</div> - <div onClick={() => modalClick('done')} className="VisitWorkBench-bottom-list-r-item-content"> - <img src={visitWorkBench_1} alt="" srcset="" /> <div> - <div className="VisitWorkBench-bottom-list-r-item-content-title">全部已办</div> - <div className="VisitWorkBench-bottom-list-r-item-content-num"> - {countData.alreadyDone || 0} <span className="VisitWorkBench-bottom-list-r-item-content-unit">件</span> - </div> + <div>{tabsMap[key].workTotal.label}</div> + <span className="VisitWorkBench-top-list-tabsItem-title">{countData[tabsMap[key].workTotal.value] || 0}</span>件 </div> - </div> - </div> - <div className="VisitWorkBench-bottom-list-r-item"> - <div className="VisitWorkBench-bottom-head">效能分析</div> - <div - onClick={() => { - navigate(`/mediate/workEfficiency`); - }} - className="VisitWorkBench-bottom-list-r-item-content VisitWorkBench-bottom-list-r-item-content-red" - > - <img src={efficiency} alt="" srcset="" /> <div> - <div className="VisitWorkBench-bottom-list-r-item-content-title">超时任务</div> - <div className="VisitWorkBench-bottom-list-r-item-content-num"> - {countData.timeOut || 0} <span className="VisitWorkBench-bottom-list-r-item-content-unit">件</span> - </div> + <img src={tabsMap[key].workTotal.img} alt="" className="VisitWorkBench-top-list-tabsItem-imgView" /> </div> </div> - </div> - <div className="VisitWorkBench-bottom-list-r-item"> - <div className="VisitWorkBench-bottom-head">草稿箱</div> - <div - onClick={() => modalClick('draft')} - className="VisitWorkBench-bottom-list-r-item-content VisitWorkBench-bottom-list-r-item-content-orange" - > - <img src={visitWorkBench_2} alt="" srcset="" /> - <div> - <div className="VisitWorkBench-bottom-list-r-item-content-title">事项草稿</div> - <div className="VisitWorkBench-bottom-list-r-item-content-num"> - {countData.caseDraft || 0} <span className="VisitWorkBench-bottom-list-r-item-content-unit">件</span> - </div> - </div> - </div> - </div> + ))} </div> </div> - </div> - <Modal - title={<div style={{ textAlign: 'left' }}>{modalData.title}</div>} - style={{ width: '80%' }} - onCancel={() => { - setModalData({ ...modalData, visible: false, list: [], title: '', type: '' }); - }} - closable={true} - visible={modalData.visible} - footer={null} - > - {modalData.type === 'draft' && ( - <div> - <TableDraftSearch - labelLength={4} - exportButtonShow={false} - handleText={'重置'} - form={form} - itemData={[ - { type: 'RangePicker', name: 'updateTime', label: '保存时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 6 }, - { type: 'Input', name: 'plaintiffs', placeholder: '查询关键词', label: '申请方', span: 6 }, - { type: 'Input', name: 'defendants', placeholder: '查询关键词', label: '被申请方', span: 6 }, - ]} - handleReset={() => handleSearch('draft', 'reset')} - handleSearch={() => handleSearch('draft', 'search')} - /> - <div style={{ width: '100%', borderBottom: '1px solid #E5E6EB', marginBottom: '12px' }}></div> - <div style={{ marginTop: '0px' }}> - <TableView - showHeader - title="查询结果" - columns={columns()} - dataSource={data.tableData} - onChange={(pagination, filters, sorter) => { - handleChangePage(pagination.current, pagination.pageSize, sorter.field, sorter.order); - // handleSearch('change', { ...search, sortType: sorter.field === 'waitDay' ? 2 : 1, descType: sorter.order === 'descend' ? 2 : sorter.order === 'ascend' ? 1 : '', page: pagination.current, size: pagination.pageSize }); - }} - pagination={{ - current: search.page, - pageSize: search.size, - total: data.total, - // onChange: (page, pageSize, sorter) => handleChangePage(page, pageSize, sorter), - }} - /> - </div> - </div> - )} - {modalData.type === 'his' && ( - <div> - <TableSearch - labelLength={4} - exportButtonShow={false} - displayShow={false} - textAlign={{ textAlign: 'left' }} - form={form} - itemData={[ - { type: 'RangePicker', name: 'createTime', label: '登记时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 6 }, - { type: 'Input', name: 'plaintiffs', placeholder: '查询关键词', label: '申请方', span: 6 }, - { type: 'Input', name: 'defendants', placeholder: '查询关键词', label: '被申请方', span: 6 }, - { - type: 'Select', - name: 'status', - label: '事项状态', - placeholder: '请选择', - span: 8, - selectdata: $$.options.caseStatus, - }, - { - type: 'Cascader', - name: 'caseType', - label: '纠纷类型', - placeholder: '请选择', - span: 8, - treedata: $$.caseTypeSelect.caseTypeSelect, - }, - { - type: 'Select', - name: 'canal', - label: '事项来源', - placeholder: '请选择', - span: 8, - selectdata: $$.options.caseCanal, - }, - { - type: 'Select', - name: 'caseLevel', - label: '事项等级', - placeholder: '请选择', - span: 8, - selectdata: $$.options.caseLevelList, - }, - { - type: 'Select', - name: 'mediResult', - label: '化解结果', - placeholder: '请选择', - span: 8, - selectdata: $$.options.mediResult, - }, - ]} - handleReset={() => handleSearch('his', 'reset')} - handleSearch={() => handleSearch('his', 'search')} - /> - <div style={{ width: '100%', borderBottom: '1px solid #E5E6EB', margin: '12px 0' }}></div> - <div style={{ marginTop: '0px' }}> - <TableView - showHeader - title="查询结果" - columns={columnsHis()} - dataSource={data.tableData} - onChange={(pagination, filters, sorter) => { - handleChangePage(pagination.current, pagination.pageSize, sorter.field, sorter.order); - // handleSearch('change', { ...search, sortType: sorter.field === 'waitDay' ? 2 : 1, descType: sorter.order === 'descend' ? 2 : sorter.order === 'ascend' ? 1 : '', page: pagination.current, size: pagination.pageSize }); - }} - pagination={{ - current: search.page, - pageSize: search.size, - total: data.total, - // onChange: (page, pageSize, sorter) => handleChangePage(page, pageSize, sorter), - }} - /> - </div> - </div> - )} - {modalData.type === 'done' && ( - <div> - <TableSearch - labelLength={4} - exportButtonShow={false} - displayShow={false} - textAlign={{ textAlign: 'left' }} - form={form} - itemData={[ - { - type: 'RangePicker', - name: 'handleTime', - label: '统计时间', - allowClear: false, - shortcutsPlacementLeft: true, - shortcuts: $$.shortcutsList(), - span: 6, - }, - { - type: 'Cascader', - name: 'caseType', - label: '纠纷类型', - placeholder: '请选择', - span: 8, - changeSelect: true, - allowClear: false, - treedata: $$.caseTypeSelect.caseTypeSelect, - }, - { type: 'Select', name: 'caseLevel', label: '事项等级', placeholder: '请选择', span: 8, selectdata: $$.options.caseLevelList }, - { type: 'Select', name: 'canal', label: '事项来源', placeholder: '请选择', span: 8, selectdata: $$.options.caseCanal }, - { type: 'Select', name: 'mediResult', label: '化解结果', placeholder: '请选择', span: 8, selectdata: $$.options.mediResult }, - { type: 'Select', name: 'status', label: '事项状态', placeholder: '请选择', span: 8, selectdata: $$.options.caseStatus }, - ]} - handleReset={() => handleSearch('done', 'reset')} - handleSearch={() => handleSearch('done', 'search')} - /> - <div style={{ width: '100%', borderBottom: '1px solid #E5E6EB', margin: '12px 0' }}></div> - <div style={{ marginTop: '0px' }}> - <div style={{ fontSize: '16px' }}>查询结果</div> - <div style={{ width: '100%', position: 'relative' }}> - <MyTabsNew - // 1-已受理,2-已交办,3-已上报,4已回退 - tabs={[ - { label: <div style={{ height: '24px' }}>全部({data?.totalData?.totalNum || 0})</div>, key: '' }, - { label: <div style={{ height: '24px' }}>已受理({data?.totalData?.acceptNum || 0})</div>, key: '1' }, - { label: <div style={{ height: '24px' }}>已交办({data?.totalData?.assignedNum || 0})</div>, key: '2' }, - { label: <div style={{ height: '24px' }}>已上报({data?.totalData?.reportNUm || 0})</div>, key: '3' }, - { label: <div style={{ height: '24px' }}>已回退({data?.totalData?.backNUm || 0})</div>, key: '4' }, - ]} - activeKey={tabKey} - onChange={(activeKey) => tabsOnchange(activeKey)} - /> - <div style={{ borderBottom: '1px solid #E5E6EB', position: 'absolute', width: '100%' }}></div> - </div> - <div style={{ margin: '12px 0' }}> - <Alert - type="success" - content={ - <span> - 已为您生成 - {tabKey !== '' && ( - <span> - <span className="public-color"> - {tabKey === '1' - ? '受理时间' - : tabKey === '2' - ? '交办时间' - : tabKey === '3' - ? '上报时间' - : tabKey === '4' - ? '回退时间' - : ''} - </span> - 在 - </span> - )} - {search.handleTimeStart && ( - <span className="public-color"> - {$$.myTimeFormat(search.handleTimeStart, 'YYYY.M.D')}-{$$.myTimeFormat(search.handleTimeEnd, 'YYYY.M.D')} - </span> - )} - {/*{search.closeStart && <span className='public-color'>{search.createStart && '、'}办结时间({$$.myTimeFormat(search.createStart, 'YYYY.M.D')}-{$$.myTimeFormat(search.createEnd, 'YYYY.M.D')})</span>} - {search.caseType && <span className='public-color'>{(search.createStart || search.closeStart) && '、'}纠纷类型({caseTypeNames.join('/')})</span>} */} - 内的已办矛盾纠纷 + <div + className="VisitWorkBench-middle" + onKeyUp={(e) => { + if (e.key === 'Enter') { + handleSubmit(); + } + }} + > + <Tabs activeTab={searchData.status} onChange={handleColumnType} destroyOnHide> + {tableTab?.map((item) => { + return ( + <TabPane + key={item.value} + title={ + <span style={{ fontSize: '15px' }}> + {item.label} + {item.numberKey ? `(${countData[item.numberKey] || 0})` : ''} </span> } + > + <Typography.Paragraph key={tabActivekey + item.value}> + {tabActivekey == '5' && searchData.status != '2' && ( + <Radio.Group + type="button" + value={searchData.type} + onChange={(value) => { + setSearchData({ + ...searchData, + type: value, + }); + }} + style={{ marginBottom: 16 }} + options={[ + { + label: `回退审核${searchData.status === '0' ? `(${countData.returnReview || 0})` : ''}`, + value: 1, + }, + { + label: `上报审核${searchData.status === '0' ? `(${countData.appearReview || 0})` : ''}`, + value: 2, + }, + { + label: `结案申请审核${searchData.status === '0' ? `(${countData.windupReview || 0})` : ''}`, + value: 3, + }, + { + label: `联合处置审核${searchData.status === '0' ? `(${countData.assistReview || 0})` : ''}`, + value: 4, + }, + ]} + /> + )} + {tabActivekey == '4' && ( + <Radio.Group + type="button" + value={searchData.caseTaskType} + onChange={(value) => { + setSearchData({ + ...searchData, + caseTaskType: value, + }); + }} + style={{ marginBottom: 16 }} + options={[ + { + label: '我承办的', + value: 1, + }, + { + label: '我配合的', + value: 2, + }, + ]} + /> + )} + <TableView + rowSelection={tabActivekey == '2' && item.value === '1' ? rowSelection : null} + columns={item.columnsMap ? item.columnsMap[tabActivekey == '4' ? searchData.caseTaskType : searchData.type] : item.columns} + dataSource={tableData} + // tableHeight={'100%'} + size="small" + rowKey="ownerId" + bordered={true} + isScroll={true} //兼容以前的,当需要表格竖向滚动,请设置这个 + scroll={{ + x: 1300, + }} + offsetHeight={165} + loading={loading} + pagination={{ + current: pageData.page, + pageSize: pageData.size, + total: total, + onChange: (page, pageSize) => { + setPageData({ + ...pageData, + page, + size: pageSize, + }); + }, + }} + onChange={(pagination, filters, sorter) => { + handleSort(sorter); + }} + /> + </Typography.Paragraph> + {tabActivekey == '2' && item.value === '1' && selectedRowKeys.length != 0 && ( + <div className="VisitWorkBench-middle-select"> + <span>已选{selectedRowKeys.length}项</span> + <span + className="linkBtnColor" + onClick={() => { + setSelectedRowKeys([]); + setSelectedRows([]); + }} + > + 取消 + </span> + <span className="linkBtnColor" onClick={handleBatchQs}> + 批量签收 + </span> + </div> + )} + </TabPane> + ); + })} + </Tabs> + <div className="VisitWorkBench-middle-search"> + <Form ref={formRef} layout="vertical"> + <div style={{ display: 'flex' }}> + {tabActivekey == '2' && searchData.status === '1' && selectedRowKeys.length != 0 && ( + <div + onClick={handleAllSign} + style={{ color: '#1a6fb8', cursor: 'pointer', marginRight: '16px', width: '85px', textAlign: 'center', paddingTop: '3px' }} + > + <img src={allSign} alt="" className="title-file" /> + 全部签收 + </div> + )} + {tabActivekey == '0' && ( + <FormItem label=" " field="caseStatus" style={{ width: '160px' }}> + <Select allowClear placeholder="请选择"> + {[ + { value: '1', label: '未办结' }, + { value: '2', label: '已办结' }, + { value: '3', label: '不予受理' }, + ]?.map((y) => ( + <Option value={y.value}>事项状态:{y.label}</Option> + ))} + </Select> + </FormItem> + )} + <FormItem label=" " field="time" style={{ width: '300px' }}> + <RangePicker + style={{ width: '100%' }} + shortcutsPlacementLeft={true} + shortcuts={$$.shortcutsList()} + format="YYYY-MM-DD HH:mm" + showTime={true} + placeholder={getPlaceholder()} + /> + </FormItem> + <FormItem label=" " field="partyName" style={{ width: '250px' }}> + <Input allowClear placeholder="查询申请方/被申请方关键词" /> + </FormItem> + <Button type="primary" className="dialogPrimary" onClick={handleSubmit}> + 查询 + </Button> + </div> + </Form> + </div> + </div> + <div className="VisitWorkBench-bottom"> + <div className="VisitWorkBench-bottom-list"> + <div style={{ backgroundColor: '#fff', padding: '12px 16px 16px 16px', flex: '1' }}> + <div className="VisitWorkBench-bottom-head"> + <span>事项登记</span> + <span + onClick={() => modalClick('his')} + style={{ cursor: 'pointer', display: 'flex', alignItems: 'center', gap: '4px' }} + className="public-color" + > + <img style={{ width: '18px' }} src={workDash_15} alt="" srcset="" /> 登记历史 + </span> + </div> + <div className="VisitWorkBench-bottom-list-l"> + <div + className="bottomTab3" + onClick={() => { + navigate(`/mediate/visit`); + // let userInfo = $$.getSessionStorage('customerSystemUser'); + // if (userInfo?.unit.endsWith('综治中心')) { + // navigate(`/mediate/visit`); + // } else { + // // 提示您所在的机构无法使用大厅来访 + // $$.info({ type: 'error', content: '您所在的机构无法使用大厅来访' }); + // } + }} + > + <div className="VisitWorkBench-bottom-title" style={{ color: '#206BCD' }}> + 大厅来访 + </div> + {/* <img src={visitInto} alt='' className='VisitWorkBench-bottom-img' /> */} + </div> + <div + className="bottomTab4" + onClick={() => { + setInspectionVisible(true); + }} + > + <div className="VisitWorkBench-bottom-title" style={{ color: '#D46B08' }}> + 自行排查 + </div> + {/* <img src={checkInto} alt='' className='VisitWorkBench-bottom-img' /> */} + </div> + </div> + </div> + <div className="VisitWorkBench-bottom-list-r"> + <div className="VisitWorkBench-bottom-list-r-item"> + <div className="VisitWorkBench-bottom-head">已办事项</div> + <div onClick={() => modalClick('done')} className="VisitWorkBench-bottom-list-r-item-content"> + <img src={visitWorkBench_1} alt="" srcset="" /> + <div> + <div className="VisitWorkBench-bottom-list-r-item-content-title">全部已办</div> + <div className="VisitWorkBench-bottom-list-r-item-content-num"> + {countData.alreadyDone || 0} <span className="VisitWorkBench-bottom-list-r-item-content-unit">件</span> + </div> + </div> + </div> + </div> + <div className="VisitWorkBench-bottom-list-r-item"> + <div className="VisitWorkBench-bottom-head">效能分析</div> + <div + onClick={() => { + navigate(`/mediate/workEfficiency`); + }} + className="VisitWorkBench-bottom-list-r-item-content VisitWorkBench-bottom-list-r-item-content-red" + > + <img src={efficiency} alt="" srcset="" /> + <div> + <div className="VisitWorkBench-bottom-list-r-item-content-title">超时任务</div> + <div className="VisitWorkBench-bottom-list-r-item-content-num"> + {countData.timeOut || 0} <span className="VisitWorkBench-bottom-list-r-item-content-unit">件</span> + </div> + </div> + </div> + </div> + <div className="VisitWorkBench-bottom-list-r-item"> + <div className="VisitWorkBench-bottom-head">草稿箱</div> + <div + onClick={() => modalClick('draft')} + className="VisitWorkBench-bottom-list-r-item-content VisitWorkBench-bottom-list-r-item-content-orange" + > + <img src={visitWorkBench_2} alt="" srcset="" /> + <div> + <div className="VisitWorkBench-bottom-list-r-item-content-title">事项草稿</div> + <div className="VisitWorkBench-bottom-list-r-item-content-num"> + {countData.caseDraft || 0} <span className="VisitWorkBench-bottom-list-r-item-content-unit">件</span> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + <Modal + title={<div style={{ textAlign: 'left' }}>{modalData.title}</div>} + style={{ width: '80%' }} + onCancel={() => { + setModalData({ ...modalData, visible: false, list: [], title: '', type: '' }); + }} + closable={true} + visible={modalData.visible} + footer={null} + > + {modalData.type === 'draft' && ( + <div> + <TableDraftSearch + labelLength={4} + exportButtonShow={false} + handleText={'重置'} + form={form} + itemData={[ + { + type: 'RangePicker', + name: 'updateTime', + label: '保存时间', + shortcutsPlacementLeft: true, + shortcuts: $$.shortcutsList(), + span: 6, + }, + { type: 'Input', name: 'plaintiffs', placeholder: '查询关键词', label: '申请方', span: 6 }, + { type: 'Input', name: 'defendants', placeholder: '查询关键词', label: '被申请方', span: 6 }, + ]} + handleReset={() => handleSearch('draft', 'reset')} + handleSearch={() => handleSearch('draft', 'search')} + /> + <div style={{ width: '100%', borderBottom: '1px solid #E5E6EB', marginBottom: '12px' }}></div> + <div style={{ marginTop: '0px' }}> + <TableView + showHeader + title="查询结果" + columns={columns()} + dataSource={data.tableData} + onChange={(pagination, filters, sorter) => { + handleChangePage(pagination.current, pagination.pageSize, sorter.field, sorter.order); + // handleSearch('change', { ...search, sortType: sorter.field === 'waitDay' ? 2 : 1, descType: sorter.order === 'descend' ? 2 : sorter.order === 'ascend' ? 1 : '', page: pagination.current, size: pagination.pageSize }); + }} + pagination={{ + current: search.page, + pageSize: search.size, + total: data.total, + // onChange: (page, pageSize, sorter) => handleChangePage(page, pageSize, sorter), + }} /> </div> - <TableView - // showHeader - // title="查询结果" - columns={columnsDone} - key={tabKey} - dataSource={data.tableData} - onChange={(pagination, filters, sorter) => { - handleChangePage(pagination.current, pagination.pageSize, sorter.field, sorter.order); - // handleSearch('change', { ...search, sortType: sorter.field === 'waitDay' ? 2 : 1, descType: sorter.order === 'descend' ? 2 : sorter.order === 'ascend' ? 1 : '', page: pagination.current, size: pagination.pageSize }); - }} - pagination={{ - current: search.page, - pageSize: search.size, - total: data.total, - // onChange: (page, pageSize, sorter) => handleChangePage(page, pageSize, sorter), - }} + </div> + )} + {modalData.type === 'his' && ( + <div> + <TableSearch + labelLength={4} + exportButtonShow={false} + displayShow={false} + textAlign={{ textAlign: 'left' }} + form={form} + itemData={[ + { + type: 'RangePicker', + name: 'createTime', + label: '登记时间', + shortcutsPlacementLeft: true, + shortcuts: $$.shortcutsList(), + span: 6, + }, + { type: 'Input', name: 'plaintiffs', placeholder: '查询关键词', label: '申请方', span: 6 }, + { type: 'Input', name: 'defendants', placeholder: '查询关键词', label: '被申请方', span: 6 }, + { + type: 'Select', + name: 'status', + label: '事项状态', + placeholder: '请选择', + span: 8, + selectdata: $$.options.caseStatus, + }, + { + type: 'Cascader', + name: 'caseType', + label: '纠纷类型', + placeholder: '请选择', + span: 8, + treedata: $$.caseTypeSelect.caseTypeSelect, + }, + { + type: 'Select', + name: 'canal', + label: '事项来源', + placeholder: '请选择', + span: 8, + selectdata: $$.options.caseCanal, + }, + { + type: 'Select', + name: 'caseLevel', + label: '事项等级', + placeholder: '请选择', + span: 8, + selectdata: $$.options.caseLevelList, + }, + { + type: 'Select', + name: 'mediResult', + label: '化解结果', + placeholder: '请选择', + span: 8, + selectdata: $$.options.mediResult, + }, + ]} + handleReset={() => handleSearch('his', 'reset')} + handleSearch={() => handleSearch('his', 'search')} /> + <div style={{ width: '100%', borderBottom: '1px solid #E5E6EB', margin: '12px 0' }}></div> + <div style={{ marginTop: '0px' }}> + <TableView + showHeader + title="查询结果" + columns={columnsHis()} + dataSource={data.tableData} + onChange={(pagination, filters, sorter) => { + handleChangePage(pagination.current, pagination.pageSize, sorter.field, sorter.order); + // handleSearch('change', { ...search, sortType: sorter.field === 'waitDay' ? 2 : 1, descType: sorter.order === 'descend' ? 2 : sorter.order === 'ascend' ? 1 : '', page: pagination.current, size: pagination.pageSize }); + }} + pagination={{ + current: search.page, + pageSize: search.size, + total: data.total, + // onChange: (page, pageSize, sorter) => handleChangePage(page, pageSize, sorter), + }} + /> + </div> </div> - </div> - )} - </Modal> - <Response visible={response} handleOnCancel={() => setResponse(false)} responseId={responseId} data={superviseInfo} /> - <Modal title="督办信息" style={{ width: '938px' }} onCancel={() => setSupervisingList(false)} visible={supervisingList} footer={null}> - <TableView - showHeader - title="" - columns={supervisingColumns} - dataSource={SuperviseListData || []} - rowKey="id" - tableHeight={500} - style={{ marginTop: '-40px' }} + )} + {modalData.type === 'done' && ( + <div> + <TableSearch + labelLength={4} + exportButtonShow={false} + displayShow={false} + textAlign={{ textAlign: 'left' }} + form={form} + itemData={[ + { + type: 'RangePicker', + name: 'handleTime', + label: '统计时间', + allowClear: false, + shortcutsPlacementLeft: true, + shortcuts: $$.shortcutsList(), + span: 6, + }, + { + type: 'Cascader', + name: 'caseType', + label: '纠纷类型', + placeholder: '请选择', + span: 8, + changeSelect: true, + allowClear: false, + treedata: $$.caseTypeSelect.caseTypeSelect, + }, + { type: 'Select', name: 'caseLevel', label: '事项等级', placeholder: '请选择', span: 8, selectdata: $$.options.caseLevelList }, + { type: 'Select', name: 'canal', label: '事项来源', placeholder: '请选择', span: 8, selectdata: $$.options.caseCanal }, + { type: 'Select', name: 'mediResult', label: '化解结果', placeholder: '请选择', span: 8, selectdata: $$.options.mediResult }, + { type: 'Select', name: 'status', label: '事项状态', placeholder: '请选择', span: 8, selectdata: $$.options.caseStatus }, + ]} + handleReset={() => handleSearch('done', 'reset')} + handleSearch={() => handleSearch('done', 'search')} + /> + <div style={{ width: '100%', borderBottom: '1px solid #E5E6EB', margin: '12px 0' }}></div> + <div style={{ marginTop: '0px' }}> + <div style={{ fontSize: '16px' }}>查询结果</div> + <div style={{ width: '100%', position: 'relative' }}> + <MyTabsNew + // 1-已受理,2-已交办,3-已上报,4已回退 + tabs={[ + { label: <div style={{ height: '24px' }}>全部({data?.totalData?.totalNum || 0})</div>, key: '' }, + { label: <div style={{ height: '24px' }}>已受理({data?.totalData?.acceptNum || 0})</div>, key: '1' }, + { label: <div style={{ height: '24px' }}>已交办({data?.totalData?.assignedNum || 0})</div>, key: '2' }, + { label: <div style={{ height: '24px' }}>已上报({data?.totalData?.reportNUm || 0})</div>, key: '3' }, + { label: <div style={{ height: '24px' }}>已回退({data?.totalData?.backNUm || 0})</div>, key: '4' }, + ]} + activeKey={tabKey} + onChange={(activeKey) => tabsOnchange(activeKey)} + /> + <div style={{ borderBottom: '1px solid #E5E6EB', position: 'absolute', width: '100%' }}></div> + </div> + <div style={{ margin: '12px 0' }}> + <Alert + type="success" + content={ + <span> + 已为您生成 + {tabKey !== '' && ( + <span> + <span className="public-color"> + {tabKey === '1' + ? '受理时间' + : tabKey === '2' + ? '交办时间' + : tabKey === '3' + ? '上报时间' + : tabKey === '4' + ? '回退时间' + : ''} + </span> + 在 + </span> + )} + {search.handleTimeStart && ( + <span className="public-color"> + {$$.myTimeFormat(search.handleTimeStart, 'YYYY.M.D')}-{$$.myTimeFormat(search.handleTimeEnd, 'YYYY.M.D')} + </span> + )} + {/*{search.closeStart && <span className='public-color'>{search.createStart && '、'}办结时间({$$.myTimeFormat(search.createStart, 'YYYY.M.D')}-{$$.myTimeFormat(search.createEnd, 'YYYY.M.D')})</span>} + {search.caseType && <span className='public-color'>{(search.createStart || search.closeStart) && '、'}纠纷类型({caseTypeNames.join('/')})</span>} */} + 内的已办矛盾纠纷 + </span> + } + /> + </div> + <TableView + // showHeader + // title="查询结果" + columns={columnsDone} + key={tabKey} + dataSource={data.tableData} + onChange={(pagination, filters, sorter) => { + handleChangePage(pagination.current, pagination.pageSize, sorter.field, sorter.order); + // handleSearch('change', { ...search, sortType: sorter.field === 'waitDay' ? 2 : 1, descType: sorter.order === 'descend' ? 2 : sorter.order === 'ascend' ? 1 : '', page: pagination.current, size: pagination.pageSize }); + }} + pagination={{ + current: search.page, + pageSize: search.size, + total: data.total, + // onChange: (page, pageSize, sorter) => handleChangePage(page, pageSize, sorter), + }} + /> + </div> + </div> + )} + </Modal> + <Response visible={response} handleOnCancel={() => setResponse(false)} responseId={responseId} data={superviseInfo} /> + <Modal title="督办信息" style={{ width: '938px' }} onCancel={() => setSupervisingList(false)} visible={supervisingList} footer={null}> + <TableView + showHeader + title="" + columns={supervisingColumns} + dataSource={SuperviseListData || []} + rowKey="id" + tableHeight={500} + style={{ marginTop: '-40px' }} + /> + </Modal> + <ResponseDetail visible={detail} handleOnCancel={() => setDetail(false)} data={responseDetail} /> + <SupervisingViews + visible={supervising} + handleOnCancel={() => setSupervising(false)} + caseId={supervisingAddId} + supervisingId={supervisingId} + getTableData={() => getTableData('1')} /> - </Modal> - <ResponseDetail visible={detail} handleOnCancel={() => setDetail(false)} data={responseDetail} /> - <SupervisingViews - visible={supervising} - handleOnCancel={() => setSupervising(false)} - caseId={supervisingAddId} - supervisingId={supervisingId} - getTableData={() => getTableData('1')} - /> - <Modal title="自行排查" style={{ width: '512px' }} onCancel={() => setInspectionVisible(false)} visible={inspectionVisible} footer={null}> - <div className="troubleshooting"> - <div className="troubleshooting-left"> - <img src={troubleshooting} alt="" srcset="" /> - <div> - <div className="troubleshooting-left-top">部门排查</div> - <div className="troubleshooting-left-bottom">部门自行化解矛盾或提交纠纷至综治中心化解</div> + <Modal title="自行排查" style={{ width: '512px' }} onCancel={() => setInspectionVisible(false)} visible={inspectionVisible} footer={null}> + <div className="troubleshooting"> + <div className="troubleshooting-left"> + <img src={troubleshooting} alt="" srcset="" /> + <div> + <div className="troubleshooting-left-top">部门排查</div> + <div className="troubleshooting-left-bottom">部门自行化解矛盾或提交纠纷至综治中心化解</div> + </div> </div> + <Button + type="primary" + onClick={() => { + navigate(`/mediate/selfInspection`); + }} + > + 登记 + </Button> </div> - <Button - type="primary" - onClick={() => { - navigate(`/mediate/selfInspection`); - }} - > - 登记 - </Button> - </div> - <Divider /> - <div className="troubleshooting"> - <div className="troubleshooting-left"> - <img src={peopleMediation} alt="" srcset="" /> - <div> - <div className="troubleshooting-left-top">调解组织录入</div> - <div className="troubleshooting-left-bottom">调解员或调解组织自行受理案件</div> + <Divider /> + <div className="troubleshooting"> + <div className="troubleshooting-left"> + <img src={peopleMediation} alt="" srcset="" /> + <div> + <div className="troubleshooting-left-top">调解组织录入</div> + <div className="troubleshooting-left-bottom">调解员或调解组织自行受理案件</div> + </div> </div> + <Button + type="primary" + onClick={() => { + navigate(`/mediate/selfInspection?isOrganization=true`); + }} + > + 登记 + </Button> </div> - <Button - type="primary" - onClick={() => { - navigate(`/mediate/selfInspection?isOrganization=true`); - }} - > - 登记 - </Button> - </div> - </Modal> - <AiQuestion - visible={AiQuestionView} - onClose={() => setAiQuestionView(false)} - aiData={aiData} - aiLawData={aiLawData} - caseDetailAi={caseDetailAi} - caseClaim={caseClaim} - /> - </div> + </Modal> + <AiQuestion + visible={AiQuestionView} + onClose={() => setAiQuestionView(false)} + aiData={aiData} + aiLawData={aiLawData} + caseDetailAi={caseDetailAi} + caseClaim={caseClaim} + /> + </div> + </NewPage> ); }; diff --git a/src/views/register/matterDetail/ApplyInfo.jsx b/src/views/register/matterDetail/ApplyInfo.jsx index 31b16b3..c971d29 100644 --- a/src/views/register/matterDetail/ApplyInfo.jsx +++ b/src/views/register/matterDetail/ApplyInfo.jsx @@ -2,7 +2,7 @@ * @Company: hugeInfo * @Author: lwh * @Date: 2024-11-26 15:49:14 - * @LastEditTime: 2025-04-21 19:01:28 + * @LastEditTime: 2025-06-14 11:18:59 * @LastEditors: lwh * @Version: 1.0.0 * @Description: @@ -461,11 +461,7 @@ {fileData.fileList?.map((result, resIndex) => { return ( <div style={{ display: 'inline-block' }}> - {result.suffix === 'pdf' ? ( - <MyPDF name={result.name} fileUrl={result.showUrl} /> - ) : ( - <PreviewImage name={result.name} src={result.showUrl} /> - )} + <MyPDF name={result.name} fileUrl={result.showUrl} fileType={result.suffix} /> {resIndex !== fileData.fileList?.length - 1 && <>,</>} </div> ); @@ -490,11 +486,7 @@ {fileData.fileList?.map((result, resIndex) => { return ( <div style={{ display: 'inline-block' }}> - {result.suffix === 'pdf' ? ( - <MyPDF name={result.name} fileUrl={result.showUrl} /> - ) : ( - <PreviewImage name={result.name} src={result.showUrl} /> - )} + <MyPDF name={result.name} fileUrl={result.showUrl} fileType={result.suffix} /> {resIndex !== fileData.fileList?.length - 1 && <>,</>} </div> ); @@ -517,7 +509,10 @@ <span className="public-infoSubTitle"> <span className="public-nameCard"> - <NameCard2 name={data.value === 'auditPeople' ? object.auditUserName : object.applyUserName} userId={data.value === 'auditPeople' ? object.auditUserId : object.applyUserId} /> + <NameCard2 + name={data.value === 'auditPeople' ? object.auditUserName : object.applyUserName} + userId={data.value === 'auditPeople' ? object.auditUserId : object.applyUserId} + /> </span> </span> </span> @@ -602,11 +597,7 @@ {fileData.fileList?.map((result, resIndex) => { return ( <div style={{ display: 'inline-block' }}> - {result.suffix === 'pdf' ? ( - <MyPDF name={result.name} fileUrl={result.showUrl} /> - ) : ( - <PreviewImage name={result.name} src={result.showUrl} /> - )} + <MyPDF name={result.name} fileUrl={result.showUrl} fileType={result.suffix} /> {resIndex !== fileData.fileList?.length - 1 && <>,</>} </div> ); diff --git a/src/views/register/matterDetail/DismissModule.jsx b/src/views/register/matterDetail/DismissModule.jsx index 7aa7fe3..92824f6 100644 --- a/src/views/register/matterDetail/DismissModule.jsx +++ b/src/views/register/matterDetail/DismissModule.jsx @@ -5,7 +5,7 @@ * @LastEditTime: 2025-04-21 19:02:53 * @LastEditors: lwh * @Version: 1.0.0 - * @Description: + * @Description: */ import React, { Fragment } from 'react'; import { Row, Col, Space } from 'antd'; @@ -36,11 +36,7 @@ {props.dismissData?.fileInfoList?.map((result, resIndex) => { return ( <div style={{ display: 'inline-block' }}> - {result.suffix === 'pdf' ? ( - <MyPDF name={result.name} fileUrl={result.showUrl} /> - ) : ( - <PreviewImage name={result.name} src={result.showUrl} /> - )} + <MyPDF name={result.name} fileUrl={result.showUrl} fileType={result.suffix} /> {/* <PreviewImage name={result.name} src={result.showUrl} /> */} {resIndex !== props.dismissData?.fileInfoList?.length - 1 && <>,</>} </div> diff --git a/src/views/register/matterDetail/HandleRecord.jsx b/src/views/register/matterDetail/HandleRecord.jsx index 14f527f..594bccf 100644 --- a/src/views/register/matterDetail/HandleRecord.jsx +++ b/src/views/register/matterDetail/HandleRecord.jsx @@ -2,7 +2,7 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-09-06 09:40:00 * @LastEditors: lwh - * @LastEditTime: 2025-05-10 17:26:00 + * @LastEditTime: 2025-06-14 11:16:06 * @FilePath: \gzDyh\gz-customerSystem\src\views\register\matterDetail\HandleRecord.jsx * @Description: 办理记录 */ @@ -143,11 +143,7 @@ <div> {record?.fileInfoList?.map((result, index) => ( <> - {result.suffix === 'pdf' ? ( - <MyPDF name={result.name} fileUrl={result.showUrl} /> - ) : ( - <PreviewImage name={result.name} src={result.showUrl} /> - )} + <MyPDF name={result.name} fileUrl={result.showUrl} fileType={result.suffix} /> </> // <div key={index} onClick={() => handleOpenFiles(item)} style={{ cursor: 'pointer' }}> // {item.name || '-'} diff --git a/src/views/register/matterDetail/Judicial.jsx b/src/views/register/matterDetail/Judicial.jsx index c59d88f..4f74fa9 100644 --- a/src/views/register/matterDetail/Judicial.jsx +++ b/src/views/register/matterDetail/Judicial.jsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect } from 'react'; import { Row, Col, Space, Typography } from 'antd'; import { Modal, Divider } from '@arco-design/web-react'; import * as $$ from '../../../utils/utility'; @@ -6,232 +6,343 @@ import NameCard2 from '../../../components/NameCard2'; import { judicial_3 } from '@/assets/images'; import MyPDF from '../../../components/MyPDF'; -import { judicial_7 } from "../../../assets/images"; +import { judicial_7 } from '../../../assets/images'; // 司法确认详情接口 function getJudicInfoApi(submitData) { - return $$.ax.request({ url: '/judicInfo/getJudicCaseInfo', type: 'get', data: submitData, service: 'mediate' }); + return $$.ax.request({ url: '/judicInfo/getJudicCaseInfo', type: 'get', data: submitData, service: 'mediate' }); } function getVideoApi(caseId) { - return $$.ax.request({ url: `meetJudic/getVideo?caseId=${caseId}`, type: 'get', service: 'mediate' }); + return $$.ax.request({ url: `meetJudic/getVideo?caseId=${caseId}`, type: 'get', service: 'mediate' }); } //会议查询 function getMeetInfoApi(data) { - return $$.ax.request({ url: `meetJudic/getMeetInfo`, type: 'get', service: 'mediate', data }); + return $$.ax.request({ url: `meetJudic/getMeetInfo`, type: 'get', service: 'mediate', data }); } const { Paragraph, Link, Text } = Typography; const Judicial = (props) => { - const [data, setData] = useState({}); - const [videoList, setVideoList] = useState([]) - // 预添加预约 - const [preBookData, setPreBookData] = useState({}); - const [radioVisible, setRadioVisible] = useState(false); + const [data, setData] = useState({}); + const [videoList, setVideoList] = useState([]); + // 预添加预约 + const [preBookData, setPreBookData] = useState({}); + const [radioVisible, setRadioVisible] = useState(false); + function checkTimeRange(startTime, endTime, currentTime) { + if (currentTime < new Date(startTime)) { + return <div className="public-color">未开始</div>; // 当前时间在时间范围之前 + } else if (currentTime >= new Date(startTime) && currentTime <= new Date(endTime)) { + return <div style={{ color: '#EF6C24' }}>进行中</div>; // 当前时间在时间范围内 + } else { + return <div className="public-orange">已结束</div>; // 当前时间在时间范围之后 + } + } + // 初始化附件回显 + async function getJudicialApply(id) { + global.setSpinning(true); + const res = await getJudicInfoApi({ caseId: id }); + global.setSpinning(false); + if (res.type) { + setData(res.data); + } + } - function checkTimeRange(startTime, endTime, currentTime) { - if (currentTime < new Date(startTime)) { - return <div className='public-color'>未开始</div>; // 当前时间在时间范围之前 - } else if (currentTime >= new Date(startTime) && currentTime <= new Date(endTime)) { - return <div style={{ color: '#EF6C24' }}>进行中</div>; // 当前时间在时间范围内 - } else { - return <div className='public-orange'>已结束</div>; // 当前时间在时间范围之后 - } - } - // 初始化附件回显 - async function getJudicialApply(id) { - global.setSpinning(true); - const res = await getJudicInfoApi({ caseId: id }); - global.setSpinning(false); - if (res.type) { - setData(res.data); - } - } + // 获取预约调解记录 + async function getMeetInfo(id) { + global.setSpinning(true); + const res = await getMeetInfoApi({ caseId: id }); + global.setSpinning(false); + if (res.type) { + let list = res.data || []; + if (list?.length > 0) { + setPreBookData(list[0]); + } + } + } + const getVideo = async (id) => { + const res = await getVideoApi(id); + if (res.type) { + if (res.data) { + setVideoList(res.data || []); + } else { + setVideoList(null); + } + } + }; - // 获取预约调解记录 - async function getMeetInfo(id) { - global.setSpinning(true); - const res = await getMeetInfoApi({ caseId: id }); - global.setSpinning(false); - if (res.type) { - let list = res.data || []; - if (list?.length > 0) { - setPreBookData(list[0]) - } - } - } + useEffect(() => { + getJudicialApply(props.caseId); + getMeetInfo(props.caseId); + getVideo(props.caseId); + }, []); + return ( + <div style={{ ...props.style, position: 'relative' }}> + <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px' }}> + <Space size="small"> + <div className="MediationInfo-subTitle" style={{ marginTop: '-7px' }}></div> + <h4>司法确认信息</h4> + </Space> + </Col> + <table border="1" align="center" cellpadding="8" className="table"> + <tr> + <th bgcolor="#F7F8FA" className="table-title" width="120"> + 司法确认结果 + </th> + <td width="380" style={{ color: data?.judicResult == '22_00028-1' ? '#00b42a' : '#f53f3f' }}> + {data?.judicResult == '22_00028-1' ? '已达成' : data?.judicResult == '22_00028-2' ? '未达成' : '-'} + </td> + <th bgcolor="#F7F8FA" className="table-title" width="120"> + 预约信息 + </th> + <td width="380"> + {preBookData?.orderStartTime ? ( + <span + className="public-a public-color" + onClick={() => { + setRadioVisible(true); + }} + > + 点击查看 + </span> + ) : ( + '-' + )} + </td> + </tr> + <tr> + <th bgcolor="#F7F8FA" className="table-title" width="120"> + 司法确认部门 + </th> + <td width="380">{data?.courtName || '-'}</td> + <th bgcolor="#F7F8FA" className="table-title" width="120"> + 结案时间 + </th> + <td width="380">{$$.minuteFormat(data?.judicEndTime)}</td> + </tr> + <tr> + <th bgcolor="#F7F8FA" className="table-title"> + 承办法官 + </th> + <td width="380"> + <div className="public-infoSubTitle"> + <NameCard2 name={data.judgeName} userId={data.judgeNameId || ''} /> + </div> + </td> + <th bgcolor="#F7F8FA" className="table-title"> + 助理/书记员 + </th> + <td width="380"> + <div style={{ display: 'flex', gap: '16px', flexWrap: 'wrap' }} className="public-infoSubTitle"> + {data?.judicAssistList?.map((i) => ( + <NameCard2 name={i.assUserName} userId={i.assUserId} /> + ))} + </div> + </td> + </tr> + {data?.judicResult == '22_00028-1' && ( + <tr> + <th bgcolor="#F7F8FA" className="table-title"> + 司法确认案号 + </th> + <td width="380">{data?.judicNo || '-'}</td> + <th bgcolor="#F7F8FA" className="table-title"> + 诉前调确号 + </th> + <td width="380">{data?.mediateJudicNo || '-'}</td> + </tr> + )} + <tr> + <th bgcolor="#F7F8FA" className="table-title"> + 申请时间 + </th> + <td width="380">{$$.minuteFormat(data?.applyTime)}</td> + <th bgcolor="#F7F8FA" className="table-title"> + 申请部门 + </th> + <td width="380">{data?.applyUnitName || '-'}</td> + </tr> + {data?.judicResult == '22_00028-1' && ( + <> + <tr> + <th bgcolor="#F7F8FA" className="table-title"> + 裁定文书 + </th> + <td width="380" colspan="3"> + {data?.fileList?.find((i) => i.ownerType === '22_00018-405')?.fileList?.length ? ( + data?.fileList + ?.find((i) => i.ownerType === '22_00018-405') + ?.fileList?.map((item, index) => { + return ( + <> + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> + </> + ); + }) + ) : ( + <div className="public-infoSubTitle">-</div> + )} + </td> + </tr> + <tr> + <th bgcolor="#F7F8FA" className="table-title"> + 询问笔录 + </th> + <td width="380" colspan="3"> + {data?.fileList?.find((i) => i.ownerType === '22_00018-401')?.fileList?.length ? ( + data?.fileList + ?.find((i) => i.ownerType === '22_00018-401') + ?.fileList?.map((item, index) => { + return ( + <> + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> + </> + ); + }) + ) : ( + <div className="public-infoSubTitle">-</div> + )} + </td> + </tr> + <tr> + <th bgcolor="#F7F8FA" className="table-title"> + 送达地址确认书 + </th> + <td width="380" colspan="3"> + {data?.fileList?.find((i) => i.ownerType === '22_00018-108')?.fileList?.length ? ( + data?.fileList + ?.find((i) => i.ownerType === '22_00018-108') + ?.fileList?.map((item, index) => { + return ( + <> + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> + </> + ); + }) + ) : ( + <div className="public-infoSubTitle">-</div> + )} + </td> + </tr> + {videoList?.length > 0 && ( + <tr> + <th bgcolor="#F7F8FA" className="table-title" width="120"> + 司法确认视频 + </th> + <td colspan="3"> + {videoList?.map((item, index) => { + return ( + <div key={'video' + index} style={{ display: 'flex', alignItems: 'center', gap: '8px' }}> + <img src={judicial_7} alt="" srcset="" /> + <Link + onClick={() => { + window.open(item.playUrl); + }} + > + {item.videoName} + </Link> + </div> + ); + })} + </td> + </tr> + )} + <tr> + <th bgcolor="#F7F8FA" className="table-title"> + 结案说明 + </th> + <td width="380" colspan="3"> + {data?.judicContent || '-'} + </td> + </tr> + </> + )} + {data?.judicResult == '22_00028-2' && ( + <tr> + <th bgcolor="#F7F8FA" className="table-title"> + 未达成原因 + </th> + <td width="380" colspan="3"> + {data?.judicFalseCause || '-'} + </td> + </tr> + )} + </table> + <Modal + title="预约信息" + style={{ width: '40%' }} + className="judicial-handle-modal" + onCancel={() => setRadioVisible(false)} + visible={radioVisible} + footer={null} + > + <div style={{ marginBottom: '0' }} className="judicial-item-content"> + <div className="judicial-item-content-left"> + {/* <div className='judicial-item-content-left-del public-a'><img src={judicial_3} alt="" srcset="" /></div> */} + <div className="judicial-item-content-left-t"> + <div className="judicial-item-content-left-t-l"> + <div className="judicial-item-content-left-bigTitle public-color">{$$.myTimeFormat(preBookData?.orderStartTime, 'HH:mm')}</div> + <div className="public-color">{$$.myTimeFormat(preBookData?.orderStartTime, 'YYYY年MM月DD日')}</div> + </div> + <div className="judicial-item-content-left-t-l"> + <Space size="small"> + <div className="judicial-item-content-left-inline"></div> + <div style={{ display: 'flex', flexDirection: 'column', gap: '4px', alignItems: 'center', justifyContent: 'center' }}> + {checkTimeRange(preBookData?.orderStartTime, preBookData?.orderEndTime, new Date())} + <div className="public-color judicial-item-content-left-time"> + {$$.calculateTimeDifference(preBookData?.orderStartTime, preBookData?.orderEndTime)} + </div> + </div> + <div className="judicial-item-content-left-inline"></div> + </Space> + </div> + <div className="judicial-item-content-left-t-l"> + <div className="judicial-item-content-left-bigTitle public-color">{$$.myTimeFormat(preBookData?.orderEndTime, 'HH:mm')}</div> + <div className="public-color">{$$.myTimeFormat(preBookData?.orderEndTime, 'YYYY年MM月DD日')}</div> + </div> + </div> + <Divider /> + <div className="judicial-item-content-left-c-flex"> + <div className="judicial-item-content-left-c"> + <div className="judicial-item-content-left-c-title">司法确认方式</div> + <div className="judicial-item-content-left-c-content">{preBookData?.meetWayName || '-'}</div> + </div> + <div className="judicial-item-content-left-c"> + <div className="judicial-item-content-left-c-title">远程视频司法确认号</div> + <div className="judicial-item-content-left-c-content"> + <span style={{ fontSize: '16px', lineHeight: '24px' }}>{preBookData?.roomNo || '-'}</span> + {preBookData?.roomNo && ( + <span + onClick={() => { + navigator.clipboard + .writeText(preBookData?.roomNo) + .then(() => { + $$.infoSuccess({ content: '复制成功' }); + }) + .catch((err) => { + $$.catchApiError('复制失败', err); + }); + }} + className="public-color public-a" + > + 复制 + </span> + )} + </div> + </div> + <div className="judicial-item-content-left-c"> + <div className="judicial-item-content-left-c-title">司法确认地点</div> + <div className="judicial-item-content-left-c-content">{preBookData?.meetAddr || '-'}</div> + </div> + </div> + </div> + </div> + </Modal> + </div> + ); +}; - const getVideo = async (id) => { - const res = await getVideoApi(id) - if (res.type) { - if (res.data) { - setVideoList(res.data || []) - } else { - setVideoList(null) - } - } - } - - useEffect(() => { - getJudicialApply(props.caseId) - getMeetInfo(props.caseId) - getVideo(props.caseId) - }, []) - - return ( - <div style={{ ...props.style, position: 'relative' }}> - <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px' }}> - <Space size='small'> - <div className='MediationInfo-subTitle' style={{ marginTop: '-7px' }}></div><h4>司法确认信息</h4> - </Space> - </Col> - <table border="1" align="center" cellpadding="8" className="table" > - <tr> - <th bgcolor="#F7F8FA" className="table-title" width="120">司法确认结果</th> - <td width='380' style={{ color: data?.judicResult == '22_00028-1' ? '#00b42a' : '#f53f3f' }}> - {data?.judicResult == '22_00028-1' ? '已达成' : data?.judicResult == '22_00028-2' ? '未达成' : '-'} - </td> - <th bgcolor="#F7F8FA" className="table-title" width="120">预约信息</th> - <td width='380'>{preBookData?.orderStartTime ? <span className="public-a public-color" onClick={() => { setRadioVisible(true) }}>点击查看</span> : '-'}</td> - </tr> - <tr> - <th bgcolor="#F7F8FA" className="table-title" width="120">司法确认部门</th> - <td width='380'>{data?.courtName || '-'}</td> - <th bgcolor="#F7F8FA" className="table-title" width="120">结案时间</th> - <td width='380'>{$$.minuteFormat(data?.judicEndTime)}</td> - </tr> - <tr> - <th bgcolor="#F7F8FA" className="table-title">承办法官</th> - <td width='380'><div className='public-infoSubTitle'><NameCard2 name={data.judgeName} userId={data.judgeNameId || ''} /></div></td> - <th bgcolor="#F7F8FA" className="table-title">助理/书记员</th> - <td width='380'><div style={{ display: 'flex', gap: '16px', flexWrap: 'wrap' }} className='public-infoSubTitle'>{data?.judicAssistList?.map(i => (<NameCard2 name={i.assUserName} userId={i.assUserId} />))}</div></td> - </tr> - { - data?.judicResult == '22_00028-1' && - <tr> - <th bgcolor="#F7F8FA" className="table-title">司法确认案号</th> - <td width='380'>{data?.judicNo || '-'}</td> - <th bgcolor="#F7F8FA" className="table-title">诉前调确号</th> - <td width='380'>{data?.mediateJudicNo || '-'}</td> - </tr> - } - <tr> - <th bgcolor="#F7F8FA" className="table-title">申请时间</th> - <td width='380'>{$$.minuteFormat(data?.applyTime)}</td> - <th bgcolor="#F7F8FA" className="table-title">申请部门</th> - <td width='380'>{data?.applyUnitName || '-'}</td> - </tr> - { - data?.judicResult == '22_00028-1' && - <> - <tr> - <th bgcolor="#F7F8FA" className="table-title">裁定文书</th> - <td width='380' colspan='3'>{ - data?.fileList?.find(i => i.ownerType === '22_00018-405')?.fileList?.length ? - data?.fileList?.find(i => i.ownerType === '22_00018-405')?.fileList?.map((item, index) => { - return <>{item.suffix === 'pdf' ? <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> : <PreviewImage key={index} name={item.name} src={item.showUrl} />}</> - }) - : <div className='public-infoSubTitle'>-</div> - }</td> - </tr> - <tr> - <th bgcolor="#F7F8FA" className="table-title">询问笔录</th> - <td width='380' colspan='3'>{ - data?.fileList?.find(i => i.ownerType === '22_00018-401')?.fileList?.length ? - data?.fileList?.find(i => i.ownerType === '22_00018-401')?.fileList?.map((item, index) => { - return <>{item.suffix === 'pdf' ? <MyPDF name={item?.name} fileUrl={item?.showUrl} key={index} /> : <PreviewImage key={index} name={item.name} src={item.showUrl} />}</> - }) - : <div className='public-infoSubTitle'>-</div> - }</td> - </tr> - <tr> - <th bgcolor="#F7F8FA" className="table-title">送达地址确认书</th> - <td width='380' colspan='3'>{ - data?.fileList?.find(i => i.ownerType === '22_00018-108')?.fileList?.length ? - data?.fileList?.find(i => i.ownerType === '22_00018-108')?.fileList?.map((item, index) => { - return <>{item.suffix === 'pdf' ? <MyPDF name={item?.fileName} fileUrl={item?.showUrl} key={index} /> : <PreviewImage key={index} name={item.fileName} src={item.showUrl} />}</> - }) - : <div className='public-infoSubTitle'>-</div> - }</td> - </tr> - { - videoList?.length > 0 && <tr> - <th bgcolor="#F7F8FA" className="table-title" width="120">司法确认视频</th> - <td colspan='3'> - {videoList?.map((item, index) => { - return <div key={'video' + index} style={{ display: 'flex', alignItems: 'center', gap: '8px' }}> - <img src={judicial_7} alt="" srcset="" /><Link onClick={() => { window.open(item.playUrl) }}>{item.videoName}</Link> - </div> - })} - </td> - </tr> - } - <tr> - <th bgcolor="#F7F8FA" className="table-title">结案说明</th> - <td width='380' colspan='3'>{data?.judicContent || '-'}</td> - </tr> - </> - } - { - data?.judicResult == '22_00028-2' && - <tr> - <th bgcolor="#F7F8FA" className="table-title">未达成原因</th> - <td width='380' colspan='3'>{data?.judicFalseCause || '-'}</td> - </tr> - } - </table> - <Modal - title='预约信息' - style={{ width: '40%' }} - className='judicial-handle-modal' - onCancel={() => setRadioVisible(false)} - visible={radioVisible} - footer={null} - > - <div style={{ marginBottom: '0' }} className='judicial-item-content'> - <div className='judicial-item-content-left'> - {/* <div className='judicial-item-content-left-del public-a'><img src={judicial_3} alt="" srcset="" /></div> */} - <div className='judicial-item-content-left-t'> - <div className='judicial-item-content-left-t-l'><div className='judicial-item-content-left-bigTitle public-color'>{$$.myTimeFormat(preBookData?.orderStartTime, 'HH:mm')}</div><div className='public-color'>{$$.myTimeFormat(preBookData?.orderStartTime, 'YYYY年MM月DD日')}</div></div> - <div className='judicial-item-content-left-t-l'> - <Space size='small'> - <div className='judicial-item-content-left-inline'></div> - <div style={{ display: 'flex', flexDirection: 'column', gap: '4px', alignItems: 'center', justifyContent: 'center' }}>{checkTimeRange(preBookData?.orderStartTime, preBookData?.orderEndTime, new Date())}<div className='public-color judicial-item-content-left-time'>{$$.calculateTimeDifference(preBookData?.orderStartTime, preBookData?.orderEndTime)}</div></div> - <div className='judicial-item-content-left-inline'></div> - </Space> - </div> - <div className='judicial-item-content-left-t-l'><div className='judicial-item-content-left-bigTitle public-color'>{$$.myTimeFormat(preBookData?.orderEndTime, 'HH:mm')}</div><div className='public-color'>{$$.myTimeFormat(preBookData?.orderEndTime, 'YYYY年MM月DD日')}</div></div> - </div> - <Divider /> - <div className='judicial-item-content-left-c-flex'> - <div className='judicial-item-content-left-c'> - <div className='judicial-item-content-left-c-title'>司法确认方式</div> - <div className='judicial-item-content-left-c-content'>{preBookData?.meetWayName || '-'}</div> - </div> - <div className='judicial-item-content-left-c'> - <div className='judicial-item-content-left-c-title'>远程视频司法确认号</div> - <div className='judicial-item-content-left-c-content'><span style={{ fontSize: '16px', lineHeight: '24px' }}>{preBookData?.roomNo || '-'}</span> {preBookData?.roomNo && <span onClick={() => { - navigator.clipboard.writeText(preBookData?.roomNo).then(() => { - $$.infoSuccess({ content: '复制成功' }); - }).catch(err => { - $$.catchApiError('复制失败', err); - }); - }} className='public-color public-a'>复制</span>}</div> - </div> - <div className='judicial-item-content-left-c'> - <div className='judicial-item-content-left-c-title'>司法确认地点</div> - <div className='judicial-item-content-left-c-content'>{preBookData?.meetAddr || '-'}</div> - </div> - </div> - </div> - </div> - </Modal> - </div> - ) -} - -export default Judicial \ No newline at end of file +export default Judicial; diff --git a/src/views/register/matterDetail/NewFileCheck.jsx b/src/views/register/matterDetail/NewFileCheck.jsx index cf895d8..be2d5cc 100644 --- a/src/views/register/matterDetail/NewFileCheck.jsx +++ b/src/views/register/matterDetail/NewFileCheck.jsx @@ -2,192 +2,204 @@ import { Row, Col, Space } from 'antd'; import { Select, DatePicker, Form, Button, Menu } from '@arco-design/web-react'; import * as $$ from '@/utils/utility'; +import * as docx from 'docx-preview'; const FormItem = Form.Item; const MenuItem = Menu.Item; const SubMenu = Menu.SubMenu; const appUrl = $$.appUrl; const formItemLayout = { - labelCol: { - span: 8, - }, - wrapperCol: { - span: 16, - }, + labelCol: { + span: 8, + }, + wrapperCol: { + span: 16, + }, }; - const NewFileCheck = (props) => { - const formRef = useRef(); - const [fileUrl, setFileUrl] = useState('') - const [itemData, setItemData] = useState(null) - const [list, setList] = useState([]) - const peopleTypeMap = { - 1: '工作人员', - 2: '当事人' - } + const formRef = useRef(); + const [fileUrl, setFileUrl] = useState(''); + const [itemData, setItemData] = useState(null); + const [list, setList] = useState([]); + const peopleTypeMap = { + 1: '工作人员', + 2: '当事人', + }; + const containerRef = useRef(null); - useEffect(() => { - setList(props.menuList || []) - }, [props.menuList]) + useEffect(() => { + setList(props.menuList || []); + }, [props.menuList]); - //点击菜单 - const clickItem = (data) => { - console.log(data); - setItemData(data) - setFileUrl(`${appUrl.fileUrl}/${appUrl.sys}${data.showUrl}`) - } - - //查询 - const handleSUbmit = (type) => { - const data = formRef.current.getFieldsValue(); - console.log('data', data); - if (type === 'search') { - let newList = props.menuList - if (data.type) { - newList = newList.filter(item => item.ownerType === data.type) - } - if (data.name) { - newList = newList.map(item => ({ ...item, fileList: item.fileList?.filter(i => i.uploaderType === data.name) })) - } - if (data.time) { - let timeStart = new Date(data.time[0]); - let timeEnd = new Date(data.time[1]); - newList = newList.map(item => ({ ...item, fileList: item.fileList?.filter(i => new Date(i.createTime) >= timeStart && new Date(i.createTime) <= timeEnd) })) - } - setList(newList) - setItemData(null) - setFileUrl('') + //点击菜单 + const clickItem = (data) => { + console.log(data); + setItemData(data); + if (data.suffix === 'docx' || data.suffix === 'doc') { + const renderDocx = async () => { + try { + const response = await fetch(`${appUrl.fileUrl}/${appUrl.sys}${data.showUrl}`); + const blob = await response.blob(); + await docx.renderAsync(blob, containerRef.current); + } catch (error) { + console.error('文档加载失败', error); + } + }; + renderDocx(); } - // 重置 - if (type === 'reset') { - setList(props.menuList || []) - setItemData(null) - setFileUrl('') - } - } + setFileUrl(`${appUrl.fileUrl}/${appUrl.sys}${data.showUrl}`); + }; - console.log('list', list); + //查询 + const handleSUbmit = (type) => { + const data = formRef.current.getFieldsValue(); + console.log('data', data); + if (type === 'search') { + let newList = props.menuList; + if (data.type) { + newList = newList.filter((item) => item.ownerType === data.type); + } + if (data.name) { + newList = newList.map((item) => ({ ...item, fileList: item.fileList?.filter((i) => i.uploaderType === data.name) })); + } + if (data.time) { + let timeStart = new Date(data.time[0]); + let timeEnd = new Date(data.time[1]); + newList = newList.map((item) => ({ + ...item, + fileList: item.fileList?.filter((i) => new Date(i.createTime) >= timeStart && new Date(i.createTime) <= timeEnd), + })); + } + setList(newList); + setItemData(null); + setFileUrl(''); + } + // 重置 + if (type === 'reset') { + setList(props.menuList || []); + setItemData(null); + setFileUrl(''); + } + }; + console.log('list', list); - return ( - <nav className="filesCheck-nav" style={{ borderRight: '1px solid transparent' }}> - <Form - ref={formRef} - layout='horizontal' - style={{ marginTop: '24px' }} - scrollToFirstError={true} - {...formItemLayout} - > - <Row gutter={24} style={{ marginRight: '0px' }}> - <Col span={6}> - <FormItem label='材料类型:' field='type'> - <Select - placeholder='请选择' - allowClear - options={[ - { - label: '申请材料', - value: '22_00018-101', - }, - { - label: '证据材料', - value: '22_00018-102', - }, - ]} - /> - </FormItem> - </Col> - <Col span={7}> - <FormItem - label='上传时间:' - field='time' - > - <DatePicker.RangePicker - showTime - shortcutsPlacementLeft={true} - shortcuts={$$.shortcutsList()} - separator='~' - style={{ width: '100%' }} - /> - </FormItem> - </Col> - <Col span={7}> - <FormItem - label='上传人类型:' - field='name' - onChange={(e) => console.log(e.target.value, 'vvv')} - > - <Select - placeholder='请选择' - allowClear - style={{ width: '100%' }} - options={[ - { - label: '工作人员', - value: 1 - }, - { - label: '当事人', - value: 2 - } - ]} - /> - </FormItem> - </Col> - <Col span={4}> - <Space> - <Button className="dialogPrimary" type='primary' onClick={() => handleSUbmit('search')}>查询</Button> - <Button onClick={() => { - formRef.current.resetFields(); - handleSUbmit('reset') - }}>重置</Button> - </Space> - </Col> - </Row> - - </Form> - <div style={{ display: 'flex', height: '550px' }}> - <div style={{ width: '256px', borderRight: '1px solid #F0F0F0' }}> - <Menu - style={{ width: '100%', height: '100%' }} - > - {list?.map(item => { - return <SubMenu - key={item.id} - title={item.ownerTypeName + `(${item.fileList && item.fileList.length || 0})`} - > - {item.fileList?.map(res => { - return <MenuItem key={res.id} onClick={() => { clickItem(res) }}>{res.name}</MenuItem> - })} - </SubMenu> - })} - </Menu> - </div> - <div style={{ flex: 1 }}> - { - itemData ? <Fragment> - <div style={{ background: '#e8f3ff', color: '#1A6FB8', padding: '5px 10px', marginBottom: '16px', marginLeft: '16px' }}> - <span>材料名称:{itemData.name}</span> | - <span>上传时间:{$$.timeFormat(itemData.updateTime)}</span> | - <span>上传人:{itemData.uploaderName} {itemData.uploaderType && <span>({peopleTypeMap[itemData.uploaderType]})</span>}</span> - </div> - <div style={{ width: '100%', height: '470px', display: 'flex', justifyContent: 'center', alignItems: 'center', overflow: 'auto' }}> - { - itemData.suffix === 'pdf' ? - <embed src={fileUrl} type="application/pdf" width="100%" height="100%"></embed> - : - <img src={fileUrl} alt="" style={{ maxWidth: '100%', maxHeight: '100%', objectFit: 'contain' }} /> - } - </div> - </Fragment> : <Fragment> - <div style={{ padding: '100px 0' }}>{$$.MyEmpty()}</div> - </Fragment> - } - </div> - </div> - </nav> - ); + return ( + <nav className="filesCheck-nav" style={{ borderRight: '1px solid transparent' }}> + <Form ref={formRef} layout="horizontal" style={{ marginTop: '24px' }} scrollToFirstError={true} {...formItemLayout}> + <Row gutter={24} style={{ marginRight: '0px' }}> + <Col span={6}> + <FormItem label="材料类型:" field="type"> + <Select + placeholder="请选择" + allowClear + options={[ + { + label: '申请材料', + value: '22_00018-101', + }, + { + label: '证据材料', + value: '22_00018-102', + }, + ]} + /> + </FormItem> + </Col> + <Col span={7}> + <FormItem label="上传时间:" field="time"> + <DatePicker.RangePicker showTime shortcutsPlacementLeft={true} shortcuts={$$.shortcutsList()} separator="~" style={{ width: '100%' }} /> + </FormItem> + </Col> + <Col span={7}> + <FormItem label="上传人类型:" field="name" onChange={(e) => console.log(e.target.value, 'vvv')}> + <Select + placeholder="请选择" + allowClear + style={{ width: '100%' }} + options={[ + { + label: '工作人员', + value: 1, + }, + { + label: '当事人', + value: 2, + }, + ]} + /> + </FormItem> + </Col> + <Col span={4}> + <Space> + <Button className="dialogPrimary" type="primary" onClick={() => handleSUbmit('search')}> + 查询 + </Button> + <Button + onClick={() => { + formRef.current.resetFields(); + handleSUbmit('reset'); + }} + > + 重置 + </Button> + </Space> + </Col> + </Row> + </Form> + <div style={{ display: 'flex', height: '550px' }}> + <div style={{ width: '256px', borderRight: '1px solid #F0F0F0' }}> + <Menu style={{ width: '100%', height: '100%' }}> + {list?.map((item) => { + return ( + <SubMenu key={item.id} title={item.ownerTypeName + `(${(item.fileList && item.fileList.length) || 0})`}> + {item.fileList?.map((res) => { + return ( + <MenuItem + key={res.id} + onClick={() => { + clickItem(res); + }} + > + {res.name} + </MenuItem> + ); + })} + </SubMenu> + ); + })} + </Menu> + </div> + <div style={{ flex: 1 }}> + {itemData ? ( + <Fragment> + <div style={{ background: '#e8f3ff', color: '#1A6FB8', padding: '5px 10px', marginBottom: '16px', marginLeft: '16px' }}> + <span>材料名称:{itemData.name}</span> | + <span>上传时间:{$$.timeFormat(itemData.updateTime)}</span> | + <span> + 上传人:{itemData.uploaderName} {itemData.uploaderType && <span>({peopleTypeMap[itemData.uploaderType]})</span>} + </span> + </div> + <div style={{ width: '100%', height: '470px', display: 'flex', justifyContent: 'center', alignItems: 'center', overflow: 'auto' }}> + {itemData.suffix === 'pdf' ? ( + <embed src={fileUrl} type="application/pdf" width="100%" height="100%"></embed> + ) : itemData.suffix === 'docx' ? ( + <div ref={containerRef} style={{ width: '100%', height: '100%' }} className="docx-container" /> + ) : ( + <img src={fileUrl} alt="" style={{ maxWidth: '100%', maxHeight: '100%', objectFit: 'contain' }} /> + )} + </div> + </Fragment> + ) : ( + <Fragment> + <div style={{ padding: '100px 0' }}>{$$.MyEmpty()}</div> + </Fragment> + )} + </div> + </div> + </nav> + ); }; export default NewFileCheck; diff --git a/src/views/register/matterDetail/UniteHandle.jsx b/src/views/register/matterDetail/UniteHandle.jsx index 1588a3d..f5f61a8 100644 --- a/src/views/register/matterDetail/UniteHandle.jsx +++ b/src/views/register/matterDetail/UniteHandle.jsx @@ -148,7 +148,7 @@ setIsModalVisible(false) }} onClose={() => setIsModalVisible(false)} - type='dept' + type='dept_union' isCheckbox={true} /> </Modal> diff --git a/src/views/register/matterDetail/index.jsx b/src/views/register/matterDetail/index.jsx index 355ea57..c9fdfab 100644 --- a/src/views/register/matterDetail/index.jsx +++ b/src/views/register/matterDetail/index.jsx @@ -245,10 +245,10 @@ <div ><div className="title-text">事项来源</div></div> <div>{infoData.canalName || '-'}</div> </Col> - <Col span={16}> + {/* <Col span={16}> <div ><div className="title-text">来访形式</div></div> <div>{infoData.visitWayName || '-'}</div> - </Col> + </Col> */} <Col span={24}> <div className="title"><div className="title-text">事项概况</div></div> <div>{infoData.caseDes || '-'}</div> @@ -257,6 +257,10 @@ <div className="title"><div className="title-text">事项申请</div></div> <div>{infoData.caseClaim || '-'}</div> </Col> + <Col span={24}> + <div className="title"><div className="title-text">事项备注</div></div> + <div>{infoData.caseRemark || '-'}</div> + </Col> <Col span={8}> <div className="title title-gap"> {props.data?.majorStatus === 1 && <img src={majorStatus_1} alt="" srcset="" />} diff --git a/src/views/register/visit/SelfPreview.jsx b/src/views/register/visit/SelfPreview.jsx index caba071..2d8e01a 100644 --- a/src/views/register/visit/SelfPreview.jsx +++ b/src/views/register/visit/SelfPreview.jsx @@ -128,10 +128,10 @@ <div><div className="title-text">事项来源</div></div> <div>自行排查</div> </Col> - <Col span={8}> + {/* <Col span={8}> <div ><div className="title-text">来访形式</div></div> <div>排查</div> - </Col> + </Col> */} <Col span={8}> <div ><div className="title-text">纠纷类型</div></div> <div> @@ -172,6 +172,10 @@ <div className="title"><div className="title-text">事项申请</div></div> <div>{props.data?.caseClaim || '-'}</div> </Col> + <Col span={24}> + <div className="title"><div className="title-text">事项备注</div></div> + <div>{props.data?.caseRemark || '-'}</div> + </Col> <Col span={8}> <div className="title title-gap"> {props.data?.majorStatus === 1 && <img src={majorStatus_1} alt="" srcset="" />} @@ -230,7 +234,7 @@ {props.transactResult?.fileInfoBaseDTOList?.map((item, index) => { console.log(item); return <div style={{ display: 'inline-block' }}> - {item.suffix === 'pdf' ? <MyPDF name={item.name} fileUrl={item.showUrl} key={index} /> : <PreviewImage name={item.name} src={item.showUrl} />} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> {/* <PreviewImage name={item.name} src={item.showUrl} /> */} {index !== props.transactResult?.fileInfoBaseDTOList.length - 1 && <>,</>} </div> diff --git a/src/views/register/visit/component/SelfVisitorRegister.jsx b/src/views/register/visit/component/SelfVisitorRegister.jsx index d2b807f..bbd0dbd 100644 --- a/src/views/register/visit/component/SelfVisitorRegister.jsx +++ b/src/views/register/visit/component/SelfVisitorRegister.jsx @@ -400,6 +400,34 @@ /> </FormItem> </Col> + <Col span={24}> + <FormItem + label={ + <div style={{ display: 'flex' }}> + 备注 + <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} /> + <div + style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} + onClick={() => { + setScanFile(true); + setOcrText('caseRemark'); + }} + > + 识别材料 + </div> + </div> + } + field="caseRemark" + > + <Input.TextArea + maxLength={500} + showWordLimit + rows={7} + placeholder="请填写备注" + wrapperStyle={{ width: '100%' }} + /> + </FormItem> + </Col> <div style={{ padding: '0px 16px', borderRadius: '2px', display: 'flex', alignItems: 'center' }}> <img src={majorStatus_1} alt="" srcset="" /> <FormItem diff --git a/src/views/register/visit/component/visitorRegister.jsx b/src/views/register/visit/component/visitorRegister.jsx index d6da30d..526ce1d 100644 --- a/src/views/register/visit/component/visitorRegister.jsx +++ b/src/views/register/visit/component/visitorRegister.jsx @@ -411,6 +411,34 @@ /> </FormItem> </Col> + <Col span={24}> + <FormItem + label={ + <div style={{ display: 'flex' }}> + 备注 + <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} /> + <div + style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} + onClick={() => { + setScanFile(true); + setOcrText('caseRemark'); + }} + > + 识别材料 + </div> + </div> + } + field="caseRemark" + > + <Input.TextArea + maxLength={500} + showWordLimit + rows={7} + placeholder="请填写备注" + wrapperStyle={{ width: '100%' }} + /> + </FormItem> + </Col> <div style={{ padding: '0px 16px', borderRadius: '2px', display: 'flex', alignItems: 'center' }}> <img src={majorStatus_1} alt="" srcset="" /> <FormItem diff --git a/src/views/register/visit/index.jsx b/src/views/register/visit/index.jsx index 80b2d00..7168d22 100644 --- a/src/views/register/visit/index.jsx +++ b/src/views/register/visit/index.jsx @@ -2,7 +2,7 @@ * @Author: dminyi 1301963064@qq.com * @Date: 2024-08-09 09:59:43 * @LastEditors: lwh - * @LastEditTime: 2025-05-30 17:04:48 + * @LastEditTime: 2025-06-13 15:16:34 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx * @Description: 来访登记 */ @@ -15,7 +15,6 @@ import '../index.less'; import { Space } from 'antd'; import { Button, Steps, Message } from '@arco-design/web-react'; -import { visit_10 } from '../../../assets/images'; import { Modal } from 'antd'; import VisitorRegister from './component/visitorRegister'; import Preview from './preview'; diff --git a/src/views/register/visit/preview.jsx b/src/views/register/visit/preview.jsx index 1463c38..bd9930c 100644 --- a/src/views/register/visit/preview.jsx +++ b/src/views/register/visit/preview.jsx @@ -330,10 +330,10 @@ <div ><div className="title-text">事项来源</div></div> <div>{props.data?.canalName || '大厅来访'}</div> </Col> - <Col span={16}> + {/* <Col span={16}> <div ><div className="title-text">来访形式</div></div> <div>来访</div> - </Col> + </Col> */} <Col span={24}> <div className="title"><div className="title-text">事项概况</div></div> <div>{props.data?.caseDes || '-'} </div> @@ -341,6 +341,10 @@ <Col span={24}> <div className="title"><div className="title-text">事项申请</div></div> <div>{props.data?.caseClaim || '-'}</div> + </Col> + <Col span={24}> + <div className="title"><div className="title-text">事项备注</div></div> + <div>{props.data?.caseRemark || '-'}</div> </Col> <Col span={8}> <div className="title title-gap"> @@ -358,34 +362,34 @@ </Col> { props.data?.canalSecond === '22_00003-1' && <> - <Col span={8}> - <div className="title"><div className="title-text">上报民警</div></div> - <div>{props.data?.tcqk?.split('--')?.[0] || '-'}</div> - </Col> - <Col span={8}> - <div className="title"><div className="title-text">上报民警联系电话</div></div> - <div>{props.data?.tcqk?.split('--')?.[1] || '-'}</div> - </Col> - <Col span={8}> - <div className="title"><div className="title-text">责任民警</div></div> - <div>{props.data?.tcqk?.split('--')?.[3] || '-'}</div> - </Col> - <Col span={8}> - <div className="title"><div className="title-text">调处人</div></div> - <div>{props.data?.tcqk?.split('--')?.[4] || '-'}</div> - </Col> - <Col span={8}> - <div className="title"><div className="title-text">调处方案</div></div> - <div>{props.data?.tcqk?.split('--')?.[5] || '-'}</div> - </Col> - <Col span={8}> - <div className="title"><div className="title-text">风险等级</div></div> - <div>{props.data?.tcqk?.split('--')?.[2] || '-'}</div> - </Col> - <Col span={24}> - <div className="title"><div className="title-text">前期调处情况</div></div> - <div>{props.data?.tcqk?.split('--')?.[6] || '-'}</div> - </Col> + <Col span={8}> + <div className="title"><div className="title-text">上报民警</div></div> + <div>{props.data?.tcqk?.split('--')?.[0] || '-'}</div> + </Col> + <Col span={8}> + <div className="title"><div className="title-text">上报民警联系电话</div></div> + <div>{props.data?.tcqk?.split('--')?.[1] || '-'}</div> + </Col> + <Col span={8}> + <div className="title"><div className="title-text">责任民警</div></div> + <div>{props.data?.tcqk?.split('--')?.[3] || '-'}</div> + </Col> + <Col span={8}> + <div className="title"><div className="title-text">调处人</div></div> + <div>{props.data?.tcqk?.split('--')?.[4] || '-'}</div> + </Col> + <Col span={8}> + <div className="title"><div className="title-text">调处方案</div></div> + <div>{props.data?.tcqk?.split('--')?.[5] || '-'}</div> + </Col> + <Col span={8}> + <div className="title"><div className="title-text">风险等级</div></div> + <div>{props.data?.tcqk?.split('--')?.[2] || '-'}</div> + </Col> + <Col span={24}> + <div className="title"><div className="title-text">前期调处情况</div></div> + <div>{props.data?.tcqk?.split('--')?.[6] || '-'}</div> + </Col> </> } </Row> @@ -428,10 +432,10 @@ <td width='380' colspan='3'>{props.transactResult?.windupContent || '-'}</td> </tr> } - { + { props.transactResult.mediResult == '22_00025-1' && <tr> <th bgcolor="#F7F8FA" className="table-title" width="120">协议类型</th> - <td width='380' colspan='3'>{ props.transactResult.agreeType == '24_00003-2'? '书面协议' : '口头协议'}</td> + <td width='380' colspan='3'>{props.transactResult.agreeType == '24_00003-2' ? '书面协议' : '口头协议'}</td> </tr> } { @@ -447,7 +451,7 @@ <div style={{ display: 'flex', gap: '8px' }}> {props.transactResult?.fileInfoBaseDTOList?.map((item, index) => { return <div style={{ display: 'inline-block' }}> - {item.suffix === 'pdf' ? <MyPDF name={item.name} fileUrl={item.showUrl} key={index} /> : <PreviewImage name={item.name} src={item.showUrl} />} + <MyPDF key={index} name={item.name} fileUrl={item.showUrl} fileType={item.suffix} /> {/* <PreviewImage name={item.name} src={item.showUrl} /> */} {/* {index !== props.transactResult?.fileInfoBaseDTOList.length - 1 && <>,</>} */} </div> diff --git a/src/views/windowDetail/ApplyInfo.jsx b/src/views/windowDetail/ApplyInfo.jsx index 68a3949..938b400 100644 --- a/src/views/windowDetail/ApplyInfo.jsx +++ b/src/views/windowDetail/ApplyInfo.jsx @@ -446,10 +446,7 @@ <div style={{ color: '#1A6FB8' }}> {fileData.fileList?.map((result, resIndex) => { return <div style={{ display: 'inline-block' }}> - {result.suffix === 'pdf' ? - <MyPDF name={result.name} fileUrl={result.showUrl} /> : - <PreviewImage name={result.name} src={result.showUrl} /> - } + <MyPDF key={resIndex} name={result.name} fileUrl={result.showUrl} fileType={result.suffix} /> {resIndex !== fileData.fileList?.length - 1 && <>,</>} </div> }) || '-'} diff --git a/src/views/windowDetail/index.jsx b/src/views/windowDetail/index.jsx index 4c1e36b..346d0d1 100644 --- a/src/views/windowDetail/index.jsx +++ b/src/views/windowDetail/index.jsx @@ -199,6 +199,7 @@ getCaseInfo(caseId); listFeedback(caseId); getData(caseId); + getDismissData(caseId) }, []) //获取权限tab和按钮权限 diff --git a/src/views/workDash/index.jsx b/src/views/workDash/index.jsx index 467827b..ae0547c 100644 --- a/src/views/workDash/index.jsx +++ b/src/views/workDash/index.jsx @@ -1024,6 +1024,7 @@ placeholder: '请选择', label: '配合部门', }, + { type: 'Select', name: 'systemSource', label: '系统来源', placeholder: '请选择', span: 8, selectdata: $$.options.systemSource }, ]} handleReset={() => { form.resetFields(); @@ -1169,19 +1170,19 @@ <div style={{ display: 'flex', alignItems: 'center' }}> <span className="workDash-item-title-green"></span> <span style={{ color: '#4E5969', fontSize: '14px', display: 'flex', alignItems: 'center' }}> - 化解成功:{data?.resolveNum || 0}件 | 成功率:<span style={{ color: '#00B42A' }}>{data?.resolveRate || '0'}%</span> + 化解成功:{data?.finishNum || 0}件 | 成功率:<span style={{ color: '#00B42A' }}>{((data?.finishNum*100)/(data?.finishNum+data?.failNum) || 0).toFixed(2)}%</span> <img style={{ width: '14px', height: '14px', marginLeft: '8px' }} src={workDash_5} alt="" srcset="" /> </span> </div> </Space> </div> <div className="workDash-item-value"> - <div style={{ width: '50px' }}>{data?.finishNum || 0}</div> + <div style={{ width: '50px' }}>{data?.finishNum+data?.failNum || 0}</div> <div style={{ width: '36px' }}></div> <Space split={<Divider type="vertical" />}> <div> <span className="workDash-item-title-red"></span> - <span style={{ color: '#4E5969', fontSize: '14px' }}>化解不成功:{data?.unResolveNum || 0}件</span> + <span style={{ color: '#4E5969', fontSize: '14px' }}>化解不成功:{data?.failNum || 0}件</span> </div> </Space> </div> -- Gitblit v1.8.0