2024-09-20 15:02:50 +08:00
|
|
|
|
import React,{useEffect,useState,useMemo} from 'react';
|
|
|
|
|
|
import { Form, Button, Input, Row, Col, Table, DatePicker, Upload,message,Image,Modal } from 'antd';
|
|
|
|
|
|
import { DeleteOutlined,FileWordOutlined,FilePdfOutlined,FileZipOutlined,FileExcelOutlined } from '@ant-design/icons';
|
|
|
|
|
|
import { formItemLayout, btnItemLayout } from '../../../../components/crud/FormLayoutProps';
|
|
|
|
|
|
import { getDictService } from '../../../../service/SelectValue'
|
|
|
|
|
|
import { validlgtd , validlttd } from '../../../../utils/validators';
|
|
|
|
|
|
import apiurl from '../../../../service/apiurl';
|
|
|
|
|
|
import {mobile} from '../../../../utils/validators'
|
|
|
|
|
|
import AdcdTreeSelect from '../../../../components/Form/AdcdTreeSelect'
|
|
|
|
|
|
import NormalSelect from '../../../../components/Form/NormalSelect';
|
|
|
|
|
|
import { config } from '../../../../config';
|
|
|
|
|
|
import "./index.less"
|
|
|
|
|
|
import moment from 'moment';
|
|
|
|
|
|
import { createCrudService } from '../../../../components/crud/_';
|
|
|
|
|
|
const {RangePicker} = DatePicker
|
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,onSimilarSave }) => {
|
|
|
|
|
|
|
|
|
|
|
|
console.log("record", record);
|
|
|
|
|
|
|
|
|
|
|
|
const columns = [
|
|
|
|
|
|
{
|
|
|
|
|
|
title: "序号",
|
|
|
|
|
|
dataIndex: "index",
|
|
|
|
|
|
width: 60,
|
|
|
|
|
|
render: (text, record, index) => <span>{ index + 1}</span>
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '姓名',
|
|
|
|
|
|
key: 'name',
|
|
|
|
|
|
dataIndex: 'name',
|
|
|
|
|
|
width: 200
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '性别',
|
|
|
|
|
|
key: 'sex',
|
|
|
|
|
|
dataIndex: 'sex',
|
|
|
|
|
|
width: 60,
|
|
|
|
|
|
render: (text, record) => <span>{ record.sex === "M" ? "男" : "女"}</span>
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '年龄',
|
|
|
|
|
|
key: 'age',
|
|
|
|
|
|
dataIndex: 'age',
|
|
|
|
|
|
width: 60,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '工作单位',
|
|
|
|
|
|
key: 'workUnit',
|
|
|
|
|
|
dataIndex: 'workUnit',
|
|
|
|
|
|
width: 150
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '职务',
|
|
|
|
|
|
key: 'duty',
|
|
|
|
|
|
dataIndex: 'duty',
|
|
|
|
|
|
width: 150
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '联系方式',
|
|
|
|
|
|
key: 'phone',
|
|
|
|
|
|
dataIndex: 'phone',
|
|
|
|
|
|
width: 150
|
|
|
|
|
|
},
|
|
|
|
|
|
]
|
|
|
|
|
|
const [form] = Form.useForm();
|
|
|
|
|
|
const [fileList, setFileList] = useState([]) //上传文件列表
|
|
|
|
|
|
const [iframeSrc, setIframeSrc] = useState('')
|
|
|
|
|
|
const [pdfViewOPen, setPdfViewOPen] = useState(false)
|
|
|
|
|
|
const [details, setDetails] = useState([])
|
|
|
|
|
|
const [serviceObjs, setServiceObjs] = useState([])
|
|
|
|
|
|
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description 获取查看时文件
|
|
|
|
|
|
* @param {*} type
|
|
|
|
|
|
* @returns
|
|
|
|
|
|
*/
|
|
|
|
|
|
const getFileInfo = (params) => {
|
|
|
|
|
|
createCrudService(apiurl.fxzb.qsdw.zq.getFile).delGet({ teamId: params.teamId }).then(res => {
|
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
|
let fileArr = res.data?.files.map(item => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
name: item.fileName,
|
|
|
|
|
|
response: {
|
|
|
|
|
|
data: {
|
|
|
|
|
|
filePath: item.filePath,
|
|
|
|
|
|
fileId:item.fileId
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
setFileList(fileArr)
|
|
|
|
|
|
setDetails(res.data?.details)
|
|
|
|
|
|
setServiceObjs(res.data?.serviceObjs)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description 文件下载
|
|
|
|
|
|
* @param {String} params 文件fileId
|
|
|
|
|
|
*/
|
|
|
|
|
|
const download = (params) => {
|
|
|
|
|
|
let downloadLink = document.createElement("a");
|
2025-04-08 15:39:22 +08:00
|
|
|
|
downloadLink.href = `http://223.75.53.141:83/gunshiApp/xfflood/rescue/team/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();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @description pdf文件预览
|
|
|
|
|
|
* @param {String} params 文件预览url
|
|
|
|
|
|
*/
|
|
|
|
|
|
const viewPdf = (params) => {
|
|
|
|
|
|
setIframeSrc(params)
|
|
|
|
|
|
setPdfViewOPen(true)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(()=>{
|
|
|
|
|
|
if ((mode === "view") && record.teamId ) {
|
|
|
|
|
|
getFileInfo(record)
|
|
|
|
|
|
}
|
|
|
|
|
|
}, [record, mode])
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
let serviceObj
|
2024-09-27 17:49:18 +08:00
|
|
|
|
let dateSo = [
|
2024-09-20 15:02:50 +08:00
|
|
|
|
moment(record.validStartDate),
|
|
|
|
|
|
moment(record.validEndDate)
|
|
|
|
|
|
]
|
|
|
|
|
|
if (serviceObjs?.length > 0) {
|
|
|
|
|
|
serviceObj = serviceObjs.map(item => item.name).join()
|
|
|
|
|
|
}
|
2024-09-27 17:49:18 +08:00
|
|
|
|
form.setFieldsValue({...record,dateSo,serviceObjs:serviceObj})
|
2024-09-20 15:02:50 +08:00
|
|
|
|
}, [record,serviceObjs])
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
<>
|
|
|
|
|
|
<div className='basic-info'>基本信息</div>
|
|
|
|
|
|
{/* <Divider /> */}
|
|
|
|
|
|
<Form
|
|
|
|
|
|
form={form}
|
|
|
|
|
|
{...formItemLayout}
|
|
|
|
|
|
// initialValues={record}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="队伍名称"
|
|
|
|
|
|
name="teamName"
|
|
|
|
|
|
rules={[{ required: true }]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="登记日期"
|
|
|
|
|
|
name="registerDate"
|
|
|
|
|
|
rules={[{ required: true }]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="有效期限"
|
2024-09-27 17:49:18 +08:00
|
|
|
|
name="dateSo"
|
2024-09-20 15:02:50 +08:00
|
|
|
|
>
|
|
|
|
|
|
<RangePicker
|
|
|
|
|
|
allowClear
|
|
|
|
|
|
showTime
|
|
|
|
|
|
disabled={mode==='view'}
|
|
|
|
|
|
// style={{ width: "300px" }}
|
|
|
|
|
|
format="YYYY-MM-DD HH:mm:ss"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="管理单位"
|
|
|
|
|
|
name="managementUnit"
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="地址"
|
|
|
|
|
|
name="address"
|
|
|
|
|
|
rules={[{ required: true }]}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input type='text' disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={6}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="经度"
|
|
|
|
|
|
name="lgtd"
|
|
|
|
|
|
labelCol={{ span: 12 }}
|
|
|
|
|
|
wrapperCol={{ span: 10 }}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input type='text' disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={6}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="纬度"
|
|
|
|
|
|
name="lttd"
|
|
|
|
|
|
labelCol={{ span: 6 }}
|
|
|
|
|
|
wrapperCol={{ span: 10 }}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input type='text' disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="队伍负责人"
|
|
|
|
|
|
name="teamLeader"
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input type='num' disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="联系电话"
|
|
|
|
|
|
name="phone"
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input type='num' disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="服务对象"
|
|
|
|
|
|
name="serviceObjs"
|
|
|
|
|
|
>
|
|
|
|
|
|
<Input type='num' disabled={mode==='view'} style={{width:'100%'}} allowClear />
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
<Row>
|
|
|
|
|
|
<Col span={24}>
|
|
|
|
|
|
<Form.Item
|
|
|
|
|
|
label="附件"
|
|
|
|
|
|
name="fieldId"
|
|
|
|
|
|
labelCol={{ span: 3 }}
|
|
|
|
|
|
wrapperCol={{ span: 19 }}
|
|
|
|
|
|
>
|
|
|
|
|
|
<Row gutter={[16]}>
|
|
|
|
|
|
{
|
|
|
|
|
|
fileList.length > 0 && fileList.map(file => {
|
|
|
|
|
|
return (
|
|
|
|
|
|
<Col span={12}>
|
|
|
|
|
|
<div className="file-item" style={{width:"75%"}}>
|
|
|
|
|
|
<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('.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>
|
|
|
|
|
|
<div className={mode == "view" ? 'delete-icon disable-icon' : 'delete-icon'} >
|
|
|
|
|
|
<DeleteOutlined />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
)
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
</Form.Item>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
<div className='basic-info'>队伍明细:(共计{details?.length }人)</div>
|
|
|
|
|
|
<Table
|
|
|
|
|
|
rowKey="index"
|
|
|
|
|
|
columns={columns}
|
|
|
|
|
|
dataSource={details}
|
|
|
|
|
|
scroll={{ x: width, y: "calc( 100vh - 400px )" }}
|
|
|
|
|
|
pagination={false}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</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/rescue/goods/file/download/${iframeSrc}`)}`}
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Modal>
|
|
|
|
|
|
</>
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default ModalForm;
|