forked from gzzfw/frontEnd/gzDyh

dminyi
2024-09-11 22f49ff6bb582ccc44742812a638879ea5203eb7
gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx
@@ -5,62 +5,42 @@
import * as $$ from '@/utils/utility';
import {
  question1,
  applyMaterials,
  applyMaterials_active,
  evidenceMaterials,
  evidenceMaterials_active,
} from '@/assets/images';
import { CheckOutlined, } from '@ant-design/icons';
import TableView from '@/components/TableView';
import '../../index.less';
import ApplyDialog from "./applyDialog";
import AgentDialog from "./agentDialog";
import NewFileCheck from '../../../filesCheck/newFileCheck';
import { IconLink } from '@arco-design/web-react/icon';
import MapView from './map';
import { scan } from '@/assets/images/icon';
import { EventLevelDrawer, MattersDetail } from './levelDetail';
import DocumentScanner from '../../handleFeedback/component/FileUpLoad';
import ArcoUpload from '@/components/ArcoUpload';
import DocumentScanner from '../../matterDetail/FileUpLoad';
import FileTable from "../../matterDetail/FileTable";
const RadioGroup = Radio.Group;// 根据调解案号获取纠纷登记信息
const FormItem = Form.Item;
const InputSearch = Input.Search;
const appUrl = $$.appUrl;
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
}
const VisitorRegister = (props) => {
  const formRef = useRef();
  const [dialogType, setDialogType] = useState();//添加当事人的类型
  const [addVisabled, setAddVisabled] = useState(false);//添加当事人弹窗控制
  const [fakeData, setFakeData] = useState([]);//当事人信息数据
  const [scanFile, setScanFile] = useState(false);
  const [upload, setUpLoad] = useState(false);
  const [sourceType, setSourceType] = useState('1');
  const [filesCheck, setFilesCheck] = useState(false);
  const [ocrText, setOcrText] = useState('');
  const [mapView, setMapView] = useState(false);
  const [visible, setVisible] = useState(false);
  const [apply, setApply] = useState(false);
  const [editData, setEditData] = useState(null);
  const [agentVisible, setAgentVisible] = useState(false);
  const [fileLength, setFileLength] = useState('');
  const [matterNumber, setMatterNumber] = useState('');
  const peopleMap = {
    '15_020008-1': '申请方',
    '15_020008-2': '被申请方',
    '24_00006-1': '申请方代理人',
    '24_00006-2': '被申请方代理人'
  }
  const fileType = [
    { value: '1', label: '申请材料' },
    { value: '2', label: '证据材料' },
  ]
  useEffect(() => {
    if (props.formRef.current) {
@@ -69,188 +49,34 @@
    }
  }, [fakeData])
  const personIconType = (v) => {
    switch (v) {
      case '1':
        return [applyMaterials, applyMaterials_active,
        ];
      case '2':
        return [evidenceMaterials, evidenceMaterials_active];
    }
  }
  const handleChangeFile = (data) => {
    console.log(data, 'handleChangeFile')
    if (data.data && data.data.length != 0) {
      if (data.data[0].idcardOcrResult) {
        const { birthday, ...rest } = data.data[0].idcardOcrResult
        //回填信息
        formRef.current.setFieldsValue({
          ...rest
  useEffect(() => {
    setFakeData(props.partyList?.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') {
            file.push({
              name: item.fileList[0].trueName,
              uid: item.fileList[0].id,
            })
          }
          if (item.ownerType == '22_00018-204' || item.ownerType == '22_00018-207') {
            file1.push({
              name: item.fileList[0].trueName,
              uid: item.fileList[0].id,
            })
          }
        })
      }
    }
  }
  //删除文件
  const handleDelFile = async (id) => {
    const res = await delFile(id)
    if (res.type) {
      $$.infoSuccess({ content: '删除成功!' });
    }
  }
  const formType = (type) => {
    if (type === '1') {
      //申请材料
      return (
        <>
          <Col span={24}>
            <ArcoUpload
              params={{
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&&ownerId=${props.mainId}&ownerType=22_00014-1`,
              }}
              field='file'
              handleChangeFile={handleChangeFile}
              label='身份证明材料'
              editData={props.editData}
              handleDelFile={handleDelFile}
              onFileListChange={(v) => { setFileLength(v); console.log(v, 'vvsetFileLength') }}
            />
            {fileLength.length > 0 && <div style={{ position: 'absolute', top: '233px', left: '16px', color: '#86909C' }}>申请材料累计上传:<span style={{ color: '#1A6FB8' }}>{fileLength.length}</span></div>}
          </Col>
        </>
      )
    }
    if (type === '2') {
      //证据材料
      return (
        <>
          <Col span={24}>
            <ArcoUpload
              params={{
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&&ownerId=${props.mainId}&ownerType=22_00014-2`,
              }}
              field='file1'
              handleChangeFile={handleChangeFile}
              label='身份证明材料'
              editData={props.editData}
              handleDelFile={handleDelFile}
            />
          </Col>
        </>
      )
    }
  }
  const fakeData1 = [
    {
      id: 1,
      caseNo: 'A20230101',
      judicNo: '申请材料',
      perClassName: '李晓明的纠纷化解申请表、身份证...',
      inputUserName: '0',
      mediateUserName: '2024-7-12 12:00',
      judgeName: '王五',
      mediator: '赵六',
      handlerUserName: '钱七',
      returnUserName: '孙八',
      expireTime: '2023-08-10T08:00:00.000Z',
      processName: '进行中',
      otherMediator: '周九',
      canalName: '网络',
      judicResult: '通过',
      assistName: '吴十',
      mediTypeName: '民事调解',
      serieStatus: '1', // 1 表示非系列案,2 表示系列案
      // 更多字段...
    },
    {
      id: 2,
      caseNo: 'A20230101',
      judicNo: '证据材料',
      perClassName: '李晓明的纠纷化解申请表、身份证...',
      inputUserName: '0',
      mediateUserName: '2024-7-12 12:00',
      judgeName: '王五',
      mediator: '赵六',
      handlerUserName: '钱七',
      returnUserName: '孙八',
      expireTime: '2023-08-10T08:00:00.000Z',
      processName: '进行中',
      otherMediator: '周九',
      canalName: '网络',
      judicResult: '通过',
      assistName: '吴十',
      mediTypeName: '民事调解',
      serieStatus: '1', // 1 表示非系列案,2 表示系列案
      // 更多字段...
    },
    // 更多数据...
  ];
  // 列配置
  const fakeColumns = [
    {
      title: '序号',
      dataIndex: 'caseNo',
      key: 'caseNo',
      width: 100,
      render: (text, record, index) => <span>{index + 1}</span>,
    },
    {
      title: '材料类型',
      dataIndex: 'judicNo',
      key: 'judicNo',
      width: 60,
    },
    {
      title: '材料数量',
      dataIndex: 'inputUserName',
      key: 'perClassName',
      width: 180,
      render: (text) => (
        <>
        {text}
          {/* {sourceType === '1' ? matterNumber : sourceType === '2' ? evidenceNumber : 0}份 */}
        </>
      )
    },
    {
      title: '材料名称',
      dataIndex: 'perClassName',
      key: 'perClassName',
      width: 180,
    },
    {
      title: '最新上传时间',
      dataIndex: 'mediateUserName',
      key: 'mediateUserName',
      width: 180,
    },
    {
      title: '操作',
      dataIndex: 'perClassName',
      key: 'perClassName',
      width: 200,
      render: (text) => (
        <div style={{ display: 'flex', color: '#1A6FB8', gap: '16px' }}>
          <div onClick={() => setFilesCheck(true)}>查看</div>
          <div>删除</div>
          <div>下载</div>
          <div onClick={() => setUpLoad(true)}>上传</div>
        </div>
      )
    },
    // 更多列配置...
  ];
      return {
        ...item,
        file,
        file1
      }
    }) || [])
  }, [props.partyList])
  //获取当前时间
  const getFormattedDateTime = () => {
@@ -274,9 +100,12 @@
    setDialogType(type)
  }
  const handleConfirm = () => {
  const handleConfirm = (scanContent) => {
    // 处理确认逻辑
    props.formRef.current.setFieldValue(ocrText, scanContent)
    setScanFile(false);
    console.log(scanContent, 'scanContent')
  };
  const handleCancel = () => {
@@ -286,7 +115,7 @@
  //添加当事人
  const handleAddParty = (value, isEdit) => {
    console.log(value, isEdit);
    console.log(value);
    if (isEdit) {
      //编辑
      const newList = fakeData.map(item => {
@@ -325,9 +154,6 @@
    setEditData(value)
  }
  console.log(sourceType, 'sourceType')
  return (
    <div className='dataSync-page' style={{ ...props.style, marginTop: '8px' }}>
      <Col span={24} style={{ display: 'flex', alignItems: 'center' }}>
@@ -357,6 +183,7 @@
        initialValues={{
          caseLevel: 3,
          visitTime: getFormattedDateTime(),
          occurTime: getFormattedDateTime(),
          majorStatus: 0,
        }}//默认值
      >
@@ -457,15 +284,16 @@
                showSearch
                onChange={(value, option) => {
                  if (option) {
                    console.log(option)
                    props.formRef.current.setFieldsValue({
                      queProv: option[0].value,
                      queProvName: option[0].label,
                      queCity: option[1].value,
                      queCityName: option[1].label,
                      queArea: option[2].value,
                      queAreaName: option[2].label,
                      queRoad: option[3] && option[3].value || '',
                      queRoadName: option[3] && option[3].label || '',
                      // queProv: option[0].value,
                      // queProvName: option[0].label,
                      // queCity: option[1].value,
                      // queCityName: option[1].label,
                      queArea: option[0].value,
                      queAreaName: option[0].label,
                      queRoad: option[1] && option[1].value || '',
                      queRoadName: option[1] && option[1].label || '',
                    })
                  } else {
                    //清除数据
@@ -505,7 +333,7 @@
                </Tooltip>
                <div className="must" style={{ marginLeft: '4px' }}>必填</div>
                <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} />
                <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={() => setScanFile(true)}>识别上传材料</div>
                <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={() => { setScanFile(true); setOcrText('caseDes') }}>识别材料</div>
              </div>
              }
              field='caseDes'
@@ -529,7 +357,7 @@
                </Tooltip> */}
                <div className="must">必填</div>
                <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} />
                <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={() => setScanFile(true)}>识别上传材料</div>
                <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={() => { setScanFile(true); setOcrText('caseClaim') }}>识别材料</div>
              </div>
              }
              field='caseClaim'
@@ -559,73 +387,27 @@
          </div>
        </Row>
      </Form>
      </Form >
      <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px', marginTop: '20px' }}>
        <Space size='small'>
          <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>事件材料</h4>
        </Space>
      </Col>
      <TableView
        columns={fakeColumns}
        dataSource={fakeData1}
        size="small"
        rowKey="id"
        bordered={true}
        style={{ marginBottom: '65px' }}
      />
      <div style={{ marginBottom: '65px' }}>
        <FileTable
          mainId={props.mainId}
          fileInfoList={props.fileInfoList}
          isReview={false}
          handleSaveList={(list) => {
            props.formRef.current.setFieldValue('fileInfoList', list)
          }}
        />
      </div>
      <DocumentScanner
        visible={scanFile}
        onConfirm={handleConfirm}
        onCancel={handleCancel}
      />
      <Modal style={{ width: '512px' }} visible={upload} onCancel={() => setUpLoad(false)} footer={null} title='上传材料' centered>
        <div style={{ paddingTop: '8px' }}>
          <Row gutter={[30, 24]}>
            {fileType.map((x, t) => {
              return (
                <Col span={12} key={t}>
                  <div
                    onClick={() => { setSourceType(x.value) }}
                    className={`casePerfection-cardTab-tab ${x.value === sourceType && 'casePerfection-cardTab-tabActive'}`}
                  >
                    <img src={x.value === sourceType ? personIconType(x.value)?.[1] : personIconType(x.value)?.[0]} alt="" style={{ width: '40px', height: '40px' }} />
                    <div className="casePerfection-cardTab-tab-name">{x.label}</div>
                    {x.value === sourceType && (
                      <>
                        <div className="casePerfection-cardTab-tab-triangle" />
                        <CheckOutlined className="casePerfection-cardTab-tab-check" />
                      </>
                    )}
                  </div>
                </Col>
              );
            })}
            <Col span={24}>
              <Form
                ref={props.formRef}
                layout='vertical'
                requiredSymbol={false}
                initialValues={{
                }}//默认值
                style={{ position: 'relative' }}
              >
                <Row gutter={[32, 0]}>{formType(sourceType)}</Row>
              </Form>
            </Col>
            <Button type="primary" style={{ marginTop: '-20px', marginLeft: '16px' }} onClick={() => { setMatterNumber(fileLength.length); setUpLoad(false) }}>上传完成</Button>
          </Row>
        </div>
      </Modal >
      <Modal style={{ width: '1200px' }} visible={filesCheck} onCancel={() => setFilesCheck(false)} footer={null} title='查看事件材料' centered>
        {/* <div className="mediationWindow-modal-main" style={{ display: 'flex' }}> */}
        <div style={{ marginTop: '-16px' }}>
          <NewFileCheck />
        </div>
        {/* </div> */}
      </Modal>
      <Modal
        title={(editData ? '修改' : '添加') + peopleMap[dialogType]}
        visible={addVisabled}