various-ui
Version:
This is a test version of the Vue 3 component library
71 lines (68 loc) • 2 kB
JavaScript
import mitt from 'mitt';
import { ref } from 'vue';
import '../../../../utils/index.mjs';
import { cloneDeep, isArray, isObject } from 'lodash-es';
const useComposable = (define) => {
const variable = {
data: cloneDeep(define.data)
};
const emitter = mitt();
const refs = {
form: ref()
};
const methods = {
//* 表单重置函数
reset: () => {
for (const index in define.rules) {
emitter.emit(`reset:${index}`);
}
for (const index$1 in variable.data) {
if (isArray(define.data[index$1]) || isObject(define.data[index$1])) {
define.data[index$1] = cloneDeep(variable.data[index$1]);
} else {
define.data[index$1] = variable.data[index$1];
}
}
},
//* 表单校验清理函数
clear: (keys) => {
for (const index in define.rules) {
if (!keys || keys.includes(index)) {
emitter.emit(`reset:${index}`);
}
}
},
//* 表单校验函数
validator: async (callBack, list) => {
if (!define.rules) return;
const errors = [];
for (const i in define.rules) {
if (list && !list.includes(i)) continue;
else {
const alignment = [];
define.rules[i].forEach((value) => alignment.push(value.verify(define.data)));
const result = await Promise.all(alignment);
const error = result.filter((value) => (!value.type || value.type == "error") && !value.verify);
if (error && error.length) {
errors.push({ name: i, result: error[0] });
} else {
emitter.emit(`reset:${i}`);
}
}
}
if (errors.length) {
errors.forEach((error) => emitter.emit(`trigger:${error.name}`, error.result));
callBack && callBack(false);
} else {
callBack && callBack(true);
}
}
};
return {
emitter,
methods,
refs
};
};
export { useComposable };
//# sourceMappingURL=composable.mjs.map