AddEditTreasuryAccountDialog.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <q-dialog ref="dialogRef" @hide="onDialogHide">
  3. <q-card
  4. class="q-dialog-plugin overflow-hidden"
  5. style="width: 600px; max-width: 90vw"
  6. >
  7. <DefaultDialogHeader :title="title" @close="onDialogCancel" />
  8. <DefaultForm ref="formRef" @submit="onOKClick">
  9. <q-scroll-area class="form-dialog-scroll-area">
  10. <q-card-section class="row q-col-gutter-sm q-pt-none">
  11. <DefaultInput
  12. v-model="form.name"
  13. v-model:error="validationErrors.name"
  14. :error-message="validationErrors.name"
  15. :rules="[inputRules.required]"
  16. label="Nome da conta"
  17. placeholder="Ex. Conta Principal"
  18. class="col-12"
  19. />
  20. <DefaultInput
  21. v-model="form.bank_name"
  22. v-model:error="validationErrors.bank_name"
  23. :error-message="validationErrors.bank_name"
  24. :rules="[inputRules.required]"
  25. label="Banco"
  26. placeholder="Ex. Banco do Brasil"
  27. class="col-12 col-md-6"
  28. />
  29. <DefaultSelect
  30. v-model="form.bank_type_account"
  31. v-model:error="validationErrors.bank_type_account"
  32. :error-message="validationErrors.bank_type_account"
  33. :options="accountTypeOptions"
  34. emit-value
  35. map-options
  36. label="Tipo de conta"
  37. placeholder="Selecione"
  38. class="col-12 col-md-6"
  39. />
  40. <DefaultInput
  41. v-model="form.bank_agency"
  42. v-model:error="validationErrors.bank_agency"
  43. :error-message="validationErrors.bank_agency"
  44. label="Agência"
  45. placeholder="Ex. 1234"
  46. class="col-12 col-md-6"
  47. />
  48. <DefaultInput
  49. v-model="form.bank_account"
  50. v-model:error="validationErrors.bank_account"
  51. :error-message="validationErrors.bank_account"
  52. label="Conta"
  53. placeholder="Ex. 56789-0"
  54. class="col-12 col-md-6"
  55. />
  56. </q-card-section>
  57. </q-scroll-area>
  58. <q-card-actions>
  59. <q-space />
  60. <q-btn
  61. outline
  62. color="negative"
  63. label="Cancelar"
  64. @click="onDialogCancel"
  65. />
  66. <q-btn
  67. color="primary"
  68. :label="isEdit ? 'Salvar' : 'Cadastrar'"
  69. type="submit"
  70. :loading="loading"
  71. />
  72. </q-card-actions>
  73. </DefaultForm>
  74. </q-card>
  75. </q-dialog>
  76. </template>
  77. <script setup>
  78. import { ref, computed } from "vue";
  79. import { useDialogPluginComponent } from "quasar";
  80. import { useInputRules } from "src/composables/useInputRules";
  81. import { useSubmitHandler } from "src/composables/useSubmitHandler";
  82. import {
  83. createTreasuryAccount,
  84. updateTreasuryAccount,
  85. } from "src/api/treasury_account";
  86. import DefaultDialogHeader from "src/components/defaults/DefaultDialogHeader.vue";
  87. import DefaultInput from "src/components/defaults/DefaultInput.vue";
  88. import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
  89. defineEmits([...useDialogPluginComponent.emits]);
  90. const { account } = defineProps({
  91. account: {
  92. type: Object,
  93. default: null,
  94. },
  95. });
  96. const { inputRules } = useInputRules();
  97. const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } =
  98. useDialogPluginComponent();
  99. const formRef = ref(null);
  100. const isEdit = computed(() => !!account);
  101. const title = computed(() => (isEdit.value ? "Editar Banco" : "Novo Banco"));
  102. const accountTypeOptions = [
  103. { label: "Conta Corrente", value: "corrente" },
  104. { label: "Conta Poupança", value: "poupanca" },
  105. ];
  106. const form = ref({
  107. name: account?.name ?? "",
  108. bank_name: account?.bank_name ?? "",
  109. bank_agency: account?.bank_agency ?? "",
  110. bank_account: account?.bank_account ?? "",
  111. bank_type_account: account?.bank_type_account ?? null,
  112. });
  113. const {
  114. loading,
  115. validationErrors,
  116. execute: submitForm,
  117. } = useSubmitHandler({
  118. onSuccess: (response) => onDialogOK(response),
  119. formRef,
  120. });
  121. const onOKClick = async () => {
  122. const payload = {
  123. name: form.value.name,
  124. treasury_type: "bank",
  125. bank_name: form.value.bank_name,
  126. bank_agency: form.value.bank_agency || null,
  127. bank_account: form.value.bank_account || null,
  128. bank_type_account: form.value.bank_type_account || null,
  129. };
  130. if (isEdit.value) {
  131. await submitForm(() => updateTreasuryAccount(account.id, payload));
  132. } else {
  133. await submitForm(() => createTreasuryAccount(payload));
  134. }
  135. };
  136. </script>