song-ui-u
Version:
vue3 + js的PC前端组件库
110 lines (96 loc) • 2.77 kB
JavaScript
;
var vue = require('vue');
var constant = require('./constant.cjs');
var index = require('../../../hook/use-namespace/index.cjs');
require('song-ui-pro-icon');
require('../../../hook/use-zindex/index.cjs');
var _pluginVue_exportHelper = require('../../../_virtual/_plugin-vue_export-helper.cjs');
const __default__ = { name: "x-form" };
const _sfc_main = /*#__PURE__*/Object.assign(__default__, {
props: {
model: {
type: Object,
default: () => ({}),
},
rules: {
type: Object,
default: () => ({}),
},
labelWidth: {
type: String,
default: "",
},
align: {
type: String,
default: "",
},
size: {
type: String,
default: "",
},
inline: Boolean,
colon: {
type: Boolean,
default: true,
},
},
setup(__props, { expose: __expose }) {
const ns = index.useNamespace("form");
const props = __props;
// 所有字段
const modelFields = [];
const pushField = (context) => modelFields.push(context);
/**
* 校验
*/
const validate = async (fields) => {
// validateFields
const validateFields = filterFields(fields) || modelFields;
let verificationError = [];
for (const field of validateFields) {
try {
await field.validate();
} catch (fields) {
verificationError = [...verificationError, ...fields];
}
}
if (!verificationError.length) return true;
return Promise.reject(verificationError);
};
/**
* 重置
*/
const reset = () => {
const validateFields = modelFields;
for (const field of validateFields) {
field?.resetField();
}
};
// 过滤需要校验的字段
const filterFields = (fields) => {
if (!fields) {
return null;
}
const fieldArr = modelFields.filter((v) => fields.includes(v.prop));
return !!fieldArr.length ? fieldArr : null;
};
vue.provide(constant.FORM_KEY, { ...vue.toRefs(props), pushField });
__expose({
validate,
reset,
});
const __returned__ = { ns, props, modelFields, pushField, validate, reset, filterFields, toRefs: vue.toRefs, provide: vue.provide, get FORM_KEY() { return constant.FORM_KEY }, get useNamespace() { return index.useNamespace } };
Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true });
return __returned__
}
});
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return (vue.openBlock(), vue.createElementBlock("form", {
class: vue.normalizeClass([$setup.ns.b(), $setup.ns.is('inline', $props.inline)])
}, [
vue.renderSlot(_ctx.$slots, "default")
], 2 /* CLASS */))
}
var Form = /*#__PURE__*/_pluginVue_exportHelper(_sfc_main, [['render',_sfc_render],['__file',"E:\\code\\my-code\\song-ui-ultra\\packages\\components\\form\\src\\form.vue"]]);
module.exports = Form;
//# sourceMappingURL=form.vue.cjs.map