309 lines
10 KiB
JavaScript
309 lines
10 KiB
JavaScript
|
|
import React, { useEffect, useState, useMemo, useRef } from 'react';
|
|||
|
|
import { Form, Button, Input, Row, Upload, Col, Table, DatePicker, InputNumber, message, Image, Modal, Typography, Select } from 'antd';
|
|||
|
|
import { DeleteOutlined, FileWordOutlined, FilePdfOutlined, FileZipOutlined, FileExcelOutlined } from '@ant-design/icons';
|
|||
|
|
import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps';
|
|||
|
|
|
|||
|
|
import apiurl from '../../../service/apiurl';
|
|||
|
|
|
|||
|
|
import NormalSelect from '../../../components/Form/NormalSelect';
|
|||
|
|
|
|||
|
|
// import "./index.less"
|
|||
|
|
import moment from 'moment';
|
|||
|
|
const { RangePicker } = DatePicker
|
|||
|
|
const { Dragger } = Upload;
|
|||
|
|
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
|
|||
|
|
|
|||
|
|
const opntios=[
|
|||
|
|
{label:'宪法',value:'宪法'},
|
|||
|
|
{label:'法律',value:'法律'},
|
|||
|
|
{label:'行政法规',value:'行政法规'},
|
|||
|
|
{label:'督察法规',value:'督察法规'},
|
|||
|
|
{label:'司法解释',value:'司法解释'},
|
|||
|
|
{label:'地方性法规',value:'地方性法规'},
|
|||
|
|
]
|
|||
|
|
const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
|
|||
|
|
|
|||
|
|
const [form] = Form.useForm();
|
|||
|
|
const [fileList, setFileList] = useState([]) //上传文件列表
|
|||
|
|
const [fileIds, setFileIds] = useState([])
|
|||
|
|
const [iframeSrc, setIframeSrc] = useState('')
|
|||
|
|
const [pdfViewOPen, setPdfViewOPen] = useState(false)
|
|||
|
|
|
|||
|
|
const [loading, setLoading] = useState(false)
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @description 文件下载
|
|||
|
|
* @param {String} params 文件fileId
|
|||
|
|
*/
|
|||
|
|
const download = (params) => {
|
|||
|
|
let downloadLink = document.createElement("a");
|
|||
|
|
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/projectEvents/file/download/${params}`;
|
|||
|
|
downloadLink.download = `${params.fileName}`;
|
|||
|
|
downloadLink.style.display = "none";
|
|||
|
|
// 将链接添加到页面中
|
|||
|
|
document.body.appendChild(downloadLink);
|
|||
|
|
|
|||
|
|
// 模拟点击事件,开始下载
|
|||
|
|
downloadLink.click();
|
|||
|
|
}
|
|||
|
|
/**
|
|||
|
|
* @description 上传图片
|
|||
|
|
* @param {string} file 上传的文件
|
|||
|
|
*/
|
|||
|
|
const fileChange = (info) => {
|
|||
|
|
if (info.file.status === "done") {
|
|||
|
|
setLoading(false);
|
|||
|
|
}
|
|||
|
|
if (info.file.status === "uploading") {
|
|||
|
|
setLoading(true);
|
|||
|
|
}
|
|||
|
|
if (info.file.status === "error") {
|
|||
|
|
message.error("文件上传失败")
|
|||
|
|
setLoading(false);
|
|||
|
|
}
|
|||
|
|
let fileIds = info.fileList.map(file => {
|
|||
|
|
return file.response?.data?.fileId
|
|||
|
|
})
|
|||
|
|
setFileIds(fileIds)
|
|||
|
|
setFileList(info.fileList)
|
|||
|
|
}
|
|||
|
|
/**
|
|||
|
|
* @description pdf文件预览
|
|||
|
|
* @param {String} params 文件预览url
|
|||
|
|
*/
|
|||
|
|
const viewPdf = (params) => {
|
|||
|
|
setIframeSrc(params)
|
|||
|
|
setPdfViewOPen(true)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
const onfinish = (values) => {
|
|||
|
|
values.eventsDate = values.eventsDate ? moment(values.eventsDate).format("YYYY-MM-DD 00:00:00") : ''
|
|||
|
|
let oldFiles = fileList.map(item => ({ fileId: item.response?.data?.fileId }))
|
|||
|
|
if (mode === 'edit') {
|
|||
|
|
values.files = oldFiles;
|
|||
|
|
values.id = record.id;
|
|||
|
|
onEdit(apiurl.rcgl.gcdsj.edit, values)
|
|||
|
|
}
|
|||
|
|
if (mode === 'save') {
|
|||
|
|
values.files = oldFiles
|
|||
|
|
onSave(apiurl.rcgl.gcdsj.save, values)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @description 删除上传的图片
|
|||
|
|
* @param {string} id 删除的id
|
|||
|
|
*/
|
|||
|
|
const deleteFile = (fileId) => {
|
|||
|
|
console.log(fileId);
|
|||
|
|
let filterFile = fileList.filter(item => item.response?.data?.fileId !== fileId);
|
|||
|
|
setFileList(filterFile)
|
|||
|
|
}
|
|||
|
|
useEffect(() => {
|
|||
|
|
if (mode != 'save') {
|
|||
|
|
const imgFile = record?.files?.map(o => ({
|
|||
|
|
name: o.fileName,
|
|||
|
|
response: {
|
|||
|
|
data: {
|
|||
|
|
filePath: o.filePath,
|
|||
|
|
fileId: o.fileId
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
}))
|
|||
|
|
setFileList(imgFile)
|
|||
|
|
}
|
|||
|
|
}, [record, mode])
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
return (
|
|||
|
|
<>
|
|||
|
|
<Form
|
|||
|
|
form={form}
|
|||
|
|
{...formItemLayout}
|
|||
|
|
onFinish={onfinish}
|
|||
|
|
initialValues={record}
|
|||
|
|
>
|
|||
|
|
<Row>
|
|||
|
|
<Col span={12}>
|
|||
|
|
<Form.Item
|
|||
|
|
label="标题"
|
|||
|
|
name="name"
|
|||
|
|
rules={[{ required: true }]}
|
|||
|
|
>
|
|||
|
|
<Input disabled={mode === 'view'} style={{ width: '100%' }} allowClear />
|
|||
|
|
</Form.Item>
|
|||
|
|
</Col>
|
|||
|
|
<Col span={12}>
|
|||
|
|
<Form.Item
|
|||
|
|
label="制定机关"
|
|||
|
|
name="name"
|
|||
|
|
rules={[{ required: true }]}
|
|||
|
|
>
|
|||
|
|
<Input disabled={mode === 'view'} style={{ width: '100%' }} allowClear />
|
|||
|
|
</Form.Item>
|
|||
|
|
</Col>
|
|||
|
|
<Col span={12}>
|
|||
|
|
<Form.Item label="制定机关" name="name">
|
|||
|
|
<Select allowClear style={{ width: '150px' }} options={opntios} />
|
|||
|
|
</Form.Item>
|
|||
|
|
</Col>
|
|||
|
|
<Col span={12}>
|
|||
|
|
<Form.Item label="失效性" name="name">
|
|||
|
|
<Select allowClear style={{ width: '150px' }} options={opntios} />
|
|||
|
|
</Form.Item>
|
|||
|
|
</Col>
|
|||
|
|
|
|||
|
|
<Col span={12}>
|
|||
|
|
<Form.Item
|
|||
|
|
label="公布日期"
|
|||
|
|
name="eventsDate"
|
|||
|
|
getValueFromEvent={(e, dateString) => dateString}
|
|||
|
|
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
|
|||
|
|
rules={[
|
|||
|
|
{
|
|||
|
|
required: true,
|
|||
|
|
},
|
|||
|
|
]}
|
|||
|
|
>
|
|||
|
|
<DatePicker disabled={mode === 'view'} format={'YYYY-MM-DD'} style={{ width: '100%' }} allowClear />
|
|||
|
|
</Form.Item>
|
|||
|
|
</Col>
|
|||
|
|
<Col span={12}>
|
|||
|
|
<Form.Item
|
|||
|
|
label="施行日期"
|
|||
|
|
name="eventsDate"
|
|||
|
|
getValueFromEvent={(e, dateString) => dateString}
|
|||
|
|
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
|
|||
|
|
rules={[
|
|||
|
|
{
|
|||
|
|
required: true,
|
|||
|
|
},
|
|||
|
|
]}
|
|||
|
|
>
|
|||
|
|
<DatePicker disabled={mode === 'view'} format={'YYYY-MM-DD'} style={{ width: '100%' }} allowClear />
|
|||
|
|
</Form.Item>
|
|||
|
|
</Col>
|
|||
|
|
</Row>
|
|||
|
|
|
|||
|
|
<Row>
|
|||
|
|
<Col span={24}>
|
|||
|
|
<Form.Item
|
|||
|
|
label="附件"
|
|||
|
|
name="fieldId"
|
|||
|
|
labelCol={{ span: 3 }}
|
|||
|
|
wrapperCol={{ span: 19 }}
|
|||
|
|
>
|
|||
|
|
{mode !== "view" &&
|
|||
|
|
<Dragger
|
|||
|
|
name='file'
|
|||
|
|
// multiple
|
|||
|
|
action="/gunshiApp/xyt/projectEvents/file/upload/singleSimple"
|
|||
|
|
onChange={fileChange}
|
|||
|
|
onDrop={(info) => { console.log(info.dataTransfer.files); }}
|
|||
|
|
fileList={fileList}
|
|||
|
|
disabled={loading}
|
|||
|
|
// onSuccess={handleSuccess}
|
|||
|
|
>
|
|||
|
|
<p className="ant-upload-text">点击或拖拽文件到此区域上传</p>
|
|||
|
|
<p className="ant-upload-hint">
|
|||
|
|
支持扩展名:.doc .docx .pdf .jpg .png .ppt
|
|||
|
|
</p>
|
|||
|
|
</Dragger>
|
|||
|
|
}
|
|||
|
|
<Row gutter={[16]}>
|
|||
|
|
{
|
|||
|
|
fileList.length > 0 && fileList.map(file => {
|
|||
|
|
return (
|
|||
|
|
<Col span={12}>
|
|||
|
|
<div className="file-item" style={{ width: "75%" }}>
|
|||
|
|
<div className='file-description'>
|
|||
|
|
{file.name.indexOf('.docx') > -1 ?
|
|||
|
|
<div
|
|||
|
|
onClick={() => { download(file.response?.data?.fileId) }}
|
|||
|
|
style={{ cursor: 'pointer' }}
|
|||
|
|
>
|
|||
|
|
<FileWordOutlined
|
|||
|
|
style={{ fontSize: 40 }}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
:
|
|||
|
|
file.name.indexOf('.pdf') > -1 ?
|
|||
|
|
<div
|
|||
|
|
onClick={() => { viewPdf(file.response?.data?.fileId) }}
|
|||
|
|
style={{ cursor: 'pointer' }}
|
|||
|
|
>
|
|||
|
|
<FilePdfOutlined style={{ fontSize: 40 }} />
|
|||
|
|
</div>
|
|||
|
|
:
|
|||
|
|
file.name.indexOf('.zip') > -1 ?
|
|||
|
|
<div
|
|||
|
|
onClick={() => { download(file.response?.data?.fileId) }}
|
|||
|
|
style={{ cursor: 'pointer' }}
|
|||
|
|
>
|
|||
|
|
<FileZipOutlined style={{ fontSize: 40 }} />
|
|||
|
|
</div>
|
|||
|
|
:
|
|||
|
|
file.name.indexOf('.xlsx') > -1 ?
|
|||
|
|
<div
|
|||
|
|
onClick={() => { download(file.response?.data?.fileId) }}
|
|||
|
|
style={{ cursor: 'pointer' }}
|
|||
|
|
>
|
|||
|
|
<FileExcelOutlined style={{ fontSize: 40 }} />
|
|||
|
|
</div>
|
|||
|
|
:
|
|||
|
|
<Image width={60} src={url + file.response?.data?.filePath} alt='' />
|
|||
|
|
}
|
|||
|
|
<span>{file.name}</span>
|
|||
|
|
</div>
|
|||
|
|
<div className={mode == "view" ? 'delete-icon disable-icon' : 'delete-icon'} onClick={() => deleteFile(file.response?.data?.fileId)}>
|
|||
|
|
<DeleteOutlined />
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</Col>
|
|||
|
|
)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
</Row>
|
|||
|
|
</Form.Item>
|
|||
|
|
</Col>
|
|||
|
|
</Row>
|
|||
|
|
{
|
|||
|
|
mode === 'view' ? null : (
|
|||
|
|
<>
|
|||
|
|
<Form.Item {...btnItemLayout}>
|
|||
|
|
<Button type="primary" htmlType="submit">
|
|||
|
|
{mode === 'save' ? '提交' : '修改'}
|
|||
|
|
</Button>
|
|||
|
|
</Form.Item>
|
|||
|
|
</>
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
</Form>
|
|||
|
|
<Modal
|
|||
|
|
open={pdfViewOPen}
|
|||
|
|
width={1000}
|
|||
|
|
title=""
|
|||
|
|
footer={null}
|
|||
|
|
style={{ marginTop: "-5%" }}
|
|||
|
|
onCancel={() => {
|
|||
|
|
setPdfViewOPen(false)
|
|||
|
|
}}
|
|||
|
|
>
|
|||
|
|
<iframe
|
|||
|
|
style={{
|
|||
|
|
height: '80vh',
|
|||
|
|
width: '100%',
|
|||
|
|
border: 0,
|
|||
|
|
marginTop: 20,
|
|||
|
|
}}
|
|||
|
|
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xyt/projectEvents/file/download/${iframeSrc}`)}`}
|
|||
|
|
/>
|
|||
|
|
</Modal>
|
|||
|
|
</>
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export default ModalForm;
|