tsg-web/src/views/sz/flfg/form.js

328 lines
11 KiB
JavaScript
Raw Normal View History

2024-09-23 15:52:06 +08:00
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"
2024-09-26 17:59:26 +08:00
const opntios = [
{ label: '宪法', value: '宪法' },
{ label: '法律', value: '法律' },
{ label: '行政法规', value: '行政法规' },
{ label: '督察法规', value: '督察法规' },
{ label: '司法解释', value: '司法解释' },
{ label: '地方性法规', value: '地方性法规' },
2024-09-23 15:52:06 +08:00
]
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");
2024-09-26 17:59:26 +08:00
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/SzRuleByLaw/file/download/${params}`;
2024-09-23 15:52:06 +08:00
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) => {
2024-09-27 10:15:58 +08:00
values.files = fileList.map(item => item.response?.data??item);
2024-09-26 17:59:26 +08:00
// values.eventsDate = values.eventsDate ? moment(values.eventsDate).format("YYYY-MM-DD 00:00:00") : ''
2024-09-23 15:52:06 +08:00
if (mode === 'edit') {
2024-09-26 17:59:26 +08:00
onEdit(apiurl.flfg.edit, {...record,...values})
2024-09-23 15:52:06 +08:00
}
if (mode === 'save') {
2024-09-26 17:59:26 +08:00
onSave(apiurl.flfg.add, values)
2024-09-23 15:52:06 +08:00
}
}
/**
* @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') {
2024-09-26 17:59:26 +08:00
// const imgFile = record?.files?.map(o => ({
// name: o.name,
// response: {
// data: {
// filePath: o.filePath,
// fileId: o.fileId
// }
// },
// }))
setFileList(record?.files)
2024-09-23 15:52:06 +08:00
}
}, [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="制定机关"
2024-09-26 17:59:26 +08:00
name="fillUnit"
2024-09-23 15:52:06 +08:00
>
<Input disabled={mode === 'view'} style={{ width: '100%' }} allowClear />
</Form.Item>
</Col>
<Col span={12}>
2024-09-26 17:59:26 +08:00
<Form.Item label="法律性质" name="type" rules={[{ required: true }]}>
2024-09-27 10:15:58 +08:00
<Select allowClear style={{ width: '100%' }} options={[
2024-09-26 17:59:26 +08:00
{ label: '宪法', value: 0 },
{ label: '法律', value: 1 },
{ label: '行政法规', value: 2 },
{ label: '督察法规', value: 3 },
{ label: '司法解释', value: 4 },
{ label: '地方性法规', value: 5 },
]} disabled={mode === 'view'} />
2024-09-23 15:52:06 +08:00
</Form.Item>
</Col>
2024-09-26 17:59:26 +08:00
{/* <Col span={12}>
<Form.Item label="法律性质" name="timeliness">
2024-09-23 15:52:06 +08:00
<Select allowClear style={{ width: '150px' }} options={opntios} />
</Form.Item>
2024-09-26 17:59:26 +08:00
</Col> */}
2024-09-23 15:52:06 +08:00
<Col span={12}>
<Form.Item
2024-09-26 17:59:26 +08:00
label="时效性"
name="timeliness"
2024-09-23 15:52:06 +08:00
rules={[
{
required: true,
},
]}
2024-09-26 17:59:26 +08:00
2024-09-23 15:52:06 +08:00
>
2024-09-27 10:15:58 +08:00
<Select allowClear style={{ width: '100%' }} options={[
2024-09-26 17:59:26 +08:00
{ label: '尚未生效', value: 0 },
{ label: '有效', value: 1 },
{ label: '已修改', value: 2 },
{ label: '已废止', value: 3 },
]} />
2024-09-23 15:52:06 +08:00
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="施行日期"
2024-09-26 17:59:26 +08:00
name="announcementDate"
getValueFromEvent={(e, dateString) => dateString}
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
>
<DatePicker disabled={mode === 'view'} format={'YYYY-MM-DD HH:mm:ss'} style={{ width: '100%' }} allowClear />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="公布日期"
name="implementationDate"
2024-09-23 15:52:06 +08:00
getValueFromEvent={(e, dateString) => dateString}
getValueProps={(value) => ({ value: value ? moment(value) : undefined })}
>
2024-09-26 17:59:26 +08:00
<DatePicker disabled={mode === 'view'} format={'YYYY-MM-DD HH:mm:ss'} style={{ width: '100%' }} allowClear />
2024-09-23 15:52:06 +08:00
</Form.Item>
</Col>
</Row>
<Row>
<Col span={24}>
<Form.Item
label="附件"
2024-09-26 17:59:26 +08:00
name="files"
2024-09-23 15:52:06 +08:00
labelCol={{ span: 3 }}
wrapperCol={{ span: 19 }}
2024-09-26 17:59:26 +08:00
// rules={[
// {
// required: true,
// },
// ]}
2024-09-23 15:52:06 +08:00
>
{mode !== "view" &&
<Dragger
name='file'
// multiple
2024-09-26 17:59:26 +08:00
action="/gunshiApp/tsg/SzRuleByLaw/file/upload/singleSimple"
2024-09-23 15:52:06 +08:00
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}>
2024-09-27 10:15:58 +08:00
<div className="file-item" style={{ width: "75%",marginTop:5 }}>
2024-09-23 15:52:06 +08:00
<div className='file-description'>
2024-09-26 17:59:26 +08:00
{file?.fileName?.indexOf('.docx') > -1 ?
2024-09-23 15:52:06 +08:00
<div
2024-09-26 17:59:26 +08:00
onClick={() => { download(file.fileId) }}
2024-09-23 15:52:06 +08:00
style={{ cursor: 'pointer' }}
>
<FileWordOutlined
style={{ fontSize: 40 }}
/>
</div>
:
2024-09-26 17:59:26 +08:00
file?.fileName?.indexOf('.pdf') > -1 ?
2024-09-23 15:52:06 +08:00
<div
2024-09-26 17:59:26 +08:00
onClick={() => { viewPdf(file.fileId) }}
2024-09-23 15:52:06 +08:00
style={{ cursor: 'pointer' }}
>
<FilePdfOutlined style={{ fontSize: 40 }} />
</div>
:
2024-09-26 17:59:26 +08:00
file?.fileName?.indexOf('.zip') > -1 ?
2024-09-23 15:52:06 +08:00
<div
2024-09-26 17:59:26 +08:00
onClick={() => { download(file.fileId) }}
2024-09-23 15:52:06 +08:00
style={{ cursor: 'pointer' }}
>
<FileZipOutlined style={{ fontSize: 40 }} />
</div>
:
2024-09-26 17:59:26 +08:00
file?.fileName?.indexOf('.xlsx') > -1 ?
2024-09-23 15:52:06 +08:00
<div
2024-09-26 17:59:26 +08:00
onClick={() => { download(file.fileId) }}
2024-09-23 15:52:06 +08:00
style={{ cursor: 'pointer' }}
>
<FileExcelOutlined style={{ fontSize: 40 }} />
</div>
:
2024-09-26 17:59:26 +08:00
<Image width={60} src={url + file.filePath} alt='' />
2024-09-23 15:52:06 +08:00
}
2024-09-26 17:59:26 +08:00
<span>{file?.fileName}</span>
2024-09-23 15:52:06 +08:00
</div>
2024-09-26 17:59:26 +08:00
<div className={mode == "view" ? 'delete-icon disable-icon' : 'delete-icon'} onClick={() => deleteFile(file.fileId)}>
2024-09-23 15:52:06 +08:00
<DeleteOutlined />
</div>
</div>
</Col>
)
})
}
</Row>
</Form.Item>
</Col>
</Row>
{
mode === 'view' ? null : (
<>
<Form.Item {...btnItemLayout}>
2024-09-26 17:59:26 +08:00
<Button type="primary" htmlType="submit" loading={loading}>
2024-09-23 15:52:06 +08:00
{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,
}}
2024-09-26 17:59:26 +08:00
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/tsg/projectEvents/file/download/${iframeSrc}`)}`}
2024-09-23 15:52:06 +08:00
/>
</Modal>
</>
);
}
export default ModalForm;