forked from gzzfw/frontEnd/gzDyh

dminyi
2024-09-10 f5d2600e1423afe6a49dee541ea5599d588b19f3
Merge branch 'master' of http://120.79.193.119:9090/r/gzzfw/frontEnd/gzDyh into master
1 files added
9 files modified
483 ■■■■■ changed files
gz-customerSystem/src/api/appUrl.js 20 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/components/personCard/DetailDialog.jsx 12 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/styles/public.less 4 ●●● patch | view | raw | blame | history
gz-customerSystem/src/utils/download.js 41 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/index.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/FileTable.jsx 192 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx 76 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/index.jsx 125 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/previewTable.jsx 8 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx 3 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/api/appUrl.js
@@ -10,11 +10,11 @@
export const debug = {
  // web服务
  // baseUrl: 'http://gz.hugeinfo.com.cn',
  baseUrl: "http://192.168.3.108:9002",
  baseUrl: "http://w88bsz.natappfree.cc",
  // baseUrl: 'http://mdqgnh.natappfree.cc',
  // 附件服务
  fileUrl: "http://192.168.3.108:9002",
  fileUrl: "http://w88bsz.natappfree.cc",
  // fileUrl: 'http://gz.hugeinfo.com.cn',
  // 文件查看url 后面接附件编号
@@ -38,11 +38,11 @@
// 正式版
export const web = {
  // web服务
  baseUrl: "/gz-dyh",
  baseUrl: "https://zfw-dyh.by.gov.cn",
  // baseUrl: 'http://146.4.99.61:8088/byzfw',
  // 附件服务
  fileUrl: "https://dyh.hugeinfo.com.cn",
  fileUrl: "https://zfw-dyh.by.gov.cn",
  // 文件查看url 后面接附件编号
  fileShowUrl: "/dyh-sys/api/v1/fileInfo/show/",
@@ -54,10 +54,10 @@
  fileDocx2: "/InsertSeal/Word/AddSeal1/Word1",
  // 不同服务接口type
  mediate: "dyh-mediate", // dyh-mediate
  cust: "dyh-cust", // dyh-cust
  oper: "dyh-oper", // dyh-oper
  sys: "dyh-sys", // dyh-sys
  disp: "dyh-disp", //dyh-disp
  utils: "dyh-utils",
  mediate: "gzdyh-mediate", // dyh-mediate
  cust: "gzdyh-cust", // dyh-cust
  oper: "gzdyh-oper", // dyh-oper
  sys: "gzdyh-sys", // dyh-sys
  disp: "gzdyh-disp", //dyh-disp
  utils: "gzdyh-utils",
};
gz-customerSystem/src/components/personCard/DetailDialog.jsx
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from 'react'
import KeyVisits from "./KeyVisits";
import { link } from '@/assets/images'
import { link } from '@/assets/images';
import { Scrollbars } from "react-custom-scrollbars";
export default function DetailDialog(props) {
  const nuturalList = [
@@ -359,7 +360,12 @@
  }, [])
  return (
    <div style={{ maxHeight: '590px', overflowY: 'scroll' }}>
    <Scrollbars
      autoHide
      autoHeight
      autoHeightMin={200} // 最小高度为300px
      autoHeightMax={590}
    >
      <table border="1" align="center" cellpadding="8" className="table" style={{ marginBottom: '20px' }}>
        {
          tableList?.map((item, index) => {
@@ -385,6 +391,6 @@
      {/* <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}>
        <KeyVisits />
      </div> */}
    </div>
    </Scrollbars>
  )
}
gz-customerSystem/src/styles/public.less
@@ -805,10 +805,12 @@
    .arco-modal-header {
        padding: 0;
        margin-bottom: 0;
    }
    .arco-modal-header {
    .arco-modal-footer {
        text-align: right;
        margin-top: 0;
    }
}
gz-customerSystem/src/utils/download.js
New file
@@ -0,0 +1,41 @@
import axios from 'axios'
import qs from 'qs'
import * as $$ from '@/utils/utility';
export default function downloadFile(url, params) {
    const link = document.createElement('a')
    return axios({
            url,
            params,
            method: 'GET',
            headers: {
                Authorization: $$.getSessionStorage('customerSystemToken')
            },
            responseType: 'blob',
            paramsSerializer: (v) => qs.stringify(v, {
                arrayFormat: 'repeat'
            }),
        })
        .then((res) => {
            // 切割文件名
            const fileNameEncode = res.headers['content-disposition'].split('filename=')[1]
            // 解码
            const fileName = decodeURIComponent(fileNameEncode)
            // 设置type类型
            const blob = new Blob([res.data], {
                type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; application/octet-stream',
            })
            const fileUrl = window.URL.createObjectURL(blob)
            link.href = fileUrl
            link.setAttribute('download', fileName)
            link.style.display = 'none'
            link.click()
            link.remove()
        })
        .catch(() => {
            $$.info({
                type: 'error',
                content: '文件下载请求失败'
            });
        })
}
gz-customerSystem/src/views/register/handleFeedback/index.jsx
@@ -3,7 +3,7 @@
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-08-09 09:59:43
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-09-09 21:14:14
 * @LastEditTime: 2024-09-10 09:16:47
 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx
 * @Description: 来访登记
 * 
gz-customerSystem/src/views/register/matterDetail/FileTable.jsx
@@ -2,7 +2,7 @@
import * as $$ from '@/utils/utility';
import ArcoUpload from '@/components/ArcoUpload';
import NewFileCheck from './NewFileCheck';
import { Row, Col, Button } from 'antd';
import { Row, Col, Button, Typography, Space } from 'antd';
import { Form, Modal } from '@arco-design/web-react';
import {
  applyMaterials,
@@ -12,19 +12,17 @@
} from '@/assets/images';
import { CheckOutlined, } from '@ant-design/icons';
import TableView from '@/components/TableView';
import downloadFile from "@/utils/download"
const { Link, Text } = Typography;
const appUrl = $$.appUrl;
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
function listIdTypeInfoApi(data) {
  return $$.ax.request({ url: `fileInfo/listIdTypeInfo`, type: 'post', service: 'sys', data });
}
function deleteFileByIdApi(data) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data });
  return $$.ax.request({ url: `fileInfo/deleteFileByIds`, type: 'delete', service: 'sys', data });
}
//表格数据
@@ -35,6 +33,7 @@
    size: 0,
    fileNames: "-",
    updateTime: '',
    id: 1,
  },
  {
    ownerType: "22_00018-102",
@@ -42,16 +41,24 @@
    size: 0,
    fileNames: "-",
    updateTime: '',
    id: 2,
  },
]
/**
 * mainId*,//就是caseId,事件id
 * fileInfoList*, //文件列表
 * isReview,//是否查看,查看的话就不能删除上传,只能查看下载
 */
export default function FileTable(props) {
  const formRef = useRef();
  const [sourceType, setSourceType] = useState();
  const [filesCheck, setFilesCheck] = useState(false);
  const [upload, setUpLoad] = useState(false);
  const [uploadVisible, setUpLoadVisible] = useState(false);
  const [tableData, setTableData] = useState(staticTableData);
  const [fileMap, setFileMap] = useState({});
  const [fileInfoList, setFileInfoList] = useState([]);
  // 列配置
  const fakeColumns = [
@@ -93,17 +100,47 @@
      title: '操作',
      dataIndex: 'perClassName',
      key: 'perClassName',
      width: 200,
      width: props.isReview ? 60 : 125,
      fixed: 'right',
      render: (text, record) => (
        <div style={{ display: 'flex', color: '#1A6FB8', gap: '16px' }}>
          <div onClick={() => setFilesCheck(true)}>查看</div>
          <div>删除</div>
          <div>下载</div>
          <div onClick={() => {
        <Space size="middle">
          <Link onClick={() => {
            setSourceType(record.ownerType)
            setUpLoad(true)
          }}>上传</div>
        </div>
            setFilesCheck(true)
          }}>
            查看
          </Link>
          {!props.isReview && <Link onClick={() => {
            if (record.fileInfoList && record.fileInfoList.length != 0) {
              let ids = record.fileInfoList?.map(item => item.id).join(',')
              handleDelete(ids)
            } else {
              $$.info({ type: 'warning', content: '还没上传关于该材料的文件!' });
            }
          }}>
            删除
          </Link>}
          <Link onClick={() => {
            if (record.fileInfoList && record.fileInfoList.length != 0) {
              let ids = record.fileInfoList?.map(item => item.id).join(',')
              handleDownlod(ids)
            } else {
              $$.info({ type: 'warning', content: '还没上传关于该材料的文件!' });
            }
          }}>
            下载
          </Link>
          {!props.isReview && <Link onClick={() => {
            setSourceType(record.ownerType)
            setUpLoadVisible(true)
            setFileInfoList(record.fileInfoList)
            setTimeout(() => {
              formRef.current.setFieldValue('file', record.fileInfoList)
            }, 0)
          }}>
            上传
          </Link>}
        </Space>
      )
    },
    // 更多列配置...
@@ -114,9 +151,53 @@
  ]
  useEffect(() => {
    console.log(props.fileInfoList);
    if (props.fileInfoList && props.fileInfoList.length != 0) {
      //证明材料
      const applyFile = props.fileInfoList.find(item => item.ownerType == "22_00018-101")
      //证据材料
      const evidenceFile = props.fileInfoList.find(item => item.ownerType == "22_00018-102")
      setFileMap({
        '22_00018-101': applyFile?.fileList || [],
        '22_00018-102': evidenceFile?.fileList || []
      })
      const newList = tableData.map(item => {
        if (item.ownerType == '22_00018-101' && applyFile) {
          return {
            ...item,
            size: applyFile.fileList.length,
            fileNames: applyFile.fileList?.map(item => item.trueName).join(','),
            updateTime: $$.timeFormat(applyFile.fileList[applyFile.fileList.length - 1].updateTime),
            fileInfoList: applyFile.fileList.map(item => {
              return {
                ...item,
                uid: item.id,
                name: item.trueName
              }
            })
          }
        }
        if (item.ownerType == '22_00018-102' && evidenceFile) {
          return {
            ...item,
            size: evidenceFile.fileList.length,
            fileNames: evidenceFile.fileList?.map(item => item.trueName).join(','),
            updateTime: $$.timeFormat(evidenceFile.fileList[evidenceFile.fileList.length - 1].updateTime),
            fileInfoList: evidenceFile.fileList.map(item => {
              return {
                ...item,
                uid: item.id,
                name: item.trueName
              }
            })
          }
        }
        return item
      })
      setTableData(newList)
    }
  },[props.fileInfoList])
  //上传弹窗判断用哪种种图标
  const personIconType = (v) => {
    switch (v) {
      case '22_00018-101':
@@ -135,24 +216,34 @@
    }
  }
  //上传弹窗完成后的事件
  const handleUpload = () => {
    const newList = tableData.map(item => {
      if (item.ownerType == sourceType) {
        const data = fileMap[sourceType]
        console.log(data);
        return {
          ...item,
          size: data.length,
          fileNames: data.map(item => item.name).join(','),
          updateTime: $$.timeFormat(data[data.length - 1].response.data[0].updateTime)
          fileNames: data.map(item => item.trueName).join(','),
          updateTime: $$.timeFormat(data[data.length - 1].updateTime),
          fileInfoList: data.map(item => {
            return {
              ...item,
              name: item.trueName,
              uid: item.id,
            }
          }),
        }
      } else {
        return item
      }
    })
    setTableData(newList)
    setUpLoad(false);
    setUpLoadVisible(false);
  };
  //根据sourceType生成组件
  const formType = (type) => {
    if (type === '22_00018-101') {
      //申请材料
@@ -165,11 +256,21 @@
              }}
              field='file'
              label=''
              // editData={props.editData}
              editData={{
                file: fileInfoList
              }}
              handleDelFile={handleDelFile}
              onFileListChange={(v) => {
                let newList = v?.map(item => {
                  if (item.response) {
                    return item.response.data[0]
                  } else {
                    return item
                  }
                })
                setFileMap({
                  '22_00018-101': v
                  ...fileMap,
                  '22_00018-101': newList
                })
              }}
            />
@@ -187,22 +288,50 @@
              params={{
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&&ownerId=${props.mainId}&ownerType=22_00018-102`,
              }}
              field='file1'
              field='file'
              label=''
              // editData={props.editData}
              editData={{
                file: fileInfoList
              }}
              handleDelFile={handleDelFile}
              onFileListChange={(v) => {
                let newList = v?.map(item => {
                  if (item.response) {
                    return item.response.data[0]
                  } else {
                    return item
                  }
                })
                setFileMap({
                  '22_00018-102': v
                  ...fileMap,
                  '22_00018-102': newList
                })
              }}
            />
            {fileMap[sourceType]?.length > 0 && <div style={{ position: 'absolute', top: '198px', left: '16px', color: '#86909C' }}>证据材料累计上传:<span style={{ color: '#1A6FB8' }}>{fileMap[sourceType]?.length}</span></div>}
          </Col>
        </>
      )
    }
  }
  //删除
  const handleDelete = (ids) => {
    Modal.confirm({
      title: '删除确认',
      content: '确认全部删除该材料?',
      onOk: async () => {
        const res = await deleteFileByIdApi({ ids })
        if (res.type) {
          $$.infoSuccess({ content: '删除成功!' });
        }
      },
    });
  }
  //下载
  const handleDownlod = async (ids) => {
    await downloadFile(`${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/down/batch`, { ids })
  }
  return (
@@ -214,14 +343,19 @@
        rowKey="ownerType"
        bordered={true}
        style={{ marginBottom: '65px' }}
        scroll={{ x: 1300 }}
      />
      <Modal
        style={{ width: '512px' }}
        visible={upload}
        onCancel={() => setUpLoad(false)}
        visible={uploadVisible}
        onCancel={() => setUpLoadVisible(false)}
        footer={null}
        title='上传材料'
        centered
        mountOnEnter={false}
        unmountOnExit={true}
        maskClosable={false}
        focusLock={false}
      >
        <div style={{ paddingTop: '8px' }}>
          <Row gutter={[30, 24]}>
@@ -271,7 +405,7 @@
        maskClosable={false}
      >
        <div style={{ marginTop: '-16px' }}>
          <NewFileCheck />
          <NewFileCheck menuList={tableData} sourceType={sourceType} />
        </div>
      </Modal>
    </Fragment>
gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx
@@ -1,14 +1,42 @@
import React, { useState, useEffect, useRef } from 'react';
import React, { useState, useEffect, useRef, Fragment } from 'react';
import { Row, Col, Space } from 'antd';
import { Select, DatePicker, Form, Button } from '@arco-design/web-react';
import { Select, DatePicker, Form, Button, Menu } from '@arco-design/web-react';
import * as $$ from '@/utils/utility';
const FormItem = Form.Item;
const MenuItem = Menu.Item;
const SubMenu = Menu.SubMenu;
const appUrl = $$.appUrl;
const formItemLayout = {
    labelCol: {
        span: 8,
    },
    wrapperCol: {
        span: 16,
    },
};
const NewFileCheck = (props) => {
    const formRef = useRef()
    const formRef = useRef();
    const [fileUrl, setFileUrl] = useState('')
    const [itemData, setItemData] = useState(null)
    const peopleTypeMap = {
        1: '工作人员',
        2: '当事人'
    }
    useEffect(() => {
        console.log(props.menuList, props.sourceType);
    }, [])
    //点击菜单
    const clickItem = (data) => {
        console.log(data);
        setItemData(data)
        setFileUrl(`${appUrl.fileUrl}/${appUrl.sys}${data.showUrl}`)
    }
    return (
        <nav className="filesCheck-nav" style={{ borderRight: '1px solid transparent' }}>
@@ -17,8 +45,7 @@
                layout='horizontal'
                style={{ marginTop: '24px', marginBottom: '20px' }}
                scrollToFirstError={true}
                initialValues={{
                }}//默认值
                {...formItemLayout}
            >
                <Row gutter={24} style={{ marginRight: '0px' }}>
                    <Col span={7}>
@@ -79,18 +106,51 @@
                    <Col span={3}>
                        <Space>
                            <Button size="middle " type='primary'>查询</Button>
                            <Button size="middle ">查询</Button>
                            <Button size="middle ">重置</Button>
                        </Space>
                    </Col>
                </Row>
            </Form>
            <div style={{ display: 'flex' }}>
                <div style={{ width: '200px' }}>
            <div style={{ display: 'flex', height: '550px' }}>
                <div style={{ width: '256px' }}>
                    <Menu
                        style={{ width: '100%', height: '100%' }}
                    >
                        {props.menuList?.map(item => {
                            return <SubMenu
                                key={item.id}
                                title={item.ownerTypeName + `(${item.fileInfoList && item.fileInfoList.length || 0})`}
                            >
                                {item.fileInfoList?.map(res => {
                                    return <MenuItem key={res.id} onClick={() => { clickItem(res) }}>{res.trueName}</MenuItem>
                                })}
                            </SubMenu>
                        })}
                    </Menu>
                </div>
                <div style={{ flex: 1 }}>
                    {
                        itemData ? <Fragment>
                            <div style={{ background: '#e8f3ff', color: '#1A6FB8', padding: '5px 10px', marginBottom: '16px' }}>
                                <span>材料名称:{itemData.trueName}</span>&nbsp;&nbsp;|&nbsp;&nbsp;
                                <span>上传时间:{itemData.updateTime}</span>&nbsp;&nbsp;|&nbsp;&nbsp;
                                <span>上传人:{itemData.uploaderName} {itemData.uploaderType && <span>({peopleTypeMap[itemData.uploaderType]})</span>}</span>
                            </div>
                            <div style={{ width: '100%', height: '470px' }}>
                                {
                                    itemData.suffix === 'pdf' ?
                                        <embed src={fileUrl} type="application/pdf" width="100%" height="100%"></embed>
                                        :
                                        <img src={fileUrl} alt="" style={{ width: '100%', height: '100%' }} />
                                }
                </div>
                        </Fragment> : <Fragment>
                            <div style={{ padding: '100px 0' }}>{$$.MyEmpty()}</div>
                        </Fragment>
                    }
                </div>
            </div>
        </nav>
    );
gz-customerSystem/src/views/register/matterDetail/index.jsx
@@ -1,132 +1,29 @@
import React, { useState, useEffect } from 'react';
import { Row, Col, Space, Button, Switch } from 'antd';
import PersonCard from '@/components/personCard';
import TableView from '@/components/TableView';
import * as $$ from '@/utils/utility';
import { Typography, Steps } from '@arco-design/web-react';
import { question, register, Matter, transfer } from '@/assets/images'
import { Typography } from '@arco-design/web-react';
import { question, register } from '@/assets/images';
import FileTable from "./FileTable";
function getCaseInfoApi(id) {
  return $$.ax.request({ url: 'caseInfo/getCaseInfo?id=' + id, type: 'get', service: 'mediate' });
}
function listIdTypeInfoApi(data) {
  return $$.ax.request({ url: `fileInfo/listIdTypeInfo`, type: 'post', service: 'sys', data });
}
export default function MatterDetail(props) {
  const [fakeData, setFakeData] = useState([]);//当事人信息数据
  const [upload, setUpLoad] = useState(false);
  const [filesCheck, setFilesCheck] = useState(false);
  const [infoData, setInfoData] = useState({});
  const fakeColumns = [
    {
      title: '序号',
      dataIndex: 'caseNo',
      key: 'caseNo',
      width: 100,
      render: (text, record, index) => <span>{index + 1}</span>,
    },
    {
      title: '材料类型',
      dataIndex: 'ownerTypeName',
      key: 'ownerTypeName',
      width: 60,
    },
    {
      title: '材料数量',
      dataIndex: 'size',
      key: 'size',
      width: 180,
      render: (text) => <span>{text}份</span>,
    },
    {
      title: '材料名称',
      dataIndex: 'fileNames',
      key: 'fileNames',
      width: 180,
    },
    {
      title: '最新上传时间',
      dataIndex: 'fileNames',
      key: 'fileNames',
      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>
      )
    },
    // 更多列配置...
  ];
  const [fakeData1, setFakeData1] = useState([
    {
      ownerTyp: "22_00018-101",
      ownerTypeName: "申请材料",
      size: '0',
      ownerId: null,
      ownerName: null,
      perType: null,
      agentStatus: null,
      fileNames: "-",
      fileList: []
    },
    {
      ownerType: "22_00018-102",
      ownerTypeName: "证据材料",
      size: '0',
      ownerId: null,
      ownerName: null,
      perType: null,
      agentStatus: null,
      fileNames: "-",
      fileList: []
    },
  ]);
  const listIdTypeInfo = async () => {
    const res = await listIdTypeInfoApi({
      mainId: props.id, //事项ID
      ownerIdList: [props.id], //具体所属编号
      typeList: []
    })
    if (res.type) {
      let data = res.data?.[0]?.fileList
      if (res.data.length > 0) {
        setFakeData1(data)
      }
    }
  }
  useEffect(() => {
    console.log(props);
    getCaseInfo(props.id)
    listIdTypeInfo()
  }, [props.id])
    getCaseInfo(props.caseId)
  }, [props.caseId])
  //获取id
  const getCaseInfo = async (id) => {
    const res = await getCaseInfoApi('24083010062110001')
    const res = await getCaseInfoApi(id)
    if (res.type) {
      let data = res.data
      const partyList = data.personList.concat(data.agentList)
@@ -262,15 +159,7 @@
              <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>事件材料</h5>
            </Space>
          </Col>
          <TableView
            columns={fakeColumns}
            dataSource={fakeData1}
            size="small"
            rowKey="id"
            bordered={true}
            style={{ marginBottom: '20px' }}
          />
          <FileTable mainId={props.caseId} fileInfoList={infoData.fileInfoList} isReview={true}/>
          <Col span={24} className='title'>
            <Space size='small'>
              <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>登记信息</h5>
gz-customerSystem/src/views/register/visit/component/previewTable.jsx
@@ -7,7 +7,7 @@
    <>
      {
        applyDialog?.map((item, index) => (
          <table border="1" align="center" cellpadding="6" className="table">
          <table border="1" align="center" cellpadding="6" className="table" key={item.id}>
            <tr>
              <th bgcolor="#F7F8FA" className="table-title" width="120">姓名</th>
              <td width='380'><div style={{ display: 'flex' }}><div>{item.trueName || '-'}</div><div className="title-personRemark">自然人</div></div></td>
@@ -65,7 +65,7 @@
  return (
    <>
      {agentDialog?.map((item, index) => (
        <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }}>
        <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }} key={item.id}>
          <tr>
            <th bgcolor="#F7F8FA" className="table-title" width="120">姓名</th>
            <td width='380'><div style={{ display: 'flex' }}><div>{item.trueName || '-'}</div><div className="title-personRemark">代理人</div></div></td>
@@ -129,7 +129,7 @@
  return (
    <>
      {respondent?.map((item, index) => (
        <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }}>
        <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }} key={item.id}>
          <tr>
            <th bgcolor="#F7F8FA" className="table-title" width="120">企业名称</th>
            <td width='380'><div style={{ display: 'flex' }}><div>{item.trueName}</div><div className="title-personRemark">{item.perClassName}</div></div></td>
@@ -175,7 +175,7 @@
  return (
    <>
      {company?.map((item, index) => (
        <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }}>
        <table border="1" align="center" cellpadding="6" className="table" style={{ marginTop: '20px', marginBottom: '20px' }} key={item.id}>
          <tr>
            <th bgcolor="#F7F8FA" className="table-title" width="120">机构名称</th>
            <td width='380'><div style={{ display: 'flex' }}><div>{item.trueName}</div><div className="title-personRemark">{item.perClassName}</div></div></td>
gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx
@@ -390,7 +390,8 @@
          <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>事件材料</h4>
        </Space>
      </Col>
      <FileTable mainId={props.mainId} fileInfoList={props.fileInfoList}/>
      <FileTable mainId={props.mainId} fileInfoList={props.fileInfoList} isReview={false}/>
      <DocumentScanner
        visible={scanFile}
        onConfirm={handleConfirm}