DefaultForm.vue 981 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. <template>
  2. <QForm ref="formRef" v-bind="$attrs" @validation-error="onValidationError">
  3. <slot />
  4. </QForm>
  5. </template>
  6. <script setup>
  7. import { nextTick, useTemplateRef } from "vue";
  8. import { QForm } from "quasar";
  9. import { useScroll } from "src/composables/useScroll";
  10. defineOptions({ inheritAttrs: false });
  11. const formRef = useTemplateRef("formRef");
  12. const { scrollToComponent } = useScroll();
  13. const getValidationComponents = (...args) =>
  14. formRef.value?.getValidationComponents(...args);
  15. const onValidationError = async (invalidComponent) => {
  16. if (!invalidComponent) return;
  17. await nextTick();
  18. invalidComponent.focus?.();
  19. scrollToComponent(invalidComponent);
  20. };
  21. const resetValidation = (...args) => formRef.value?.resetValidation(...args);
  22. const validate = (...args) => formRef.value?.validate(...args);
  23. const submit = (...args) => formRef.value?.submit(...args);
  24. defineExpose({ validate, resetValidation, getValidationComponents, submit });
  25. </script>