|
@@ -26,8 +26,8 @@
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请输入'"
|
|
|
:clearable="i.clearable ? i.clearable : false"
|
|
|
:readonly="getFieldReadonly(i)"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)"
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)"
|
|
|
:right-icon="i.isNeedRightBtn ? i.rightIcon : ''"
|
|
|
@click-right-icon="i.isNeedRightBtn ? i.rightIconClick() : () => {}"
|
|
|
@blur="i.isNeedBlurMethon ? i.blurMethon(formData[i.prop]) : () => {}"
|
|
@@ -38,13 +38,13 @@
|
|
|
">
|
|
|
</van-field>
|
|
|
<!-- switch -->
|
|
|
- <van-field v-if="i.type == 'switch'" :label="i.label" :name="i.prop" :required="getRequired(i.prop)">
|
|
|
+ <van-field v-if="i.type == 'switch'" :label="i.label" :name="i.prop" :required="getRequired(i)">
|
|
|
<template #input>
|
|
|
<van-switch v-model="formData[i.prop]" />
|
|
|
</template>
|
|
|
</van-field>
|
|
|
<!-- 多选checkbox -->
|
|
|
- <van-field v-if="i.type == 'checkbox'" :label="i.label" :name="i.prop" :rules="getRules(i.prop)" :required="getRequired(i.prop)">
|
|
|
+ <van-field v-if="i.type == 'checkbox'" :label="i.label" :name="i.prop" :rules="getRules(i)" :required="getRequired(i)">
|
|
|
<template #input>
|
|
|
<van-checkbox-group v-model="formData[i.prop]" direction="horizontal">
|
|
|
<van-checkbox shape="square" v-for="j in i.data" :key="j.value" :name="j.value">{{ j.text }}</van-checkbox>
|
|
@@ -52,7 +52,7 @@
|
|
|
</template>
|
|
|
</van-field>
|
|
|
<!-- 单选radio -->
|
|
|
- <van-field v-if="i.type == 'radio'" :label="i.label" :name="i.prop" :rules="getRules(i.prop)" :required="getRequired(i.prop)">
|
|
|
+ <van-field v-if="i.type == 'radio'" :label="i.label" :name="i.prop" :rules="getRules(i)" :required="getRequired(i)">
|
|
|
<template #input>
|
|
|
<van-radio-group v-model="formData[i.prop]" direction="horizontal">
|
|
|
<van-radio v-for="j in i.data" :key="j.value" :name="j.value || j.id">{{ j.label || j.title }}</van-radio>
|
|
@@ -70,8 +70,8 @@
|
|
|
:readonly="true"
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请选择'"
|
|
|
@click="() => (formOption.readonly || i.readonly ? '' : (i.showPicker = true))"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)">
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)">
|
|
|
</van-field>
|
|
|
<van-popup v-model:show="i.showPicker" round position="bottom" v-if="i.type == 'picker' && i.itemType == 'onePicker'">
|
|
|
<van-picker
|
|
@@ -91,8 +91,8 @@
|
|
|
:readonly="true"
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请选择'"
|
|
|
@click="() => (!formOption.readonly ? (i.showPicker = true) : '')"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)">
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)">
|
|
|
</van-field>
|
|
|
<van-popup
|
|
|
v-model:show="i.showPicker"
|
|
@@ -114,8 +114,8 @@
|
|
|
:readonly="true"
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请选择'"
|
|
|
@click="() => (!formOption.readonly ? (i.showPicker = true) : '')"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)">
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)">
|
|
|
</van-field>
|
|
|
<van-popup v-model:show="i.showPicker" round position="bottom" v-if="i.type == 'picker' && i.itemType == 'datePicker'">
|
|
|
<van-date-picker
|
|
@@ -136,8 +136,8 @@
|
|
|
:readonly="true"
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请选择'"
|
|
|
@click="() => (!formOption.readonly ? (i.needDefault ? defaultTimeFn(i, index) : (i.showPicker = true)) : '')"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)">
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)">
|
|
|
</van-field>
|
|
|
<van-popup v-model:show="i.showPicker" round position="bottom" v-if="i.type == 'picker' && i.itemType == 'datePickerTime'">
|
|
|
<van-picker-group :tabs="['日期', '时间']" @confirm="() => datePickerTimeConfirm(i, index)" @cancel="i.showPicker = false">
|
|
@@ -155,8 +155,8 @@
|
|
|
:readonly="true"
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请选择'"
|
|
|
@click="() => (!formOption.readonly ? (i.showPicker = true) : '')"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)" />
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)" />
|
|
|
<van-popup v-if="i.type == 'cascader' && i.itemType == 'city'" v-model:show="i.showPicker" round position="bottom">
|
|
|
<van-cascader
|
|
|
v-model="formData[i.prop]"
|
|
@@ -176,8 +176,8 @@
|
|
|
:readonly="true"
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请选择'"
|
|
|
@click="() => (!formOption.readonly ? (i.showPicker = true) : '')"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)" />
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)" />
|
|
|
<van-popup v-if="i.type == 'cascader' && i.itemType == 'common'" v-model:show="i.showPicker" round position="bottom">
|
|
|
<van-cascader
|
|
|
v-model="formData[i.prop]"
|
|
@@ -195,7 +195,7 @@
|
|
|
</template>
|
|
|
</van-field>
|
|
|
<!-- 插槽 -->
|
|
|
- <van-field v-if="i.type == 'slot'" :label="i.label" :rules="getRules(i.prop)" :required="getRequired(i.prop)">
|
|
|
+ <van-field v-if="i.type == 'slot'" :label="i.label" :rules="getRules(i)" :required="getRequired(i)">
|
|
|
<template #input>
|
|
|
<div style="width: 100%">
|
|
|
<slot :name="i.slotName"> {{ i.slotName }}插槽占位符 </slot>
|
|
@@ -230,8 +230,8 @@
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请输入'"
|
|
|
:clearable="i.clearable ? i.clearable : false"
|
|
|
:readonly="getFieldReadonly(i)"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)"
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)"
|
|
|
@change="
|
|
|
(val) => {
|
|
|
return i.changeFn ? i.changeFn(index, val) : () => {};
|
|
@@ -248,8 +248,8 @@
|
|
|
:readonly="true"
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请选择'"
|
|
|
@click="handleListItemClick(i, index, sonIndex)"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)">
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)">
|
|
|
<template #input v-if="i.isShowScanCode">
|
|
|
<div style="display: flex; height: 24px">
|
|
|
<div style="width: calc(100vw - 100px)">
|
|
@@ -271,8 +271,8 @@
|
|
|
:readonly="true"
|
|
|
:placeholder="i.placeholder ? i.placeholder : '请选择'"
|
|
|
@click="handleListItemClick(i, index, sonIndex)"
|
|
|
- :rules="getRules(i.prop)"
|
|
|
- :required="getRequired(i.prop)">
|
|
|
+ :rules="getRules(i)"
|
|
|
+ :required="getRequired(i)">
|
|
|
</van-field>
|
|
|
</div>
|
|
|
</van-cell-group>
|
|
@@ -368,13 +368,13 @@ const handleOtherBtnClick = () => {
|
|
|
};
|
|
|
|
|
|
// 获取验证规则
|
|
|
-const getRules = (prop) => {
|
|
|
- if (rules.value.hasOwnProperty(prop) && rules.value[prop]) {
|
|
|
- return rules.value[prop];
|
|
|
+const getRules = (i) => {
|
|
|
+ if (rules.value.hasOwnProperty(i.prop) && rules.value[i.prop] && !getFieldReadonly(i) && !formOption.readonly) {
|
|
|
+ return rules.value[i.prop];
|
|
|
}
|
|
|
};
|
|
|
-const getRequired = (prop) => {
|
|
|
- if (rules.value.hasOwnProperty(prop) && rules.value[prop]) {
|
|
|
+const getRequired = (i) => {
|
|
|
+ if (rules.value.hasOwnProperty(i.prop) && rules.value[i.prop] && !getFieldReadonly(i) && !formOption.readonly) {
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|