UNPKG

song-ui-u

Version:

vue3 + js的PC前端组件库

108 lines (95 loc) 2.73 kB
import { provide, toRefs, openBlock, createElementBlock, normalizeClass, renderSlot } from 'vue'; import { FORM_KEY } from './constant.mjs'; import { useNamespace } from '../../../hook/use-namespace/index.mjs'; import 'song-ui-pro-icon'; import '../../../hook/use-zindex/index.mjs'; import _export_sfc from '../../../_virtual/_plugin-vue_export-helper.mjs'; 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 = 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; }; provide(FORM_KEY, { ...toRefs(props), pushField }); __expose({ validate, reset, }); const __returned__ = { ns, props, modelFields, pushField, validate, reset, filterFields, toRefs, provide, get FORM_KEY() { return FORM_KEY }, get useNamespace() { return useNamespace } }; Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true }); return __returned__ } }); function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return (openBlock(), createElementBlock("form", { class: normalizeClass([$setup.ns.b(), $setup.ns.is('inline', $props.inline)]) }, [ renderSlot(_ctx.$slots, "default") ], 2 /* CLASS */)) } var Form = /*#__PURE__*/_export_sfc(_sfc_main, [['render',_sfc_render],['__file',"E:\\code\\my-code\\song-ui-ultra\\packages\\components\\form\\src\\form.vue"]]); export { Form as default }; //# sourceMappingURL=form.vue.mjs.map