From b3cbc8beee952496c9f37c28a631f3c51ac19d00 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Wed, 03 Mar 2021 10:17:19 +0800 Subject: [PATCH] 修复标签页内容部分左右间隔的问题 --- forms/form/CFormItem.vue | 73 ++++++++++++++++++++++++++---------- 1 files changed, 53 insertions(+), 20 deletions(-) diff --git a/forms/form/CFormItem.vue b/forms/form/CFormItem.vue index a8e57fc..2d0ed74 100644 --- a/forms/form/CFormItem.vue +++ b/forms/form/CFormItem.vue @@ -6,17 +6,7 @@ <template> <view class="c-form-item"> - <view class="c-form-item-label"> - <text - class="required" - v-if="required" - >*</text> - <text>{{label || name}}</text> - </view> - <slot - :value="formData[name]" - :onChange="evt=>onChange(evt)" - /> + <slot :itemRes="itemRes" /> </view> </template> @@ -31,10 +21,40 @@ label: String, required: Boolean, rules: Array, - formData: Object, + formRes: Object, }, data() { - return {}; + return { + error: false, + }; + }, + computed: { + itemRes() { + return { + formData: this.formRes.formData, + name: this.name, + label: this.label, + required: this.isRequired, + error: this.error, + onChange: (evt) => this.onChange(evt), + }; + }, + isRequired() { + if (this.required) { + return true; + } else { + if (!this.rules || this.rules.length === 0) { + return false; + } else if (this.rules.length > 0) { + for (let rule of this.rules) { + if (rule.required) { + return true; + } + } + return false; + } + } + }, }, methods: { onChange(evt) { @@ -51,10 +71,10 @@ } } // 未改变值不触发 - if (this.formData[this.name] === evt) { + if (this.formRes.formData[this.name] === evt) { return; } - this.formData.$handleChange({ + this.formRes.$handleChange({ [this.name]: evt, }); }, @@ -63,13 +83,15 @@ this.$nextTick(() => { // 未设置验证 if (!this.required && !this.rules) { - this.formData.$regItemValidator(this.name, () => { + this.formRes.$regItemValidator(this.name, (validateType) => { + this.error = false; return Promise.resolve({ name: this.name, passed: true, }); }); } else { + // 验证规则 const descriptor = this.rules || []; if (this.required) { descriptor.unshift({ @@ -79,20 +101,31 @@ const validator = new Schema({ [this.name]: descriptor, }); - validator.messages(validateMsgs); // 自定义验证消息 - this.formData.$regItemValidator(this.name, () => { + // 汉化通用验证消息 + validator.messages(validateMsgs); + // 注册验证 + let errTimer = null; + this.formRes.$regItemValidator(this.name, (validateType) => { return validator .validate({ - [this.name]: this.formData[this.name], + [this.name]: this.formRes.formData[this.name], }) .then( (res) => { + this.error = false; return { name: this.name, passed: true, }; }, ({ errors, fields }) => { + if (validateType !== 'msgOnly') { + this.error = true; + clearTimeout(errTimer); + errTimer = setTimeout(() => { + this.error = false; + }, 5000); + } return { name: this.name, passed: false, @@ -108,7 +141,7 @@ }); }, beforeDestroy() { - this.formData.$regItemValidator(this.name, null); + this.formRes.$regItemValidator(this.name, null); }, }; </script> \ No newline at end of file -- Gitblit v1.9.1