import React,{useEffect,useState,useMemo,useRef} from 'react'; import { Form, Button, Input, Row,Upload, Col, Table, DatePicker, InputNumber,message,Image,Modal,Typography ,Popconfirm } 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 const { Dragger } = Upload; const url = "http://223.75.53.141:9100/gs-tsg" const EditableCell = ({ editing, dataIndex, title, inputType, record, index, children, ...restProps }) => { const inputNode = inputType === 'number' ? : inputType === 'select' ? : ; return ( {editing ? ( {inputNode} ) : ( children )} ); }; const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { const [editingKey, setEditingKey] = useState(''); const [disabled, setDisabled] = useState(false) const [details, setDetails] = useState([]) const detailsRef = useRef(null) detailsRef.current = details const isEditing = (record) => { return record.key === editingKey; } const columns = [ { title: "序号", dataIndex: "index", width: 60, render: (text, record, index) => { index + 1}, align: "center" }, { title: '姓名', key: 'name', dataIndex: 'name', width: 150 , align: "center", editable: true, }, { title: '性别', key: 'sex', dataIndex: 'sex', width: 100, align: "center", render: (rec, record) => {rec == "F" ? "女" : rec == "M" ? "男" : ''}, editable: true, }, { title: '年龄', key: 'age', dataIndex: 'age', width: 100, align: "center", editable: true, }, { title: '工作单位', key: 'workUnit', dataIndex: 'workUnit', width: 150, align: "center", editable: true, }, { title: '职务', key: 'duty', dataIndex: 'duty', width: 150, align: "center", editable: true, }, { title: '联系方式', key: 'phone', dataIndex: 'phone', width: 150, align: "center", editable: true, }, { title: '操作', key: 'operation', width: 240, fixed: 'right',align: 'center', render: (_, record) => { const editable = isEditing(record); return editable ? ( save(record.key)} style={{ marginRight: 8, }} > 完成 ) : (
edit1(record)}> 编辑 handleDelete(record.key)}> 删除
); }, }, ] const newColumns = useMemo(() => { let data = columns; if (mode == "view") { data.pop(); return data } else { return data; } }, [mode,editingKey]) const [form1] = Form.useForm() const edit1 = (record) => { setDisabled(true) form1.setFieldsValue({ name: '', sex:"", age: '', workUnit:'', duty: '', phone:'', ...record, sex:record.sex == "F" ? "女" : record.sex == "M" ? "男" : '' }); setEditingKey(record.key); }; const save = async (key) => { setDisabled(false) try { const row = await form1.validateFields(); if (row.sex) { row.sex = row.sex == "男" ? "M" : row.sex == "女" ? "F" :'' } const newData = [...details]; const index = newData.findIndex((item) => key === item.key); if (index > -1) { const item = newData[index]; newData.splice(index, 1, { ...item, ...row, }); setDetails(newData); setEditingKey(''); } else { newData.push(row); setDetails(newData); setEditingKey(''); } } catch (errInfo) { console.log('Validate Failed:', errInfo); } }; const mergedColumns = newColumns.map((col) => { if (!col.editable) { return col; } return { ...col, onCell: (record) => ({ record, inputType: col.dataIndex === 'age' ? 'number' : col.dataIndex === 'sex' ? 'select' : "text", dataIndex: col.dataIndex, title: col.title, editing: isEditing(record), }), }; }); const handleAddRow = () => { setDisabled(true) const newData = { key: (details.length + 1).toString(), name: '', sex: '', age: '', workUnit: '', duty: '', phone:"" }; form1.setFieldsValue(newData) setDetails([...details, newData]); setEditingKey(newData.key); }; const [form] = Form.useForm(); const [fileList, setFileList] = useState([]) //上传文件列表 const [fileIds, setFileIds] = useState([]) const [iframeSrc, setIframeSrc] = useState('') const [pdfViewOPen, setPdfViewOPen] = useState(false) const [loading, setLoading] = useState(false) 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) const result = res.data?.details.map(item => ({ ...item, key: item.detailId })) console.log("resss",result); setDetails(result) } }) } /** * @description 文件下载 * @param {String} params 文件fileId */ const download = (params) => { let downloadLink = document.createElement("a"); downloadLink.href = `${process.env.REACT_APP_API_URL}/gunshiApp/tsg/rescue/team/file/download/${params}`; downloadLink.download = `${params.fileName}`; downloadLink.style.display = "none"; // 将链接添加到页面中 document.body.appendChild(downloadLink); // 模拟点击事件,开始下载 downloadLink.click(); } /** * @description 上传图片 * @param {string} file 上传的文件 */ const fileChange = (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 fileIds = info.fileList.map(file => { return file.response?.data?.fileId }) setFileIds(fileIds) setFileList(info.fileList) } /** * @description pdf文件预览 * @param {String} params 文件预览url */ const viewPdf = (params) => { setIframeSrc(params) setPdfViewOPen(true) } const handleDelete = (key) => { const newData = detailsRef.current.filter((item) => item.key !== key); setDetails(newData); }; const onfinish = () => { let values = form.getFieldsValue(); values.details = details; values.validStartDate = values.dateRangeSo&&moment(values.dateRangeSo[0]).format("YYYY-MM-DD") values.validEndDate = values.dateRangeSo&&moment(values.dateRangeSo[1]).format("YYYY-MM-DD") if (mode === 'edit') { let oldFiles = fileList.map(item => item.response?.data?.fileId ) values.fileIds = oldFiles; values.teamId = record.teamId; onEdit(apiurl.fxzb.qsdw.zq.edit,values) } if (mode === 'save') { values.fileIds = fileIds onSave(apiurl.fxzb.qsdw.zq.save,values) } } /** * @description 删除上传的图片 * @param {string} id 删除的id */ const deleteFile = (fileId) => { console.log(fileId); let filterFile = fileList.filter(item => item.response?.data?.fileId !== fileId); setFileList(filterFile) } useEffect(()=>{ if (record.teamId ) { getFileInfo(record) } }, [record]) useEffect(() => { if (mode !== "save") { let dateSo = [ record.validStartDate? moment(record.validStartDate):'', record.validEndDate? moment(record.validEndDate): '' ] form.setFieldsValue({...record,dateRangeSo:dateSo}) } }, [record,mode]) return ( <>
基本信息
{/* */}
dateString} getValueProps={(value) => ({ value: value ? moment(value) : undefined })} rules={[ { required: true, message: `登记日期不能为空`, }, ]} > dateString} getValueProps={(value) => { return { value: value ? [value[0]&&moment(value[0]),value[1]&&moment(value[1])] : undefined }; }} > {mode !== "view" && { console.log(info.dataTransfer.files); }} fileList={fileList} disabled={loading} // onSuccess={handleSuccess} >

点击或拖拽文件到此区域上传

支持扩展名:.rar .zip .doc .docx .pdf .jpg .png .ppt

} { fileList.length > 0 && fileList.map(file => { return (
{file.name.indexOf('.docx') > -1 ?
{ download(file.response?.data?.fileId) }} style={{ cursor: 'pointer' }} >
: file.name.indexOf('.pdf') > -1 ?
{ viewPdf(file.response?.data?.fileId) }} style={{ cursor: 'pointer' }} >
: file.name.indexOf('.zip') > -1 ?
{ download(file.response?.data?.fileId) }} style={{ cursor: 'pointer' }} >
: file.name.indexOf('.xlsx') > -1 ?
{ download(file.response?.data?.fileId) }} style={{ cursor: 'pointer' }} >
: } {file.name}
deleteFile(file.response?.data?.fileId)}>
) }) }
队伍明细:(共计{details?.length}人) {mode != "view" ?
{/* */}
:null}
{ mode==='view'?null:(
) } { setPdfViewOPen(false) }} >