|
import React, { useEffect, useState } from 'react';
|
import { useNavigate, useLocation } from 'react-router-dom';
|
import { Form, Typography, Space, Checkbox, Divider } from 'antd';
|
import { IconInfoCircle } from '@arco-design/web-react/icon';
|
import NewPage from '../../components/NewPage';
|
import * as $$ from '../../utils/utility';
|
import TableView from '../../components/TableViewCanSort';
|
import { Alert, Button, Select } from '@arco-design/web-react';
|
import { dataCenterTransfer1, dataCenterTransfer2, dataCenterTransfer3, dataCenterTransfer4 } from '@/assets/images';
|
import NewTableSearch from '../../components/NewTableSearch';
|
import MyTabsNew from '../../components/MyTabsNew';
|
import './index.less';
|
|
// 案件转入
|
function importToCaseApi(submitData) {
|
return $$.ax.request({ url: 'caseBook/importToCase', type: 'post', data: submitData, service: 'mediate' });
|
}
|
|
// 总览数据
|
function getCountApply() {
|
return $$.ax.request({ url: 'rmtj/countApply', type: 'get', service: 'mediate' });
|
}
|
|
//转入申请列表
|
function getApplyData(data) {
|
return $$.ax.request({ url: 'rmtj/pageApply', type: 'get', data, service: 'mediate' });
|
}
|
|
//批量申请转入
|
function batchSendApply(data) {
|
return $$.ax.request({ url: 'rmtj/batchSendApply', type: 'post', data, service: 'mediate' });
|
}
|
|
//批量移除
|
function batchDeleteApply(data) {
|
return $$.ax.request({ url: 'rmtj/batchDeleteApply', type: 'post', data, service: 'mediate' });
|
}
|
|
const { Link } = Typography;
|
|
const MediateAll = () => {
|
let location = useLocation();
|
let navigate = useNavigate();
|
const [form] = Form.useForm();
|
// 搜索 申请渠道,22_00001-1:机构登记,22_00001-2:小程序,22_00001-3:其他渠道
|
const [search, setSearch] = useState({ page: 1, size: 10 });
|
// tabs标签分页
|
const [mediateTab, setMediateTab] = useState('1');
|
// 未申请数据
|
const [data, setData] = useState({ tableData: [] });
|
// 已申请数据
|
const [miniData, setMiniData] = useState({ tableData: [] })
|
// table选择数据
|
const [selectedRowsObj, setSelectedRowsObj] = useState({});
|
//自定义排序
|
const [sortType, setSortType] = useState(1);
|
//已申请数据总览
|
const [dataTotal, setDataTotal] = useState({});
|
|
const columns = [
|
{ title: '办结时间', width: 120, dataIndex: 'closeTime', render: (text) => <span>{$$.dateFormat(text)}</span> },
|
{ title: '事项编号', dataIndex: 'caseRef' },
|
{
|
title: '化解结果',
|
dataIndex: 'mediResultName',
|
width: 100,
|
render: (text, record) =>
|
!text ? '-' : <div className={`public-notag public-notag-${record.mediResult === '22_00025-1' ? 'tagGreen' : 'tagRed'}`}>{text}</div>,
|
},
|
{ title: '调解组织', dataIndex: 'mediateUnitName' },
|
{ title: '调解员', width: 60, dataIndex: 'mediator' },
|
{
|
title: '事项来源',
|
dataIndex: 'caseSource',
|
width: 120,
|
},
|
{
|
title: '事项等级',
|
dataIndex: 'caseLevel',
|
width: 100,
|
},
|
{ title: '纠纷类型', dataIndex: 'caseType' },
|
{ title: '申请方', dataIndex: 'plaintiffs' },
|
{ title: '被申请方', dataIndex: 'defendants' },
|
{
|
title: '操作',
|
dataIndex: 'action',
|
width: 120,
|
render: (_, record) => {
|
return (
|
<Space size="middle">
|
<Link onClick={() => handleJump(record)}>详情</Link>
|
{mediateTab === '1' && <Link onClick={() => modifyJump(record)}>修改</Link>}
|
</Space>
|
);
|
},
|
},
|
];
|
//已申请表头添加
|
const applyColumns = [
|
{ title: '提审时间', width: 100, dataIndex: 'applyTime', render: (text) => <span>{$$.dateFormat(text)}</span> },
|
{
|
title: '初审结果',
|
dataIndex: 'firstAuditResultName',
|
width: 100,
|
render: (text, record) =>
|
!text ? '-' : <div className={`public-notag public-notag-${record.firstAuditResult === '1' ? 'tagGreen' : record.firstAuditResult === '2' ? 'tagRed' : ''}`}>{text}</div>,
|
},
|
{
|
title: '终审结果',
|
dataIndex: 'endAuditResultName',
|
width: 100,
|
render: (text, record) =>
|
!text ? '-' : <div className={`public-notag public-notag-${record.endAuditResult === '1' ? 'tagGreen' : record.endAuditResult === '2' ? 'tagRed' : ''}`}>{text}</div>,
|
},
|
{
|
title: '转入结果',
|
dataIndex: 'rmtjStatusName',
|
width: 100,
|
render: (text, record) =>
|
!text ? '-' : <div className={`public-notag public-notag-${record.rmtjStatus === '3' ? 'tagGreen' : record.rmtjStatus === '4' ? 'tagRed' : ''}`}>{text}</div>,
|
},
|
{ title: '转入时间', width: 120, dataIndex: 'rmtjTime', render: (text) => <span>{$$.dateFormat(text)}</span> },
|
{ title: '事项编号', width: 100, dataIndex: 'caseRef', ellipsis: true, },
|
{
|
title: '化解结果',
|
dataIndex: 'mediResultName',
|
width: 100,
|
render: (text, record) =>
|
!text ? '-' : <div className={`public-notag public-notag-${record.mediResult === '22_00025-1' ? 'tagGreen' : 'tagRed'}`}>{text}</div>,
|
},
|
{ title: '调解组织', dataIndex: 'mediateUnitName', width: 80, ellipsis: true, },
|
{ title: '调解员', width: 60, dataIndex: 'mediator' },
|
{
|
title: '事项来源',
|
dataIndex: 'caseSource',
|
width: 80,
|
},
|
{
|
title: '事项等级',
|
dataIndex: 'caseLevel',
|
width: 80,
|
},
|
{ title: '纠纷类型', width: 80, dataIndex: 'caseType', ellipsis: true, },
|
{ title: '申请方', dataIndex: 'plaintiffs', width: 60, ellipsis: true, },
|
{ title: '被申请方', dataIndex: 'defendants', width: 80, ellipsis: true, },
|
{
|
title: '操作',
|
dataIndex: 'action',
|
width: 80,
|
render: (_, record) => {
|
return (
|
<Space size="middle">
|
<Link onClick={() => handleJump(record)}>详情</Link>
|
</Space>
|
);
|
},
|
},
|
]
|
const selectedRowKeys = handleGetSelectedRowKeys('selectedRowKeys');
|
|
// 初始化
|
useEffect(() => {
|
let returnRouteData = $$.getSessionStorage(location.pathname);
|
if (returnRouteData && returnRouteData.search) {
|
const { applyType, ...rest } = returnRouteData.search
|
setMediateTab(applyType)
|
handleSearch('recovery', { ...rest }, '1');
|
handleSearch('recovery', { ...rest }, '2');
|
} else {
|
handleSearch('reset', '', '1');
|
handleSearch('reset', '', '2');
|
}
|
if (!!returnRouteData) {
|
$$.clearSessionStorage(location.pathname);
|
}
|
}, []);
|
|
//请求总览数据
|
const getTotalData = async () => {
|
const response = await getCountApply()
|
if (response && response.type) {
|
setDataTotal(response.data)
|
}
|
}
|
|
//自定义排序
|
function getOrderPara(field, order) {
|
// if (field === 'acceptTime') {
|
// if (order === 'descend') {
|
// setSortType(1);
|
// handleSearch('changePage', [page, size, 1], mediateTab);
|
// }
|
// if (order === 'ascend') {
|
// handleSearch('changePage', [page, size, 2], mediateTab);
|
// setSortType(2);
|
// }
|
// }
|
// if (typeof order === 'undefined') {
|
// handleSearch('changePage', [page, size], mediateTab);
|
// setSortType('');
|
// }
|
};
|
|
// 查看,签收跳转
|
function handleJump(record) {
|
$$.setSessionStorage(location.pathname, { search: search });
|
navigate(`/mediate/visit/fileMessage?caseTaskId=${record.taskId}&caseId=${record.caseId}`)
|
}
|
|
//修改页面
|
function modifyJump(record) {
|
$$.info({ type: 'warning', content: '该功能暂不开放' });
|
}
|
|
// 搜索 or 重置
|
function handleSearch(type, data, tab) {
|
if (type === 'recovery') {
|
// 案件详情返回时恢复跳转前查询
|
let obj = { ...data };
|
if (obj.acceptTime) {
|
obj.acceptTime = [$$.myMoment(obj.acceptStart), $$.myMoment(obj.acceptEnd)];
|
}
|
form.setFieldsValue(obj);
|
getImportDraftData({ ...data, sortType, applyType: tab });
|
|
return;
|
}
|
if (type === 'reset') {
|
form.resetFields();
|
getImportDraftData({ page: 1, size: 10, sortType, applyType: tab });
|
|
return;
|
}
|
if (type === 'search' || type === 'changePage') {
|
let values = form.getFieldsValue();
|
let obj = type === 'changePage' ? { page: data[0], size: data[1] } : { page: 1 };
|
let paramsObj = { ...search, ...values, ...obj, applyType: tab }
|
$$.changeTimNeweFormat(paramsObj, 'closeTime', 'closeStart', 'closeEnd');
|
$$.changeTimNeweFormat(paramsObj, 'applyTime', 'applyStart', 'applyEnd');
|
$$.changeTimNeweFormat(paramsObj, 'rmtjTime', 'rmtjStart', 'rmtjEnd');
|
getImportDraftData(paramsObj);
|
}
|
}
|
|
// 获取已申请未申请数据
|
async function getImportDraftData(submitData) {
|
setSearch(submitData);
|
global.setSpinning(true);
|
const res = await getApplyData(submitData);
|
global.setSpinning(false);
|
if (res.type) {
|
if (submitData.applyType === '1') {
|
//未申请
|
setData({ total: res.data.totalElements, tableData: res.data.content });
|
} else {
|
//已申请
|
getTotalData()
|
setMiniData({ total: res.data.totalElements, tableData: res.data.content });
|
}
|
}
|
}
|
|
// 选择导出内容
|
function onSelectChange(selectedRowKeys, selectedRows) {
|
let obj = {};
|
obj[search.page] = { selectedRowKeys, selectedRows };
|
|
setSelectedRowsObj({ ...selectedRowsObj, ...obj });
|
}
|
|
//草稿 获取table选择数据
|
function handleGetSelectedRowKeys(type) {
|
let arr = [];
|
for (let item in selectedRowsObj) {
|
if (type == 'selectedRowKeys') {
|
arr = arr.concat(selectedRowsObj[item][type]);
|
} else {
|
arr = arr.concat(selectedRowsObj[item]['selectedRows'].map(res => res[type]));
|
}
|
}
|
return arr;
|
}
|
|
// 申请转入
|
async function handleApplyIn() {
|
//batchSendApply
|
const keys = handleGetSelectedRowKeys('selectedRowKeys')
|
console.log(keys);
|
$$.arcoModalInfo({
|
icon: <IconInfoCircle style={{ color: '#1A6FB8' }} />,
|
title: '提醒',
|
content: <span>是否申请选中的<span className='public-color'>{keys.length}</span>个案件转入人民调解系统</span>,
|
okText: '确定',
|
cancelText: '我再想想',
|
onOk: async () => {
|
global.setSpinning(true);
|
const res = await batchSendApply(keys);
|
global.setSpinning(false);
|
if (res.type) {
|
$$.infoSuccess({ content: <div><div>申请成功</div><div>成功申请<span className='public-color'>{keys.length}</span>条矛盾纠纷数据</div></div> });
|
setSelectedRowsObj({});
|
// setMediateTab('2')
|
handleSearch('reset', '', '1');
|
handleSearch('reset', '', '2');
|
}
|
},
|
});
|
}
|
|
//批量转入
|
async function showDrawer(list) {
|
$$.arcoModalInfo({
|
icon: <IconInfoCircle style={{ color: '#1A6FB8' }} />,
|
title: '提醒',
|
content: <span>确定将选中的<span className='public-color'>{list?.length}</span>条数据转入系统吗?</span>,
|
okText: '确定',
|
cancelText: '我再想想',
|
onOk: async () => {
|
global.setSpinning(true);
|
const res = await importToCaseApi(list);
|
global.setSpinning(false);
|
if (res.type) {
|
$$.infoSuccess({ content: '转入成功' });
|
setSelectedRowsObj({});
|
setMediateTab('2')
|
handleSearch('reset', '', '2');
|
}
|
},
|
});
|
}
|
|
//批量移除
|
const batchDel = async () => {
|
const keys = handleGetSelectedRowKeys('selectedRowKeys')
|
$$.arcoModalInfo({
|
icon: <IconInfoCircle style={{ color: '#1A6FB8' }} />,
|
title: '提醒',
|
content: <span>确定移除选中的<span className='public-color'>{keys.length}</span>个案件吗?</span>,
|
okText: '确定',
|
cancelText: '我再想想',
|
onOk: async () => {
|
global.setSpinning(true);
|
const res = await batchDeleteApply(keys);
|
global.setSpinning(false);
|
if (res.type) {
|
$$.infoSuccess({ content: <div><div>移除成功</div><div>成功移除<span className='public-color'>{keys.length}</span>条矛盾纠纷数据</div></div> });
|
setSelectedRowsObj({});
|
// setMediateTab('2')
|
handleSearch('reset', '', '2');
|
}
|
},
|
});
|
}
|
|
return (
|
<NewPage pageHead={{ breadcrumbData: [{ title: '工作台' }, { title: '转入申请' }], title: '转入申请' }}>
|
<div className="comprehensive" style={{ marginBottom: selectedRowKeys?.length > 0 ? '56px' : '0', overflowY: 'auto' }}>
|
<div className="myMediation-search">
|
<NewTableSearch
|
exportButtonShow={false}
|
labelLength={4}
|
rowNum={2}
|
form={form}
|
itemData={[
|
{ type: 'RangePicker', name: 'closeTime', label: '办结时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 },
|
{ type: 'RangePicker', name: 'applyTime', label: '提审时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 },
|
{ type: 'RangePicker', name: 'rmtjTime', label: '转入时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 },
|
{ type: 'Select', name: 'firstAuditResult', label: '初审结果', placeholder: '请选择', selectdata: $$.options.resultList, },
|
{ type: 'Select', name: 'endAuditResult', label: '终审结果', placeholder: '请选择', selectdata: $$.options.resultList, },
|
{ type: 'Select', name: 'rmtjStatus', label: '转入结果', placeholder: '请选择', selectdata: $$.options.rmtjList, },
|
{ type: 'Input', name: 'rmtjCaseId', label: '转入案号' },
|
{ type: 'Input', name: 'plaintiffs', label: '申请方' },
|
{ type: 'Input', name: 'defendants', label: '被申请方' },
|
{ type: 'Input', name: 'caseRef', label: '事项编号' },
|
{ type: 'Select', name: 'inputWay', label: '登记方式', placeholder: '请选择', selectdata: $$.options.inputWay, },
|
]}
|
handleReset={() => handleSearch('reset', '', mediateTab)}
|
handleSearch={() => handleSearch('search', '', mediateTab)}
|
/>
|
</div>
|
<div className="pageTabs">
|
<MyTabsNew
|
tabs={[
|
{ key: '1', label: `未申请(${$$.showMoreNum(data.total || 0)})` },
|
{ key: '2', label: `已申请(${$$.showMoreNum(miniData.total || 0)})` },
|
]}
|
activeKey={mediateTab}
|
onChange={(activeKey) => {
|
setSelectedRowsObj({});
|
setMediateTab(activeKey);
|
handleSearch('reset', '', activeKey);
|
}}
|
/>
|
</div>
|
{/* 未申请 */}
|
{mediateTab === '1' && <div style={{ flex: '1', margin: '16px 0' }} className="pageTable">
|
<TableView
|
onValueChange={getOrderPara}
|
showHeader
|
title="查询结果"
|
columns={columns}
|
dataSource={data.tableData}
|
rowKey="caseId"
|
rowSelection={{ selectedRowKeys, onChange: onSelectChange }}
|
pagination={{
|
current: search.page,
|
pageSize: search.size,
|
total: data.total,
|
onChange: (page, pageSize) => {
|
handleSearch('changePage', [page, pageSize, sortType], mediateTab)
|
}
|
}}
|
/>
|
</div>
|
}
|
{/* 导入成功 */}
|
{mediateTab === '2' && <>
|
<div style={{ margin: '16px 0' }} className='disputeLedger-row'>
|
<div className='comprehensive-title'>数据总览</div>
|
<Space className='dataCenterTransfer' align='center' split={<Divider type="vertical" style={{ height: '48px' }} />}>
|
<div className='dataCenterTransfer-item'>
|
<div className='dataCenterTransfer-item-img'>
|
<img src={dataCenterTransfer1} alt="" srcset="" />
|
</div>
|
<div className='dataCenterTransfer-item-div'>
|
<div className='dataCenterTransfer-item-title'>申请转入</div>
|
<div className='dataCenterTransfer-item-value'>{dataTotal?.applyCount || 0}</div>
|
</div>
|
</div>
|
<div className='dataCenterTransfer-item'>
|
<div className='dataCenterTransfer-item-img'>
|
<img src={dataCenterTransfer2} alt="" srcset="" />
|
</div>
|
<div className='dataCenterTransfer-item-div'>
|
<div className='dataCenterTransfer-item-title'>已转入</div>
|
<div className='dataCenterTransfer-item-value'>{dataTotal?.inToCount || 0}</div>
|
</div>
|
</div>
|
<div className='dataCenterTransfer-item'>
|
<div className='dataCenterTransfer-item-img'>
|
<img src={dataCenterTransfer3} alt="" srcset="" />
|
</div>
|
<div className='dataCenterTransfer-item-div'>
|
<div className='dataCenterTransfer-item-title'>转入中</div>
|
<div className='dataCenterTransfer-item-value'>{dataTotal?.ingToCount || 0}</div>
|
</div>
|
</div>
|
<div className='dataCenterTransfer-item'>
|
<div className='dataCenterTransfer-item-img'>
|
<img src={dataCenterTransfer4} alt="" srcset="" />
|
</div>
|
<div className='dataCenterTransfer-item-div'>
|
<div className='dataCenterTransfer-item-title'>未转入</div>
|
<div className='dataCenterTransfer-item-value'>{dataTotal?.notToCount || 0}</div>
|
</div>
|
</div>
|
</Space>
|
</div>
|
<div style={{ flex: '1', marginBottom: '16px' }} className="pageTable">
|
<TableView
|
rowKey="caseId"
|
onValueChange={getOrderPara}
|
showHeader
|
title="查询结果"
|
columns={applyColumns}
|
dataSource={miniData.tableData}
|
rowSelection={{ selectedRowKeys, onChange: onSelectChange }}
|
pagination={{
|
current: search.page,
|
pageSize: search.size,
|
total: miniData.total,
|
onChange: (page, pageSize) => {
|
handleSearch('changePage', [page, pageSize], mediateTab)
|
}
|
}}
|
/>
|
</div>
|
</>}
|
{selectedRowKeys.filter(d => d).length > 0 && (
|
<div className="ledger-main-excel">
|
<Space size="middle">
|
<Checkbox
|
onChange={(e) => {
|
if (!e.target.checked) {
|
setSelectedRowsObj({});
|
}
|
}}
|
checked={(selectedRowKeys.filter(d => d).length = data.total)}
|
indeterminate={selectedRowKeys.filter(d => d).length < data.total}
|
>
|
已选{selectedRowKeys.filter(d => d).length}项
|
</Checkbox>
|
<Link onClick={() => setSelectedRowsObj({})}>取消</Link>
|
</Space>
|
<div>
|
{mediateTab === '1' && <Space size="middle">
|
<Button onClick={() => showDrawer(handleGetSelectedRowKeys('selectedRowKeys'))} type="outline" style={{ marginLeft: '24px' }}>
|
导出案件
|
</Button>
|
<Button type="primary" ghost onClick={handleApplyIn}>申请转入</Button>
|
</Space>
|
}
|
{mediateTab === '2' && <Space size="middle">
|
{/* <Button onClick={() => showDrawer(handleGetSelectedRowKeys('selectedRowKeys'))} type="primary" style={{ marginLeft: '24px' }}>
|
导出案件
|
</Button> */}
|
<Button onClick={batchDel} type="outline" style={{ marginLeft: '24px' }}>
|
移除案件
|
</Button>
|
</Space>
|
}
|
</div>
|
</div>
|
)}
|
</div>
|
</NewPage>
|
);
|
};
|
|
export default MediateAll;
|