1
This commit is contained in:
221
package/component/es/formItem/index.js
Normal file
221
package/component/es/formItem/index.js
Normal file
@@ -0,0 +1,221 @@
|
||||
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 };
|
||||
Reference in New Issue
Block a user