fix: form trigger

pull/2682/head
tanjinzhou 2020-08-14 18:11:30 +08:00
parent 050867348e
commit 8907a9990c
5 changed files with 18 additions and 20 deletions

@ -1 +1 @@
Subproject commit 75cbe79669f7ce5dfe6c1a02d9dd4e2443840c08
Subproject commit a71e2eac4c9b38092fc8edd2282bdd91170fa04b

View File

@ -31,6 +31,7 @@ export const FormProps = {
onFinish: PropTypes.func,
onFinishFailed: PropTypes.func,
name: PropTypes.name,
validateTrigger: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
};
export const ValidationRule = {

View File

@ -84,6 +84,7 @@ export const FormItemProps = {
required: PropTypes.bool,
validateFirst: PropTypes.bool,
validateStatus: PropTypes.oneOf(['', 'success', 'warning', 'error', 'validating']),
validateTrigger: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
};
export default {
@ -113,7 +114,6 @@ export default {
errors: [],
};
},
computed: {
fieldName() {
return this.name || this.prop;
@ -153,6 +153,14 @@ export default {
}
return isRequired || this.required;
},
mergedValidateTrigger() {
let validateTrigger =
this.validateTrigger !== undefined
? this.validateTrigger
: this.FormContext.validateTrigger;
validateTrigger = validateTrigger === undefined ? 'change' : validateTrigger;
return toArray(validateTrigger);
},
},
watch: {
validateStatus(val) {
@ -189,10 +197,10 @@ export default {
if (triggerName) {
filteredRules = filteredRules.filter(rule => {
const { trigger } = rule;
if (!trigger) {
if (!trigger && !this.mergedValidateTrigger.length) {
return true;
}
const triggerList = toArray(trigger);
const triggerList = toArray(trigger || this.mergedValidateTrigger);
return triggerList.includes(triggerName);
});
}
@ -226,7 +234,9 @@ export default {
let formRules = this.FormContext.rules;
const selfRules = this.rules;
const requiredRule =
this.required !== undefined ? { required: !!this.required, trigger: 'change' } : [];
this.required !== undefined
? { required: !!this.required, trigger: this.mergedValidateTrigger }
: [];
const prop = getPropByPath(formRules, this.namePath);
formRules = formRules ? prop.o[prop.k] || prop.v : [];
const rules = [].concat(selfRules || formRules || []);
@ -236,19 +246,6 @@ export default {
return rules.concat(requiredRule);
}
},
getFilteredRule(trigger) {
const rules = this.getRules();
return rules
.filter(rule => {
if (!rule.trigger || trigger === '') return true;
if (Array.isArray(rule.trigger)) {
return rule.trigger.indexOf(trigger) > -1;
} else {
return rule.trigger === trigger;
}
})
.map(rule => ({ ...rule }));
},
onFieldBlur() {
this.validateRules({ triggerName: 'blur' });
},

View File

@ -98,8 +98,8 @@ const Mentions = {
});
},
handleChange(val) {
this.$emit('change', val);
this.$emit('update:value', val);
this.$emit('change', val);
},
getNotFoundContent(renderEmpty) {
const notFoundContent = getComponent(this, 'notFoundContent');

View File

@ -4,7 +4,7 @@
</div>
</template>
<script>
import demo from '../antdv-demo/docs/transfer/demo/basic';
import demo from '../antdv-demo/docs/mentions/demo/form';
export default {
components: {
demo,