From 98f0dc29378413be45739f8fdf2f6251c4dc9e7d Mon Sep 17 00:00:00 2001
From: dminyi <1301963064@qq.com>
Date: Sat, 17 Aug 2024 17:43:26 +0800
Subject: [PATCH] 查看材料弹窗组件
---
gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx | 15 -
gz-customerSystem/src/views/filesCheck/newFileCheck.jsx | 324 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 328 insertions(+), 11 deletions(-)
diff --git a/gz-customerSystem/src/views/filesCheck/newFileCheck.jsx b/gz-customerSystem/src/views/filesCheck/newFileCheck.jsx
new file mode 100644
index 0000000..d83cb84
--- /dev/null
+++ b/gz-customerSystem/src/views/filesCheck/newFileCheck.jsx
@@ -0,0 +1,324 @@
+/*
+ * @Company: hugeInfo
+ * @Author: ldh
+ * @Date: 2022-03-11 11:03:44
+ * @LastEditTime: 2024-08-17 17:42:03
+ * @LastEditors: dminyi 1301963064@qq.com
+ * @Version: 1.0.0
+ * @Description: 大厅来访材料附件查看
+ * 附件类型对照
+ NULL("22_00017-0","未分类"),
+ AUDIO("22_00017-1", "音频"),
+ VIDEO("22_00017-2", "视频"),
+ IMAGE("22_00017-3", "图片"),
+ WORD("22_00017-4", "Word文档"),
+ EXCEL("22_00017-5", "Excel表格"),
+ PDF("22_00017-6", "PDF"),
+ TXT("22_00017-7", "txt文本"),
+ ZIP("22_00017--8", "压缩文件"),
+ POWERPOINT("22_00017-9", "PowerPoint"),
+ UNKNOWN("22_00017-99", "其它文件");
+ */
+import React, { useState, useEffect, useRef } from 'react';
+import { Button, Menu, Tooltip } from 'antd';
+import { useSearchParams } from 'react-router-dom';
+import {
+ FolderOpenOutlined,
+ FolderOutlined,
+ FileOutlined,
+ FileImageOutlined,
+ FilePdfOutlined,
+ FileWordOutlined,
+ FileExcelOutlined,
+ RotateRightOutlined,
+ RotateLeftOutlined,
+ DownloadOutlined,
+ LeftOutlined,
+ RightOutlined,
+} from '@ant-design/icons';
+import * as $$ from '../../utils/utility';
+
+const { SubMenu } = Menu;
+
+// 获取附件
+function getFileListDataApi(submitData) {
+ return $$.ax.request({ url: `caseInfo/listCaseFile?caseId=${submitData}`, type: 'get', service: 'mediate' });
+}
+
+const NewFileCheck = ({ caseId }) => {
+ let appUrl = $$.appUrl;
+
+ const [searchParams] = useSearchParams();
+
+ const fileId = searchParams.get('fileId');
+
+ const [data, setData] = useState([]);
+
+ const [openKeys, setOpenKeys] = useState([]);
+
+ // files数组
+ const [files, setFiles] = useState([{}]);
+
+ // 当前点击的file的index
+ const [fileIndex, setFileIndex] = useState(0);
+
+ const imgBgRef = useRef();
+
+ const imgRef = useRef();
+
+ // 图片旋转
+ function handleRotateImg(type) {
+ if (!imgRef || !imgRef.current) {
+ return false;
+ }
+ let transform = imgRef.current.style.transform,
+ reg = /(-)?[0-9][0-9]*/g,
+ arr = transform.split('rotate'),
+ rotate = Number(transform.match(reg)[4] || 0),
+ num = 0;
+ if (type === 'right') {
+ num = rotate + 90;
+ } else {
+ num = rotate + -90;
+ }
+ imgRef.current.style.transform = `${arr[0]}rotate(${num}deg)`;
+ }
+
+ // 监听图片滚动事件放大,缩小
+ function imgScrollFunc(e) {
+ if (!imgRef || !imgRef.current) {
+ return false;
+ }
+ let transform = imgRef.current.style.transform,
+ reg = /\((.+?)\)/g,
+ scale3d = transform.match(reg)[0],
+ scale3dNum = scale3d.substring(1, 2);
+ let num = Number(scale3dNum);
+ if (e.wheelDelta) {
+ //判断浏览器IE,谷歌滑轮事件
+ if (e.wheelDelta > 0) {
+ //当滑轮向上滚动时
+ num = num + 1;
+ }
+ if (e.wheelDelta < 0) {
+ //当滑轮向下滚动时
+ num = num - 1;
+ }
+ } else if (e.detail) {
+ //Firefox滑轮事件
+ if (e.detail > 0) {
+ //当滑轮向上滚动时
+ num = num + 1;
+ }
+ if (e.detail < 0) {
+ //当滑轮向下滚动时
+ num = num - 1;
+ }
+ }
+ let res = `scale3d(${num < 1 ? 1 : num},${num < 1 ? 1 : num},1) rotate${transform.match(reg)[1]}`;
+ imgRef.current.style.transform = res;
+ }
+
+ // 判断文件的icon
+ function iconType(fileType) {
+ let result = <FileOutlined />;
+ if (fileType === '22_00017-3') {
+ result = <FileImageOutlined />;
+ }
+ if (fileType === '22_00017-5') {
+ result = <FileExcelOutlined />;
+ }
+ if (fileType === '22_00017-4') {
+ result = <FileWordOutlined />;
+ }
+ if (fileType === '22_00017-6') {
+ result = <FilePdfOutlined />;
+ }
+ return result;
+ }
+
+ // 切换下一个,上一个
+ async function handleNext(type) {
+ global.setSpinning(true);
+ let index = fileIndex + (type === 'next' ? 1 : -1);
+ if (files[index]) {
+ setFileIndex(index);
+ } else {
+ global.setSpinning(false);
+ if (index < 0) {
+ setFileIndex(files.length - 1);
+ return;
+ }
+ setFileIndex(0);
+ }
+ }
+
+ // 获取附件数据
+ async function getFileListData() {
+ global.setSpinning(true);
+ const res = await getFileListDataApi(caseId || searchParams.get('caseId'));
+ global.setSpinning(false);
+ if (res.type) {
+ let resData = res.data?.dataList || [];
+ let arr = [];
+ let filesArr = [];
+ let index = 0;
+ resData.forEach((x, t) => {
+ arr.push(x.ownerTypeName);
+ filesArr = filesArr.concat(x.fileList || []);
+ });
+ forEach: for (let i = 0; i < filesArr.length - 1; i++) {
+ if (filesArr[i].id === fileId) {
+ index = i;
+ break forEach;
+ }
+ }
+ setData({ data: resData, caseNo: res.data?.caseNo });
+ setFileIndex(index);
+ setFiles(filesArr);
+ setOpenKeys(arr);
+ }
+ }
+
+ useEffect(() => {
+ getFileListData();
+ }, []);
+
+ // 监听鼠标滚动事件
+ useEffect(() => {
+ if (imgRef.current) {
+ imgRef.current.onload = () => {
+ imgBgRef.current.onmousewheel = imgScrollFunc;
+ };
+ }
+ }, [files]);
+
+ // 切换文件加载
+ useEffect(() => {
+ if (imgRef.current) {
+ imgRef.current.src = `${appUrl.fileUrl}${appUrl.fileShowUrl}${files[fileIndex]?.id}`;
+ imgRef.current.onload = () => {
+ global.setSpinning(false, 'only');
+ };
+ } else {
+ global.setSpinning(false, 'only');
+ }
+ }, [appUrl.fileShowUrl, fileIndex, appUrl.baseUrl, files]);
+
+ return (
+ <>
+ <nav className="filesCheck-nav">
+ <Menu
+ className="filesCheck-nav-menu"
+ style={{ width: '200px' }}
+ onOpenChange={(openKeys) => setOpenKeys(openKeys)}
+ mode="inline"
+ selectedKeys={[files[fileIndex]?.id]}
+ openKeys={openKeys}
+ >
+ {data.data?.map((x, t) => {
+ return (
+ <SubMenu
+ key={x.ownerTypeName}
+ icon={openKeys.includes(x.ownerTypeName) ? <FolderOpenOutlined /> : <FolderOutlined />}
+ title={x.ownerTypeName}
+ >
+ {x.fileList?.map((y, z) => {
+ return (
+ <Menu.Item
+ onClick={async () => {
+ global.setSpinning(true);
+ for (let i = 0; i < files.length; i++) {
+ if (files[i].id === y.id) {
+ setFileIndex(i);
+ break;
+ }
+ }
+ }}
+ icon={iconType(y.cat)}
+ key={y.id}
+ >
+ {y.name}
+ </Menu.Item>
+ );
+ })}
+ </SubMenu>
+ );
+ })}
+ </Menu>
+ </nav>
+ {files[fileIndex] ? (
+ <main className="filesCheck-main">
+ {/* 头部操作区 */}
+ <div className="filesCheck-main-action">
+ <div className="filesCheck-main-action-title">
+ <h3>{files[fileIndex]?.name}</h3>
+ </div>
+ {files[fileIndex]?.cat === '22_00017-3' && (
+ <>
+ <div className="filesCheck-main-action-item">
+ <Tooltip title="左转">
+ <RotateLeftOutlined onClick={() => handleRotateImg('left')} />
+ </Tooltip>
+ </div>
+ <div className="filesCheck-main-action-item">
+ <Tooltip title="右转">
+ <RotateRightOutlined onClick={() => handleRotateImg('right')} />
+ </Tooltip>
+ </div>
+ </>
+ )}
+ <div className="filesCheck-main-action-item">
+ <Tooltip title="下载">
+ <a href={`${appUrl.fileUrl}${appUrl.fileDownUrl}${files[fileIndex]?.id}`}>
+ <DownloadOutlined />
+ </a>
+ </Tooltip>
+ </div>
+ </div>
+ {files[fileIndex]?.cat === '22_00017-3' ? (
+ <div className="filesCheck-main-imgBg" ref={imgBgRef}>
+ <img
+ ref={imgRef}
+ style={{ transform: 'scale3d(1,1,1) rotate(0deg)' }}
+ className="filesCheck-main-img"
+ src={`${appUrl.fileUrl}${appUrl.fileShowUrl}${files[fileIndex]?.id}`}
+ alt="图片加载中..."
+ />
+ </div>
+ ) : (
+ <div className="filesCheck-main-other">
+ <div className="filesCheck-main-other-icon">{iconType(files[fileIndex]?.cat)}</div>
+ <div className="filesCheck-main-other-text">
+ 您所查看的附件不支持预览,请下载查看{files[fileIndex]?.cat === '22_00017-6' ? '或跳转预览' : ''}。
+ </div>
+ <div>
+ {files[fileIndex]?.cat === '22_00017-6' && (
+ <Button
+ className="public-buttonMargin"
+ onClick={() => window.open(`${appUrl.fileUrl}${appUrl.fileShowUrl}${files[fileIndex]?.id}`)}
+ >
+ 跳转查看
+ </Button>
+ )}
+ <a href={`${appUrl.fileUrl}${appUrl.fileDownUrl}${files[fileIndex]?.id}`}>
+ <Button type="primary">下载</Button>
+ </a>
+ </div>
+ </div>
+ )}
+ <div className="filesCheck-imgLeft" onClick={() => handleNext('back')}>
+ <LeftOutlined />
+ </div>
+ <div className="filesCheck-imgRight" onClick={() => handleNext('next')}>
+ <RightOutlined />
+ </div>
+ </main>
+ ) : (
+ <div style={{ width: '100%', paddingTop: '20%' }}>{$$.MyEmpty()}</div>
+ )}
+ </>
+ );
+};
+
+export default NewFileCheck;
diff --git a/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx b/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx
index 6d50eca..0f25f91 100644
--- a/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx
+++ b/gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx
@@ -2,11 +2,10 @@
import { Row, Col, Space, Tooltip, Button } from 'antd';
import { Form, Input, Radio, Select, DatePicker, Cascader, Modal, Upload, InputNumber } from '@arco-design/web-react';
import "@arco-design/web-react/dist/css/arco.css";
-import MyModal from '../../../../components/MyModal';
import PersonCard from '../../../../components/personCard';
import * as $$ from '../../../../utils/utility';
import {
- question1, image, link,
+ question1,
applyMaterials,
applyMaterials_active,
evidenceMaterials,
@@ -19,14 +18,8 @@
import '../../index.less';
import ApplyDialog from "./applyDialog";
import AgentDialog from "./agentDialog";
-import FilesCheck from '../../../filesCheck';
-import {
- IconFileAudio,
- IconClose,
- IconFaceFrownFill,
- IconUpload,
- IconLink,
-} from '@arco-design/web-react/icon';
+import NewFileCheck from '../../../filesCheck/newFileCheck';
+import {IconLink} from '@arco-design/web-react/icon';
import MapView from './map'
const RadioGroup = Radio.Group;// 根据调解案号获取纠纷登记信息
@@ -751,7 +744,7 @@
</Modal>
<Modal style={{ width: '1200px' }} visible={filesCheck} onCancel={() => setFilesCheck(false)} footer={null} title='查看事件材料' centered>
<div className="mediationWindow-modal-main" style={{ display: 'flex' }}>
- <FilesCheck />
+ <NewFileCheck />
</div>
</Modal>
<Modal
--
Gitblit v1.8.0