import React, { useState, useEffect, useRef, Fragment } from "react";
|
import { Row, Col, Space } from 'antd';
|
import { Form, Input, Button, Radio, Select, Checkbox, Tooltip } from '@arco-design/web-react';
|
import KeyVisits from "@/components/personCard/KeyVisits";
|
import * as $$ from '@/utils/utility';
|
import { majorStatus_1 } from '@/assets/images';
|
import ArcoUpload from '@/components/ArcoUpload';
|
import { checkIdCard } from "../../../../utils/utility";
|
import { Scrollbars } from "react-custom-scrollbars";
|
|
const FormItem = Form.Item;
|
const Option = Select.Option;
|
const InputSearch = Input.Search;
|
const RadioGroup = Radio.Group;
|
const CheckboxGroup = Checkbox.Group;
|
const appUrl = $$.appUrl;
|
|
function getId() {
|
return $$.ax.request({ url: `caseUtils/getNewTimeId`, type: 'get', service: 'utils' });
|
}
|
|
function delFile(id) {
|
return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
|
}
|
|
// 重点人员信息
|
function getLabelInfoApi(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 });
|
}
|
// 个人案件查询
|
function pagePersonApi(data) {
|
return $$.ax.request({ url: `/caseInfo/pagePerson`, type: 'get', service: 'mediate', data });
|
}
|
|
|
export default function AgentDialog(props) {
|
const formRef = useRef();
|
const [visitList, setVisitList] = useState([])
|
const [id, setId] = useState()
|
const [certiNo, setCertiNo] = useState('');
|
const [certiShow, setCertiShow] = useState(false);
|
// 反应诉求记录
|
const [labelInfo, setLabelInfo] = useState([]);
|
const [hisData, setHisData] = useState({});
|
const [fakeData, setFakeData] = useState({ tableData: [] });
|
const [search, setSearch] = useState({ page: 1, size: 5 });
|
|
useEffect(() => {
|
if (props.editData) {
|
//编辑
|
formRef.current.setFieldsValue({
|
...props.editData
|
})
|
if (props.editData?.certiNo) {
|
setCertiShow(true)
|
getAllApi(props.editData?.certiNo)
|
}
|
//过滤代理人
|
setVisitList(props.fakeData.filter(item => {
|
if (props.editData.perType === '24_00006-1') {
|
return item.perType === '15_020008-1'
|
} else {
|
return item.perType === '15_020008-2'
|
}
|
}))
|
} else {
|
//过滤代理人
|
setVisitList(props.fakeData.filter(item => {
|
if (props.dialogType === '24_00006-1') {
|
return item.perType === '15_020008-1'
|
} else {
|
return item.perType === '15_020008-2'
|
}
|
}))
|
//获取id
|
getAppId()
|
}
|
}, [])
|
|
//获取id
|
const getAppId = async () => {
|
const res = await getId()
|
if (res.type) {
|
setId(res.data)
|
}
|
}
|
|
//保存信息
|
const handleSave = () => {
|
if (formRef.current) {
|
formRef.current.validate(undefined, (errors, values) => {
|
if (!errors) {
|
const fieldValue = formRef.current.getFields()
|
if (props.editData) {
|
props.handleAddParty({
|
...fieldValue
|
}, true)
|
} else {
|
props.handleAddParty({
|
...fieldValue,
|
perType: props.dialogType,
|
perTypeName: $$.options.personType.find(item => item.value === props.dialogType).label,
|
id: id
|
}, false)
|
}
|
props.onClose()
|
}
|
});
|
}
|
}
|
|
//上传身份证识别
|
const handleChangeFile = (data) => {
|
if (data.data && data.data.length != 0) {
|
if (data.data[0].idcardOcrResult) {
|
const { birthday, ...rest } = data.data[0].idcardOcrResult
|
//回填信息
|
formRef.current.setFieldsValue({
|
...rest
|
})
|
}
|
}
|
}
|
|
//有身份证号后展示对应的重点人员标签及诉求记录
|
function idCardChange(value) {
|
setCertiNo(value)
|
}
|
|
//输入身份证号失去焦点后
|
function idCardOnBlur() {
|
if (checkIdCard(certiNo)) {
|
setCertiShow(true)
|
getAllApi(certiNo)
|
}
|
}
|
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 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 || [],
|
});
|
}
|
}
|
|
// 页码修改
|
function handleChangePage(page, pageSize, field, order) {
|
let paramsObj = Object.assign(search, { page, size: pageSize });
|
paramsObj = { ...paramsObj }
|
setSearch(paramsObj);
|
|
pagePerson(paramsObj);
|
}
|
|
//删除文件
|
const handleDelFile = async (id) => {
|
const res = await delFile(id)
|
if (res.type) {
|
$$.infoSuccess({ content: '删除成功!' });
|
}
|
}
|
|
return (
|
<div className="applyDialog">
|
<Scrollbars style={{ height: '590px' }} autoHide>
|
<Row gutter={[16, 16]} style={{ margin: '0 2px 0 0' }}>
|
<Col span={24}>
|
<Form
|
ref={formRef}
|
layout='vertical'
|
requiredSymbol={false}
|
initialValues={{
|
extreme: 0
|
}}//默认值
|
scrollToFirstError
|
>
|
<Row gutter={[32, 0]} style={{ margin: '0 -10px' }}>
|
<Col span={24} className="doubleFile">
|
<ArcoUpload
|
params={{
|
action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-202`,
|
}}
|
field='file'
|
handleChangeFile={handleChangeFile}
|
label='身份证明材料'
|
editData={props.editData}
|
handleDelFile={handleDelFile}
|
ownerType='22_00018-202'
|
/>
|
</Col>
|
<Col span={24} className="doubleFile">
|
<ArcoUpload
|
params={{
|
action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-207`,
|
}}
|
field='file1'
|
label='代理人委托书'
|
editData={props.editData}
|
ownerType='22_00018-207'
|
/>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label={(<div style={{ display: 'flex' }}>姓名<div className="must">必填</div></div>)}
|
field='trueName'
|
rules={[{ required: true, message: '请输入姓名' }]}
|
>
|
<Input placeholder='请填写' />
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label={(<div style={{ display: 'flex' }}>联系方式<div className="must">必填</div></div>)}
|
field='mobile'
|
rules={[
|
{ required: true, message: '请输入联系方式' },
|
{ match: /^\+?(\d{1,3})?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})$/, message: '请输入正确的电话号码' },
|
]}
|
>
|
<Input placeholder='请填写' />
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label={(<div style={{ display: 'flex' }}>证件类型<div className="must">必填</div></div>)}
|
field='certiType'
|
rules={[{ required: true, message: '请选择证件类型' }]}
|
>
|
<Select
|
placeholder='请选择'
|
allowClear
|
options={$$.options.cardType}
|
onChange={(value, options) => {
|
formRef.current.setFieldValue('certiTypeName', options && options.children)
|
}}
|
/>
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label={(<div style={{ display: 'flex' }}>证件号码<div className="must">必填</div></div>)}
|
rules={[
|
{ required: true, message: '请输入证件号码' },
|
{ validator(value, cb) { if (!checkIdCard(value)) { return cb('请输入正确的证件号码') } return cb() } },
|
]}
|
field='certiNo'
|
>
|
<InputSearch
|
searchButton='读取卡证'
|
placeholder='请填写'
|
onChange={(v) => idCardChange(v)}
|
onBlur={idCardOnBlur}
|
onSearch={(v) => { $$.info({ type: 'warning', content: '该功能正在开发中...' }) }}
|
|
/>
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem label='联系地址' field='addr'>
|
<Input placeholder='请填写' />
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem label='户籍地址' field='placeAddr'>
|
<Input placeholder='请填写' />
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem label='工作单位' field='workUnit'>
|
<Input placeholder='请填写' />
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label='民族'
|
field='nation'
|
>
|
<Select
|
placeholder='请选择'
|
allowClear
|
showSearch
|
options={$$.options.nation}
|
filterOption={(inputValue, option) =>
|
option.props.value.toLowerCase().indexOf(inputValue.toLowerCase()) >= 0 ||
|
option.props.children.toLowerCase().indexOf(inputValue.toLowerCase()) >= 0
|
}
|
onChange={(value, options) => {
|
formRef.current.setFieldValue('nationName', options && options.children)
|
}}
|
/>
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label='性别'
|
field='sex'
|
>
|
<RadioGroup
|
type='button'
|
options={$$.options.sex}
|
onChange={(value, options) => {
|
if (value) {
|
formRef.current.setFieldValue('sexName', value === '09_00003-1' ? '男' : '女')
|
} else {
|
formRef.current.setFieldValue('sexName', '')
|
}
|
}}
|
>
|
</RadioGroup>
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label={<div style={{ borderRadius: '2px', display: 'flex', alignItems: 'center', gap: '8px' }}><img src={majorStatus_1} alt="" srcset="" /><Tooltip content='是否有个人极端倾向'>{$$.ellipsis('是否有个人极端倾向', 6)}</Tooltip></div>}
|
field='extreme'
|
>
|
<RadioGroup>
|
<Radio value={0}>否</Radio>
|
<Radio value={1}>是</Radio>
|
</RadioGroup>
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label='委托关系'
|
field='agentRelate'
|
>
|
<Select
|
placeholder='请选择'
|
allowClear
|
options={$$.options.agentRelate}
|
onChange={(value, options) => {
|
formRef.current.setFieldValue('agentRelateName', options && options.children)
|
}}
|
/>
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label='委托类型'
|
field='agentType'
|
>
|
<Select
|
placeholder='请选择'
|
allowClear
|
options={$$.options.agentType}
|
onChange={(value, options) => {
|
formRef.current.setFieldValue('agentTypeName', options && options.children)
|
}}
|
/>
|
</FormItem>
|
</Col>
|
<Col span={12}>
|
<FormItem
|
label={(<div style={{ display: 'flex' }}>代理对象<div className="must">必填</div></div>)}
|
rules={[{ required: true, message: '请选择代理对象' }]}
|
field='personId'
|
>
|
<CheckboxGroup
|
direction='vertical'
|
options={visitList.map(x => ({
|
label: <span>{x.trueName} <span style={{ color: '#86909c' }}>({x.perTypeName})</span></span>,
|
value: x.id,
|
}))}
|
onChange={(value) => {
|
if (value) {
|
const personList = visitList.filter(item => value.indexOf(item.id) != -1).map(item => item.trueName)
|
formRef.current.setFieldValue('personNameList', personList)
|
}
|
}}
|
>
|
</CheckboxGroup>
|
</FormItem>
|
</Col>
|
</Row>
|
</Form>
|
</Col>
|
</Row>
|
|
{/* 重复来访重点人员 */}
|
{
|
certiShow &&
|
<div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', padding: '12px' }}>
|
<KeyVisits labelInfo={labelInfo} data={hisData} fakeData={fakeData} search={search} handleChangePage={handleChangePage} />
|
</div>
|
}
|
</Scrollbars>
|
<div className='dialogFooter'>
|
<Button
|
type="primary"
|
className="dialogPrimary"
|
onClick={handleSave}
|
>
|
保存
|
</Button>
|
<Button
|
className="dialogBack"
|
onClick={() => {
|
if (props.editData) {
|
formRef.current.resetFields();
|
formRef.current.setFieldsValue({
|
...props.editData
|
})
|
} else {
|
formRef.current.resetFields();
|
}
|
}}
|
>
|
重置
|
</Button>
|
</div>
|
</div>
|
)
|
}
|