import React, { useEffect, useState } from 'react';
import { Modal, Input, Form, Select, InputNumber, Tooltip, Tag, message } from 'antd';
import { UploadLocal } from '$components';
const { TextArea } = Input;
const MetadataFileModal = (props) => {
const { onConfirm, onCancel, editData, metadataModels } = props;
const [form] = Form.useForm();
const [editUrl, setEditUrl] = useState([]);
useEffect(() => {
}, []);
const handleOk = () => {
form.validateFields().then(values => {
if (onConfirm) {
let dataSave = JSON.parse(JSON.stringify(values));
dataSave.attributesParam = {};
metadataModels.map(m => {
dataSave.attributesParam[m.attributeCode] = values[m.attributeCode];
delete dataSave[m.attributeCode];
})
onConfirm(dataSave);
}
})
}
const validatorNull = (rule, value, getFieldValue, validateFields, label) => {
if (!value || !value.trim().length) {
return Promise.reject(new Error(`${label}不可空字符串`));
}
return Promise.resolve();
}
const renderModelItems = () => {
const items = metadataModels.filter(mm => mm.modelType === '文件').map(m => {
if (m.control === '文本框') {
const rules = [{ required: !m.nullable, message: '' }]
if (!m.nullable) {
rules.push(({ getFieldValue, validateFields }) => ({
validator(_, value) { return validatorNull(_, value, getFieldValue, validateFields, m.attributeName) }
}))
rules.push({ max: m.length, message: `${m.attributeName}不超过${m.length}个字符` })
}
return
10 ?
{m.attributeName.substring(0, 10) + '...'}
: m.attributeName}
name={m.attributeCode}
rules={rules}>
} else if (m.control === '数字输入框') {
const rules = [{ required: !m.nullable, message: `${m.attributeName}不可空` }]
let maxValue = '';
let length = m.length;
if (length) {
while (length > 0) {
maxValue += '9'
length--;
}
}
return 10 ?
{m.attributeName.substring(0, 10) + '...'}
: m.attributeName}
name={m.attributeCode}
rules={rules}>
} else {
return 10 ?
{m.attributeName.substring(0, 10) + '...'}
: m.attributeName}
name={m.attributeCode}
rules={[{ required: !m.nullable, message: `${m.attributeName}不可空` }]}>
}
})
return items;
}
const vsjunct = (params) => {
if (params.length) {
let appendix = []
for (let p of params) {
appendix.push({
fName: p.name,
size: p.size,
fileSize: p.size,
storageUrl: p.storageUrl,//必须有storageUrl
})
}
setEditUrl(appendix)
} else {
setEditUrl([])
}
}
const handleCancel = () => {
if (editData.add) {
if (form.getFieldValue('files') && form.getFieldValue('files').length) {
onCancel(form.getFieldValue('files')[0]);
} else {
onCancel(null);
}
} else {
if (!(form.getFieldValue('files') && form.getFieldValue('files').length)) {
message.warning('文件已被删除,可重新编辑上传');
onCancel(null, editData.record.id);
} else {
if (!editData.record.files.length) {
message.warning('文件需确定提交,才进行入库存储');
onCancel(form.getFieldValue('files')[0]);
} else {
onCancel(null);
}
}
}
}
return (
handleOk(null)}
onCancel={() => handleCancel()}>
({
validator(_, value) { return validatorNull(_, value, getFieldValue, validateFields, '文件名称') }
})]}>
文件大小不超过40MB,开放资源包含多个文件,建议将文件进行压缩,形成压缩包再上传
支持的文件格式:jpg,png,gif,txt,doc,docx,pdf,xsl,xlsx,zip,rar
{renderModelItems()}
)
}
export default MetadataFileModal;