import { EmopFormDataType } from "./EmopFormDataType"; export class EmopFormData { public value: EmopFormDataType[] = []; constructor( readonly tempData: EmopFormDataType[], ) { if (!tempData || !(tempData instanceof Array)) console.error('传入的formData类型错误:', tempData); this.value = JSON.parse(JSON.stringify(this.tempData)); } /** * 导出数据 * @return 返回标准数据 */ getData() { let resultData = {}; this.value.forEach(item => { if (item.enable || item.enable === undefined) resultData[item.key] = item.value; }); return resultData; } /** * 表单验证单个控件 * 不会对visible为false的数据进行检查 * @param options * @return boolean */ validateItem(item: EmopFormDataType) { let result = true; item.errorTips = null; if (item.validateFn?.length) { try { this.tempData.find(t => t.key === item.key).validateFn.forEach(p => { if (!p.fn(item, this.tempData)) { result = false; item.errorTips = p.tips; throw new Error(""); } }); } catch (error) { } } // 必填但无值 if (item.required && !item.value && item.value !== 0 && item.type !== 'bool') { result = false; } // 下拉框必填但无值 if (item.type === 'lov') { if (item.required && (item.multiple || item.tags) && !item.value?.length) { result = false; } } item.validateStatus = result ? 'success' : 'error'; return result; } /** * 表单验证 * @returns [boolean] */ validate() { this.value.forEach(item => { this.validateItem(item); }); return this.value.every(item => item.validateStatus === 'success'); } /** * 表单清空 */ clear() { this.value.forEach(item => { item.value = null; }); } /** * 表单重置 */ reset() { this.value = JSON.parse(JSON.stringify(this.tempData)); } }