layui-vue/es/formItem/index.js

222 lines
8.8 KiB
JavaScript
Raw Normal View History

2022-11-14 03:59:26 +00:00
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 };