various-ui
Version:
This is a test version of the Vue 3 component library
71 lines (67 loc) • 2.1 kB
JavaScript
;
var vue = require('vue');
var index = require('../../../../constants/index.js');
const useComposable = (define) => {
const emitter = vue.inject(index.UiFormEmitterKey, void 0);
const rules = vue.inject(index.UiFormRulesKey, {});
const data = vue.inject(index.UiFormDataKey, {});
const refs = {
verifyTimer: vue.ref(),
//* 校验过渡定时器
visible: vue.ref(false),
//* 校验提示显示状态
content: vue.ref(""),
//* 校验提示的文本
status: vue.ref("info")
//* 校验提示的类型
};
const methods = {
//* 校验显示函数
show: (content, type) => {
refs.status.value = type || "info";
refs.visible.value = true;
refs.content.value = content;
},
//* 校验隐藏函数
hidden: () => {
refs.visible.value = false;
refs.status.value = "info";
},
//* 校验函数
validator: async (name, callBack) => {
const rule = rules[define.prop].filter((value) => !name || value.trigger == name);
if (!rule.length) return;
else {
const verifys = [];
rule.forEach((value) => verifys.push(value.verify(data)));
const result = await Promise.all(verifys);
const error = result.filter((value) => !value.verify);
if (error.length) {
callBack && callBack(false);
methods.show(error[0].message || "", error[0].type || "error");
} else {
methods.hidden();
callBack && callBack(true);
}
}
}
};
const computeds = {
//* 组件类名
className: vue.computed(() => {
if (refs.status.value != "info") {
return `ui-form-${define.direction} ui-${refs.status.value}-type`;
} else {
return `ui-form-${define.direction}`;
}
}),
//* 组件样式
style: vue.computed(() => {
if (define.width) return { width: define.width + "px" };
else return {};
})
};
return { data, refs, rules, methods, emitter, computeds };
};
exports.useComposable = useComposable;
//# sourceMappingURL=composable.js.map