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

323 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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';
import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps';
import apiurl from '../../../service/apiurl';
import { httpget2 } from '../../../utils/request';
import moment from 'moment';
import "./index.less";
const url = "http://223.75.53.141:9100/gs-tsg"
const ModalForm = ({ mode, record,onEdit,onSave,onCrudSuccess }) => {
const [form] = Form.useForm();
const [fileList, setFileList] = useState([]) //上传文件列表
const [loading, setLoading] = useState(false)
const [iframeId, setIframeId] = useState('')
const [perviewOpen, setPerviewOpen] = useState(false)
const fileChange = (info) => {
console.log("file",info);
if (info.file.status === "done") {
setLoading(false);
setFileList(info.fileList)
}
if (info.file.status === "uploading") {
setLoading(true);
}
if (info.file.status === "error") {
message.error("文件上传失败")
setLoading(false);
}
if (fileList.length > 0) {
return
}
setFileList(info.fileList)
}
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 = "42112230001"
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")
if (mode === 'edit') {
values.id = record?.id;
onEdit(apiurl.fxya.update,values)
}
if (mode === 'save') {
onSave(apiurl.fxya.save,values)
}
}
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,
response: {
data: {
filePath: res.data.filePath,
fileId:res.data.fileId
}
},
}
setFileList([obj])
} catch (error) {
console.log(error);
}
}
const download = (params) => {
let downloadLink = document.createElement("a");
downloadLink.href = `${process.env.REACT_APP_API_URL}/gunshiApp/tsg/resPlanB/file/download/${params}`;
downloadLink.download = `${params.fileName}`;
downloadLink.style.display = "none";
// 将链接添加到页面中
document.body.appendChild(downloadLink);
// 模拟点击事件,开始下载
downloadLink.click();
}
useEffect(() => {
if (record && mode != "save") {
getFileInfo(record?.files[0]?.fileId)
}
}, [record,mode])
return (
<>
<Form form={form} {...formItemLayout} onFinish={onFinish} initialValues={record}>
<Row>
<Col span={24}>
<Form.Item
label="调度规程名称"
name="planName"
labelCol={{ span: 3, offset: 0 }}
wrapperCol={{span:21,offset:0}}
rules={[{ required: true }]}
>
<Input
style={{ width: '100%' }}
allowClear
disabled={mode==='view'}
/>
</Form.Item>
</Col>
</Row>
<Row>
<Col span={12}>
<Form.Item
label="编制单位"
name="prepOrg"
rules={[{ required: true }]}
>
<Input
style={{ width: '100%' }}
allowClear
disabled={mode==='view'}
/>
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="编制日期"
name="prepTime"
getValueFromEvent={(e, dateString) => dateString}
getValueProps={value => ({
value: value ? moment(value) : undefined
})}
rules={[{ required: true }]}
>
<DatePicker allowClear style={{width:'280px'}} disabled={mode==='view'}/>
</Form.Item>
</Col>
</Row>
<Row>
<Col span={12}>
<Form.Item
label="批复部门"
name="apprOrg"
rules={[{ required: true }]}
>
<Input
style={{ width: '100%' }}
allowClear
disabled={mode==='view'}
/>
</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'}} disabled={mode==='view'}/>
</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
name='file'
action="/gunshiApp/tsg/resPlanB/file/upload/singleSimple"
onChange={fileChange}
fileList={fileList}
maxCount={1}
disabled={loading}
showUploadList={false}
beforeUpload={beforeUpload}
>
{mode == "view" ? null :
<div style={{display:"flex",alignItems:"center",columnGap:10,color:"#4f85ec",cursor:"pointer"}}>
<PaperClipOutlined />
<a style={{ cursor: "pointer" }}>上传附件
<span style={{ marginLeft:10,color:"#dfdfdf" }}>(支持扩展名.xls .xlsx .doc .docx .pdf .jpg .png)</span></a>
</div>
}
</Upload>
</Form.Item>
</Col>
</Row>
<Row gutter={[16]} style={{margin:"-25px 0 0 14px"}}>
{
// 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>
</div>
{mode !== "view" &&
<div
className="delete-icon"
onClick={() => deleteFile(file.response?.data?.fileId)}
>
<DeleteOutlined />
</div>
}
</div>
</Col>
)
})
}
</Row>
{
mode==='view'?null:(
<>
<Form.Item {...btnItemLayout}>
<Button type="primary" htmlType="submit">
{mode === 'save' ? '提交' : '修改'}
</Button>
</Form.Item>
</>
)
}
</Form>
<Modal
open={perviewOpen}
width={1000}
title=""
footer={null}
style={{marginTop:"-5%"}}
onCancel={() => {
setPerviewOpen(false)
}}
>
<iframe
style={{
height: '80vh',
width: '100%',
border: 0,
marginTop: 20,
}}
src={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/tsg/resPlanB/file/download/${iframeId}`)}`}
/>
</Modal>
</>
);
}
export default ModalForm;