forked from gzzfw/frontEnd/gzDyh

zhangyongtian
2024-09-07 ceb8b41c37e6a21ed7a01770fd77259d7c28a0a1
feat: 事件材料
1 files added
4 files modified
606 ■■■■ changed files
gz-customerSystem/src/components/ArcoUpload/index.jsx 4 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/filesCheck/newFileCheck.jsx 11 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/FileTable.jsx 267 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/index.jsx 24 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx 300 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/components/ArcoUpload/index.jsx
@@ -29,7 +29,6 @@
  const [myFileList, setMyFileList] = useState([])
  const handleFileListChange = (fileList) => {
    setMyFileList(fileList);
    if (props.onFileListChange) {
      props.onFileListChange(fileList);
    }
@@ -82,8 +81,9 @@
            if (isDel && props.handleDelFile) {
              props.handleDelFile(response.data[0].id)
            }
            // setMyFileList(fileList)
            handleFileListChange(fileList);
            setMyFileList(fileList)
          }}
          {...props.params}//自定义
        />
gz-customerSystem/src/views/filesCheck/newFileCheck.jsx
@@ -45,8 +45,8 @@
const Option = Select.Option;
// 获取附件
function getFileListDataApi() {
    return $$.ax.request({ url: `fileInfo/listFileByCat?mainId=${'10001'}&ownerCat=&createStart=&createEnd=&uploaderType=`, type: 'get', service: 'sys', });
function getFileListDataApi(data) {
    return $$.ax.request({ url: `fileInfo/listFileByCat`, type: 'get', service: 'sys', data });
}
const NewFileCheck = ({ caseId }) => {
@@ -71,6 +71,9 @@
    const imgRef = useRef();
    const formRef = useRef();
    useEffect(() => {
        getFileListData();
    }, []);
    // 图片旋转
    function handleRotateImg(type) {
@@ -187,9 +190,7 @@
    }
    console.log(files,'filesfiles')
    useEffect(() => {
        getFileListData();
    }, []);
    // 监听鼠标滚动事件
    useEffect(() => {
gz-customerSystem/src/views/register/matterDetail/FileTable.jsx
New file
@@ -0,0 +1,267 @@
import React, { Fragment, useEffect, useState, useRef } from 'react';
import * as $$ from '@/utils/utility';
import ArcoUpload from '@/components/ArcoUpload';
import NewFileCheck from '../../filesCheck/newFileCheck';
import { IconLink } from '@arco-design/web-react/icon';
import { Row, Col, Button } from 'antd';
import { Form, Modal } from '@arco-design/web-react';
import {
  applyMaterials,
  applyMaterials_active,
  evidenceMaterials,
  evidenceMaterials_active,
} from '@/assets/images';
import { CheckOutlined, } from '@ant-design/icons';
import TableView from '@/components/TableView';
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 });
}
//表格数据
const staticTableData = [
  {
    ownerType: "22_00018-101",
    ownerTypeName: "申请材料",
    size: 0,
    fileNames: "-",
    updateTime: '',
  },
  {
    ownerType: "22_00018-102",
    ownerTypeName: "证据材料",
    size: 0,
    fileNames: "-",
    updateTime: '',
  },
]
export default function FileTable(props) {
  const formRef = useRef();
  const [sourceType, setSourceType] = useState();
  const [filesCheck, setFilesCheck] = useState(false);
  const [upload, setUpLoad] = useState(false);
  const [tableData, setTableData] = useState(staticTableData);
  const [fileMap, setFileMap] = useState({});
  // 列配置
  const fakeColumns = [
    {
      title: '序号',
      dataIndex: 'caseNo',
      key: 'caseNo',
      width: 100,
      render: (text, record, index) => <span>{index + 1}</span>,
    },
    {
      title: '材料类型',
      dataIndex: 'ownerTypeName',
      key: 'ownerTypeName',
      width: 100,
    },
    {
      title: '材料数量',
      dataIndex: 'size',
      key: 'size',
      width: 180,
      render: (text) => <span>{text}份</span>,
    },
    {
      title: '材料名称',
      dataIndex: 'fileNames',
      key: 'fileNames',
      width: 180,
    },
    {
      title: '最新上传时间',
      dataIndex: 'updateTime',
      key: 'updateTime',
      width: 180,
    },
    {
      title: '操作',
      dataIndex: 'perClassName',
      key: 'perClassName',
      width: 200,
      render: (text, record) => (
        <div style={{ display: 'flex', color: '#1A6FB8', gap: '16px' }}>
          <div onClick={() => setFilesCheck(true)}>查看</div>
          <div>删除</div>
          <div>下载</div>
          <div onClick={() => {
            setSourceType(record.ownerType)
            setUpLoad(true)
          }}>上传</div>
        </div>
      )
    },
    // 更多列配置...
  ];
  const fileType = [
    { value: '22_00018-101', label: '申请材料' },
    { value: '22_00018-102', label: '证据材料' },
  ]
  const personIconType = (v) => {
    switch (v) {
      case '22_00018-101':
        return [applyMaterials, applyMaterials_active,
        ];
      case '22_00018-102':
        return [evidenceMaterials, evidenceMaterials_active];
    }
  }
  //删除文件
  const handleDelFile = async (id) => {
    const res = await delFile(id)
    if (res.type) {
      $$.infoSuccess({ content: '删除成功!' });
    }
  }
  const handleUpload = () => {
    const newList = tableData.map(item => {
      if(item.ownerType == sourceType) {
        const data = fileMap[sourceType]
        return {
          ...item,
          size: data.length,
          fileNames: data.map(item => item.name).join(','),
          updateTime: $$.timeFormat(data[data.length - 1].response.data[0].updateTime)
        }
      } else {
        return item
      }
    })
    setTableData(newList)
    setUpLoad(false);
  };
  const formType = (type) => {
    if (type === '22_00018-101') {
      //申请材料
      return (
        <>
          <Col span={24}>
            <ArcoUpload
              params={{
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&&ownerId=${props.mainId}&ownerType=22_00018-101`,
              }}
              field='file'
              label=''
              // editData={props.editData}
              handleDelFile={handleDelFile}
              onFileListChange={(v) => {
                setFileMap({
                  '22_00018-101': v
                })
              }}
            />
            {fileMap[sourceType]?.length > 0 && <div style={{ position: 'absolute', top: '198px', left: '16px', color: '#86909C' }}>申请材料累计上传:<span style={{ color: '#1A6FB8' }}>{fileMap[sourceType]?.length}</span></div>}
          </Col>
        </>
      )
    }
    if (type === '22_00018-102') {
      //证据材料
      return (
        <>
          <Col span={24}>
            <ArcoUpload
              params={{
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&&ownerId=${props.mainId}&ownerType=22_00018-102`,
              }}
              field='file1'
              label=''
              // editData={props.editData}
              handleDelFile={handleDelFile}
              onFileListChange={(v) => {
                setFileMap({
                  '22_00018-102': v
                })
              }}
            />
            {fileMap[sourceType]?.length > 0 && <div style={{ position: 'absolute', top: '198px', left: '16px', color: '#86909C' }}>证据材料累计上传:<span style={{ color: '#1A6FB8' }}>{fileMap[sourceType]?.length}</span></div>}
          </Col>
        </>
      )
    }
  }
  return (
    <Fragment>
      <TableView
        columns={fakeColumns}
        dataSource={tableData}
        size="small"
        rowKey="ownerType"
        bordered={true}
        style={{ marginBottom: '65px' }}
      />
      <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
                    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={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={() => handleUpload()}>上传完成</Button>
          </Row>
        </div>
      </Modal >
      <Modal style={{ width: '1200px' }} visible={filesCheck} onCancel={() => setFilesCheck(false)} footer={null} title='查看事件材料' centered>
        <div style={{ marginTop: '-16px' }}>
          <NewFileCheck />
        </div>
      </Modal>
    </Fragment>
  )
}
gz-customerSystem/src/views/register/matterDetail/index.jsx
@@ -12,29 +12,7 @@
export default function MatterDetail(props) {
  const [fakeData, setFakeData] = useState([{
    "trueName": "王大锤",
    "mobile": "13380313412",
    "certiType": "09_00015-1",
    "certiTypeName": "身份证",
    "certiNo": "440981199902025123",
    "perType": "15_020008-1",
    "perClass": "09_01001-1",
    "perTypeName": "申请方当事人",
    "perClassName": "自然人",
    "id": "24083010053310002"
  }, {
    "trueName": "刘俊峰",
    "mobile": "13380313412",
    "certiType": "09_00015-1",
    "certiTypeName": "身份证",
    "certiNo": "440981199902023234",
    "perType": "15_020008-2",
    "perClass": "09_01001-1",
    "perTypeName": "被申请方当事人",
    "perClassName": "自然人",
    "id": "24083010054710003"
  }]);//当事人信息数据
  const [fakeData, setFakeData] = useState([]);//当事人信息数据
  const [upload, setUpLoad] = useState(false);
  const [filesCheck, setFilesCheck] = useState(false);
  const [infoData, setInfoData] = useState({});
gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx
@@ -5,87 +5,34 @@
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 '../../matterDetail/FileUpLoad';
import ArcoUpload from '@/components/ArcoUpload';
import FileTable from "../../matterDetail/FileTable";
const RadioGroup = Radio.Group;// 根据调解案号获取纠纷登记信息
const FormItem = Form.Item;
const InputSearch = Input.Search;
const appUrl = $$.appUrl;
function delFile(ids) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { ids } });
}
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 });
}
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 [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 [evidenceLength, SetEvidenceLength] = useState(null);
  const [matterNumber, setMatterNumber] = useState('');
  const [evidenceNumber, setEvidenceNumber] = useState('');
  const [applyFile, setApplyFile] = useState([]);
  const [evidenceFile, setEvidenceFile] = useState([]);
  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 peopleMap = {
    '15_020008-1': '申请方',
@@ -94,177 +41,12 @@
    '24_00006-2': '被申请方代理人'
  }
  const fileType = [
    { value: '1', label: '申请材料' },
    { value: '2', label: '证据材料' },
  ]
  useEffect(() => {
    if (props.formRef.current) {
      //引入当事人数据
      props.formRef.current.setFieldValue('fakeData', fakeData)
    }
  }, [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')
    setApplyFile(data)
  }
  const handleChangeFile1 = (data) => {
    console.log(data, 'handleChangeFile1')
    setEvidenceFile(data)
  }
  //删除文件
  const handleDelFile = async (id) => {
    const res = await delFile(id)
    if (res.type) {
      $$.infoSuccess({ content: '删除成功!' });
    }
  }
  //批量删除文件
  const deleteFileById = async (data) => {
    const res = await deleteFileByIdApi(data)
    if (res.type) {
      $$.infoSuccess({ content: '删除成功!' });
    }
  }
  const listIdTypeInfo = async () => {
    const res = await listIdTypeInfoApi({
      mainId: props.mainId, //事项ID
      ownerIdList: [props.mainId], //具体所属编号
      typeList: []
    })
    if (res.type) {
      let data = res.data?.[0]?.fileList
      if (res.data.length > 0) {
        setFakeData1(data)
      }
    }
  }
  console.log(fakeData1,'fakeData1')
  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_00018-101`,
              }}
              field='file'
              label=''
              editData={props.editData}
              handleDelFile={handleDelFile}
              onFileListChange={(v) => { setFileLength(v); console.log(v, 'vvsetFileLength') }}
            />
            {fileLength?.length > 0 && <div style={{ position: 'absolute', top: '198px', 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_00018-102`,
              }}
              field='file1'
              label=''
              editData={props.editData}
              handleDelFile={handleDelFile}
              onFileListChange={(v) => { SetEvidenceLength(v); console.log(v, 'vvsetFileLength') }}
            />
            {evidenceLength?.length > 0 && <div style={{ position: 'absolute', top: '198px', left: '16px', color: '#86909C' }}>证据材料累计上传:<span style={{ color: '#1A6FB8' }}>{evidenceLength?.length}</span></div>}
          </Col>
        </>
      )
    }
  }
  // 列配置
  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 getFormattedDateTime = () => {
@@ -294,11 +76,6 @@
    setScanFile(false);
    console.log(scanContent, 'scanContent')
  };
  const handleUpload = () => {
    listIdTypeInfo()
    setUpLoad(false);
  };
  const handleCancel = () => {
@@ -346,23 +123,6 @@
    setDialogType(value.perType)
    setEditData(value)
  }
  const uploadQuery = {
    mainId: props.mainId,
    ownerCat: null,
    createStart: null,
    createEnd: null,
    uploaderType: null
  }
  // console.log(sourceType, 'sourceType')
  // console.log(props.formRef?.current?.getFields(),'formRef.current.getFields()')
  useEffect(() => {
  }, [])
  return (
    <div className='dataSync-page' style={{ ...props.style, marginTop: '8px' }}>
@@ -601,67 +361,13 @@
          <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>事件材料</h4>
        </Space>
      </Col>
      <TableView
        columns={fakeColumns}
        dataSource={fakeData1}
        size="small"
        rowKey="ownerType"
        bordered={true}
        style={{ marginBottom: '65px' }}
      />
      <FileTable mainId={props.mainId}/>
      <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={() => handleUpload()}>上传完成</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}