Przeglądaj źródła

chore: corrige unit file

ebagabee 2 tygodni temu
rodzic
commit
097deecebf

+ 14 - 3
src/pages/unit/components/AddEditPartnerDialog.vue

@@ -216,6 +216,7 @@ const citySelectRef = ref(null);
 const selectedState = ref(null);
 const selectedCity = ref(null);
 const avatarChanged = ref(false);
+const avatarFile = ref(null);
 
 // Exibe DD/MM/YYYY para o usuário; form.birth_date armazena YYYY-MM-DD para o backend
 const birthDateDisplay = ref(
@@ -262,7 +263,7 @@ watch(selectedCity, (city) => {
 
 function onAvatarChange(file) {
   avatarChanged.value = true;
-  form.avatar = file;
+  avatarFile.value = file;
 }
 
 const { loading, execute } = useSubmitHandler({
@@ -272,7 +273,17 @@ const { loading, execute } = useSubmitHandler({
 
 async function onOKClick() {
   if (offlineMode) {
-    onDialogOK({ ...form });
+    const partnerData = { ...form };
+    if (avatarFile.value instanceof File) {
+      if (partner?.avatar_url?.startsWith("blob:")) {
+        URL.revokeObjectURL(partner.avatar_url);
+      }
+      partnerData.avatar = avatarFile.value;
+      partnerData.avatar_url = URL.createObjectURL(avatarFile.value);
+    } else if (partner?.avatar_url) {
+      partnerData.avatar_url = partner.avatar_url;
+    }
+    onDialogOK(partnerData);
     return;
   }
 
@@ -280,7 +291,7 @@ async function onOKClick() {
     const formData = getFormAsFormData();
 
     if (avatarChanged.value) {
-      formData.append("avatar", form.avatar ?? "");
+      formData.append("avatar", avatarFile.value ?? "");
     }
 
     if (partner) {

+ 96 - 18
src/pages/unit/tabs/FinancialTab.vue

@@ -6,7 +6,9 @@
         <!-- Dados Bancários -->
         <div class="row q-col-gutter-sm">
           <div class="col-12">
-            <span class="text-subtitle1 text-weight-medium">Dados Bancários</span>
+            <span class="text-subtitle1 text-weight-medium"
+              >Dados Bancários</span
+            >
           </div>
 
           <DefaultSelect
@@ -19,9 +21,24 @@
             map-options
           />
 
-          <DefaultInput v-model="form.bank" label="Banco" class="col-12" outlined />
-          <DefaultInput v-model="form.agency" label="Agência" class="col-12" outlined />
-          <DefaultInput v-model="form.account" label="Conta" class="col-12" outlined />
+          <DefaultInput
+            v-model="form.bank"
+            label="Banco"
+            class="col-12"
+            outlined
+          />
+          <DefaultInput
+            v-model="form.agency"
+            label="Agência"
+            class="col-12"
+            outlined
+          />
+          <DefaultInput
+            v-model="form.account"
+            label="Conta"
+            class="col-12"
+            outlined
+          />
 
           <DefaultSelect
             v-model="form.account_type"
@@ -33,14 +50,26 @@
             map-options
           />
 
-          <DefaultInput v-model="form.account_holder" label="Titular da Conta" class="col-12" outlined />
-          <DefaultInput v-model="form.pix_key" label="Chave Pix" class="col-12" outlined />
+          <DefaultInput
+            v-model="form.account_holder"
+            label="Titular da Conta"
+            class="col-12"
+            outlined
+          />
+          <DefaultInput
+            v-model="form.pix_key"
+            label="Chave Pix"
+            class="col-12"
+            outlined
+          />
         </div>
 
         <!-- Dados para Faturamento -->
         <div class="row q-col-gutter-sm">
           <div class="col-12">
-            <span class="text-subtitle1 text-weight-medium">Dados para Faturamento</span>
+            <span class="text-subtitle1 text-weight-medium"
+              >Dados para Faturamento</span
+            >
           </div>
 
           <DefaultSelect
@@ -53,8 +82,18 @@
             map-options
           />
 
-          <DefaultInput v-model="form.due_date" label="Data de Vencimento" class="col-12" outlined />
-          <DefaultInput v-model="form.financial_email" label="E-mail Financeiro" class="col-12" outlined />
+          <DefaultInput
+            v-model="form.due_date"
+            label="Data de Vencimento"
+            class="col-12"
+            outlined
+          />
+          <DefaultInput
+            v-model="form.financial_email"
+            label="E-mail Financeiro"
+            class="col-12"
+            outlined
+          />
         </div>
       </div>
 
@@ -63,7 +102,9 @@
         <!-- Dados do Contrato -->
         <div class="row q-col-gutter-sm">
           <div class="col-12">
-            <span class="text-subtitle1 text-weight-medium">Dados do Contrato</span>
+            <span class="text-subtitle1 text-weight-medium"
+              >Dados do Contrato</span
+            >
           </div>
 
           <DefaultSelect
@@ -76,14 +117,34 @@
             map-options
           />
 
-          <DefaultInput v-model="form.maintenance_fee" label="Taxa de Manutenção" class="col-12" outlined type="number" />
-          <DefaultInput v-model="form.marketing_fund" label="Fundo de Marketing" class="col-12" outlined type="number" />
-          <DefaultInput v-model="form.tbr" label="TBR" class="col-12" outlined type="number" />
+          <DefaultInput
+            v-model="form.maintenance_fee"
+            label="Taxa de Manutenção"
+            class="col-12"
+            outlined
+            type="number"
+          />
+          <DefaultInput
+            v-model="form.marketing_fund"
+            label="Fundo de Marketing"
+            class="col-12"
+            outlined
+            type="number"
+          />
+          <DefaultInput
+            v-model="form.tbr"
+            label="TBR"
+            class="col-12"
+            outlined
+            type="number"
+          />
         </div>
 
         <div class="row q-col-gutter-sm">
           <div class="col-12">
-            <span class="text-subtitle1 text-weight-medium">Dados de Contato</span>
+            <span class="text-subtitle1 text-weight-medium"
+              >Dados de Contato</span
+            >
           </div>
 
           <div v-if="loadingPartners" class="col-12 row justify-center q-pa-md">
@@ -91,10 +152,17 @@
           </div>
 
           <template v-else>
-            <div v-for="(partner, index) in partners" :key="index" class="col-6">
+            <div
+              v-for="(partner, index) in partners"
+              :key="index"
+              class="col-6"
+            >
               <PartnerCardComponent :partner />
             </div>
-            <div v-if="partners.length === 0" class="col-12 text-grey-6 text-center q-pa-md">
+            <div
+              v-if="partners.length === 0"
+              class="col-12 text-grey-6 text-center q-pa-md"
+            >
               Nenhum sócio cadastrado.
             </div>
           </template>
@@ -105,7 +173,12 @@
     <div class="row justify-end q-mt-md items-end full-width q-px-xs">
       <div class="row q-gutter-sm">
         <q-btn label="Cancelar" color="primary" outline @click="resetForm" />
-        <q-btn label="Salvar" color="primary-2" :loading="saving" @click="onSave" />
+        <q-btn
+          label="Salvar"
+          color="primary-2"
+          :loading="saving"
+          @click="onSave"
+        />
       </div>
     </div>
   </div>
@@ -178,6 +251,8 @@ async function fetchData() {
     loadFinancial(),
     loadPartners(),
   ]);
+
+  console.log(financial);
 }
 
 async function loadFinancial() {
@@ -207,7 +282,10 @@ async function onSave() {
   if (!props.unitId) return;
   saving.value = true;
   try {
-    const saved = await upsertFinancial({ unit_id: props.unitId, ...form.value });
+    const saved = await upsertFinancial({
+      unit_id: props.unitId,
+      ...form.value,
+    });
     Object.assign(form.value, saved);
     originalForm = { ...saved };
   } catch (e) {

+ 19 - 2
src/pages/unit/tabs/PartnersTab.vue

@@ -44,7 +44,7 @@
                 text-color="white"
                 class="absolute"
                 style="top: 8px; right: 8px"
-                @click.stop="partners.splice(index, 1)"
+                @click.stop="removePendingPartner(index)"
               >
                 <q-tooltip>Remover sócio</q-tooltip>
               </q-btn>
@@ -93,7 +93,7 @@
 </template>
 
 <script setup>
-import { ref, onMounted } from "vue";
+import { ref, onMounted, onUnmounted } from "vue";
 import { useQuasar } from "quasar";
 import PartnerCardComponent from "src/components/shared/PartnerCardComponent.vue";
 import AddEditPartnerDialog from "src/pages/unit/components/AddEditPartnerDialog.vue";
@@ -124,6 +124,17 @@ async function fetchPartners() {
   }
 }
 
+function revokeBlobUrl(partner) {
+  if (partner.avatar_url?.startsWith("blob:")) {
+    URL.revokeObjectURL(partner.avatar_url);
+  }
+}
+
+function removePendingPartner(index) {
+  revokeBlobUrl(partners.value[index]);
+  partners.value.splice(index, 1);
+}
+
 function onAddClick() {
   if (props.unitId) {
     openDialog(null);
@@ -175,4 +186,10 @@ function confirmDelete(partner) {
 }
 
 onMounted(fetchPartners);
+
+onUnmounted(() => {
+  if (!props.unitId) {
+    partners.value.forEach(revokeBlobUrl);
+  }
+});
 </script>

+ 11 - 4
src/pages/unit/tabs/UnitDataTab.vue

@@ -256,13 +256,20 @@ const { loading, execute } = useSubmitHandler({
 
 async function onSave() {
   await execute(() => {
-    const formData = props.getFormAsFormData();
-
     if (props.unitId) {
+      const formData = props.getFormAsFormData();
       return updateUnit(props.unitId, formData);
     }
 
-    form.value.partners.forEach((partner, index) => {
+    const pendingPartners = form.value.partners.splice(0);
+    const pendingContracts = form.value.contracts.splice(0);
+
+    const formData = props.getFormAsFormData();
+
+    form.value.partners.push(...pendingPartners);
+    form.value.contracts.push(...pendingContracts);
+
+    pendingPartners.forEach((partner, index) => {
       Object.entries(partner).forEach(([key, value]) => {
         if (value != null) {
           formData.append(`partners[${index}][${key}]`, value);
@@ -270,7 +277,7 @@ async function onSave() {
       });
     });
 
-    form.value.contracts.forEach((contract) => {
+    pendingContracts.forEach((contract) => {
       formData.append("contracts[]", contract.file, contract.name);
     });
 

+ 0 - 9
src/stores/navigation.js

@@ -31,15 +31,6 @@ export const navigationStore = defineStore("navigation", () => {
       permission: false,
       permissionScope: "dashboard"
     },
-    {
-      type: "single",
-      title: "Cadastro de Unidade",
-      name: "UnitAddPage",
-      icon: "mdi-school-outline",
-      disable: false,
-      permission: false,
-      permissionScope: "dashboard"
-    },
   ]);
 
   const getNavigationAccess = () => {