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 (
<>
基本信息
{/* */}
队伍明细:(共计{details?.length}人)
{mode != "view" ?
{/* */}
:null}
{
setPdfViewOPen(false)
}}
>
>
);
}
export default ModalForm;