import { w as withInstall } from "../badge/index2.js"; import { defineComponent, inject, ref, computed, watch, onMounted, reactive, toRefs, openBlock, createElementBlock, normalizeClass, createElementVNode, normalizeStyle, unref, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from "vue"; import { S as Schema } from "../_chunks/async-validator/index.js"; var cnValidateMessage = { default: "%s\u9A8C\u8BC1\u5931\u8D25", required: "%s\u4E0D\u80FD\u4E3A\u7A7A", enum: "%s\u4E0D\u5728\u679A\u4E3E%s\u91CC\u9762", whitespace: "%s\u4E0D\u80FD\u4E3A\u7A7A", date: { format: "%s\u65E5\u671F%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u683C\u5F0F\u7684\u65E5\u671F%s", parse: "%s\u65E0\u6CD5\u89E3\u6790\u4E3A\u65E5\u671F,%s\u662F\u65E0\u6548\u7684", invalid: "%s\u65E5\u671F%s\u662F\u65E0\u6548\u7684" }, types: { number: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u6570\u5B57", boolean: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u5E03\u5C14\u7C7B\u578B", method: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u65B9\u6CD5", regexp: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F", integer: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u6574\u578B\u6570\u5B57", float: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u6D6E\u70B9\u5C0F\u6570", array: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u6570\u7EC4", object: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u5BF9\u8C61", enum: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u679A\u4E3E", date: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u65E5\u671F", url: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684url", hex: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u5341\u516D\u8FDB\u5236", email: "%s\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u90AE\u7BB1" }, string: { len: "%s\u5FC5\u987B\u662F\u957F\u5EA6\u4E3A%s\u4E2A\u5B57\u7B26", min: "%s\u6700\u5C0F\u957F\u5EA6\u4E3A%s\u4E2A\u5B57\u7B26", max: "%s\u6700\u957F%s\u4E2A\u5B57\u7B26", range: "%s\u5B57\u7B26\u957F\u5EA6\u9700\u8981\u5728%s\u548C%s\u4E4B\u95F4" }, number: { len: "%s\u957F\u5EA6\u5FC5\u987B\u4E3A%s", min: "%s\u5FC5\u987B\u5C0F\u4E8E%s", max: "%s\u5FC5\u987B\u5927\u4E8E%s", range: "%s\u9700\u8981\u5728%s\u548C%s\u4E4B\u95F4" }, array: { len: "%s\u957F\u5EA6\u5FC5\u987B\u4E3A%s", min: "%s\u957F\u5EA6\u5FC5\u987B\u5C0F\u4E8E%s", max: "%s\u957F\u5EA6\u5FC5\u987B\u5927\u4E8E%s", range: "%s\u957F\u5EA6\u9700\u8981\u5728%s\u548C%s\u4E4B\u95F4" }, pattern: { mismatch: "%s\u503C%s\u4E0D\u80FD\u5339\u914D%s" } }; const __default__ = { name: "LayFormItem" }; const _sfc_main = defineComponent({ ...__default__, props: { prop: null, mode: { default: "block" }, label: null, labelPosition: { default: "right" }, labelWidth: { default: 95 }, errorMessage: null, rules: null, required: { type: Boolean }, requiredErrorMessage: null }, setup(__props, { expose }) { const props = __props; const layForm = inject("LayForm", {}); const formItemRef = ref(); const slotParent = ref(); const isRequired = computed(() => { return props.required || layForm.required; }); const ruleItems = computed(() => { const prop = props.prop; if (!prop) { return {}; } let rulesArrs = []; if (isRequired.value) { rulesArrs.push({ required: true }); } if (props.rules) { rulesArrs = rulesArrs.concat(props.rules); } if (layForm.rules && layForm.rules[prop]) { rulesArrs = rulesArrs.concat(layForm.rules[prop]); } return rulesArrs; }); const filedValue = computed(() => props.prop ? layForm.model[props.prop] : void 0); watch(() => filedValue.value, (val) => validate(), { deep: true }); const errorMsg = ref(); const errorStatus = ref(false); const validate = (callback) => { if (props.prop && ruleItems.value.length > 0) { const descriptor = {}; descriptor[layForm.useCN ? props.label || props.prop : props.prop] = ruleItems.value; const validator = new Schema(descriptor); let model = {}; let validateMessage = null; if (layForm.useCN) { validateMessage = Object.assign({}, cnValidateMessage, layForm.validateMessage); model[props.label || props.prop] = filedValue.value; } else { layForm.validateMessage && (validateMessage = layForm.validateMessage); model[props.prop] = filedValue.value; } layForm.requiredErrorMessage && (validateMessage = Object.assign(validateMessage, { required: layForm.requiredErrorMessage })); props.requiredErrorMessage && (validateMessage = Object.assign(validateMessage, { required: props.requiredErrorMessage })); validateMessage && validator.messages(validateMessage); validator.validate(model, (errors, fields) => { var _a, _b; errorStatus.value = errors !== null && errors.length > 0; const slotParentDiv = slotParent.value; if (errorStatus.value) { const _errors = errors; layForm.useCN && _errors.forEach((error) => { error.label = props.label; error.field = props.prop; }); errorMsg.value = (_a = props.errorMessage) != null ? _a : _errors[0].message; (slotParentDiv == null ? void 0 : slotParentDiv.childElementCount) > 0 && ((_b = slotParentDiv == null ? void 0 : slotParentDiv.firstElementChild) == null ? void 0 : _b.classList.add("layui-form-danger")); callback && callback(_errors, fields); } else { clearValidate(); } }); } }; const clearValidate = () => { var _a; errorStatus.value = false; errorMsg.value = ""; const slotParentDiv = slotParent.value; (slotParentDiv == null ? void 0 : slotParentDiv.childElementCount) > 0 && ((_a = slotParentDiv == null ? void 0 : slotParentDiv.firstElementChild) == null ? void 0 : _a.classList.remove("layui-form-danger")); }; expose({ validate, clearValidate }); onMounted(() => { if (props.prop) { layForm.addField(reactive({ ...toRefs(props), $el: formItemRef, validate, clearValidate })); } }); const getMarginLeft = computed(() => { if (props.mode == "block") { if (props.labelPosition != "top") { let labelWidth = typeof props.labelWidth === "string" ? parseFloat(props.labelWidth) : props.labelWidth; labelWidth += 15; return { "margin-left": `${labelWidth}px` }; } else { return { "margin-left": "0px" }; } } }); return (_ctx, _cache) => { var _a; return openBlock(), createElementBlock("div", { class: normalizeClass(["layui-form-item", [`layui-form-item-${__props.labelPosition}`]]), ref_key: "formItemRef", ref: formItemRef }, [ createElementVNode("label", { class: "layui-form-label", style: normalizeStyle({ width: __props.labelWidth + "px" }) }, [ props.prop && unref(isRequired) ? (openBlock(), createElementBlock("span", { key: 0, class: normalizeClass(["layui-required", "layui-icon"].concat((_a = unref(layForm).requiredIcons) != null ? _a : "")) }, [ renderSlot(_ctx.$slots, "required", { props: { ...props, model: unref(layForm).model } }, () => [ createTextVNode(toDisplayString(unref(layForm).requiredIcons ? "" : "*"), 1) ]) ], 2)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "label", { props: { ...props, model: unref(layForm).model } }, () => [ createTextVNode(toDisplayString(__props.label), 1) ]) ], 4), createElementVNode("div", { class: normalizeClass([__props.mode ? "layui-input-" + __props.mode : ""]), style: normalizeStyle(unref(getMarginLeft)) }, [ createElementVNode("div", { ref_key: "slotParent", ref: slotParent }, [ renderSlot(_ctx.$slots, "default", { props: { ...props, model: unref(layForm).model } }) ], 512), errorStatus.value ? (openBlock(), createElementBlock("span", { key: 0, class: normalizeClass([ "layui-error-message", { "layui-error-message-anim": errorStatus.value } ]) }, toDisplayString(errorMsg.value), 3)) : createCommentVNode("", true) ], 6) ], 2); }; } }); const component = withInstall(_sfc_main); export { component as default };