tsg-web/src/views/sz/szzf/form/index.js

319 lines
14 KiB
JavaScript
Raw Normal View History

2024-09-23 18:03:30 +08:00
import React, { useEffect, useState, useRef } from 'react';
2024-09-26 17:59:26 +08:00
import { TreeSelect, Table, Tag, DatePicker, Form, Select, Button, message, Upload, Input, Row, Col, Switch, Image,Radio } from 'antd';
2024-09-23 18:03:30 +08:00
import './ddForm.less'
import dayjs from 'dayjs'
2024-09-26 17:59:26 +08:00
import { InboxOutlined, LinkOutlined, DeleteOutlined, LoadingOutlined, VerticalAlignBottomOutlined } from '@ant-design/icons'
import apiurl from '../../../../service/apiurl';
import { httpgetExport, httppostAddfile } from '../../../../utils/request';
import { exportFile } from '../../../../utils/tools';
// import apiUrl from '../../service/apiurl'
2024-09-23 18:03:30 +08:00
import PdfView from './pdfView'
const { RangePicker } = DatePicker;
const { TextArea } = Input;
2024-09-26 17:59:26 +08:00
const baseUrl = "http://223.75.53.141:9102/test.by-lyf.tmp"
const FormZdy = ({ fileKey,typeName = "ddForm", formJson, getFormInfo, type, formJsonData, typeUpload = 'dispatch', isModalOpen, fileType, footer = true, uploadUrl,TableZdyProps,downloadUrl,
onSave }) => {
2024-09-23 18:03:30 +08:00
const [fileList, setFileList] = useState([])
const [fileListUp, setFileLisUp] = useState([])
const [url, setUrl] = useState('')
const [isModal, setIsModal] = useState(false)
2024-09-26 17:59:26 +08:00
//
2024-09-23 18:03:30 +08:00
const [form] = Form.useForm();
2024-09-26 17:59:26 +08:00
// function onDocumentLoadSuccess({ numPages }) {
// setRenderNumPages(numPages);
// }
2024-09-23 18:03:30 +08:00
const onFinish = (e) => {
}
const getInfo = () => {
form.validateFields().then((values) => {
2024-09-27 14:50:26 +08:00
// debugger;
2024-09-26 17:59:26 +08:00
getFormInfo({ ...values, [fileKey]: fileList, fileIds: fileList.map(item => item.fileId) })
2024-09-27 14:50:26 +08:00
2024-09-23 18:03:30 +08:00
setFileList([])
}).catch((errorInfo) => {
console.log(errorInfo, 'error');
})
//
}
const cancel = () => {
getFormInfo(false)
form.resetFields()
setFileList([])
}
const { Dragger } = Upload;
// const preView = (e) => {
// window.open('http://local.gunshiiot.com:18083/xintankou/api/file/preview/104')
// }
const deleteFile = (e) => {
2024-09-27 10:17:59 +08:00
// debugger;
2024-09-26 17:59:26 +08:00
let arr = fileList.filter(item => item.fileId !== e)
2024-09-23 18:03:30 +08:00
setFileList(arr)
}
const props = {
name: 'file',
multiple: true,
fileList: fileList,
showUploadList: false,
2024-09-26 17:59:26 +08:00
beforeUpload: (file, fileList) => {
2024-09-23 18:03:30 +08:00
if (fileType == "pic" &&
(file.type != "image/jpeg" || file.type != "image/png" || file.type != "image/jpg")) {
message.error('仅支持上传jpg/png/jpeg格式的图片');
return false;
} else {
return true;
}
},
2024-09-26 17:59:26 +08:00
customRequest(e) {
2024-09-23 18:03:30 +08:00
setFileLisUp([...fileListUp, e.file])
2024-09-26 17:59:26 +08:00
httppostAddfile(uploadUrl, e).then(res => {
2024-09-23 18:03:30 +08:00
setFileList([...fileList, res.data])
})
}
};
const onChange = () => { }
function checkMediaType(url) {
// 创建URL对象
var link = url;
// 获取路径的最后一个点之后的内容作为文件扩展名
2024-09-26 17:59:26 +08:00
var extension = link?.split('.').pop().toLowerCase();
2024-09-23 18:03:30 +08:00
// 声明支持的图片和视频文件扩展名
var imageExtensions = ['jpg', 'jpeg', 'gif', 'png'];
2024-09-26 17:59:26 +08:00
var file = ['pdf', 'word', 'xslx', 'xsl', 'txt', "pptx"];
//
2024-09-23 18:03:30 +08:00
// 判断文件扩展名是否在图片扩展名数组中
if (imageExtensions.includes(extension)) {
return 'image';
}
// 判断文件扩展名是否在视频扩展名数组中
if (file.includes(extension)) {
return extension;
}
// 扩展名不在图片或视频数组中返回null表示无法确定媒体类型
return null;
}
const preView = (item) => {
if (checkMediaType(item.name) == 'pdf') {
// window.open(baseUrl + item.previewUrl)
2024-09-26 17:59:26 +08:00
setUrl(item.previewUrl)
2024-09-23 18:03:30 +08:00
setIsModal(true)
}
}
2024-09-26 17:59:26 +08:00
/**
* @description 文件下载
* @param {String} params 文件fileId
*/
const download = async(id, name) => {
var extension = name?.split('.').pop().toLowerCase();
httpgetExport(downloadUrl+id).then(res => {
exportFile(name,res.data)
})
}
2024-09-27 14:50:26 +08:00
useEffect(()=>{
form.resetFields()
},[])
2024-09-23 18:03:30 +08:00
useEffect(() => {
2024-09-27 14:50:26 +08:00
2024-09-23 18:03:30 +08:00
let formType = type
2024-09-26 17:59:26 +08:00
if (type = 'edit') {
formType = 2
2024-09-23 18:03:30 +08:00
}
2024-09-26 17:59:26 +08:00
if (type == 'view') {
formType = 1
2024-09-23 18:03:30 +08:00
}
2024-09-26 17:59:26 +08:00
if (type == 'save') {
2024-09-27 14:38:23 +08:00
form.setFieldsValue(formJsonData)
2024-09-26 17:59:26 +08:00
formType = 0
2024-09-23 18:03:30 +08:00
}
if (formType == 1 || formType == 2 || formType == 3) {
form.setFieldsValue(formJsonData)
2024-09-26 17:59:26 +08:00
if (formJsonData?.[fileKey]) {
setFileList(formJsonData[fileKey])
2024-09-23 18:03:30 +08:00
}
2024-09-26 17:59:26 +08:00
console.log(formJsonData, formJson);
//
2024-09-23 18:03:30 +08:00
}
2024-09-26 17:59:26 +08:00
2024-09-23 18:03:30 +08:00
return () => {
setFileList([])
}
}, [type, formJsonData, isModalOpen])
2024-09-26 17:59:26 +08:00
2024-09-23 18:03:30 +08:00
return (
2024-09-26 17:59:26 +08:00
<div style={{ backgroundColor: '#fff', marginTop: 10 }}>
2024-09-23 18:03:30 +08:00
<Form form={form} name="searchTabel" onFinish={onFinish} className={typeName}>
<Row>
2024-09-26 17:59:26 +08:00
{formJson?.map(item => {
2024-09-23 18:03:30 +08:00
return (
<Col span={item.span} >
2024-09-26 17:59:26 +08:00
{item.type == "input" &&
<Form.Item
label={item.label}
name={item.key}
2024-09-29 17:19:27 +08:00
labelCol={item.labelCol}
2024-09-26 17:59:26 +08:00
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
2024-09-27 15:06:28 +08:00
<Input disabled={type == 'view' || item.disabled} placeholder={item.placeholder} addonAfter={item.addonAfter}/>
2024-09-26 17:59:26 +08:00
</Form.Item>}
{item.type == "title" &&
<Form.Item
label={item.label}
name={item.key}
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
<div className='title'>
<div className='titleRight'></div>
{item.content}
</div>
</Form.Item>}
{item.type == "Select" && <Form.Item
label={item.label}
name={item.key}
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
<Select disabled={type == 'view'} options={item.options} fieldNames={item.fieldNames} />
</Form.Item>}
{item.type == "Radio" && <Form.Item
label={item.label}
name={item.key}
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
<Radio.Group disabled={type == 'view'} options={item.options}/>
</Form.Item>}
{/* {item.type == "Select" && <Select disabled={type == 1} options={item.options} />} */}
{item.type == "Switch" && <Form.Item
label={item.label}
name={item.key}
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
<Switch defaultChecked onChange={onChange} disabled={type == 'view'} />
</Form.Item>}
{/* {item.type == "Switch" && <Switch defaultChecked onChange={onChange} disabled={type == 1} />} */}
{item.type == "DatePicker" && <Form.Item
label={item.label}
name={item.key}
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
{/* {formJsonData[item.key]} */}
<DatePicker disabled={type == 'view'} style={{ width: "100%" }} picker={item.picker}/>
</Form.Item>}
{/* {item.type == "DatePicker" && <DatePicker disabled={type == 1} style={{ width: "100%" }} />} */}
{item.type == "TextArea" && <Form.Item
2024-09-23 18:03:30 +08:00
label={item.label}
name={item.key}
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
2024-09-26 17:59:26 +08:00
<TextArea rows={4} disabled={type == 'view'} />
</Form.Item>}
{/* {item.type == "TextArea" && <TextArea rows={4} disabled={type == 1} />} */}
{item.type == "RangePicker" && <Form.Item
label={item.label}
name={item.key}
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
<RangePicker disabled={type == 'view'} />
</Form.Item>}
{item.type == "TreeSelect" && <Form.Item
label={item.label}
name={item.key}
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
<TreeSelect
showSearch
style={{ width: '100%' }}
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
placeholder="Please select"
allowClear
fieldNames={item.fieldNames}
treeData={item.treeData}
treeCheckable={item.multiple}
/>
</Form.Item>}
{/* {item.type == "RangePicker" &&
<RangePicker disabled={type == 'view'} />} */}
{item.type == "upload" && <Form.Item
label={item.label}
name={item.key}
rules={[{ required: item.required, message: '请输入' + item.label }]}
>
<>
{type !== 'view' && <Dragger {...props}>
<p className="ant-upload-drag-icon">
<InboxOutlined />
</p>
{fileType == "pic" ? <p className="ant-upload-text">点击或将文件拖拽到这里上传 支持扩展名jpegpng</p> : <p className="ant-upload-text"></p>}
</Dragger>}
<div className='flex' >
{fileList?.map((item) => {
2024-09-27 10:15:58 +08:00
return <div className='flex align-center file-item' style={{marginTop:5, marginRight:'3%',width:'30%',minHeight: "50px", fontSize: 14, columnGap: 10, cursor: checkMediaType(item.fileName) == 'image' || checkMediaType(item.fileName) == 'pdf' ? 'pointer' : "not-allowed" }}>
2024-09-26 17:59:26 +08:00
<div style={{ width: 40, height: 40, display: "flex", alignItems: 'center' }}>
{checkMediaType(item.fileName) == 'image' && <Image
2024-09-23 18:03:30 +08:00
height={40}
2024-09-26 17:59:26 +08:00
src={baseUrl + item.filePath}
2024-09-23 18:03:30 +08:00
/>}
{
2024-09-26 17:59:26 +08:00
checkMediaType(item.fileName) !== 'image' &&
<span >{checkMediaType(item.fileName)?.toUpperCase()}</span>
2024-09-23 18:03:30 +08:00
}
</div>
2024-09-26 17:59:26 +08:00
<span onClick={() => preView(item)}>{item.fileName}</span>
{type !== 'view' && <DeleteOutlined onClick={() => deleteFile(item.fileId)} />}
<VerticalAlignBottomOutlined onClick={() => download(item.fileId, item.fileName)} />
</div>
})}
</div>
</>
</Form.Item>}
2024-09-23 18:03:30 +08:00
</Col>
)
})}
</Row>
</Form >
2024-09-26 17:59:26 +08:00
{TableZdyProps}
{
type !== 'view' && <div className="flex flex-end" style={{ marginTop: 10, justifyContent: "flex-end" }}>
<Button type="" style={{ marginRight: 10 }} onClick={cancel}>取消</Button>
<Button type="primary" onClick={getInfo}>确定</Button>
</div>
}
<PdfView url={`${process.env.PUBLIC_URL}/static/pdf/web/viewer.html?file=${encodeURIComponent(`/gunshiApp/xyt/rescue/goods/file/download/${url}`)}`} isModal={isModal} setModalN={(e)=>setIsModal(e)}/>
</div >
2024-09-23 18:03:30 +08:00
);
}
export default FormZdy;