2024-09-23 18:03:30 +08:00
|
|
|
|
import { Space, Table, Radio, DatePicker, Form, Select, Button, message, Upload, Input, Row, Col, Switch, Image } from 'antd';
|
2024-09-26 17:59:26 +08:00
|
|
|
|
import { InboxOutlined, LinkOutlined, DeleteOutlined, LoadingOutlined, VerticalAlignBottomOutlined } from '@ant-design/icons'
|
2024-09-23 18:03:30 +08:00
|
|
|
|
import { useForm } from 'antd/lib/form/Form';
|
2024-09-26 17:59:26 +08:00
|
|
|
|
import { useEffect, useState } from 'react';
|
|
|
|
|
|
import { httpgetExport, httppostAddfile } from '../../../../utils/request';
|
|
|
|
|
|
import { exportFile } from '../../../../utils/tools';
|
|
|
|
|
|
|
2024-09-23 18:03:30 +08:00
|
|
|
|
const { Dragger } = Upload;
|
|
|
|
|
|
|
2024-09-24 14:37:41 +08:00
|
|
|
|
const list = [
|
|
|
|
|
|
{
|
2024-09-26 17:59:26 +08:00
|
|
|
|
type: '立案',
|
|
|
|
|
|
key: 'files3'
|
2024-09-24 14:37:41 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
2024-09-26 17:59:26 +08:00
|
|
|
|
type: '调查取证',
|
|
|
|
|
|
key: 'files4'
|
2024-09-24 14:37:41 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
2024-09-26 17:59:26 +08:00
|
|
|
|
type: '审查处理',
|
|
|
|
|
|
key: 'files5'
|
2024-09-24 14:37:41 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
2024-09-26 17:59:26 +08:00
|
|
|
|
type: '送达执行',
|
|
|
|
|
|
key: 'files6'
|
2024-09-24 14:37:41 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
2024-09-26 17:59:26 +08:00
|
|
|
|
type: '结案',
|
|
|
|
|
|
key: 'files7'
|
2024-09-24 14:37:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
]
|
2024-09-26 17:59:26 +08:00
|
|
|
|
const baseUrl = "http://223.75.53.141:9102/test.by-lyf.tmp"
|
|
|
|
|
|
|
|
|
|
|
|
const Page = ({ uploadUrl, downloadUrl, type, getFormInfo, formJsonData }) => {
|
2024-09-24 14:37:41 +08:00
|
|
|
|
const [form] = Form.useForm();
|
2024-09-26 17:59:26 +08:00
|
|
|
|
const [fileList, setFileList] = useState([])
|
|
|
|
|
|
const [fileListHj, setFileHj] = useState({'files3': [],'files4': [],'files5': [],'files6': [],'files7': []})
|
|
|
|
|
|
const [url, setUrl] = useState('')
|
|
|
|
|
|
const [isModal, setIsModal] = useState(false)
|
2024-09-29 17:56:08 +08:00
|
|
|
|
const [loading, setLoading] = useState(false)
|
|
|
|
|
|
|
2024-09-26 17:59:26 +08:00
|
|
|
|
const getInfo = () => {
|
|
|
|
|
|
form.validateFields().then((values) => {
|
2024-09-29 17:19:27 +08:00
|
|
|
|
getFormInfo({ ...fileListHj,...values, })
|
2024-09-26 17:59:26 +08:00
|
|
|
|
setFileList([])
|
|
|
|
|
|
}).catch((errorInfo) => {
|
|
|
|
|
|
console.log(errorInfo, 'error');
|
|
|
|
|
|
})
|
|
|
|
|
|
//
|
|
|
|
|
|
}
|
|
|
|
|
|
const cancel = () => {
|
|
|
|
|
|
getFormInfo(false)
|
|
|
|
|
|
form.resetFields()
|
|
|
|
|
|
setFileList([])
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
const deleteFile = (e,key) => {
|
|
|
|
|
|
fileListHj[key] = fileListHj[key].filter(item => item.fileId !== e)
|
|
|
|
|
|
setFileHj({ ...fileListHj })
|
|
|
|
|
|
}
|
|
|
|
|
|
const props = (keys) => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
name: 'file',
|
|
|
|
|
|
multiple: true,
|
|
|
|
|
|
fileList: fileList,
|
|
|
|
|
|
showUploadList: false,
|
|
|
|
|
|
beforeUpload: (file, fileList) => {
|
|
|
|
|
|
// if (fileType == "pic" &&
|
|
|
|
|
|
// (file.type != "image/jpeg" || file.type != "image/png" || file.type != "image/jpg")) {
|
|
|
|
|
|
// message.error('仅支持上传jpg/png/jpeg格式的图片');
|
|
|
|
|
|
// return false;
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// return true;
|
|
|
|
|
|
// }
|
|
|
|
|
|
},
|
|
|
|
|
|
customRequest(e) {
|
2024-09-29 17:56:08 +08:00
|
|
|
|
setLoading(true);
|
2024-09-26 17:59:26 +08:00
|
|
|
|
httppostAddfile(uploadUrl, e).then(res => {
|
2024-09-29 17:56:08 +08:00
|
|
|
|
|
2024-09-26 17:59:26 +08:00
|
|
|
|
if(fileListHj[keys]){
|
|
|
|
|
|
fileListHj[keys].push(res.data)
|
|
|
|
|
|
}else{
|
|
|
|
|
|
fileListHj[keys]=[]
|
|
|
|
|
|
fileListHj[keys].push(res.data)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
setFileHj({ ...fileListHj })
|
2024-09-29 17:56:08 +08:00
|
|
|
|
setLoading(false);
|
|
|
|
|
|
|
2024-09-26 17:59:26 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
2024-09-23 18:03:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
};
|
2024-09-26 17:59:26 +08:00
|
|
|
|
function checkMediaType(url) {
|
|
|
|
|
|
// 创建URL对象
|
|
|
|
|
|
var link = url;
|
|
|
|
|
|
// 获取路径的最后一个点之后的内容作为文件扩展名
|
|
|
|
|
|
var extension = link?.split('.').pop().toLowerCase();
|
2024-09-23 18:03:30 +08:00
|
|
|
|
|
2024-09-26 17:59:26 +08:00
|
|
|
|
// 声明支持的图片和视频文件扩展名
|
|
|
|
|
|
var imageExtensions = ['jpg', 'jpeg', 'gif', 'png'];
|
|
|
|
|
|
var file = ['pdf', 'word', 'xslx', 'xsl', 'txt', "pptx"];
|
|
|
|
|
|
//
|
|
|
|
|
|
// 判断文件扩展名是否在图片扩展名数组中
|
|
|
|
|
|
if (imageExtensions.includes(extension)) {
|
|
|
|
|
|
return 'image';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 判断文件扩展名是否在视频扩展名数组中
|
|
|
|
|
|
if (file.includes(extension)) {
|
|
|
|
|
|
return extension;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 扩展名不在图片或视频数组中,返回null表示无法确定媒体类型
|
|
|
|
|
|
return null;
|
2024-09-23 18:03:30 +08:00
|
|
|
|
}
|
2024-09-26 17:59:26 +08:00
|
|
|
|
const preView = (item) => {
|
|
|
|
|
|
if (checkMediaType(item.name) == 'pdf') {
|
|
|
|
|
|
// window.open(baseUrl + item.previewUrl)
|
|
|
|
|
|
setUrl(item.previewUrl)
|
|
|
|
|
|
setIsModal(true)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description 文件下载
|
|
|
|
|
|
* @param {String} params 文件fileId
|
|
|
|
|
|
*/
|
|
|
|
|
|
const download = (id, name) => {
|
|
|
|
|
|
httpgetExport(downloadUrl+id).then(res => {
|
|
|
|
|
|
exportFile(name,res.data)
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
const onFinish = () => {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
useEffect(() => {
|
2024-09-29 17:19:27 +08:00
|
|
|
|
|
2024-09-26 17:59:26 +08:00
|
|
|
|
setFileHj(formJsonData)
|
2024-09-29 17:19:27 +08:00
|
|
|
|
form.setFieldsValue(formJsonData)
|
2024-09-26 17:59:26 +08:00
|
|
|
|
}, [])
|
2024-09-23 18:03:30 +08:00
|
|
|
|
return (
|
2024-09-26 17:59:26 +08:00
|
|
|
|
<Form form={form} onFinish={onFinish} >
|
2024-09-23 18:03:30 +08:00
|
|
|
|
<Row>
|
2024-09-26 17:59:26 +08:00
|
|
|
|
<Col span={2}>
|
|
|
|
|
|
<div style={{ display: 'flex', alignItems: 'center' }}>
|
|
|
|
|
|
<div style={{ width: 3, height: 12, background: '#259def', marginRight: 5 }}></div>
|
|
|
|
|
|
案卷存档</div>
|
2024-09-24 14:37:41 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={10}>
|
2024-09-23 18:03:30 +08:00
|
|
|
|
<Form.Item
|
|
|
|
|
|
label='保管人员'
|
2024-09-26 17:59:26 +08:00
|
|
|
|
name='custodian'
|
2024-09-23 18:03:30 +08:00
|
|
|
|
>
|
2024-09-29 18:05:53 +08:00
|
|
|
|
<Input disabled={type == 'view'}/>
|
2024-09-23 18:03:30 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
2024-09-24 14:37:41 +08:00
|
|
|
|
<Col span={10}>
|
2024-09-23 18:03:30 +08:00
|
|
|
|
<Form.Item
|
|
|
|
|
|
label='保管地点'
|
2024-09-26 17:59:26 +08:00
|
|
|
|
name='storageLocation'
|
2024-09-23 18:03:30 +08:00
|
|
|
|
>
|
2024-09-29 18:05:53 +08:00
|
|
|
|
<Input disabled={type == 'view'}/>
|
2024-09-23 18:03:30 +08:00
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
2024-09-26 17:59:26 +08:00
|
|
|
|
{list.map(item1 => (
|
2024-09-24 14:37:41 +08:00
|
|
|
|
<Row>
|
2024-09-26 17:59:26 +08:00
|
|
|
|
<Col span={2}>
|
|
|
|
|
|
<div style={{ display: 'flex', alignItems: 'center' }}>
|
|
|
|
|
|
<div style={{ width: 3, height: 12, background: '#259def', marginRight: 5 }}></div>
|
|
|
|
|
|
{item1.type}</div>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={22}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label='附件'
|
|
|
|
|
|
name='files'
|
|
|
|
|
|
>
|
2024-09-29 18:05:53 +08:00
|
|
|
|
{type !== 'view' &&<Dragger {...props(item1.key)} disabled={type == 'view'}>
|
2024-09-26 17:59:26 +08:00
|
|
|
|
<p className="ant-upload-drag-icon">
|
|
|
|
|
|
<InboxOutlined />
|
|
|
|
|
|
</p>
|
|
|
|
|
|
<p className="ant-upload-text">点击或将文件拖拽到这里上传 支持扩展名:jpeg、png</p>
|
2024-09-29 18:05:53 +08:00
|
|
|
|
</Dragger>}
|
2024-09-27 10:15:58 +08:00
|
|
|
|
<div className='flex'>
|
2024-09-26 17:59:26 +08:00
|
|
|
|
{fileListHj?.[item1.key]?.map((item) => {
|
2024-09-27 10:15:58 +08:00
|
|
|
|
return <div className='flex align-center file-item' style={{marginTop:5,marginRight:'3%',width:'30%', minHeight: "50px", fontSize: 14, columnGap: 10, cursor: checkMediaType(item.fileName) == 'image' || checkMediaType(item.fileName) == 'pdf' ? 'pointer' : "not-allowed" }}>
|
2024-09-26 17:59:26 +08:00
|
|
|
|
<div style={{ width: 40, height: 40, display: "flex", alignItems: 'center' }}>
|
|
|
|
|
|
{checkMediaType(item.fileName) == 'image' && <Image
|
|
|
|
|
|
height={40}
|
|
|
|
|
|
src={baseUrl + item.filePath}
|
|
|
|
|
|
/>}
|
|
|
|
|
|
{
|
|
|
|
|
|
checkMediaType(item.fileName) !== 'image' &&
|
|
|
|
|
|
<span >{checkMediaType(item.fileName)?.toUpperCase()}</span>
|
|
|
|
|
|
}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<span onClick={() => preView(item)}>{item.fileName}</span>
|
|
|
|
|
|
{type !== 'view' && <DeleteOutlined onClick={() => deleteFile(item.fileId,item1.key)} />}
|
|
|
|
|
|
<VerticalAlignBottomOutlined onClick={() => download(item.fileId, item.fileName)} />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
})}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>))}
|
|
|
|
|
|
<div className="flex flex-end" style={{ marginTop: 10, justifyContent: "flex-end" }}>
|
|
|
|
|
|
<Button type="" style={{ marginRight: 10 }} onClick={cancel}>取消</Button>
|
2024-09-29 17:56:08 +08:00
|
|
|
|
<Button type="primary" onClick={getInfo} loading={loading}>确定</Button>
|
2024-09-26 17:59:26 +08:00
|
|
|
|
</div>
|
2024-09-23 18:03:30 +08:00
|
|
|
|
</Form >
|
|
|
|
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default Page
|