uv-ui
Version:
基于vue3的移动端组件库
2 lines (1 loc) • 2.43 kB
JavaScript
"use strict";const r=require("vue"),m=require("../../utils/form.cjs"),g=require("../../utils/clone.cjs"),R=require("../cell/index.cjs");require("./form-item.vue_vue_type_style_index_0_lang.cjs");const k={name:"UvFormItem"},h=Object.assign(k,{props:{label:{type:String},labelPosition:{type:String},arrow:{type:Boolean,default:!1},arrowDirection:{type:String},clickable:{type:Boolean,default:!1},prop:{type:String},required:{type:Boolean}},setup(u){const e=u;let c;const v=r.computed(()=>{const o=i==null?void 0:i.model;if(!(!o||!e.prop))return m.getProp(o,e.prop).value}),{props:i,addField:b,removeField:q}=r.inject("form"),{labelWidth:w,rules:n}=i,d=r.ref(null),M=()=>!!(!e.prop||!n[e.prop]||n[e.prop].map(s=>{let a="";return s.required===!0&&(i.model[e.prop]?(t.errorMsg=null,a=!0):(t.errorMsg=s.message,a=!1)),s.trigger&&(a=f(s.trigger)),a}).every(s=>s===!0)),f=o=>{if(!e.prop||!n[e.prop]){e.prop?n[e.prop]||console.error("\u672A\u4F20\u5165\u8BE5\u5C5E\u6027\u7684rule\u89C4\u5219"):console.error("\u8BF7\u4F20\u5165form-item\u4E2D\u4F20\u5165prop\u5C5E\u6027");return}const l=n[e.prop].find(s=>s.trigger===o);if(l){if(l.required)return i.model[e.prop]?(t.errorMsg=null,!0):(t.errorMsg=l.message,!1);if(l.validator){const s=i.model[e.prop];return l.validator(s)?(t.errorMsg=null,!0):(t.errorMsg=l.message,!1)}}else return t.errorMsg=null,!0},y=async()=>{const o=i==null?void 0:i.model;if(!o||!e.prop)return;const l=m.getProp(o,e.prop);l.value=g.clone(c),await r.nextTick(),p()},p=()=>{t.errorMsg=null},t=r.reactive({...r.toRefs(e),$el:d,isRequired:!1,errorMsg:null,clearValidate:p,validate:M,resetField:y});return r.onMounted(()=>{n&&n[e.prop]&&n[e.prop].find(l=>l.required===!0)&&(t.isRequired=!0),c=g.clone(v.value),b(t)}),r.onBeforeMount(()=>{q(t)}),r.provide("form-item",{props:e,validateBlurOrChange:f}),(o,l)=>(r.openBlock(),r.createBlock(r.unref(R),r.mergeProps({class:"uv-form-item",ref_key:"formItemRef",ref:d},o.$attrs,{arrow:u.arrow,"arrow-direction":u.arrowDirection,title:u.label,"label-width":r.unref(w),"label-position":u.labelPosition||r.unref(i).labelPosition,clickable:u.clickable,required:u.required||t.isRequired,tips:!!t.errorMsg,"error-msg":t.errorMsg}),{title:r.withCtx(()=>[r.renderSlot(o.$slots,"label")]),value:r.withCtx(()=>[r.renderSlot(o.$slots,"default")]),_:3},16,["arrow","arrow-direction","title","label-width","label-position","clickable","required","tips","error-msg"]))}});module.exports=h;