/*
|
* @Company: hugeInfo
|
* @Author: lwh
|
* @Date: 2025-04-21 11:04:24
|
* @LastEditTime: 2025-05-03 17:28:54
|
* @LastEditors: lwh
|
* @Version: 1.0.0
|
* @Description:
|
*/
|
import React, { useState, useEffect, useRef } from 'react';
|
import { useNavigate } from 'react-router-dom';
|
|
import * as $$ from '@/utils/utility';
|
|
import { Scrollbars } from 'react-custom-scrollbars';
|
import { Row, Space, Col, Form as antdForm } from 'antd';
|
import { Alert, Button, Modal, Message, Form, Select, Input, Pagination } from '@arco-design/web-react';
|
import { IconLocation, IconDelete, IconSwap, IconInfoCircle } from '@arco-design/web-react/icon';
|
import ArcoUpload from '@/components/ArcoUpload';
|
|
// import DetailDialog from '@/components/DetailDialog';
|
import NewPage from '@/components/NewPage';
|
import SelectObjModal from '@/components/SelectObjModal/selectPerson';
|
import NewSelectPerson from '@/components/SelectObjModal/newSelectPerson';
|
import TableSearch from '@/components/NewTableSearch';
|
import TableView from '@/components/TableView';
|
import MyTabsNew from '@/components/MyTabsNew';
|
|
import './index.less';
|
|
const FormItem = Form.Item;
|
const TextArea = Input.TextArea;
|
const appUrl = $$.appUrl;
|
|
// 获取重复事项信息
|
function getRepeatCaseInfoApi(data) {
|
return $$.ax.request({ url: `caseRepeatInfo/getRepeatCaseInfo`, type: 'get', service: 'mediate', data });
|
}
|
|
function delFile(id) {
|
return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
|
}
|
|
// 保存重复事项
|
function saveRepeatCaseApi(data) {
|
return $$.ax.request({ url: `caseRepeatInfo/saveRepeatCase`, type: 'post', service: 'mediate', data });
|
}
|
|
// 添加重复事项列表
|
function getRepeatCaseListApi(data) {
|
return $$.ax.request({ url: `caseRepeatInfo/pageCaseInfoDhb`, type: 'get', service: 'mediate', data });
|
}
|
|
// 获取重复事项信息
|
function listRepeatCaseApi(data) {
|
return $$.ax.request({ url: `caseRepeatInfo/listRepeatCase`, type: 'get', service: 'mediate', data });
|
}
|
|
// 取消重复事项
|
function cancelRepeatCaseApi(data) {
|
return $$.ax.request({ url: `caseRepeatInfo/cancelRepeatCase`, type: 'post', service: 'mediate', data });
|
}
|
|
const RepeatMerge = () => {
|
const navigate = useNavigate();
|
const caseId = $$.getQueryString('caseId');
|
const repeatId = $$.getQueryString('repeatId');
|
const caseTaskId = $$.getQueryString('caseTaskId');
|
|
const formRef = useRef();
|
const [form] = antdForm.useForm();
|
const [caseInfo, setCaseInfo] = useState(null);
|
const [hisData, setHisData] = useState([]);
|
const [detailVisabled, setDetailVisabled] = useState(false);
|
const [modalData, setModalData] = useState({});
|
const [user, setUser] = useState({});
|
const [caseData, setCaseData] = useState({});
|
const [submitModalVisible, setSubmitModalVisible] = useState(false);
|
const [isModalVisible, setIsModalVisible] = useState(false);
|
const [selectOptions, setSelectOptions] = useState({});
|
const [mainDept, setMainDept] = useState('handleUnit');
|
const [wantUser, setWantUser] = useState({});
|
|
// 重复事项分页相关状态
|
const [currentPage, setCurrentPage] = useState(1);
|
const [pageSize, setPageSize] = useState(2);
|
const [totalHisData, setTotalHisData] = useState([]);
|
|
// 添加重复事项列表弹窗
|
const [addRepeatModalVisible, setAddRepeatModalVisible] = useState(false);
|
const [addRepeatModalData, setAddRepeatModalData] = useState({ tableData: [], title: '添加重复事项', total: 0 });
|
const [addRepeatModalSearch, setAddRepeatModalSearch] = useState({ page: 1, size: 10 });
|
|
const [selectObjModalData, setSelectObjModalData] = useState({});
|
const [isModalSelectVisible, setIsModalSelectVisible] = useState(false);
|
function handleCheckPreview(params) {
|
setModalData(params);
|
setDetailVisabled(true);
|
}
|
|
async function getRepeatCaseInfo() {
|
global.setSpinning(true);
|
const res = await getRepeatCaseInfoApi({ caseId, repeatId });
|
global.setSpinning(false);
|
if (res.type) {
|
setCaseInfo(res.data);
|
setCaseData(res.data.mainCaseInfo);
|
setTotalHisData(res.data.repeatCaseInfoList || []);
|
const paginatedData = getPaginatedData(res.data.repeatCaseInfoList || [], currentPage, pageSize);
|
setHisData(paginatedData);
|
}
|
}
|
|
// 处理分页数据
|
const getPaginatedData = (data, page, size) => {
|
const startIndex = (page - 1) * size;
|
const endIndex = startIndex + size;
|
return data.slice(startIndex, endIndex);
|
};
|
|
// 处理页码变化
|
const handlePageChange = (page) => {
|
setCurrentPage(page);
|
const paginatedData = getPaginatedData(totalHisData, page, pageSize);
|
setHisData(paginatedData);
|
};
|
|
// 处理每页条数变化
|
const handlePageSizeChange = (size) => {
|
setPageSize(size);
|
setCurrentPage(1);
|
const paginatedData = getPaginatedData(totalHisData, 1, size);
|
setHisData(paginatedData);
|
};
|
|
// 提交
|
async function handleSubmit() {
|
console.log(wantUser);
|
formRef.current.validate(undefined, (errors, values) => {
|
if (!errors) {
|
saveRepeatCase({
|
repeatId: repeatId,
|
mainCaseId: caseData.caseId,
|
// 还要加上主体id
|
repeatCaseIdList: [...totalHisData.map((item) => item.caseId)],
|
mediateUnitId: wantUser['handleUnit'][0].value,
|
mediateUnitName: wantUser['handleUnit'][0].name,
|
assistUnitList:
|
wantUser['assistUnit'] &&
|
wantUser['assistUnit'].map((item) => {
|
return {
|
uitId: item.value,
|
uitName: item.name,
|
};
|
}),
|
});
|
}
|
});
|
}
|
|
const saveRepeatCase = async (data) => {
|
const res = await saveRepeatCaseApi(data);
|
if (res.type) {
|
$$.infoSuccess({ content: '提交成功!' });
|
// 关闭弹窗
|
setSubmitModalVisible(false);
|
navigate(-1);
|
}
|
};
|
|
function handleRepeatSubmit() {
|
setSubmitModalVisible(true);
|
|
console.log('====================================');
|
console.log('caseData', caseData);
|
console.log('totalHisData', totalHisData);
|
|
console.log('====================================');
|
|
// 处理totalHisData数组 - 去重和去除空字段
|
const processedTotalHisData = totalHisData
|
.filter(
|
(item) =>
|
// 过滤空对象和mediateUnitId/mediateUnitName为空的项
|
item && item.mediateUnitId && item.mediateUnitName
|
)
|
.reduce((unique, item) => {
|
// 去重逻辑:如果mediateUnitId已存在,则不添加
|
const exists = unique.some((uniqueItem) => uniqueItem.mediateUnitId === item.mediateUnitId);
|
if (!exists) {
|
unique.push(item);
|
}
|
return unique;
|
}, []);
|
|
const handleUnitOption = caseData.mediateUnitId ? [{ label: caseData.mediateUnitName, value: caseData.mediateUnitId }] : [];
|
|
// 创建assistUnitOptions,并排除与handleUnitOption中value相同的选项
|
const mainUnitId = caseData.mediateUnitId; // 主办部门ID
|
const assistUnitOptions =
|
processedTotalHisData
|
?.filter((item) => item.mediateUnitId !== mainUnitId) // 排除与主办部门ID相同的部门
|
.map((i) => ({ label: i.mediateUnitName, value: i.mediateUnitId })) || [];
|
|
// 更新selectOptions
|
setSelectOptions({
|
handleUnit: handleUnitOption,
|
assistUnit: assistUnitOptions,
|
});
|
|
// 设置wantUser数据
|
const newWantUser = {
|
handleUnit: caseData.mediateUnitId
|
? [
|
{
|
name: caseData.mediateUnitName,
|
value: caseData.mediateUnitId,
|
},
|
]
|
: [],
|
assistUnit:
|
processedTotalHisData
|
?.filter((item) => item.mediateUnitId !== mainUnitId) // 同样排除与主办部门ID相同的部门
|
.map((i) => ({
|
name: i.mediateUnitName,
|
value: i.mediateUnitId,
|
})) || [],
|
};
|
setWantUser(newWantUser);
|
|
// 在下一个事件循环中设置表单值,确保弹窗已经渲染完成
|
setTimeout(() => {
|
if (formRef.current) {
|
handleUnitOption?.length
|
? formRef.current.setFieldValue(
|
'handleUnit',
|
handleUnitOption.map((i) => i.value)
|
)
|
: formRef.current.setFieldValue('handleUnit', []);
|
// 同样过滤掉与主办部门相同ID的选项
|
const filteredAssistIds = processedTotalHisData?.filter((item) => item.mediateUnitId !== mainUnitId).map((i) => i.mediateUnitId) || [];
|
formRef.current.setFieldValue('assistUnit', filteredAssistIds);
|
}
|
}, 100);
|
}
|
|
//form数据同步要提交的数据
|
const handleSync = (field, value) => {
|
// 过滤保存选中的值
|
if (wantUser[field]) {
|
wantUser[field] = wantUser[field].filter((item) => value.indexOf(item.value) != -1);
|
setWantUser({ ...wantUser });
|
}
|
// 不再自动打开选择弹窗
|
};
|
|
const handleTemplate = (type) => {
|
if (type === 1) {
|
formRef.current.setFieldValue(
|
'assignContent',
|
'本事项经初步核实,认为属于贵部门职责范围内的矛盾纠纷化解工作。请组织专门人员负责此事,尽快查明事实真相,依法依规进行处理,并在处理过程中充分考虑当事人的合理诉求,确保公平公正,维护当事人的合法权益。同时,请务必保持与当事人的沟通畅通,及时反馈办理进展,以增强矛盾纠纷化解工作的透明度和公信力。'
|
);
|
} else {
|
formRef.current.setFieldValue('assignContent', '');
|
}
|
};
|
|
// 添加重复事项
|
function handleAddRepeat() {
|
setAddRepeatModalVisible(true);
|
// 获取重复事项列表
|
getRepeatCaseList(addRepeatModalSearch);
|
}
|
|
// 取消合并
|
function handleCancelMerge() {
|
$$.arcoModalInfo({
|
icon: <IconInfoCircle style={{ color: '#fa8c16' }} />,
|
title: '提醒',
|
content: <span>确定取消事项合并吗?</span>,
|
okText: '确定',
|
cancelText: '我再想想',
|
onOk: async () => {
|
global.setSpinning(true);
|
const res = await cancelRepeatCaseApi({ repeatId });
|
global.setSpinning(false);
|
if (res.type) {
|
$$.infoSuccess({ content: '取消事项合并成功!' });
|
navigate(-1);
|
}
|
},
|
});
|
}
|
|
// 返回上级页面
|
function handleGoBack() {
|
navigate(-1);
|
}
|
|
// 从列表中删除
|
const handleDelete = (index) => {
|
// 获取当前页的起始索引
|
const startIndex = (currentPage - 1) * pageSize;
|
// 计算在totalHisData中的实际索引
|
const actualIndex = startIndex + index;
|
|
// 在totalHisData中删除对应项
|
const newTotalHisData = [...totalHisData];
|
newTotalHisData.splice(actualIndex, 1);
|
setTotalHisData(newTotalHisData);
|
|
// 重新计算当前页数据
|
const newPageData = getPaginatedData(newTotalHisData, currentPage, pageSize);
|
setHisData(newPageData);
|
|
// 如果当前页没有数据了,且不是第一页,则返回上一页
|
if (newPageData.length === 0 && currentPage > 1) {
|
const newPage = currentPage - 1;
|
setCurrentPage(newPage);
|
const previousPageData = getPaginatedData(newTotalHisData, newPage, pageSize);
|
setHisData(previousPageData);
|
}
|
};
|
|
// 设为主体事项
|
const handleSetMain = (item) => {
|
// 更新主体事项
|
setCaseData(item);
|
|
// 找到该项在totalHisData中的索引
|
const index = totalHisData.findIndex((data) => data.caseId === item.caseId);
|
if (index !== -1) {
|
// 将原主体事项添加到重复列表
|
const newTotalHisData = [...totalHisData];
|
// 如果原主体事项不在重复列表中,则添加
|
if (!newTotalHisData.some((data) => data.caseId === caseData.caseId)) {
|
newTotalHisData.push(caseData);
|
}
|
// 从重复列表中移除新的主体事项
|
newTotalHisData.splice(index, 1);
|
setTotalHisData(newTotalHisData);
|
|
// 更新当前页数据
|
const paginatedData = getPaginatedData(newTotalHisData, currentPage, pageSize);
|
setHisData(paginatedData);
|
}
|
|
Message.success('设置成功');
|
};
|
|
const columnsDone = [
|
{ title: '事项状态', width: 80, dataIndex: 'statusName' },
|
{ title: '事项来源', width: 80, dataIndex: 'caseSource' },
|
{ title: '数据来源', width: 80, dataIndex: 'dataSource' },
|
{
|
title: '问题属地',
|
dataIndex: 'queAddr',
|
key: 'queAddr',
|
width: 180,
|
},
|
{
|
title: '纠纷发生地',
|
dataIndex: 'addr',
|
key: 'addr',
|
width: 180,
|
},
|
{ title: '申请方', width: 100, dataIndex: 'plaintiffs' },
|
{ title: '被申请方', width: 100, dataIndex: 'defendants' },
|
{ title: '登记机构', width: 100, dataIndex: 'inputUnitName' },
|
{ title: '登记时间', width: 100, dataIndex: 'inputTime' },
|
{ title: '承办部门', width: 100, dataIndex: 'mediateUnitName' },
|
{ title: '经办人', width: 100, dataIndex: 'mediator' },
|
{
|
title: '化解结果',
|
dataIndex: 'mediResultName',
|
key: 'mediResultName',
|
width: 100,
|
render: (text, record, index) => <div style={{ color: text == '化解成功' ? '#00b42a' : '#f53f3f' }}>{text}</div>,
|
},
|
{
|
title: '操作',
|
dataIndex: 'action',
|
width: 100,
|
render: (_, row) => {
|
return (
|
<Space>
|
<span
|
onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${row.caseTaskId}&caseId=${row.caseId}`)}
|
className="public-color public-a"
|
>
|
详情
|
</span>
|
<span
|
className="public-color public-a"
|
onClick={() => {
|
// 创建一个新的重复事项对象
|
const newRepeatItem = { ...row };
|
// 将新的重复事项添加到总数据中
|
const newTotalHisData = [...totalHisData, newRepeatItem];
|
setTotalHisData(newTotalHisData);
|
|
// 计算应该显示的页码(如果当前在最后一页且刚好满了,则显示下一页)
|
const totalPages = Math.ceil(newTotalHisData.length / pageSize);
|
const shouldShowPage =
|
currentPage === Math.ceil(totalHisData.length / pageSize) && totalHisData.length % pageSize === 0 ? currentPage + 1 : totalPages;
|
|
setCurrentPage(shouldShowPage);
|
// 更新当前页数据
|
const paginatedData = getPaginatedData(newTotalHisData, shouldShowPage, pageSize);
|
setHisData(paginatedData);
|
|
Message.success('添加成功');
|
setAddRepeatModalVisible(false);
|
}}
|
>
|
添加
|
</span>
|
</Space>
|
);
|
},
|
},
|
];
|
|
// 搜索 or 重置
|
function handleSearch(type, session) {
|
let paramsObj = {};
|
if (type === 'search') {
|
paramsObj = { ...addRepeatModalSearch, ...form.getFieldsValue(), page: 1 };
|
$$.changeTimNeweFormat(paramsObj, 'handleTime', 'handleTimeStart', 'handleTimeEnd');
|
}
|
|
if (type === 'reset') {
|
paramsObj = { page: 1, size: 10 };
|
paramsObj.handleTimeStart = $$.dateFormat($$.myMoment().subtract(0, 'months').startOf('month'), 'YYYY-MM-DD');
|
paramsObj.handleTimeEnd = $$.dateFormat($$.myMoment().subtract(0, 'months').endOf('month'), 'YYYY-MM-DD');
|
form.resetFields();
|
form.setFieldsValue({
|
joinRole: '1',
|
handleTime: [
|
$$.dateFormat($$.myMoment().subtract(0, 'months').startOf('month'), 'YYYY-MM-DD'),
|
$$.dateFormat($$.myMoment().subtract(0, 'months').endOf('month'), 'YYYY-MM-DD'),
|
],
|
});
|
}
|
if (type === 'recurrent') {
|
paramsObj = { ...addRepeatModalSearch, ...session.search };
|
let copyObj = { ...paramsObj };
|
if (copyObj.updateTime) {
|
copyObj.updateTime = [$$.myMoment(copyObj.updateStart), $$.myMoment(copyObj.updateEnd)];
|
}
|
form.setFieldsValue(copyObj);
|
}
|
getRepeatCaseList(paramsObj, session?.tableActive);
|
}
|
|
function handleChangePage(page, pageSize, field, order) {
|
let paramsObj = Object.assign(addRepeatModalSearch, { page, size: pageSize });
|
let sortColmn = '';
|
let sortType = '';
|
sortColmn = field === 'updateTime' ? 1 : field === 'caseLevel' ? 2 : '';
|
sortType = order === 'ascend' ? 1 : order === 'descend' ? 2 : '';
|
paramsObj = { ...paramsObj, sortColmn, sortType };
|
getRepeatCaseList(paramsObj);
|
}
|
|
async function getRepeatCaseList(data) {
|
const res = await getRepeatCaseListApi({ ...data, repeatId });
|
if (res.type) {
|
setAddRepeatModalSearch(data);
|
setAddRepeatModalData({ ...addRepeatModalData, tableData: res.data.content || [], total: res.data.totalElements });
|
}
|
}
|
|
useEffect(() => {
|
getRepeatCaseInfo();
|
}, []);
|
|
// 处理submitModalVisible变化时的自动聚焦问题
|
useEffect(() => {
|
if (submitModalVisible) {
|
// 将焦点设置到对话框或其他非表单元素上,防止自动聚焦到Select
|
const modalElement = document.querySelector('.arco-modal-content');
|
if (modalElement) {
|
modalElement.setAttribute('tabindex', '-1');
|
setTimeout(() => {
|
modalElement.focus();
|
}, 100);
|
}
|
}
|
}, [submitModalVisible]);
|
|
console.log('formRef.current', formRef?.current?.getFieldsValue());
|
|
console.log('selectOptions', selectOptions);
|
|
return (
|
<NewPage pageHead={{ title: '重复事项合并' }}>
|
<div className="repeatMerge-main">
|
<Scrollbars style={{ height: 'calc(100vh - 219px)' }} autoHide>
|
<div className="repeatMerge-wrapper">
|
<Space size="small">
|
<div className="MediationInfo-subTitle" style={{ marginTop: '-7px' }}></div>
|
<h4>主体事项信息</h4>
|
</Space>
|
<table border="1" align="center" cellpadding="6" className="table">
|
<tr>
|
<th bgcolor="#F7F8FA" className="table-title" width="120">
|
事项编号
|
</th>
|
<td>{caseData?.caseRef || '-'}</td>
|
<th bgcolor="#F7F8FA" className="table-title" width="120">
|
事项状态
|
</th>
|
<td>{caseData?.statusName || '-'}</td>
|
</tr>
|
<tr>
|
<th bgcolor="#F7F8FA" className="table-title" width="120">
|
事项来源
|
</th>
|
<td>{caseData?.caseSource || '-'}</td>
|
<th bgcolor="#F7F8FA" className="table-title" width="120">
|
数据来源
|
</th>
|
<td>{caseData?.dataSource || '-'}</td>
|
</tr>
|
<tr>
|
<th bgcolor="#F7F8FA" className="table-title">
|
申请方
|
</th>
|
<td>
|
<div style={{ display: 'flex', gap: '8px' }}>
|
{caseData?.plaintiffList?.map((i) => (
|
<span
|
style={{ textDecoration: 'underline' }}
|
onClick={() => {
|
handleCheckPreview(i);
|
}}
|
className="public-color public-a"
|
>
|
{i.trueName || '-'}
|
{`(${i.certiNo || ''})`}
|
</span>
|
))}
|
</div>
|
</td>
|
<th bgcolor="#F7F8FA" className="table-title">
|
被申请方
|
</th>
|
<td>
|
<div style={{ display: 'flex', gap: '8px' }}>
|
{caseData?.defendantList?.map((i) => (
|
<span
|
style={{ textDecoration: 'underline' }}
|
onClick={() => {
|
handleCheckPreview(i);
|
}}
|
className="public-color public-a"
|
>
|
{i.trueName || '-'}
|
{`(${i.certiNo || ''})`}
|
</span>
|
))}
|
</div>
|
</td>
|
</tr>
|
<tr>
|
<th bgcolor="#F7F8FA" className="table-title">
|
问题属地
|
</th>
|
<td>
|
<div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
<IconLocation />
|
{caseData?.queAreaName || '-'} {caseData?.queRoadName || '-'}
|
</div>
|
</td>
|
<th bgcolor="#F7F8FA" className="table-title">
|
纠纷发生地
|
</th>
|
<td>{caseData?.addr || '-'}</td>
|
</tr>
|
<tr>
|
<th bgcolor="#F7F8FA" className="table-title">
|
登记机构
|
</th>
|
<td>{user?.unit || '-'}</td>
|
<th bgcolor="#F7F8FA" className="table-title">
|
登记时间
|
</th>
|
<td>{caseData?.createTime || '-'}</td>
|
</tr>
|
<tr>
|
<th bgcolor="#F7F8FA" className="table-title">
|
事项概况
|
</th>
|
<td colspan="3">{<$$.ExpandableText text={caseData?.caseDes || '-'} numString={100} />}</td>
|
</tr>
|
<tr>
|
<th bgcolor="#F7F8FA" className="table-title">
|
事项申请
|
</th>
|
<td colspan="3">{<$$.ExpandableText text={caseData?.caseClaim || '-'} numString={100} />}</td>
|
</tr>
|
<tr>
|
<th bgcolor="#F7F8FA" className="table-title">
|
承办部门:
|
</th>
|
<td colspan="3">{<$$.ExpandableText text={caseData?.mediateUnitName || '-'} numString={100} />}</td>
|
</tr>
|
</table>
|
</div>
|
<div className="repeatMerge-repeat">
|
<div style={{ marginTop: '4px' }}>
|
<Space size="small">
|
<div className="MediationInfo-subTitle" style={{ marginTop: '-7px' }}></div>
|
<h4>重复列表({totalHisData.length})</h4>
|
</Space>
|
<Row gutter={[16, 32]}>
|
{hisData?.map((item, index) => (
|
<Col span={12} key={`hisData${index}`}>
|
<div className={`RepeatDetail-box ${item.selected && 'RepeatDetail-box-active'}`}>
|
<div className="RepeatDetail-flex">
|
<div style={{ fontWeight: '600' }} className="RepeatDetail-title">
|
重复事项{(currentPage - 1) * pageSize + index + 1} (相似度{item?.similarity ? `${item?.similarity}%` : '-'})
|
</div>
|
<div style={{ display: 'flex', gap: '8px' }}>
|
<Button
|
type="text"
|
size="small"
|
style={{ color: '#1A6FB8', padding: '0px' }}
|
onClick={() => handleDelete(index)}
|
icon={<IconDelete />}
|
>
|
从列表中删除
|
</Button>
|
<Button
|
type="text"
|
size="small"
|
style={{ color: '#1A6FB8', padding: '0px' }}
|
onClick={() => handleSetMain(item)}
|
icon={<IconSwap />}
|
>
|
设为主体事项
|
</Button>
|
</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">相似分析:</div>
|
<div className="public-danger">{item?.repeatAnalyseList || '-'}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">事项编号:</div>
|
<div>
|
<span
|
style={{ textDecoration: 'underline' }}
|
onClick={() => {
|
handleCheckPreview(item);
|
}}
|
className="public-color public-a"
|
>
|
{item?.caseRef || '-'}
|
</span>
|
</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">事项状态:</div>
|
<div>{item?.statusName || '-'}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">事项来源:</div>
|
<div>{item?.caseSource || '-'}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">数据来源:</div>
|
<div>{item?.dataSource || '本系统'}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">申请方:</div>
|
<div style={{ display: 'flex', gap: '8px' }}>
|
{item?.plaintiffList?.map((i) => (
|
<span
|
style={{ textDecoration: 'underline' }}
|
onClick={() => {
|
handleCheckPreview(i);
|
}}
|
className="public-color public-a"
|
>
|
{i.trueName || '-'}
|
{`(${i.certiNo || ''})`}
|
</span>
|
))}
|
</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">被申请方:</div>
|
<div style={{ display: 'flex', gap: '8px' }}>
|
{item?.defendantList?.map((i) => (
|
<span
|
style={{ textDecoration: 'underline' }}
|
onClick={() => {
|
handleCheckPreview(i);
|
}}
|
className="public-color public-a"
|
>
|
{i.trueName || '-'}
|
{`(${i.certiNo || ''})`}
|
</span>
|
))}
|
</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">问题属地:</div>
|
<div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
<IconLocation />
|
{item?.queAreaName || '-'} {item?.queRoadName || ''}
|
</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">纠纷发生地:</div>
|
<div>{item?.addr || '-'}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">事项概况:</div>
|
<div style={{ flex: '1' }}>{item?.caseDes ? <$$.ExpandableText text={item?.caseDes || '-'} numString={54} /> : '-'}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">事项申请:</div>
|
<div style={{ flex: '1' }}>{<$$.ExpandableText text={item?.caseClaim || '-'} numString={54} />}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">登记机构:</div>
|
<div>{item?.inputUnitName || '-'}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">登记时间:</div>
|
<div>{item?.inputTime || '-'}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">承办部门:</div>
|
<div>{item?.mediateUnitName || '-'}</div>
|
</div>
|
<div className="RepeatDetail-title">
|
<div className="RepeatDetail-subTitle">经办人:</div>
|
<div>{item?.mediator || '-'}</div>
|
</div>
|
</div>
|
</Col>
|
))}
|
</Row>
|
{totalHisData.length > pageSize && (
|
<div style={{ margin: '12px 0', display: 'flex', justifyContent: 'flex-end' }}>
|
<Pagination
|
current={currentPage}
|
pageSize={pageSize}
|
total={totalHisData.length}
|
onChange={handlePageChange}
|
pageSizeChangeResetCurrent={true}
|
onPageSizeChange={handlePageSizeChange}
|
selectProps={{ popupVisible: false }}
|
sizeOptions={[2, 4, 6, 8]}
|
/>
|
</div>
|
)}
|
{totalHisData?.filter((i) => i.selected)?.length > 0 && (
|
<div style={{ margin: '12px 0' }}>
|
已选择<span className="public-color">{totalHisData?.filter((i) => i.selected)?.length}</span>项
|
</div>
|
)}
|
</div>
|
</div>
|
</Scrollbars>
|
<div className="dataSync-excel" style={{ left: '0', right: '0' }}>
|
<Space size="middle">
|
<Button type="primary" onClick={handleRepeatSubmit}>
|
提交
|
</Button>
|
<Button type="outline" style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={handleAddRepeat}>
|
添加重复事项
|
</Button>
|
<Button type="outline" style={{ color: '#F53F3F', border: '1px solid #F53F3F' }} onClick={handleCancelMerge}>
|
取消合并
|
</Button>
|
<Button type="secondary" onClick={handleGoBack}>
|
返回上级页面
|
</Button>
|
</Space>
|
</div>
|
<Modal
|
title={'查看' + modalData.trueName}
|
visible={detailVisabled}
|
onOk={() => setDetailVisabled(false)}
|
onCancel={() => {
|
setDetailVisabled(false);
|
}}
|
wrapStyle={{ zIndex: '1006' }}
|
autoFocus={false}
|
focusLock={true}
|
footer={null}
|
unmountOnExit={true}
|
maskClosable={false}
|
>
|
{/* <DetailDialog editData={modalData} personData={modalData} /> */}
|
11111
|
</Modal>
|
<Modal
|
title="设置合并后的办理部门"
|
visible={submitModalVisible}
|
onOk={() => setSubmitModalVisible(false)}
|
onCancel={() => setSubmitModalVisible(false)}
|
focusLock={false}
|
autoFocus={false}
|
footer={null}
|
>
|
{/* 弹窗内容 */}
|
<Alert type="info" content={<span>请为合并后的主体事项指定办理部门</span>} style={{ marginBottom: '12px' }} />
|
<Form
|
ref={formRef}
|
layout="vertical"
|
requiredSymbol={false}
|
mountOnEnter={false}
|
unmountOnExit={false}
|
autoFocus={false}
|
initialValues={{}} //默认值
|
scrollToFirstError
|
className="no-auto-focus"
|
>
|
<Row>
|
<Col span={24}>
|
<FormItem
|
label={
|
<div style={{ display: 'flex' }}>
|
承办部门<div className="must">必填</div>
|
</div>
|
}
|
field="handleUnit"
|
rules={[{ required: true, message: '请选择承办部门' }]}
|
>
|
<Select
|
mode="multiple"
|
placeholder="请选择承办部门"
|
allowClear
|
autoFocus={false}
|
showSearch={false}
|
onFocus={(e) => {
|
e.stopPropagation();
|
setIsModalVisible(true);
|
setMainDept('handleUnit');
|
}}
|
options={selectOptions['handleUnit']}
|
onChange={(v) => {
|
console.log('v', v);
|
handleSync('handleUnit', v);
|
}}
|
></Select>
|
</FormItem>
|
</Col>
|
<Col span={24}>
|
<FormItem
|
label={
|
<div style={{ display: 'flex' }}>
|
配合部门<div style={{ color: '#86909C' }}>(可多选)</div>
|
</div>
|
}
|
field="assistUnit"
|
>
|
<Select
|
mode="multiple"
|
placeholder="请选择配合部门"
|
allowClear
|
autoFocus={false}
|
showSearch={false}
|
onFocus={(e) => {
|
e.stopPropagation();
|
setIsModalVisible(true);
|
setMainDept('assistUnit');
|
}}
|
options={selectOptions['assistUnit']}
|
onChange={(v) => {
|
handleSync('assistUnit', v);
|
}}
|
></Select>
|
</FormItem>
|
</Col>
|
{/* 提交按钮 */}
|
<Col span={24}>
|
<div style={{ display: 'flex', justifyContent: 'flex-start' }}>
|
<Button type="primary" onClick={handleSubmit}>
|
提交
|
</Button>
|
</div>
|
</Col>
|
</Row>
|
</Form>
|
</Modal>
|
|
{/* 添加重复事项弹窗 */}
|
<Modal
|
title={<div style={{ textAlign: 'left' }}>{addRepeatModalData.title}</div>}
|
style={{ width: '90%' }}
|
onCancel={() => {
|
setAddRepeatModalVisible(false);
|
setAddRepeatModalData({ ...addRepeatModalData, list: [], title: '', type: '' });
|
}}
|
closable={true}
|
visible={addRepeatModalVisible}
|
footer={null}
|
>
|
<div>
|
<TableSearch
|
labelLength={4}
|
exportButtonShow={false}
|
displayShow={false}
|
textAlign={{ textAlign: 'left' }}
|
form={form}
|
itemData={[
|
{ type: 'Input', placeholder: '事项概况/事项申请关键词', name: 'caseDes', label: '关键词' },
|
{ type: 'Input', placeholder: '请填写', name: 'plaintiffs', label: '申请方' },
|
{ type: 'Input', placeholder: '请填写', name: 'defendants', label: '被申请方' },
|
{ type: 'Input', name: 'inputUnitName', label: '登记机构' },
|
{
|
type: 'searchButton',
|
name: 'mediateUnitId',
|
maxLength: 0,
|
onClear: () => {
|
console.log('clear');
|
setSelectObjModalData({ ...selectObjModalData, mediateUnitId: {} });
|
form.setFieldValue('mediateUnitId', '');
|
},
|
onSearch: () => {
|
setSelectObjModalData({ ...selectObjModalData, key: 'mediateUnitId', title: '承办部门' });
|
setIsModalSelectVisible(true);
|
},
|
searchButton: '选择',
|
placeholder: '请选择',
|
label: '承办部门',
|
},
|
{
|
type: 'RangePicker',
|
name: 'handleTime',
|
label: '登记时间',
|
allowClear: false,
|
shortcutsPlacementLeft: true,
|
shortcuts: $$.shortcutsList(),
|
},
|
]}
|
handleReset={() => handleSearch('reset')}
|
handleSearch={() => handleSearch('search')}
|
/>
|
<div style={{ width: '100%', borderBottom: '1px solid #E5E6EB', margin: '12px 0' }}></div>
|
<div style={{ marginTop: '0px' }}>
|
<div style={{ fontSize: '16px' }}>查询结果</div>
|
<div style={{ margin: '12px 0' }}>
|
<Alert content={'只能添加本部门属地范围内的纠纷事项'} />
|
</div>
|
<TableView
|
columns={columnsDone}
|
dataSource={addRepeatModalData.tableData}
|
onChange={(pagination, filters, sorter) => {
|
handleChangePage(pagination.current, pagination.pageSize, sorter.field, sorter.order);
|
}}
|
pagination={{
|
current: addRepeatModalSearch.page,
|
pageSize: addRepeatModalSearch.size,
|
total: addRepeatModalData.total,
|
// onChange: (page, pageSize, sorter) => handleChangePage(page, pageSize, sorter),
|
}}
|
/>
|
</div>
|
</div>
|
</Modal>
|
<SelectObjModal
|
visible={isModalVisible}
|
checkKeys={wantUser[mainDept]}
|
onOk={(value) => {
|
console.log(value);
|
setIsModalVisible(false);
|
wantUser[mainDept] = value.items;
|
setWantUser(wantUser);
|
selectOptions[mainDept] = value.items.map((item) => ({
|
label: item.name,
|
value: item.value,
|
}));
|
setSelectOptions(selectOptions);
|
formRef.current.setFieldValue(
|
mainDept,
|
value.items.map((item) => item.value)
|
);
|
}}
|
onClose={() => setIsModalVisible(false)}
|
type="dept"
|
isCheckbox={mainDept === 'handleUnit' ? false : true}
|
/>
|
|
<NewSelectPerson
|
visible={isModalSelectVisible}
|
nameStr={selectObjModalData.title}
|
checkKeys={[selectObjModalData[selectObjModalData.key]?.key || '']}
|
onOk={(item) => {
|
setIsModalSelectVisible(false);
|
setSelectObjModalData({ ...selectObjModalData, [selectObjModalData.key]: item });
|
form.setFieldValue(selectObjModalData?.key, item.name);
|
}}
|
type={selectObjModalData.type || 'dept'}
|
onClose={() => setIsModalSelectVisible(false)}
|
isCheckbox={false}
|
/>
|
</div>
|
</NewPage>
|
);
|
};
|
|
export default RepeatMerge;
|