EditStudentMediaDialog.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <q-dialog ref="dialogRef" @hide="onDialogHide">
  3. <q-card class="q-dialog-plugin" style="width: 480px; max-width: 95vw">
  4. <DefaultDialogHeader title="Editar Mídia" @close="onDialogCancel" />
  5. <q-form ref="formRef" @submit="onSubmit">
  6. <q-card-section class="q-pt-none">
  7. <div class="column q-gutter-sm">
  8. <DefaultInput
  9. v-model="form.name"
  10. label="Nome do documento"
  11. :rules="[inputRules.required]"
  12. />
  13. <q-file
  14. v-model="selectedFile"
  15. label="Arquivo (opcional)"
  16. outlined
  17. accept="image/*,video/*,.pdf"
  18. clearable
  19. >
  20. <template #prepend>
  21. <q-icon name="mdi-paperclip" />
  22. </template>
  23. </q-file>
  24. </div>
  25. </q-card-section>
  26. <q-card-actions align="right" class="q-pa-md">
  27. <q-btn outline color="primary" label="Cancelar" @click="onDialogCancel" />
  28. <q-btn color="primary" label="Salvar" type="submit" :loading="loading" />
  29. </q-card-actions>
  30. </q-form>
  31. </q-card>
  32. </q-dialog>
  33. </template>
  34. <script setup>
  35. import { ref } from "vue";
  36. import { useDialogPluginComponent } from "quasar";
  37. import { useInputRules } from "src/composables/useInputRules";
  38. import { useSubmitHandler } from "src/composables/useSubmitHandler";
  39. import { updateStudentMedia } from "src/api/student_media";
  40. import DefaultDialogHeader from "src/components/defaults/DefaultDialogHeader.vue";
  41. import DefaultInput from "src/components/defaults/DefaultInput.vue";
  42. defineEmits([...useDialogPluginComponent.emits]);
  43. const { media } = defineProps({
  44. media: { type: Object, required: true },
  45. });
  46. const { inputRules } = useInputRules();
  47. const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent();
  48. const formRef = ref(null);
  49. const selectedFile = ref(null);
  50. const form = ref({ name: media.name ?? "" });
  51. const { loading, execute } = useSubmitHandler({
  52. formRef,
  53. onSuccess: (result) => onDialogOK(result),
  54. });
  55. async function onSubmit() {
  56. await execute(() => {
  57. const formData = new FormData();
  58. formData.append("name", form.value.name);
  59. formData.append("student_id", media.student_id);
  60. if (selectedFile.value) {
  61. formData.append("file", selectedFile.value);
  62. }
  63. return updateStudentMedia(media.id, formData);
  64. });
  65. }
  66. </script>