import React, { useState, useRef, Fragment, useEffect } from 'react';
|
import { useParams, useNavigate } from 'react-router-dom';
|
import NewPage from '@/components/NewPage';
|
import * as $$ from '@/utils/utility';
|
import { Modal } from 'antd';
|
import '@arco-themes/react-gzzz/css/arco.css';
|
import '../index.less';
|
import { Space } from 'antd';
|
import { Button, Steps, Message } from '@arco-design/web-react';
|
import VisitorRegister from './component/SelfVisitorRegister';
|
import SelfPreview from './SelfPreview';
|
import RepeatDetail from './RepeatDetail';
|
|
const Step = Steps.Step;
|
|
function saveDispute(data) {
|
return $$.ax.request({ url: `casedraftInfo/caseDraftRegister`, type: 'post', service: 'mediate', data });
|
}
|
|
function getId() {
|
return $$.ax.request({ url: `caseUtils/getNewTimeCaseId`, type: 'get', service: 'utils' });
|
}
|
|
function submitDispute(data) {
|
return $$.ax.request({ url: `caseInfo/caseRegister`, type: 'post', service: 'mediate', data });
|
}
|
|
function getDetailData(id) {
|
return $$.ax.request({ url: `casedraftInfo/getCasedraftInfo?id=${id}`, type: 'get', service: 'mediate' });
|
}
|
|
// ai分析是否为风险/重点案件
|
function getRiskResultApi(data) {
|
return $$.ax.request({ urlAi: `case-law/getRiskResult`, data, typeAi: 'post', service: 'mediate' });
|
}
|
|
function embeddingTextToMilvusApi(data) {
|
return $$.ax.request({ urlAi: `case-law/embeddingTextToMilvus`, data, typeAi: 'post', service: 'mediate' });
|
}
|
|
// ai分析是否为重复来访案件
|
function getRepeatResultApi(data) {
|
return $$.ax.request({ urlAi: `case-law/getRepeatResult`, data, typeAi: 'post', service: 'mediate' });
|
}
|
|
const Organization = (props) => {
|
const formRef = useRef();
|
const routeData = useParams();
|
const navigate = useNavigate();
|
const isOrganization = $$.getQueryString('isOrganization');
|
const [isReview, setIsReview] = useState(false); //预览页面控制
|
const [current, setCurrent] = useState(1);
|
const [id, setId] = useState();
|
const [editData, setEditData] = useState({}); //回显数据
|
const [Update, setUpdate] = useState(false);
|
const [repeatData, setRepeatData] = useState({ hisData: [], newData: {}, visible: false });
|
|
useEffect(() => {
|
if (routeData.id) {
|
getDeatil(routeData.id);
|
setId(routeData.id);
|
} else {
|
getAppId();
|
}
|
}, []);
|
|
//编辑
|
const getDeatil = async (id) => {
|
const res = await getDetailData(id);
|
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,
|
caseLevel: rest.caseLevel ? String(rest.caseLevel) : '',
|
fakeData: newParList,
|
myCaseType: [rest.caseTypeFirst, rest.caseType],
|
myQuesAddress: rest.queRoad ? [rest.queArea, rest.queRoad] : undefined,
|
};
|
formRef.current.setFieldsValue(obj);
|
setEditData(obj);
|
}
|
};
|
|
//获取id
|
const getAppId = async () => {
|
const res = await getId();
|
if (res.type) {
|
setId(res.data);
|
}
|
};
|
|
|
|
//保存草稿信息,不需要校验规则
|
const handleSave = () => {
|
if (formRef.current) {
|
const { myCaseType, myQuesAddress, ...rest } = formRef.current.getFields();
|
const params = handleData(rest);
|
requestSave(params);
|
}
|
};
|
|
//数据处理
|
const handleData = (data) => {
|
const { fakeData, ...newObj } = data;
|
if (data.id) {
|
return {
|
...newObj,
|
personList: fakeData?.filter((item) => item.perType === '15_020008-1' || item.perType === '15_020008-2'),
|
agentList: fakeData
|
?.filter((item) => item.perType === '24_00006-1' || item.perType === '24_00006-2')
|
.map((item) => {
|
return {
|
...item,
|
personId: item.personId.join(','),
|
};
|
}),
|
};
|
} else {
|
return {
|
...newObj,
|
personList: fakeData?.filter((item) => item.perType === '15_020008-1' || item.perType === '15_020008-2'),
|
agentList: fakeData
|
?.filter((item) => item.perType === '24_00006-1' || item.perType === '24_00006-2')
|
.map((item) => {
|
return {
|
...item,
|
personId: item.personId.join(','),
|
};
|
}),
|
id: id,
|
};
|
}
|
};
|
|
//预览信息
|
const handleReview = () => {
|
setIsReview(!isReview);
|
};
|
|
//提交信息,需要校验规则
|
const handleSubmit = async () => {
|
if (formRef.current) {
|
formRef.current.validate(undefined, (errors, values) => {
|
if (!errors) {
|
const { myCaseType, myQuesAddress, ...rest } = formRef.current.getFields();
|
const params = handleData(rest);
|
if (params.personList.length === 0 || params.personList.filter((item) => item.perType === '15_020008-1').length === 0) {
|
Message.warning('申请方当事人为空,无法提交!');
|
return;
|
}
|
$$.modalInfo({
|
title: '提醒',
|
content: '确定提交吗?',
|
cancelText: '我再想想',
|
onOk: () => {
|
reauestSubmit({
|
...params,
|
isSelfAccept: 0,
|
isDraft: 0,
|
operateType: 0,
|
canal: '22_00001-3',
|
canalName: '自行排查',
|
});
|
},
|
});
|
}
|
});
|
}
|
};
|
|
function selfAcceptance() {
|
if (formRef.current) {
|
formRef.current.validate(undefined, (errors, values) => {
|
if (!errors) {
|
const { myCaseType, myQuesAddress, ...rest } = formRef.current.getFields();
|
const params = handleData(rest);
|
if (params.personList.length === 0 || params.personList.filter((item) => item.perType === '15_020008-1').length === 0) {
|
Message.warning('申请方当事人为空,无法提交!');
|
return;
|
}
|
$$.modalInfo({
|
title: '自行受理确认',
|
content: '确定自行受理吗?',
|
okText: '确定受理',
|
cancelText: '我再想想',
|
onOk: async () => {
|
reauestSubmit(
|
{
|
...params,
|
isSelfAccept: 1,
|
isDraft: 0,
|
operateType: 0,
|
canal: '22_00001-3',
|
canalName: '自行排查',
|
},
|
true
|
);
|
},
|
});
|
}
|
});
|
}
|
}
|
|
//保存请求
|
const requestSave = async (data) => {
|
// 1-大厅来访,2- 部门排除,3-调解组织录
|
const response = await saveDispute({
|
...data,
|
canalChild: isOrganization ? '3' : '2',
|
canalChildName: isOrganization ? '调解组织录入' : '部门排查',
|
canal: '22_00001-3',
|
canalName: '自行排查',
|
});
|
if (response.type) {
|
setUpdate(false);
|
Message.success('保存草稿成功!');
|
}
|
};
|
|
//提交请求
|
const reauestSubmit = async (data, isSelfAccept) => {
|
console.log(data, 'data');
|
let plaintiffsCertiNo =
|
data.personList
|
?.filter((item) => item.perType === '15_020008-1')
|
?.map((item) => item.certiNo)
|
?.join(',') || '';
|
let plaintiffs =
|
data.personList
|
?.filter((item) => item.perType === '15_020008-1')
|
?.map((item) => item.trueName)
|
?.join(',') || '';
|
let defendantsCertiNo =
|
data.personList
|
?.filter((item) => item.perType === '15_020008-2')
|
?.map((item) => item.certiNo)
|
?.join(',') || '';
|
let defendants =
|
data.personList
|
?.filter((item) => item.perType === '15_020008-2')
|
?.map((item) => item.trueName)
|
?.join(',') || '';
|
global.setSpinning(true);
|
const res = await getRepeatResultApi({
|
caseId: id,
|
address: data.address,
|
caseDes: data.caseDes,
|
caseClaim: data?.caseClaim,
|
plaintiffs,
|
defendants,
|
plaintiffsCertiNo,
|
defendantsCertiNo,
|
});
|
global.setSpinning(false);
|
if (res.type) {
|
if (res.data?.length < 1) {
|
submitDisputeApi(data, isSelfAccept)
|
} else {
|
setRepeatData({ hisData: res.data, isSelfAccept, newData: data, visible: true })
|
console.log(repeatData, 'repeatData');
|
}
|
}
|
};
|
|
async function submitDisputeApi(data, isSelfAccept) {
|
console.log(data, 'data');
|
const response = await submitDispute(data);
|
if (response.type) {
|
if (isSelfAccept) {
|
getRiskResult({ caseId: id, caseText: (data.caseDes || '') + '/n' + (data.caseClaim || '') });
|
embeddingTextToMilvus({ caseId: id, caseDes: data.caseDes || '', caseClaim: data.caseClaim || '' });
|
//自行受理
|
Message.success({
|
content: (
|
<div className="myMessageBox">
|
<div className="messageTop">受理成功</div>
|
<div className="messageBottom">请在受理时限内及时跟进</div>
|
</div>
|
),
|
showIcon: true,
|
className: 'acro-myMessage',
|
position: 'bottom',
|
});
|
navigate(`/mediate/visit/handleFeedback?caseTaskId=${response.data}&caseId=${id}`);
|
} else {
|
getRiskResult({ caseId: id, caseText: (data.caseDes || '') + '/n' + (data.caseClaim || '') });
|
embeddingTextToMilvus({ caseId: id, caseDes: data.caseDes || '', caseClaim: data.caseClaim || '' });
|
Message.success('提交成功!');
|
navigate(`/mediate/visit/visitWorkBench`, { replace: true });
|
setCurrent(2);
|
}
|
}
|
}
|
|
// ai分析是否为风险/重点案件
|
async function getRiskResult(data) {
|
const res = await getRiskResultApi(data);
|
if (res.type) {
|
}
|
}
|
|
// 向量化处理
|
async function embeddingTextToMilvus(data) {
|
const res = await embeddingTextToMilvusApi(data);
|
if (res.type) {
|
}
|
}
|
|
const handleBack = () => {
|
if (!Update) {
|
navigate(`/mediate/visit/visitWorkBench`, { replace: true });
|
} else {
|
$$.modalInfo({
|
title: '提醒',
|
content: '填写内容尚未保存,确定离开当前页面吗?',
|
okText: '确定',
|
cancelText: '我再想想',
|
onOk: async () => {
|
navigate(`/mediate/visit/visitWorkBench`, { replace: true });
|
},
|
});
|
}
|
};
|
|
return (
|
<div style={{ position: 'relative' }}>
|
<NewPage pageHead={{ breadcrumbData: [{ title: '工作台' }, { title: '来访登记' }], title: '自行排查' }}>
|
<Fragment>
|
<div style={{ backgroundColor: '#fff', margin: '12px 16px 0px 16px', paddingTop: '16px', paddingLeft: '91px' }}>
|
<Steps type="navigation" current={current}>
|
<Step title="排查登记" disabled />
|
<Step title="事件流转" disabled />
|
<Step title="办理反馈" disabled />
|
<Step title="结案审核" disabled />
|
{/* <Step title='当事人评价' disabled /> */}
|
<Step title="结案归档" disabled />
|
</Steps>
|
</div>
|
<div
|
style={{
|
backgroundColor: '#ffff',
|
margin: '8px 8px 0px 16px',
|
padding: '12px 18px 82px 16px',
|
height: 'calc(100vh - 231px)',
|
overflowY: 'scroll',
|
display: isReview ? '' : 'none',
|
}}
|
>
|
<SelfPreview style={{ display: isReview ? '' : 'none' }} data={formRef?.current?.getFields()} mainId={id} />
|
</div>
|
<VisitorRegister
|
formRef={formRef}
|
style={{ display: isReview ? 'none' : '' }}
|
mainId={id}
|
partyList={editData.fakeData}
|
fileInfoList={editData.fileInfoList}
|
onValuesChange={(first, all) => {
|
setUpdate(true);
|
}}
|
/>
|
<div className="dataSync-excel">
|
<Space size="middle" style={{ margin: '4px 14px' }}>
|
<Button type="primary" style={{ backgroundColor: '#1A6FB8' }} onClick={handleSave}>
|
保存
|
</Button>
|
<Button type="outline" style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={handleReview}>
|
{isReview ? '修改' : '预览'}
|
</Button>
|
{!isOrganization && (
|
<Button type="outline" style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={handleSubmit}>
|
提交
|
</Button>
|
)}
|
<Button type="outline" style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={() => selfAcceptance()}>
|
自行受理
|
</Button>
|
<Button
|
type="secondary"
|
onClick={() => {
|
handleBack();
|
}}
|
>
|
返回上级页面
|
</Button>
|
</Space>
|
</div>
|
</Fragment>
|
</NewPage>
|
<Modal
|
// closable={closable}
|
title="重复事项确认"
|
footer={null}
|
visible={repeatData.visible}
|
bodyStyle={{ padding: '0' }}
|
width={1200}
|
onCancel={() => {
|
setRepeatData({ ...repeatData, visible: false });
|
}}
|
>
|
<RepeatDetail
|
caseId={id}
|
hisData={repeatData?.hisData}
|
caseData={repeatData?.newData}
|
handleRepeatSubmit={() => {
|
let list = repeatData?.hisData?.filter((i) => i.selected)?.map((i) => i.id) || [];
|
if (list?.length > 0) {
|
$$.modalInfo({
|
title: '提醒',
|
content: '确定合并重复事项并提交吗?',
|
cancelText: '我再想想',
|
onOk: () => {
|
console.log(repeatData?.hisData);
|
submitDisputeApi(
|
{ ...repeatData?.newData, repeatCaseIdList: repeatData?.hisData?.filter((i) => i.selected)?.map((i) => i.id) },
|
repeatData?.isSelfAccept
|
);
|
},
|
});
|
} else {
|
$$.modalInfo({
|
title: '提醒',
|
content: '确定提交吗?',
|
cancelText: '我再想想',
|
onOk: () => {
|
submitDisputeApi(repeatData?.newData, repeatData?.isSelfAccept);
|
},
|
});
|
}
|
}}
|
// // 合并
|
// handleRepeatMerge={() => {
|
// $$.modalInfo({
|
// title: '提醒',
|
// content: '确定合并重复事项并提交吗?',
|
// cancelText: '我再想想',
|
// onOk: () => {
|
// console.log(repeatData, 'repeatData');
|
// console.log('xsd',repeatData?.hisData);
|
// submitDisputeApi({ ...repeatData?.newData, repeatCaseIdList: repeatData?.hisData?.filter(i => i.selected)?.map(i => i.id) }, repeatData?.isSelfAccept)
|
// },
|
// });
|
// }}
|
selectChange={(index, value) => {
|
repeatData.hisData[index] = { ...repeatData.hisData[index], selected: value };
|
setRepeatData({ ...repeatData });
|
}}
|
/>
|
</Modal>
|
</div>
|
);
|
};
|
|
export default Organization;
|