AddEditClientesDialog.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <template>
  2. <q-dialog ref="dialogRef" @hide="onDialogHide">
  3. <q-card class="q-dialog-plugin" style="width: 1000px">
  4. <DefaultDialogHeader :title="props.title" @close="onDialogCancel" />
  5. <q-card-section>
  6. <q-form ref="formRef" class="row q-col-gutter-sm">
  7. <q-input
  8. v-model="form.nome_fantasia"
  9. label="Nome Fantasia"
  10. hint="Obrigatório"
  11. :rules="[inputRules.required]"
  12. outlined
  13. class="col-12 q-input-border"
  14. dense
  15. bg-color="white"
  16. hide-bottom-space
  17. />
  18. <q-input
  19. v-model="form.razao_social"
  20. label="Razão Social"
  21. outlined
  22. class="col-12 q-input-border q-mb-sm"
  23. dense
  24. bg-color="white"
  25. hide-bottom-space
  26. />
  27. <q-input
  28. v-model="form.cnpj"
  29. label="CNPJ"
  30. hint="Obrigatório"
  31. outlined
  32. class="col-4 q-input-border q"
  33. :mask="masks.Brasil.docEmpresa"
  34. dense
  35. bg-color="white"
  36. hide-bottom-space
  37. />
  38. <q-input
  39. v-model="form.inscricao_estadual"
  40. label="Inscrição Estadual"
  41. mask="########################"
  42. outlined
  43. class="col-4 q-input-border q-mb-sm"
  44. dense
  45. bg-color="white"
  46. hide-bottom-space
  47. />
  48. <q-input
  49. v-model="form.inscricao_municipal"
  50. label="Inscrição Municipal"
  51. mask="########################"
  52. outlined
  53. class="col-4 q-input-border q-mb-sm"
  54. dense
  55. bg-color="white"
  56. hide-bottom-space
  57. />
  58. <q-input
  59. v-model="form.email"
  60. label="Email"
  61. :rules="[inputRules.email]"
  62. outlined
  63. class="col-12 q-input-border q-mb-sm"
  64. dense
  65. bg-color="white"
  66. hide-bottom-space
  67. />
  68. <q-input
  69. v-model="form.observacoes"
  70. dense
  71. outlined
  72. label="Observações"
  73. class="col-12 q-input-border q-mb-sm"
  74. bg-color="white"
  75. hide-bottom-space
  76. autogrow
  77. type="textarea"
  78. />
  79. </q-form>
  80. </q-card-section>
  81. <q-card-section>
  82. <div class="row items-center">
  83. <!-- Input com Toggle e textos Ativo/Inativo -->
  84. <div v-if="props.clienteId" class="col-auto row items-center">
  85. <span class="q-mr-sm text-body-2">Inativo</span>
  86. <q-toggle
  87. v-model="form.status"
  88. color="primary"
  89. size="sm"
  90. true-value="ativo"
  91. false-value="inativo"
  92. dense
  93. outlined
  94. />
  95. <span class="q-ml-sm text-body-2">Ativo</span>
  96. </div>
  97. <div class="col">
  98. <q-card-actions align="right" class="flex justify-end">
  99. <q-btn
  100. outline
  101. padding="10px 20px"
  102. label="Cancelar"
  103. color="dark"
  104. @click="onDialogCancel"
  105. />
  106. <q-btn
  107. padding="10px 20px"
  108. color="primary"
  109. label="Salvar"
  110. @click="onOKClick"
  111. />
  112. </q-card-actions>
  113. </div>
  114. </div>
  115. </q-card-section>
  116. </q-card>
  117. </q-dialog>
  118. </template>
  119. <script setup>
  120. import { onMounted, ref } from "vue";
  121. import { inputRules } from "src/helpers/utils";
  122. import { useDialogPluginComponent } from "quasar";
  123. import masks from "src/helpers/masks.js";
  124. import DefaultDialogHeader from "src/components/geral/DefaultDialogHeader.vue";
  125. import { getCliente } from "src/api/clientes";
  126. // import { getClientesInfos } from "src/api/clientes";
  127. defineEmits([
  128. // REQUIRED; need to specify some events that your
  129. // component will emit through useDialogPluginComponent()
  130. ...useDialogPluginComponent.emits,
  131. ]);
  132. const props = defineProps({
  133. cliente: {
  134. type: Object,
  135. default: null,
  136. },
  137. clienteId: {
  138. type: Number,
  139. default: null,
  140. },
  141. title: {
  142. type: String,
  143. default: "Novo Usuário",
  144. },
  145. });
  146. const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } =
  147. useDialogPluginComponent();
  148. const formRef = ref(null);
  149. const form = ref({
  150. nome_fantasia: null,
  151. razao_social: null,
  152. cnpj: null,
  153. inscricao_estadual: null,
  154. inscricao_municipal: null,
  155. email: null,
  156. observacoes: null,
  157. status: "ativo",
  158. });
  159. const onOKClick = () => {
  160. if (!formRef.value.validate()) {
  161. return;
  162. }
  163. onDialogOK(form.value);
  164. };
  165. const fetchClientes = async () => {
  166. const response = await getCliente(props.clienteId);
  167. form.value = response;
  168. };
  169. onMounted(async () => {
  170. if (props.clienteId) {
  171. fetchClientes();
  172. }
  173. });
  174. </script>