/*
|
* @Company: hugeInfo
|
* @Author: lwh
|
* @Date: 2022-03-21 15:40:30
|
* @LastEditTime: 2023-12-11 18:03:27
|
* @LastEditors: dminyi 1301963064@qq.com
|
* @Version: 1.0.0
|
* @Description: 调度处理
|
*/
|
import React, { useEffect, useState } from 'react';
|
import { Row, Col, Radio, Button, Input, Space } from 'antd';
|
import { ExclamationCircleFilled, ScheduleOutlined, ShareAltOutlined, UserAddOutlined } from '@ant-design/icons';
|
import { ax, info, infoSuccess, verifyEmpty, modalInfo, sleep, timeFormat } from '../../../utils/utility';
|
import MyUpload from '../../../components/MyUpload';
|
import SelectObjModal from '../../../components/SelectObjModal';
|
import ProgressStep from '../../../components/ProgressStep';
|
import WantUserTag from '../../../components/WantUserTag';
|
|
const { TextArea } = Input;
|
|
// 获取调度任务信息
|
function getDispatchDetailApi(dispId) {
|
return ax.request({ url: `caseDisp/getDispInfo?dispId=${dispId}`, type: 'get', service: 'disp' });
|
}
|
|
// 提交调度
|
function dispHandleApi(submitData) {
|
return ax.request({ url: 'caseDisp/dispHandle', type: 'post', data: submitData, service: 'disp' });
|
}
|
|
const Dispatch = ({ caseId, dispId, handleReturn, showDispatch }) => {
|
const [task, setTask] = useState([]);
|
|
// form
|
const [formData, setFormData] = useState({});
|
|
// 选择modal
|
const [selectModal, setSelectModal] = useState(false);
|
|
// 修改
|
function handleChangeValue(key, value) {
|
if (Array.isArray(key)) {
|
formData[key[0]] = value[0];
|
formData[key[1]] = value[1];
|
// 选择退回申请人时
|
if (value[0] === '22_00013-3' && verifyEmpty(task.sourceContent)) {
|
infoSuccess({ content: '已自动回填上一处理人的签收意见' });
|
formData.dispContent = task.sourceContent;
|
} else {
|
formData.dispContent = '';
|
}
|
// 切换受理对象时
|
if (key[0] === 'dispObj') {
|
formData.acceptObjId = '';
|
formData.acceptObjName = '';
|
}
|
} else {
|
formData[key] = value;
|
}
|
setFormData({ ...formData });
|
}
|
|
// 提交
|
async function handleBatchDispatch() {
|
let visible = false;
|
let str = [];
|
let formDataCopy = { ...formData };
|
if (formData.dispHandle === '22_00013-1' || formData.dispHandle === '22_00013-2') {
|
str = [`调度确认`, `确定将案件调度给「${formData.acceptObjName}」吗?`, '确定调度'];
|
delete formDataCopy.endReason;
|
delete formDataCopy.endReasonName;
|
delete formDataCopy.endOtherReason;
|
if (!formData.acceptObjId) visible = `请选择${formData.dispObj === '22_00038-1' ? '调解组织' : '调解员'}`;
|
if (!formData.dispContent) visible = '请输入调度意见';
|
}
|
if (formData.dispHandle === '22_00013-3') {
|
str = ['退回申请人确认', '确定退回申请人的调解申请吗?', '确定退回'];
|
formDataCopy = { dispHandle: formData.dispHandle, dispHandleName: formData.dispHandleName, dispContent: formData.dispContent };
|
if (!formData.dispContent) visible = '请输入退回理由';
|
}
|
if (formData.dispHandle === '22_00013-4') {
|
formDataCopy = {
|
dispHandle: formData.dispHandle,
|
dispHandleName: formData.dispHandleName,
|
endReason: formData.endReason,
|
endReasonName: formData.endReasonName,
|
endOtherReason: formData.endOtherReason,
|
};
|
str = ['不予受理确认', '确定不予受理该调解申请吗?', '不予受理'];
|
if (formData.endReason === '22_00005-5' && !verifyEmpty(formData.endOtherReason)) visible = '请输入原因';
|
}
|
if (visible) {
|
info({ type: 'warning', content: visible });
|
return;
|
}
|
modalInfo({
|
title: str[0],
|
content: str[1],
|
okText: str[2],
|
onOk: async () => {
|
global.setSpinning(true);
|
const res = await dispHandleApi({ ...formDataCopy, id: dispId });
|
global.setSpinning(false);
|
if (res.type) {
|
infoSuccess({ content: '操作成功,页面即将为您跳转' });
|
await sleep();
|
handleReturn && handleReturn();
|
}
|
},
|
});
|
}
|
|
// 初始化
|
useEffect(() => {
|
async function getDispatchDetail() {
|
let data = {};
|
global.setSpinning(true);
|
const res = await getDispatchDetailApi(dispId);
|
global.setSpinning(false);
|
if (res.type) {
|
data = { ...(res.data?.lastTask || {}), sourceContent: res.data?.sourceContent };
|
setTask(data);
|
}
|
setFormData({
|
dispHandle: ['22_00011-3', '22_00011-4'].includes(data.taskNode) ? '22_00013-2' : '22_00013-1',
|
dispHandleName: ['22_00011-3', '22_00011-4'].includes(data.taskNode) ? '重新调度' : '正常调度',
|
dispType: '22_00012-1',
|
dispTypeName: '归口分流',
|
dispObj: '22_00038-1',
|
dispObjName: '调度给调解组织',
|
endReason: '22_00005-1',
|
endReasonName: '人民法院已经受理或正在受理的',
|
});
|
}
|
getDispatchDetail();
|
}, [dispId]);
|
|
return (
|
<>
|
<div className="dispatch">
|
{/* 退回提示 */}
|
{['22_00011-2', '22_00011-3', '22_00011-4'].includes(task.taskNode) && (
|
<div className="caseDetail-tui">
|
<ExclamationCircleFilled className="caseDetail-tui-icon" />
|
<span>
|
<span>{task.taskNodeName}</span>
|
{task.taskNode === '22_00011-2' ? (
|
<>
|
<span className="public-rightBorder">上一次提交时间:{timeFormat(task.createTime)}</span>
|
<span className="public-rightBorder">上一次退回理由:{task.handleContent || '-'}</span>
|
</>
|
) : task.taskNode === '22_00011-4' ? (
|
<>
|
<span className="public-rightBorder">退回时间:{timeFormat(task.createTime)}</span>
|
<span className="public-rightBorder">未签收对象:{task.handlerObj || '-'}</span>
|
<span className="public-rightBorder">经办人:{task.handlerUserName || '-'}</span>
|
</>
|
) : task.taskNode === '22_00011-3' ? (
|
<>
|
<span className="public-rightBorder">退回时间:{timeFormat(task.createTime)}</span>
|
<span className="public-rightBorder">退回对象:{task.handlerObj || '-'}</span>
|
<span className="public-rightBorder">经办人:{task.handlerUserName || '-'}</span>
|
</>
|
) : null}
|
</span>
|
</div>
|
)}
|
{/* 调度处理 */}
|
<div className="dispatch-main">
|
<div className="caseDetail-card dispatch-main-left">
|
{!showDispatch ?
|
<>
|
<div className="caseDetail-cardTitle">
|
<Space size="small">
|
<div className="caseDetail-cardTitle-icon caseDetail-cardTitle-iconBlue">
|
<ScheduleOutlined />
|
</div>
|
<h5>调度处理</h5>
|
</Space>
|
</div>
|
<div className="caseDetail-cardMain">
|
<Row gutter={[16, 16]}>
|
<Col span={24}>
|
<h5>调度选项</h5>
|
<Radio.Group
|
value={formData.dispHandle}
|
onChange={(e) => handleChangeValue(['dispHandle', 'dispHandleName'], [e.target.value, e.target.label])}
|
>
|
<Space direction="vertical">
|
{['22_00011-3', '22_00011-4'].includes(task.taskNode) ? (
|
<Radio value="22_00013-2" label="重新调度">
|
重新调度
|
{formData.dispHandle === '22_00013-2' && (
|
<span className="mediateList-subtitle">(由调度员分派纠纷案件至具体的受理对象名下)</span>
|
)}
|
</Radio>
|
) : (
|
<Radio value="22_00013-1" label="正常调度">
|
正常调度程序
|
{formData.dispHandle === '22_00013-1' && <span className="mediateList-subtitle">(指派调解组织或调解员作为受理对象)</span>}
|
</Radio>
|
)}
|
<Radio value="22_00013-3" label="退回申请人">
|
退回申请人
|
{formData.dispHandle === '22_00013-3' && (
|
<span className="mediateList-subtitle">(退回案件给申请人,申请人可补充材料后重新提交调解申请)</span>
|
)}
|
</Radio>
|
<Radio value="22_00013-4" label="不予受理">
|
不予受理{formData.dispHandle === '22_00013-4' && <span className="mediateList-subtitle">(不受理申请人提交的调解申请)</span>}
|
</Radio>
|
</Space>
|
</Radio.Group>
|
</Col>
|
{formData.dispHandle === '22_00013-1' || formData.dispHandle === '22_00013-2' ? (
|
<>
|
<Col span={24}>
|
<h5>调度类型</h5>
|
<Radio.Group value={formData.dispType}>
|
<Space direction="vertical">
|
<Radio value="22_00012-1" label="归口分流">
|
归口分流<span className="mediateList-subtitle">(由调度员分派纠纷案件至具体的调解组织或调解员个人名下)</span>
|
</Radio>
|
</Space>
|
</Radio.Group>
|
</Col>
|
|
<div>
|
<Col span={24}>
|
<h5>受理对象</h5>
|
<Radio.Group
|
value={formData.dispObj}
|
onChange={(e) => handleChangeValue(['dispObj', 'dispObjName'], [e.target.value, e.target.label])}
|
>
|
<Space direction="vertical">
|
<Radio value="22_00038-1" label="调度给调解组织">
|
调度给调解组织
|
{formData.dispObj === '22_00038-1' && <span className="mediateList-subtitle">(由调解组织受理并根据流程安排调解)</span>}
|
</Radio>
|
<Radio value="22_00038-2" label="调度给调解员">
|
调度给调解员
|
{formData.dispObj === '22_00038-2' && <span className="mediateList-subtitle">(直接分派案件到调解员名下进行调解)</span>}
|
</Radio>
|
</Space>
|
</Radio.Group>
|
</Col>
|
<Col span={24}>
|
<h5>
|
选择{formData.dispObj === '22_00038-1' ? '调解组织' : '调解员'}
|
<span className="leftRequired">*</span>
|
</h5>
|
{formData.acceptObjId ? (
|
<WantUserTag name={formData.acceptObjName} onClose={() => setFormData({ ...formData, acceptObjId: '', acceptObjName: '' })} />
|
) : (
|
<Button type="dashed" icon={<UserAddOutlined />} onClick={() => setSelectModal(true)}>
|
选择{formData.dispObj === '22_00038-1' ? '调解组织' : '调解员'}
|
</Button>
|
)}
|
</Col>
|
</div>
|
|
<Col span={24}>
|
<h5>
|
调度意见<span className="leftRequired">*</span>
|
</h5>
|
<TextArea
|
value={formData.dispContent}
|
onChange={(e) => handleChangeValue('dispContent', e.target.value)}
|
maxLength={256}
|
rows={2}
|
placeholder="输入对受理对象开展调解工作的要求或注意事项"
|
allowClear
|
/>
|
</Col>
|
<Col span={24}>
|
<h5>调度附件</h5>
|
<MyUpload fileId={dispId} fileType="22_00018-501" />
|
</Col>
|
</>
|
) : formData.dispHandle === '22_00013-3' ? (
|
<>
|
<Col span={24}>
|
<h5>
|
退回理由<span className="leftRequired">*</span>
|
</h5>
|
<TextArea
|
value={formData.dispContent}
|
onChange={(e) => handleChangeValue('dispContent', e.target.value)}
|
maxLength={256}
|
rows={2}
|
placeholder="输入退回给申请人的理由"
|
allowClear
|
/>
|
</Col>
|
</>
|
) : (
|
<>
|
<Col span={24}>
|
<h5>
|
不予受理原因<span className="leftRequired">*</span>
|
</h5>
|
<Radio.Group
|
value={formData.endReason}
|
onChange={(e) => handleChangeValue(['endReason', 'endReasonName'], [e.target.value, e.target.label])}
|
>
|
<Space direction="vertical">
|
{[
|
{ value: '22_00005-1', label: '人民法院已经受理或正在受理的' },
|
{ value: '22_00005-2', label: '一方当事人不同意调解的' },
|
{ value: '22_00005-3', label: '已构成犯罪或构成违反治安管理处罚行为的' },
|
{ value: '22_00005-4', label: '已通过其他渠道受理或处理' },
|
{ value: '22_00005-5', label: '其他原因' },
|
].map((x) => (
|
<Radio value={x.value} label={x.label} key={x.value}>
|
{x.label}
|
</Radio>
|
))}
|
</Space>
|
</Radio.Group>
|
{formData.endReason === '22_00005-5' && (
|
<div style={{ padding: '8px 0 0 24px' }}>
|
<TextArea
|
value={formData.endOtherReason}
|
onChange={(e) => handleChangeValue('endOtherReason', e.target.value)}
|
maxLength={256}
|
rows={2}
|
placeholder="输入不予受理的具体原因"
|
allowClear
|
/>
|
</div>
|
)}
|
</Col>
|
</>
|
)}
|
<Col span={24}>
|
<Button type="primary" onClick={handleBatchDispatch}>
|
提交
|
</Button>
|
</Col>
|
</Row>
|
</div>
|
<div className="caseDetail-card dispatch-main-right">
|
<div className="caseDetail-cardTitle">
|
<Space size="small">
|
<div className="caseDetail-cardTitle-icon caseDetail-cardTitle-iconOrange">
|
<ShareAltOutlined />
|
</div>
|
<h5>调度记录</h5>
|
</Space>
|
</div>
|
<div className="caseDetail-cardMain">
|
<ProgressStep caseId={caseId} pageFrom="dispatch" />
|
</div>
|
</div>
|
|
</> :
|
<div>
|
<Col span={24}>
|
<h5>已选择调解组织:</h5>
|
{formData.dispObj === '22_00038-1' && formData.acceptObjId ? (
|
<WantUserTag name={formData.acceptObjName} onClose={() => setFormData({ ...formData, acceptObjId: '', acceptObjName: '' })} />
|
) : (
|
<span>调解组织</span>
|
)}
|
<div>
|
<Button
|
type="dashed"
|
icon={<UserAddOutlined />}
|
onClick={() => {
|
if (formData.dispObj === '22_00038-1') {
|
setSelectModal(true);
|
// 处理选择调解组织的逻辑
|
}
|
}}
|
>
|
选择{formData.dispObj === '22_00038-1' ? '调解组织' : '调解员'}
|
</Button>
|
</div>
|
</Col>
|
{/* <Col span={24}>
|
<h5>已选择{formData.dispObj === '22_00038-2' ? '调解员' : '调解组织'}:</h5>
|
{formData.dispObj === '22_00038-2' && formData.acceptObjId ? (
|
<WantUserTag name={formData.acceptObjName} onClose={() => setFormData({ ...formData, acceptObjId: '', acceptObjName: '' })} />
|
) : (
|
<span>请选择{formData.dispObj === '22_00038-2' ? '调解员' : '调解组织'}</span>
|
)}
|
<div>
|
<Button
|
type="dashed"
|
icon={<UserAddOutlined />}
|
onClick={() => {
|
if (formData.dispObj === '22_00038-2') {
|
setSelectModal(true);
|
// 处理选择调解员的逻辑
|
}
|
}}
|
>
|
选择{formData.dispObj === '22_00038-2' ? '调解员' : '调解组织'}
|
</Button>
|
</div>
|
</Col> */}
|
</div>
|
}
|
</div>
|
|
</div>
|
</div>
|
<SelectObjModal
|
visible={selectModal}
|
type={formData.dispObj === '22_00038-1' ? 'unit' : 'person'}
|
checkKeys={formData.acceptObjId ? [{ value: formData.acceptObjId, label: formData.acceptObjName }] : undefined}
|
onOk={(value) => {
|
setSelectModal(false);
|
setFormData({ ...formData, acceptObjId: value.keys[0], acceptObjName: value.items[0].name });
|
}}
|
onClose={() => setSelectModal(false)}
|
/>
|
</>
|
);
|
};
|
|
export default Dispatch;
|