|
|
@@ -1,89 +1,110 @@
|
|
|
<template>
|
|
|
<q-dialog ref="dialogRef" @hide="onDialogHide">
|
|
|
- <q-card class="q-dialog-plugin" style="width: 1000px">
|
|
|
+ <q-card
|
|
|
+ class="q-dialog-plugin bg-background-2 column no-wrap"
|
|
|
+ :style="props.clienteId ? 'min-width: 1000px; min-height: 500px' : 'min-width: 800px; min-height: 350px'"
|
|
|
+ >
|
|
|
<DefaultDialogHeader :title="props.title" @close="onDialogCancel" />
|
|
|
- <q-card-section>
|
|
|
- <q-form ref="formRef" class="row q-col-gutter-sm">
|
|
|
- <q-input
|
|
|
- v-model="form.nome_fantasia"
|
|
|
- label="Nome Fantasia"
|
|
|
- hint="Obrigatório"
|
|
|
- :rules="[inputRules.required]"
|
|
|
- outlined
|
|
|
- class="col-12 q-input-border"
|
|
|
- dense
|
|
|
- bg-color="white"
|
|
|
- hide-bottom-space
|
|
|
- />
|
|
|
- <q-input
|
|
|
- v-model="form.razao_social"
|
|
|
- label="Razão Social"
|
|
|
- outlined
|
|
|
- class="col-12 q-input-border q-mb-sm"
|
|
|
- dense
|
|
|
- bg-color="white"
|
|
|
- hide-bottom-space
|
|
|
- />
|
|
|
- <q-input
|
|
|
- v-model="form.cnpj"
|
|
|
- label="CNPJ"
|
|
|
- hint="Obrigatório"
|
|
|
- outlined
|
|
|
- class="col-4 q-input-border q"
|
|
|
- :mask="masks.Brasil.docEmpresa"
|
|
|
- dense
|
|
|
- bg-color="white"
|
|
|
- hide-bottom-space
|
|
|
- />
|
|
|
- <q-input
|
|
|
- v-model="form.inscricao_estadual"
|
|
|
- label="Inscrição Estadual"
|
|
|
- mask="########################"
|
|
|
- outlined
|
|
|
- class="col-4 q-input-border q-mb-sm"
|
|
|
- dense
|
|
|
- bg-color="white"
|
|
|
- hide-bottom-space
|
|
|
- />
|
|
|
- <q-input
|
|
|
- v-model="form.inscricao_municipal"
|
|
|
- label="Inscrição Municipal"
|
|
|
- mask="########################"
|
|
|
- outlined
|
|
|
- class="col-4 q-input-border q-mb-sm"
|
|
|
- dense
|
|
|
- bg-color="white"
|
|
|
- hide-bottom-space
|
|
|
- />
|
|
|
- <q-input
|
|
|
- v-model="form.email"
|
|
|
- label="Email"
|
|
|
- :rules="[inputRules.email]"
|
|
|
- outlined
|
|
|
- class="col-12 q-input-border q-mb-sm"
|
|
|
- dense
|
|
|
- bg-color="white"
|
|
|
- hide-bottom-space
|
|
|
- />
|
|
|
|
|
|
- <q-input
|
|
|
- v-model="form.observacoes"
|
|
|
- dense
|
|
|
- outlined
|
|
|
- label="Observações"
|
|
|
- class="col-12 q-input-border q-mb-sm"
|
|
|
- bg-color="white"
|
|
|
- hide-bottom-space
|
|
|
- autogrow
|
|
|
- type="textarea"
|
|
|
- />
|
|
|
- </q-form>
|
|
|
- </q-card-section>
|
|
|
+ <TabsGlobal
|
|
|
+ v-if="props.clienteId"
|
|
|
+ v-model="activeTab"
|
|
|
+ :tabs-items="tabsItems"
|
|
|
+ />
|
|
|
+
|
|
|
+ <q-separator />
|
|
|
|
|
|
- <q-card-section>
|
|
|
+ <q-card-section class="q-py-none q-px-sm" >
|
|
|
+ <q-tab-panels v-model="activeTab" animated class="bg-background-2 full-height">
|
|
|
+ <q-tab-panel name="principal">
|
|
|
+ <q-form ref="formRef" class="row q-col-gutter-sm bg-background-2">
|
|
|
+ <q-input
|
|
|
+ v-model="form.nome_fantasia"
|
|
|
+ label="Nome Fantasia"
|
|
|
+ hint="Obrigatório"
|
|
|
+ dense
|
|
|
+ :rules="[inputRules.required]"
|
|
|
+ outlined
|
|
|
+ class="col-12 q-input-border"
|
|
|
+ bg-color="white"
|
|
|
+ hide-bottom-space
|
|
|
+ />
|
|
|
+ <q-input
|
|
|
+ v-model="form.razao_social"
|
|
|
+ label="Razão Social"
|
|
|
+ outlined
|
|
|
+ class="col-12 q-input-border q-mb-sm"
|
|
|
+ dense
|
|
|
+ bg-color="white"
|
|
|
+ hide-bottom-space
|
|
|
+ />
|
|
|
+ <q-input
|
|
|
+ v-model="form.cnpj"
|
|
|
+ label="CNPJ"
|
|
|
+ hint="Obrigatório"
|
|
|
+ outlined
|
|
|
+ class="col-4 q-input-border q"
|
|
|
+ :mask="masks.Brasil.docEmpresa"
|
|
|
+ dense
|
|
|
+ bg-color="white"
|
|
|
+ hide-bottom-space
|
|
|
+ />
|
|
|
+ <q-input
|
|
|
+ v-model="form.inscricao_estadual"
|
|
|
+ label="Inscrição Estadual"
|
|
|
+ mask="########################"
|
|
|
+ outlined
|
|
|
+ class="col-4 q-input-border q-mb-sm"
|
|
|
+ dense
|
|
|
+ bg-color="white"
|
|
|
+ hide-bottom-space
|
|
|
+ />
|
|
|
+ <q-input
|
|
|
+ v-model="form.inscricao_municipal"
|
|
|
+ label="Inscrição Municipal"
|
|
|
+ mask="########################"
|
|
|
+ outlined
|
|
|
+ class="col-4 q-input-border q-mb-sm"
|
|
|
+ dense
|
|
|
+ bg-color="white"
|
|
|
+ hide-bottom-space
|
|
|
+ />
|
|
|
+ <q-input
|
|
|
+ v-model="form.email"
|
|
|
+ label="Email"
|
|
|
+ :rules="[inputRules.email]"
|
|
|
+ outlined
|
|
|
+ class="col-12 q-input-border q-mb-sm"
|
|
|
+ dense
|
|
|
+ bg-color="white"
|
|
|
+ hide-bottom-space
|
|
|
+ />
|
|
|
+
|
|
|
+ <q-input
|
|
|
+ v-model="form.observacoes"
|
|
|
+ dense
|
|
|
+ outlined
|
|
|
+ label="Observações"
|
|
|
+ class="col-12 q-input-border q-mb-sm"
|
|
|
+ bg-color="white"
|
|
|
+ hide-bottom-space
|
|
|
+ autogrow
|
|
|
+ type="textarea"
|
|
|
+ /> </q-form
|
|
|
+ ></q-tab-panel>
|
|
|
+ <q-tab-panel name="enderecos">
|
|
|
+ <EnderecosComponent
|
|
|
+ :enderecos="enderecos"
|
|
|
+ :cliente="props.cliente"
|
|
|
+ />
|
|
|
+ </q-tab-panel>
|
|
|
+ </q-tab-panels>
|
|
|
+ </q-card-section>
|
|
|
+ <q-space />
|
|
|
+ <q-card-section >
|
|
|
<div class="row items-center">
|
|
|
<!-- Input com Toggle e textos Ativo/Inativo -->
|
|
|
- <div v-if="props.clienteId" class="col-auto row items-center">
|
|
|
+ <div v-if="props.clienteId && activeTab == 'principal'" class="col-auto row items-center">
|
|
|
<span class="q-mr-sm text-body-2">Inativo</span>
|
|
|
<q-toggle
|
|
|
v-model="form.status"
|
|
|
@@ -101,13 +122,13 @@
|
|
|
<q-card-actions align="right" class="flex justify-end">
|
|
|
<q-btn
|
|
|
outline
|
|
|
- padding="10px 20px"
|
|
|
+ padding="10px 40px"
|
|
|
label="Cancelar"
|
|
|
color="dark"
|
|
|
@click="onDialogCancel"
|
|
|
/>
|
|
|
<q-btn
|
|
|
- padding="10px 20px"
|
|
|
+ padding="10px 40px"
|
|
|
color="primary"
|
|
|
label="Salvar"
|
|
|
@click="onOKClick"
|
|
|
@@ -123,17 +144,14 @@
|
|
|
import { onMounted, ref } from "vue";
|
|
|
import { inputRules } from "src/helpers/utils";
|
|
|
import { useDialogPluginComponent } from "quasar";
|
|
|
+import { getCliente } from "src/api/clientes";
|
|
|
|
|
|
import masks from "src/helpers/masks.js";
|
|
|
import DefaultDialogHeader from "src/components/geral/DefaultDialogHeader.vue";
|
|
|
-import { getCliente } from "src/api/clientes";
|
|
|
-// import { getClientesInfos } from "src/api/clientes";
|
|
|
+import TabsGlobal from "src/components/geral/TabsGlobal.vue";
|
|
|
+import EnderecosComponent from "src/pages/clientes/components/EnderecosComponent.vue";
|
|
|
|
|
|
-defineEmits([
|
|
|
- // REQUIRED; need to specify some events that your
|
|
|
- // component will emit through useDialogPluginComponent()
|
|
|
- ...useDialogPluginComponent.emits,
|
|
|
-]);
|
|
|
+defineEmits([...useDialogPluginComponent.emits]);
|
|
|
|
|
|
const props = defineProps({
|
|
|
cliente: {
|
|
|
@@ -154,7 +172,16 @@ const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } =
|
|
|
useDialogPluginComponent();
|
|
|
|
|
|
const formRef = ref(null);
|
|
|
-
|
|
|
+const enderecos = ref([]);
|
|
|
+const contatos = ref([]);
|
|
|
+const notas = ref([]);
|
|
|
+const activeTab = ref("principal");
|
|
|
+const tabsItems = [
|
|
|
+ { name: "principal", label: "Principal", disable: false, hide: false },
|
|
|
+ { name: "enderecos", label: "Endereços", disable: false, hide: false },
|
|
|
+ { name: "contatos", label: "Contatos", disable: false, hide: false },
|
|
|
+ { name: "notas", label: "Notas", disable: false, hide: false },
|
|
|
+];
|
|
|
const form = ref({
|
|
|
nome_fantasia: null,
|
|
|
razao_social: null,
|
|
|
@@ -166,10 +193,9 @@ const form = ref({
|
|
|
status: "ativo",
|
|
|
});
|
|
|
|
|
|
-const onOKClick = () => {
|
|
|
- if (!formRef.value.validate()) {
|
|
|
- return;
|
|
|
- }
|
|
|
+const onOKClick = async () => {
|
|
|
+ const validate = await formRef.value.validate();
|
|
|
+ if (!validate) return;
|
|
|
|
|
|
onDialogOK(form.value);
|
|
|
};
|
|
|
@@ -177,6 +203,9 @@ const onOKClick = () => {
|
|
|
const fetchClientes = async () => {
|
|
|
const response = await getCliente(props.clienteId);
|
|
|
form.value = response;
|
|
|
+ enderecos.value = response.enderecos;
|
|
|
+ contatos.value = response.contatos;
|
|
|
+ notas.value = response.notas;
|
|
|
};
|
|
|
|
|
|
onMounted(async () => {
|