2024-09-20 15:02:50 +08:00
|
|
|
|
import React,{useEffect,useState} from 'react';
|
|
|
|
|
|
import { Form, Button, Input, Row, Col, DatePicker, Upload,message,Image,Modal } from 'antd';
|
|
|
|
|
|
import { DeleteOutlined,FileWordOutlined,FilePdfOutlined,FilePptOutlined,FileZipOutlined,FileExcelOutlined } from '@ant-design/icons';
|
|
|
|
|
|
import { formItemLayout, btnItemLayout } from '../../../../components/crud/FormLayoutProps';
|
|
|
|
|
|
import { createCrudService } from '../../../../components/crud/_';
|
|
|
|
|
|
import apiurl from '../../../../service/apiurl';
|
|
|
|
|
|
import moment from 'moment';
|
|
|
|
|
|
import "./index.less"
|
|
|
|
|
|
const { Dragger } = Upload;
|
2025-04-07 09:16:20 +08:00
|
|
|
|
const url = "http://223.75.53.141:9100/gs-tsg"
|
2024-09-20 15:02:50 +08:00
|
|
|
|
const ModalForm = ({ mode, record,onEdit,onSave,onCrudSuccess }) => {
|
|
|
|
|
|
if(record.tmStart && record.tmEnd) {
|
|
|
|
|
|
record.tmStart = moment(record.tmStart)
|
|
|
|
|
|
record.tmEnd = moment(record.tmEnd)
|
|
|
|
|
|
}
|
|
|
|
|
|
const [form] = Form.useForm();
|
|
|
|
|
|
const [fileList, setFileList] = useState([]) //上传文件列表
|
|
|
|
|
|
const [fileParams, setFileParams] = useState([]) // 文件参数
|
|
|
|
|
|
const [flag, setFlag] = useState(false)
|
|
|
|
|
|
const [iframeSrc, setIframeSrc] = useState('')
|
|
|
|
|
|
const [pdfViewOPen, setPdfViewOPen] = useState(false)
|
|
|
|
|
|
const [loading, setLoading] = useState(false)
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description 表单重置
|
|
|
|
|
|
*/
|
|
|
|
|
|
const onReset = () => {
|
|
|
|
|
|
form.resetFields();
|
|
|
|
|
|
};
|
|
|
|
|
|
console.log(record);
|
|
|
|
|
|
const onFinish = async(values) => {
|
|
|
|
|
|
if(values.meetDate){
|
|
|
|
|
|
values.startDate = moment(values.meetDate[0]).format('YYYY-MM-DD HH:mm:ss')
|
|
|
|
|
|
values.endDate = moment(values.meetDate[1]).format('YYYY-MM-DD HH:mm:ss')
|
|
|
|
|
|
delete values.meetDate
|
|
|
|
|
|
}else {
|
|
|
|
|
|
values.tmStart = moment(values.tmStart).format('YYYY-MM-DD 00:00:00')
|
|
|
|
|
|
values.tmEnd = moment(values.tmEnd).format('YYYY-MM-DD 00:00:00')
|
|
|
|
|
|
}
|
|
|
|
|
|
values.relatedObjectId = record.relatedObjectId
|
|
|
|
|
|
values.relatedObjectType = "bzPredictionScheme4"
|
|
|
|
|
|
if (mode === 'edit') {
|
|
|
|
|
|
console.log(fileList);
|
|
|
|
|
|
let oldFiles = fileList.map(item => ({ fileId: item.response?.data?.fileId }))
|
|
|
|
|
|
values.id = record.id
|
|
|
|
|
|
values.attachList = oldFiles;
|
|
|
|
|
|
onEdit(apiurl.fxzb.yaxb.edit,values)
|
|
|
|
|
|
}
|
|
|
|
|
|
if (mode === 'save') {
|
|
|
|
|
|
values.attachList = fileParams
|
|
|
|
|
|
onSave(apiurl.fxzb.yaxb.save,values)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description 删除上传的图片
|
|
|
|
|
|
* @param {string} id 删除的id
|
|
|
|
|
|
*/
|
|
|
|
|
|
const deleteFile = (fileId) => {
|
|
|
|
|
|
let filterFile = fileList.filter(item => item.response?.data?.fileId !== fileId);
|
|
|
|
|
|
setFileList(filterFile)
|
|
|
|
|
|
// if (mode === "edit" && flag) {
|
|
|
|
|
|
// createCrudService(apiurl.fxzb.yaxb.deleteFile + `/${record.id}/${fileId}`).delGet().then(res => {
|
|
|
|
|
|
// setFlag(false)
|
|
|
|
|
|
// if (res.code === 200) {
|
|
|
|
|
|
// message.success("删除附件成功")
|
|
|
|
|
|
// onCrudSuccess()
|
|
|
|
|
|
// }
|
|
|
|
|
|
// })
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description 上传文件之前的回调
|
|
|
|
|
|
* @param {Object} file 文件信息
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
// const handleBeforeUpload = (file) => {
|
|
|
|
|
|
// // 限制上传文件的数量
|
|
|
|
|
|
// const maxFiles = 1;
|
|
|
|
|
|
// if (fileList.length >= maxFiles) {
|
|
|
|
|
|
// message.error(`最多只能上传 ${maxFiles} 个文件`);
|
|
|
|
|
|
// setIsRenderItem(false)
|
|
|
|
|
|
// return false;
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// setIsRenderItem(true)
|
|
|
|
|
|
// }
|
|
|
|
|
|
// return true;
|
|
|
|
|
|
// };
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description 上传图片
|
|
|
|
|
|
* @param {string} file 上传的文件
|
|
|
|
|
|
*/
|
|
|
|
|
|
const fileChange = (info) => {
|
|
|
|
|
|
console.log(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 params = info.fileList.map(file => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
fileId: file.response?.data?.fileId,
|
|
|
|
|
|
tmCreate: file.response?.data?.uploadTime,
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
setFileParams(params)
|
|
|
|
|
|
setFileList(info.fileList)
|
|
|
|
|
|
setFlag(false)
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description 获取查看时文件
|
|
|
|
|
|
* @param {Array} params 文件详细数组
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
const getFileInfo = (params) => {
|
|
|
|
|
|
console.log(params);
|
|
|
|
|
|
let fetchArr = params?.attachList.map(item => {
|
|
|
|
|
|
return createCrudService(apiurl.fxzb.gczx.ytygc.getFile + `/${item.fileId}`)
|
|
|
|
|
|
.delGet()
|
|
|
|
|
|
}
|
|
|
|
|
|
);
|
|
|
|
|
|
Promise.all(fetchArr).then(res => {
|
|
|
|
|
|
let fileArr = res.map(item => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
name: item.data.fileName,
|
|
|
|
|
|
response: {
|
|
|
|
|
|
data: {
|
|
|
|
|
|
filePath: item.data.filePath,
|
|
|
|
|
|
fileId:item.data.fileId
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
setFlag(true)
|
|
|
|
|
|
setFileList(fileArr)
|
|
|
|
|
|
}).catch(err => console.log(err))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description pdf文件预览
|
|
|
|
|
|
* @param {String} params 文件预览url
|
|
|
|
|
|
*/
|
|
|
|
|
|
const viewPdf = (params) => {
|
|
|
|
|
|
setIframeSrc(params)
|
|
|
|
|
|
setPdfViewOPen(true)
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description 文件下载
|
|
|
|
|
|
* @param {String} params 文件fileId
|
|
|
|
|
|
*/
|
|
|
|
|
|
const download = (params) => {
|
|
|
|
|
|
let downloadLink = document.createElement("a");
|
2025-04-10 14:27:15 +08:00
|
|
|
|
downloadLink.href = `${process.env.REACT_APP_API_URL}/gunshiApp/xfflood/bzPredictionScheme/file/download/${params}`;
|
2024-09-20 15:02:50 +08:00
|
|
|
|
downloadLink.download = `${params.fileName}`;
|
|
|
|
|
|
downloadLink.style.display = "none";
|
|
|
|
|
|
// 将链接添加到页面中
|
|
|
|
|
|
document.body.appendChild(downloadLink);
|
|
|
|
|
|
|
|
|
|
|
|
// 模拟点击事件,开始下载
|
|
|
|
|
|
downloadLink.click();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
if (mode === "view" || mode === "edit") {
|
|
|
|
|
|
getFileInfo(record)
|
|
|
|
|
|
}
|
|
|
|
|
|
}, [record,mode])
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
<>
|
|
|
|
|
|
<Form form={form} {...formItemLayout} onFinish={onFinish} initialValues={record}>
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={24}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="方案名称"
|
|
|
|
|
|
name="title"
|
|
|
|
|
|
labelCol={{ span: 3 }}
|
|
|
|
|
|
wrapperCol={{ span: 19 }}
|
|
|
|
|
|
rules={[{ required: true }]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="编制单位"
|
|
|
|
|
|
name="orgName"
|
|
|
|
|
|
labelCol={{ span: 6 }}
|
|
|
|
|
|
wrapperCol={{ span: 14 }}
|
|
|
|
|
|
// rules={[{ required: true }]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="编制日期"
|
|
|
|
|
|
name="tmStart"
|
|
|
|
|
|
labelCol={{ span: 6 }}
|
|
|
|
|
|
wrapperCol={{ span: 14 }}
|
|
|
|
|
|
// rules={[{ required: true }]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<DatePicker
|
|
|
|
|
|
showTime
|
|
|
|
|
|
format="YYYY-MM-DD"
|
|
|
|
|
|
style={{width:'100%'}}
|
|
|
|
|
|
disabled={mode==='view'}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="批复部门"
|
|
|
|
|
|
name="replyOrgName"
|
|
|
|
|
|
labelCol={{ span: 6 }}
|
|
|
|
|
|
wrapperCol={{ span: 14 }}
|
|
|
|
|
|
// rules={[{ required: true }]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="批复日期"
|
|
|
|
|
|
name="tmEnd"
|
|
|
|
|
|
labelCol={{ span: 6 }}
|
|
|
|
|
|
wrapperCol={{ span: 14 }}
|
|
|
|
|
|
// rules={[{ required: true }]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<DatePicker
|
|
|
|
|
|
showTime
|
|
|
|
|
|
format="YYYY-MM-DD"
|
|
|
|
|
|
style={{width:'100%'}}
|
|
|
|
|
|
disabled={mode==='view'}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={24}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label={mode !== "view" ? "附件" : ''}
|
|
|
|
|
|
name="fieldId"
|
|
|
|
|
|
labelCol={{ span: 3 }}
|
|
|
|
|
|
wrapperCol={{ span: 19 }}
|
|
|
|
|
|
>
|
|
|
|
|
|
{mode !== "view" &&
|
|
|
|
|
|
<Dragger
|
|
|
|
|
|
name='file'
|
|
|
|
|
|
// multiple
|
|
|
|
|
|
action="/gunshiApp/xfflood/bzProjectManipulationRecord/file/upload/singleSimple"
|
|
|
|
|
|
onChange={fileChange}
|
|
|
|
|
|
// beforeUpload={handleBeforeUpload}
|
|
|
|
|
|
onDrop={(info) => { console.log(info); }}
|
|
|
|
|
|
fileList={fileList}
|
|
|
|
|
|
disabled={loading}
|
|
|
|
|
|
>
|
|
|
|
|
|
<p className="ant-upload-text">点击或拖拽文件到此区域上传</p>
|
|
|
|
|
|
<p className="ant-upload-hint">
|
|
|
|
|
|
支持扩展名:.rar .zip .doc .docx .pdf .jpg .png .ppt
|
|
|
|
|
|
</p>
|
|
|
|
|
|
</Dragger>
|
|
|
|
|
|
}
|
|
|
|
|
|
<Row gutter={[16]}>
|
|
|
|
|
|
{
|
|
|
|
|
|
loading ? <span>文件正在上传中,请等待</span> :
|
|
|
|
|
|
fileList.length > 0 && fileList.map(file => {
|
|
|
|
|
|
return (
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<div className={mode == "view" ? 'file-item view-file' : '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='' />
|
|
|
|
|
|
}
|
2025-10-30 17:54:31 +08:00
|
|
|
|
<span style={{display: 'inline-block',maxWidth: '180px',overflow: 'hidden',textOverflow: 'ellipsis',whiteSpace: 'nowrap'}}>{file.name}</span>
|
2024-09-20 15:02:50 +08:00
|
|
|
|
</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 onClick={onReset} style={{marginRight:10}}>
|
|
|
|
|
|
重置
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
<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/xfflood/bzPredictionScheme/file/download/${iframeSrc}`)}`}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Modal>
|
|
|
|
|
|
</>
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default ModalForm;
|