| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import { getValueType } from '/@/utils';
- export const VALIDATE_FAILED = Symbol();
- /**
- * 一次性验证主表单和所有的次表单(新版本)
- * @param form 主表单 form 对象
- * @param cases 接收一个数组,每项都是一个JEditableTable实例
- * @returns {Promise<any>}
- */
- export async function validateFormModelAndTables(validate, formData, cases, props, autoJumpTab?) {
- if (!(validate && typeof validate === 'function')) {
- throw `validate 参数需要的是一个方法,而传入的却是${typeof validate}`;
- }
- let dataMap = {};
- let values = await new Promise((resolve, reject) => {
- // 验证主表表单
- validate()
- .then(() => {
- //update-begin---author:wangshuai ---date:20220507 for:[VUEN-912]一对多用户组件(所有风格,单表和树没问题)保存报错------------
- for (let data in formData) {
- //如果该数据是数组
- if (formData[data] instanceof Array) {
- let valueType = getValueType(props, data);
- //如果是字符串类型的需要变成以逗号分割的字符串
- if (valueType === 'string') {
- formData[data] = formData[data].join(',');
- }
- }
- }
- //update-end---author:wangshuai ---date:20220507 for:[VUEN-912]一对多用户组件(所有风格,单表和树没问题)保存报错--------------
- resolve(formData);
- })
- .catch(() => {
- reject({ error: VALIDATE_FAILED });
- });
- });
- Object.assign(dataMap, { formValue: values });
- // 验证所有子表的表单
- let subData = await validateTables(cases, autoJumpTab);
- // 合并最终数据
- dataMap = Object.assign(dataMap, { tablesValue: subData });
- return dataMap;
- }
- /**
- * 验证并获取一个或多个表格的所有值
- * @param cases 接收一个数组,每项都是一个JEditableTable实例
- * @param autoJumpTab 是否自动跳转到报错的tab
- */
- export function validateTables(cases, autoJumpTab = true) {
- if (!(cases instanceof Array)) {
- throw `'validateTables'函数的'cases'参数需要的是一个数组,而传入的却是${typeof cases}`;
- }
- return new Promise((resolve, reject) => {
- let tablesData: any = [];
- let index = 0;
- if (!cases || cases.length === 0) {
- resolve(tablesData);
- }
- (function next() {
- let vm = cases[index];
- vm.value.validateTable().then((errMap) => {
- // 校验通过
- if (!errMap) {
- tablesData[index] = { tableData: vm.value.getTableData() };
- // 判断校验是否全部完成,完成返回成功,否则继续进行下一步校验
- if (++index === cases.length) {
- resolve(tablesData);
- } else next();
- } else {
- // 尝试获取tabKey,如果在ATab组件内即可获取
- let paneKey;
- let tabPane = getVmParentByName(vm.value, 'ATabPane');
- if (tabPane) {
- paneKey = tabPane.$.vnode.key;
- // 自动跳转到该表格
- if (autoJumpTab) {
- let tabs = getVmParentByName(tabPane, 'Tabs');
- tabs && tabs.setActiveKey && tabs.setActiveKey(paneKey);
- }
- }
- // 出现未验证通过的表单,不再进行下一步校验,直接返回失败
- reject({ error: VALIDATE_FAILED, index, paneKey, errMap });
- }
- });
- })();
- });
- }
- export function getVmParentByName(vm, name) {
- let parent = vm.$parent;
- if (parent && parent.$options) {
- if (parent.$options.name === name) {
- return parent;
- } else {
- let res = getVmParentByName(parent, name);
- if (res) {
- return res;
- }
- }
- }
- return null;
- }
|