tsg-web/src/views/fxzb/ddgc/form.js

320 lines
11 KiB
JavaScript
Raw Normal View History

2024-09-23 13:49:58 +08:00
import React,{useEffect,useState,useRef} from 'react';
import { Form, Button, Input, Row, Col,Upload,DatePicker,Modal,message,Image } from 'antd';
import {PaperClipOutlined,DeleteOutlined,FileWordOutlined,FilePdfOutlined,FilePptOutlined,FileZipOutlined,FileExcelOutlined} from '@ant-design/icons';
2024-09-20 15:02:50 +08:00
import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps';
import apiurl from '../../../service/apiurl';
2024-09-23 13:49:58 +08:00
import { httpget2 } from '../../../utils/request';
2024-09-20 15:02:50 +08:00
import moment from 'moment';
2024-09-23 13:49:58 +08:00
import "./index.less";
2024-09-20 15:02:50 +08:00
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
2024-09-23 13:49:58 +08:00
const ModalForm = ({ mode, record,onEdit,onSave,onCrudSuccess }) => {
2024-09-20 15:02:50 +08:00
const [form] = Form.useForm();
const [fileList, setFileList] = useState([]) //上传文件列表
const [loading, setLoading] = useState(false)
2024-09-23 13:49:58 +08:00
const [iframeId, setIframeId] = useState('')
const [perviewOpen, setPerviewOpen] = useState(false)
2024-09-20 15:02:50 +08:00
const fileChange = (info) => {
2024-09-23 13:49:58 +08:00
console.log("file",info);
2024-09-20 15:02:50 +08:00
if (info.file.status === "done") {
setLoading(false);
2024-09-23 13:49:58 +08:00
setFileList(info.fileList)
2024-09-20 15:02:50 +08:00
}
if (info.file.status === "uploading") {
2024-09-23 13:49:58 +08:00
setLoading(true);
2024-09-20 15:02:50 +08:00
}
if (info.file.status === "error") {
message.error("文件上传失败")
2024-09-23 13:49:58 +08:00
setLoading(false);
2024-09-20 15:02:50 +08:00
}
2024-09-23 13:49:58 +08:00
if (fileList.length > 0) {
return
2024-09-20 15:02:50 +08:00
}
2024-09-23 13:49:58 +08:00
setFileList(info.fileList)
}
2024-09-20 15:02:50 +08:00
2024-09-23 13:49:58 +08:00
const deleteFile = (fileId) => {
let filterFile = fileList.filter(item => item.response?.data?.fileId !== fileId);
setFileList(filterFile)
}
const onFinish = async (values) => {
if (fileList.length <= 0) {
message.error("请上传预案文件")
return
}
let oldFiles = fileList.map(item => ({ fileId: item.response?.data?.fileId }))
values.resCode = "42120250085"
values.type = 2
values.files = oldFiles;
values.prepTime = moment(values.prepTime).format("YYYY-MM-DD 00:00:00")
values.apprTime = moment(values.apprTime).format("YYYY-MM-DD 00:00:00")
2024-09-20 15:02:50 +08:00
if (mode === 'edit') {
2024-09-23 13:49:58 +08:00
values.id = record?.id;
onEdit(apiurl.fxya.update,values)
2024-09-20 15:02:50 +08:00
}
if (mode === 'save') {
2024-09-23 13:49:58 +08:00
onSave(apiurl.fxya.save,values)
2024-09-20 15:02:50 +08:00
}
}
2024-09-23 13:49:58 +08:00
const viewPdf = (params) => {
setIframeId(params)
setPerviewOpen(true)
}
const beforeUpload = () => {
if (fileList.length > 0) {
message.error("只能上传一个附件");
return false;
}
}
const getFileInfo = async(id) => {
try {
const res = await httpget2(`${apiurl.dataResourcesCenter.projectAndWater.fxya.getFile}/${id}`)
let obj ={
name: res.data.fileName,
2024-09-20 15:02:50 +08:00
response: {
data: {
2024-09-23 13:49:58 +08:00
filePath: res.data.filePath,
fileId:res.data.fileId
2024-09-20 15:02:50 +08:00
}
},
}
2024-09-23 13:49:58 +08:00
setFileList([obj])
} catch (error) {
console.log(error);
2024-09-20 15:02:50 +08:00
}
}
2024-09-23 13:49:58 +08:00
const download = (params) => {
let downloadLink = document.createElement("a");
downloadLink.href = `http://local.gunshiiot.com:18083/gunshiApp/xyt/resPlanB/file/download/${params}`;
downloadLink.download = `${params.fileName}`;
downloadLink.style.display = "none";
// 将链接添加到页面中
document.body.appendChild(downloadLink);
// 模拟点击事件,开始下载
downloadLink.click();
}
2024-09-20 15:02:50 +08:00
useEffect(() => {
2024-09-23 13:49:58 +08:00
if (record && mode != "save") {
getFileInfo(record?.files[0]?.fileId)
}
}, [record,mode])
2024-09-20 15:02:50 +08:00
return (
<>
<Form form={form} {...formItemLayout} onFinish={onFinish} initialValues={record}>
<Row>
<Col span={24}>
<Form.Item
2024-09-23 13:49:58 +08:00
label="调度规程名称"
name="planName"
labelCol={{ span: 3, offset: 0 }}
wrapperCol={{span:21,offset:0}}
2024-09-20 15:02:50 +08:00
rules={[{ required: true }]}
>
2024-09-23 13:49:58 +08:00
<Input
style={{ width: '100%' }}
allowClear
/>
2024-09-20 15:02:50 +08:00
</Form.Item>
</Col>
2024-09-23 13:49:58 +08:00
2024-09-20 15:02:50 +08:00
</Row>
2024-09-23 13:49:58 +08:00
<Row>
<Col span={12}>
2024-09-20 15:02:50 +08:00
<Form.Item
2024-09-23 13:49:58 +08:00
label="编制单位"
name="prepOrg"
2024-09-20 15:02:50 +08:00
rules={[{ required: true }]}
>
2024-09-23 13:49:58 +08:00
<Input
style={{ width: '100%' }}
allowClear
/>
2024-09-20 15:02:50 +08:00
</Form.Item>
</Col>
2024-09-23 13:49:58 +08:00
<Col span={12}>
2024-09-20 15:02:50 +08:00
<Form.Item
2024-09-23 13:49:58 +08:00
label="编制日期"
name="prepTime"
getValueFromEvent={(e, dateString) => dateString}
getValueProps={value => ({
value: value ? moment(value) : undefined
})}
2024-09-20 15:02:50 +08:00
rules={[{ required: true }]}
>
2024-09-23 13:49:58 +08:00
<DatePicker allowClear style={{width:'280px'}} />
2024-09-20 15:02:50 +08:00
</Form.Item>
</Col>
2024-09-23 13:49:58 +08:00
</Row>
<Row>
<Col span={12}>
<Form.Item
label="批复部门"
name="apprOrg"
rules={[{ required: true }]}
2024-09-20 15:02:50 +08:00
>
2024-09-23 13:49:58 +08:00
<Input
style={{ width: '100%' }}
allowClear
/>
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="批复日期"
name="apprTime"
getValueFromEvent={(e, dateString) => dateString}
getValueProps={value => ({
value: value ? moment(value) : undefined
})}
rules={[{ required: true }]}
>
<DatePicker allowClear style={{width:'280px'}} />
</Form.Item>
</Col>
</Row>
<Row>
<Col span={24}>
<Form.Item
label="预案文件"
name="files"
labelCol={{ span: 3, offset: 0 }}
wrapperCol={{span:21,offset:0}}
rules={[{ required: true }]}
>
<Upload
2024-09-20 15:02:50 +08:00
name='file'
2024-09-23 13:49:58 +08:00
action="/gunshiApp/xyt/resPlanB/file/upload/singleSimple"
2024-09-20 15:02:50 +08:00
onChange={fileChange}
2024-09-23 13:49:58 +08:00
fileList={fileList}
maxCount={1}
disabled={loading}
showUploadList={false}
beforeUpload={beforeUpload}
2024-09-20 15:02:50 +08:00
>
2024-09-23 13:49:58 +08:00
{mode == "view" ? null :
<div style={{display:"flex",alignItems:"center",columnGap:10,color:"#4f85ec",cursor:"pointer"}}>
<PaperClipOutlined />
<a style={{ cursor: "pointer" }}>上传PDF文件
<span style={{ marginLeft:10,color:"#dfdfdf" }}>(支持扩展名.xls .xlsx .doc .docx .pdf .jpg .png)</span></a>
</div>
}
</Upload>
</Form.Item>
</Col>
</Row>
<Row gutter={[16]}>
2024-09-20 15:02:50 +08:00
{
loading ? <span>文件正在上传中请等待</span> :
fileList.length > 0 && fileList.map(file => {
return (
<Col span={12}>
<div className={mode == "view" ? 'file-item' : 'file-item'}>
<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('.ppt') > -1 ?
<div
onClick={() => { download(file.response?.data?.fileId) }}
style={{ cursor: 'pointer' }}
>
<FilePptOutlined 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>
2024-09-23 13:49:58 +08:00
</div>
{mode !== "view" &&
<div
className="delete-icon"
onClick={() => deleteFile(file.response?.data?.fileId)}
>
2024-09-20 15:02:50 +08:00
<DeleteOutlined />
</div>
2024-09-23 13:49:58 +08:00
}
2024-09-20 15:02:50 +08:00
</div>
</Col>
)
})
}
2024-09-23 13:49:58 +08:00
</Row>
2024-09-20 15:02:50 +08:00
{
mode==='view'?null:(
<>
<Form.Item {...btnItemLayout}>
<Button type="primary" htmlType="submit">
2024-09-23 13:49:58 +08:00
{mode === 'save' ? '提交' : '修改'}
2024-09-20 15:02:50 +08:00
</Button>
</Form.Item>
</>
)
}
</Form>
<Modal
2024-09-23 13:49:58 +08:00
open={perviewOpen}
2024-09-20 15:02:50 +08:00
width={1000}
title=""
footer={null}
style={{marginTop:"-5%"}}
onCancel={() => {
2024-09-23 13:49:58 +08:00
setPerviewOpen(false)
2024-09-20 15:02:50 +08:00
}}
>
<iframe
style={{
height: '80vh',
width: '100%',
border: 0,
marginTop: 20,
}}
2024-09-23 13:49:58 +08:00
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xyt/resPlanB/file/download/${iframeId}`)}`}
2024-09-20 15:02:50 +08:00
/>
</Modal>
</>
);
}
export default ModalForm;