У меня есть форма с обычным методом сохранения, который проверяет и сохраняет ошибки проверки, блокирующие отправку. Но мне нужна отправка «Сохранить как черновик», которая обходит проверку и отправляется с ошибками. Обычное сохранение и проверка работают отлично, но я не могу найти способ легко отключить динамическую проверку.
Это урезанная версия того, что у меня есть сейчас:
<template>
<form @submit.prevent = "saveForm">
<!-- a bunch of custom components built around useField -->
<button type = "submit" @click = "item.draft = true">Save as Draft</button>
<button type = "submit" @click = "item.draft = false">Submit</button>
</form>
</template>
<script setup lang = "ts">
import { useForm } from "vee-validate";
import { reactive } from "vue";
const { handleSubmit, isSubmitting, ...formStuff } = useForm();
const item = reactive({
draft: false
});
const saveForm = handleSubmit(async () => {
// do stuff to save here
})
</script>





Быть «тем парнем», который сам отвечает на свой вопрос, лучше, чем «тем парнем», который просто говорит, что решил его, я думаю...
После долгих копаний и небольшого рефакторинга я смог заставить это работать. Ключ менялся от правил и проверки, основанных на полях, к основанным на форме, поскольку validationSchema является реактивным. Затем я могу просто изменить схему на false, чтобы форма пропускала проверку, когда это черновик.
Мой сценарий установки теперь выглядит следующим образом:
import { useForm } from "vee-validate";
import { computed, reactive } from "vue";
const submissionValidation = {
'consult_patient_name': 'required|min:5',
'item_name': 'required|min:2',
'consult_question': 'required|min:5',
'consult_history': 'required|min:5',
};
// if it's a draft set it to false, so it can bypass validation
// otherwise set it to the actual validation schema
const validationSchema = computed(() =>
item.draft === true
? false
: submissionValidation
);
const { handleSubmit, isSubmitting } = useForm({ validationSchema });
const item = reactive({
draft: false
});
const saveForm = handleSubmit(async () => {
// do stuff to save here
})