Files
2025-08-21 20:39:34 +07:00

36 lines
920 B
JavaScript

// validationMixin.js
export default {
props: ['fields', 'field_id', 'field_value'],
methods: {
isVisible() {
if (!this.fields.dependencies) return true;
return this.fields.dependencies.every(dep => {
const depValue = this.$parent?.$refs[dep.field]?.value;
return depValue === dep.value;
});
},
validateField() {
const visible = this.isVisible();
const required = this.fields.required === true;
const value = this.field_value;
const isValid = !required || (visible && value !== undefined && value !== null && value !== '');
this.$root.$emit('field-validation', {
fieldId: this.field_id,
isValid
});
return isValid;
}
},
watch: {
field_value() {
this.validateField();
}
},
mounted() {
this.validateField();
}
};