Просмотр исходного кода

feat: :sparkles: ajuste layout inicial retirando i18n

Heron Slovinski 1 год назад
Родитель
Сommit
970085dc19

+ 4 - 4
.eslintrc.cjs

@@ -24,7 +24,7 @@ module.exports = {
     "plugin:vue/vue3-essential", // Priority A: Essential (Error Prevention)
     "plugin:vue/vue3-strongly-recommended", // Priority B: Strongly Recommended (Improving Readability)
     "plugin:vue/vue3-recommended", // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead)
-    "plugin:@intlify/vue-i18n/recommended",
+    // "plugin:@intlify/vue-i18n/recommended",
 
     // https://github.com/prettier/eslint-config-prettier#installation
     // usage with Prettier, provided by 'eslint-config-prettier'.
@@ -32,9 +32,9 @@ module.exports = {
   ],
 
   settings: {
-    "vue-i18n": {
-      localeDir: "./src/i18n/locales/*.json",
-    },
+    // "vue-i18n": {
+    //   localeDir: "./src/i18n/locales/*.json",
+    // },
   },
 
   plugins: [

+ 4 - 0
index.html

@@ -14,6 +14,10 @@
     <link rel="icon" type="image/png" sizes="32x32" href="icons/favicon-32x32.png">
     <link rel="icon" type="image/png" sizes="16x16" href="icons/favicon-16x16.png">
     <link rel="icon" type="image/ico" href="favicon.ico">
+    <link
+    rel="stylesheet"
+    href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500&display=swap"
+  />
   </head>
   <body>
     <!-- quasar:entry-point -->

+ 2 - 2
quasar.config.js

@@ -14,7 +14,7 @@ export default configure((ctx) => {
     // app boot file (/src/boot)
     // --> boot files are part of "main.js"
     // https://v2.quasar.dev/quasar-cli-vite/boot-files
-    boot: ["i18n", "axios", "setPermissions"],
+    boot: [ "axios", "setPermissions"],
 
     // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css
     css: ["app.scss"],
@@ -64,7 +64,7 @@ export default configure((ctx) => {
 
       vitePlugins: [
         [
-          "@intlify/unplugin-vue-i18n/vite",
+          // "@intlify/unplugin-vue-i18n/vite",
           {
             // if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false`
             // compositionOnly: false,

+ 2 - 12
src/App.vue

@@ -3,15 +3,13 @@
 </template>
 
 <script setup>
-import { Cookies, useQuasar } from "quasar";
+import { useQuasar } from "quasar";
 import { watch } from "vue";
-import { useI18n } from "vue-i18n";
 
 defineOptions({
   name: "App",
 });
 
-const { locale } = useI18n();
 
 const $q = useQuasar();
 const systemTheme = window.matchMedia("(prefers-color-scheme: dark)").matches
@@ -19,7 +17,7 @@ const systemTheme = window.matchMedia("(prefers-color-scheme: dark)").matches
   : "light";
 
 const theme = $q.cookies.get("theme") || systemTheme;
-$q.dark.set(theme === "dark");
+$q.dark.set(theme === "light");
 
 watch(
   () => $q.dark.isActive,
@@ -30,12 +28,4 @@ watch(
   },
 );
 
-watch(
-  () => locale.value,
-  (value) => {
-    Cookies.set("locale", value, {
-      expires: 365,
-    });
-  },
-);
 </script>

+ 26 - 0
src/assets/logo_simmer.svg

@@ -0,0 +1,26 @@
+<svg width="140" height="37" viewBox="0 0 140 37" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_73_1050)">
+<path d="M90.8926 28.4636L90.6277 29.8231H92.7965L92.6921 30.3607H90.5232L90.2454 31.7901H92.7658L92.6608 32.3401H89.5244L90.3875 27.9133H93.4313L93.3269 28.4636H90.8926Z" fill="white"/>
+<path d="M98.3657 27.6476H98.9574L98.0453 32.3401H97.4541L98.3657 27.6476Z" fill="white"/>
+<path d="M103.689 30.4111H105.797C105.827 29.7979 105.445 29.4626 104.866 29.4626C104.274 29.4626 103.837 29.8293 103.689 30.4111ZM103.627 30.854V30.8921C103.627 31.5055 103.961 31.8468 104.663 31.8468C105.069 31.8468 105.439 31.695 105.673 31.4612L105.926 31.8972C105.605 32.2072 105.112 32.3782 104.614 32.3782C103.646 32.3782 103.048 31.8087 103.048 30.9236C103.048 29.785 103.825 28.957 104.89 28.957C105.772 28.957 106.351 29.5007 106.351 30.405C106.351 30.5631 106.332 30.715 106.308 30.854H103.627Z" fill="white"/>
+<path d="M110.694 30.9298C110.694 29.7979 111.496 28.957 112.617 28.957C113.245 28.957 113.707 29.1969 113.96 29.684L113.461 29.9689C113.289 29.6459 112.992 29.488 112.574 29.488C111.834 29.488 111.292 30.076 111.292 30.9044C111.292 31.4925 111.643 31.8468 112.271 31.8468C112.66 31.8468 113.017 31.6888 113.245 31.3726L113.677 31.6888C113.375 32.1186 112.832 32.3782 112.247 32.3782C111.298 32.3782 110.694 31.8025 110.694 30.9298Z" fill="white"/>
+<path d="M119.018 31.2711C119.006 31.3345 118.999 31.3916 118.999 31.4482C118.999 31.7077 119.135 31.8659 119.43 31.8659C119.591 31.8659 119.763 31.8087 119.899 31.7077L120.022 32.1691C119.8 32.3273 119.523 32.3782 119.265 32.3782C118.752 32.3782 118.401 32.062 118.401 31.5368C118.401 31.4612 118.408 31.3726 118.426 31.2841L118.777 29.488H118.223L118.315 28.9884H118.876L119.018 28.2546H119.609L119.468 28.9884H120.404L120.305 29.488H119.369L119.018 31.2711Z" fill="white"/>
+<path d="M126.991 28.957L126.88 29.545C126.824 29.5384 126.787 29.5384 126.726 29.5384C126.073 29.5384 125.641 29.8927 125.493 30.6641L125.166 32.3401H124.575L125.222 28.9884H125.789L125.697 29.4879C125.992 29.1083 126.405 28.957 126.991 28.957Z" fill="white"/>
+<path d="M131.685 27.9765C131.685 27.7427 131.857 27.5528 132.111 27.5528C132.326 27.5528 132.486 27.717 132.486 27.9071C132.486 28.166 132.308 28.3431 132.055 28.3431C131.839 28.3431 131.685 28.179 131.685 27.9765ZM131.586 28.9884H132.178L131.531 32.3401H130.939L131.586 28.9884Z" fill="white"/>
+<path d="M136.534 30.9298C136.534 29.7979 137.335 28.957 138.457 28.957C139.085 28.957 139.547 29.1969 139.8 29.684L139.301 29.9689C139.128 29.6459 138.832 29.488 138.414 29.488C137.674 29.488 137.132 30.076 137.132 30.9044C137.132 31.4925 137.483 31.8468 138.111 31.8468C138.5 31.8468 138.857 31.6888 139.085 31.3726L139.517 31.6888C139.215 32.1186 138.672 32.3782 138.087 32.3782C137.138 32.3782 136.534 31.8025 136.534 30.9298Z" fill="white"/>
+<path d="M38.7866 24.6861H47.0567C47.8631 24.6861 48.4678 24.6418 48.8712 24.5523C49.2744 24.4632 49.6492 24.2845 49.9963 24.0157C50.3433 23.7479 50.5915 23.4647 50.7419 23.1666C50.8919 22.8684 50.9669 22.4962 50.9669 22.0493V20.4843C50.9669 18.6521 49.6663 17.7355 47.0655 17.7355H43.9788C42.3134 17.7355 41.0316 17.4544 40.1337 16.8917C39.2355 16.3288 38.7866 15.5065 38.7866 14.4252V13.0923C38.7866 11.9071 39.246 10.9961 40.1651 10.3593C40.6712 10.0039 41.1728 9.75969 41.67 9.62618C42.1666 9.49293 42.8745 9.42596 43.7937 9.42596H52.064V10.2279H43.7375C41.1118 10.2279 39.7993 11.1638 39.7993 13.0351V14.2604C39.7993 15.1815 40.2023 15.8721 41.0087 16.3323C41.4588 16.585 41.8336 16.7409 42.134 16.8002C42.4337 16.8598 43.0525 16.889 43.9908 16.889H47.0849C48.6785 16.889 49.8932 17.1907 50.7278 17.7939C51.5619 18.3967 51.9797 19.2639 51.9797 20.3957V22.004C51.9797 23.1506 51.519 24.0369 50.5982 24.662C50.0716 25.0043 49.5832 25.2278 49.1324 25.3319C48.6813 25.4365 47.9862 25.4884 47.0462 25.4884H38.7866V24.6861Z" fill="white"/>
+<path d="M55.2988 25.4884V9.42596H56.3116V25.4884H55.2988Z" fill="white"/>
+<path d="M60.3906 25.4884V10.2278C60.3906 9.84203 60.4283 9.58192 60.5032 9.4482C60.578 9.31474 60.7374 9.24783 60.9813 9.24783C61.1687 9.24783 61.3189 9.29228 61.4314 9.38128C61.544 9.47045 61.7033 9.69333 61.9096 10.0497L70.6027 24.4585L79.1251 10.0052C79.4062 9.50056 79.7341 9.24783 80.1099 9.24783C80.4093 9.30715 80.5784 9.47045 80.6161 9.73799V10.3617V25.4884H79.6033V11.0896L71.6236 24.6229C71.3947 25.0053 71.2052 25.2634 71.0528 25.3957C70.901 25.5275 70.7395 25.5944 70.5693 25.5944C70.3787 25.5944 70.2366 25.5574 70.1418 25.4849C70.047 25.4117 69.885 25.1846 69.6572 24.8041L61.4034 11.0709V25.4884H60.3906Z" fill="white"/>
+<path d="M84.4697 25.4884V10.2278C84.4697 9.84203 84.5074 9.58192 84.5823 9.4482C84.6571 9.31474 84.8165 9.24783 85.0604 9.24783C85.2478 9.24783 85.398 9.29228 85.5105 9.38128C85.6231 9.47045 85.7824 9.69333 85.9892 10.0497L94.6813 24.4585L103.204 10.0052C103.486 9.50056 103.814 9.24783 104.189 9.24783C104.489 9.30715 104.658 9.47045 104.696 9.73799V10.3617V25.4884H103.683V11.0896L95.7021 24.6229C95.4738 25.0053 95.2838 25.2634 95.1319 25.3957C94.9801 25.5275 94.8186 25.5944 94.6484 25.5944C94.4583 25.5944 94.3162 25.5574 94.2209 25.4849C94.1261 25.4117 93.9641 25.1846 93.7363 24.8041L85.4825 11.0709V25.4884H84.4697Z" fill="white"/>
+<path d="M121.798 25.4884H113.302C111.934 25.4884 110.832 25.1656 109.997 24.5193C109.163 23.8732 108.746 23.0229 108.746 21.9683V13.0796C108.746 11.9807 109.177 11.0968 110.04 10.4285C110.902 9.76006 112.055 9.42596 113.499 9.42596H121.854V10.2279H113.463C112.415 10.2279 111.536 10.4637 110.825 10.9343C110.113 11.4054 109.758 12.1193 109.758 13.0758V17.1564H121.854L121.798 17.9586H109.758V21.8571C109.758 22.7335 110.086 23.4241 110.743 23.9287C111.399 24.4338 112.299 24.6861 113.443 24.6861H121.798V25.4884Z" fill="white"/>
+<path d="M125.512 25.4884V9.42596H135.048C136.66 9.42596 137.889 9.73042 138.733 10.3395C139.577 10.9485 139.998 11.8472 139.998 13.0351V15.1959C139.998 16.2804 139.605 17.1269 138.817 17.7355C138.029 18.3448 136.933 18.6491 135.526 18.6491H128.381L139.885 25.489L138.146 25.4849L127.319 19.0204L126.892 18.7496C126.778 18.6594 126.721 18.524 126.721 18.3432C126.721 18.1475 126.782 18.0163 126.904 17.9487C127.026 17.8808 127.265 17.8468 127.621 17.8468H135.47C136.576 17.8468 137.439 17.6239 138.058 17.177C138.677 16.7302 138.986 16.0968 138.986 15.2777V12.9764C138.986 11.1442 137.683 10.2279 135.076 10.2279H126.525V25.4884H125.512Z" fill="white"/>
+<path d="M20.3595 15.2179C23.2374 15.2179 25.8952 15.2179 28.9979 15.2179C23.0591 22.6884 17.3701 29.8441 11.6811 37C11.589 36.9644 11.4969 36.9289 11.4048 36.8935C12.4644 32.5747 13.5241 28.2563 14.6357 23.7259C11.9655 23.7259 9.44472 23.7259 6.36279 23.7259C12.4773 15.5611 18.3046 7.77965 24.1322 -0.00179291C24.211 0.0317421 24.2901 0.0655441 24.3692 0.0991325C23.0507 5.07069 21.7321 10.042 20.3595 15.2179Z" fill="white"/>
+<path d="M3.35432 18.6404C3.35432 19.4641 3.42436 20.2682 3.5596 21.0526C4.20531 24.9207 6.39818 28.2791 9.49718 30.505C9.74745 31.6179 9.88776 32.7701 9.90268 33.9516C4.11024 31.2649 0.0851829 25.5238 0 18.8513V18.6404C0 13.9731 1.9325 9.74196 5.05146 6.67767C8.18053 3.60868 12.5059 1.71127 17.2871 1.71127C17.9229 1.71127 18.5537 1.74565 19.1696 1.81425C18.3034 2.66245 17.3473 3.41732 16.3158 4.07438C13.9328 4.38812 11.725 5.25604 9.83747 6.54052C5.92263 9.18789 3.35432 13.62 3.35432 18.6404Z" fill="white"/>
+<path d="M32.0062 18.3578C32.0062 17.5341 31.9361 16.73 31.8009 15.9457C31.1549 12.0773 28.9623 8.71886 25.8633 6.49312C25.613 5.38027 25.4729 4.22803 25.4578 3.04659C31.2502 5.73329 35.2753 11.4742 35.3605 18.1469V18.3578C35.3605 23.0252 33.428 27.2562 30.309 30.3203C27.18 33.3895 22.8543 35.2869 18.0734 35.2869C17.4376 35.2869 16.8068 35.2525 16.1909 35.1839C17.0571 34.3357 18.0132 33.5806 19.0447 32.9238C21.4277 32.6099 23.6355 31.7421 25.5228 30.4577C29.4379 27.8101 32.0062 23.3782 32.0062 18.3578Z" fill="white"/>
+</g>
+<defs>
+<clipPath id="clip0_73_1050">
+<rect width="140" height="37" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 5 - 0
src/assets/logo_simmer_closed.svg

@@ -0,0 +1,5 @@
+<svg width="28" height="29" viewBox="0 0 28 29" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.0562 11.9284C18.265 11.9284 20.3049 11.9284 22.6863 11.9284C18.1282 17.7833 13.7618 23.3916 9.39539 29C9.32468 28.9721 9.25401 28.9443 9.1833 28.9165C9.99656 25.5317 10.8099 22.1471 11.663 18.5965C9.61367 18.5965 7.67891 18.5965 5.31348 18.5965C10.0064 12.1973 14.479 6.09867 18.9518 0C19.0123 0.0262852 19.073 0.0527744 19.1337 0.0790997C18.1217 3.97554 17.1097 7.87182 16.0562 11.9284Z" fill="white"/>
+<path d="M3.00467 14.6107C3.00467 15.2563 3.05843 15.8865 3.16223 16.5013C3.65782 19.5329 5.34089 22.165 7.71942 23.9096C7.9115 24.7818 8.0192 25.6849 8.03064 26.6108C3.58485 24.5051 0.495555 20.0056 0.430176 14.776V14.6107C0.430176 10.9527 1.9134 7.63664 4.30725 5.23501C6.70887 2.8297 10.0287 1.34262 13.6983 1.34262C14.1863 1.34262 14.6704 1.36956 15.1431 1.42332C14.4784 2.0881 13.7445 2.67973 12.9528 3.19469C11.1238 3.44058 9.42929 4.12081 7.9806 5.12752C4.97589 7.20238 3.00467 10.6761 3.00467 14.6107Z" fill="white"/>
+<path d="M24.9954 14.3893C24.9954 13.7437 24.9416 13.1135 24.8378 12.4988C24.3421 9.46695 22.6592 6.8348 20.2806 5.09038C20.0886 4.21819 19.981 3.31513 19.9694 2.38918C24.4152 4.49487 27.5045 8.99426 27.5699 14.224V14.3893C27.5699 18.0473 26.0866 21.3634 23.6928 23.7648C21.2912 26.1703 17.9712 27.6574 14.3017 27.6574C13.8138 27.6574 13.3296 27.6305 12.8569 27.5767C13.5217 26.9119 14.2556 26.3201 15.0472 25.8053C16.8762 25.5593 18.5708 24.8792 20.0193 23.8725C23.0242 21.7975 24.9954 18.324 24.9954 14.3893Z" fill="white"/>
+</svg>

+ 0 - 18
src/boot/i18n.js

@@ -1,18 +0,0 @@
-import { boot } from "quasar/wrappers";
-import { createI18n } from "vue-i18n";
-import { Cookies } from "quasar";
-import messages from "src/i18n";
-
-const i18n = createI18n({
-  locale: Cookies.get("locale")
-    ? Cookies.get("locale")
-    : window.navigator.language,
-  globalInjection: true,
-  messages,
-});
-
-export default boot(({ app }) => {
-  app.use(i18n);
-});
-
-export { i18n };

+ 2 - 2
src/components/PasswordField.vue

@@ -4,7 +4,7 @@
     v-model="form.password"
     class="col-6"
     filled
-    :label="$t('users.password')"
+    label="Senha"
     :rules="[inputRules.required]"
     hide-bottom-space
     :type="isPwd ? 'password' : 'text'"
@@ -23,7 +23,7 @@
     v-model="form.password_confirmation"
     class="col-6"
     filled
-    :label="$t('general.confirm_password')"
+    label="Confirmação de Senha"
     :rules="[inputRules.required, confirmedPassword]"
     hide-bottom-space
     lazy-rules

+ 1 - 2
src/components/geral/DefaultDialogHeader.vue

@@ -23,14 +23,13 @@
 
 <script setup>
 import { ref, onMounted } from "vue";
-import { useI18n } from "vue-i18n";
 
 const emit = defineEmits(["maximized", "close"]);
 
 const props = defineProps({
   title: {
     type: Function,
-    default: () => useI18n().t("general.title"),
+    default: () => 'Título',
   },
   fullscreen: {
     type: Boolean,

+ 10 - 10
src/components/geral/DefaultTable.vue

@@ -7,7 +7,7 @@
     :pagination-label="getPaginationLabel"
     row-key="id"
     :rows="rows"
-    :rows-per-page-label="$t('general.rows_per_page')"
+    rows-per-page-label="Itens por página"
     :columns="props.columns"
     :visible-columns="visibleColumns"
     :filter="filter"
@@ -20,7 +20,7 @@
         outlined
         dense
         debounce="500"
-        :placeholder="$t('general.search')"
+        placeholder="Pesquisar"
         style="min-width: 400px"
         clearable
         autofocus
@@ -71,7 +71,7 @@
         v-if="props.dropDown"
         class="q-mr-md"
         color="primary"
-        :label="$t('general.options')"
+        label="Opções"
       />
 
       <q-btn
@@ -80,7 +80,7 @@
         color="primary"
         padding="12px 16px"
         :outline="props.outlineAdd"
-        :label="$t('general.add')"
+        label="Adicionar"
         @click="onAddItem"
       >
       </q-btn>
@@ -91,10 +91,10 @@
         <q-item-section>
           <span class="text-center">
             <div v-if="row.status && value" class="ativo body2 text-positive">
-              {{ $t("general.active") }}
+              Ativo
             </div>
             <div v-if="!row.status" class="inativo body2 text-accent">
-              {{ $t("general.inactive") }}
+              Inativo
             </div>
           </span>
         </q-item-section>
@@ -106,13 +106,13 @@
         <q-item-section>
           <span class="text-center">
             <div v-if="row.ativo && value" class="ativo body2 text-positive">
-              {{ $t("general.active") }}
+              Ativo
             </div>
             <div v-if="row.ativo && !value" class="ativo body2 text-positive">
-              {{ $t("general.active") }}
+              Ativo
             </div>
             <div v-if="!row.ativo" class="inativo body2 text-accent">
-              {{ $t("general.active") }}
+              Ativo
             </div>
           </span>
         </q-item-section>
@@ -123,7 +123,7 @@
       <div class="q-my-md row justify-center full-width">
         <q-spinner v-if="loading" color="primary" size="30px" />
         <div v-else class="q-pa-md body2">
-          {{ $t("errors.no_records_found") }}
+          Nenhum registro encontrado
         </div>
       </div>
     </template>

+ 10 - 10
src/components/geral/DefaultTableServerSide.vue

@@ -11,7 +11,7 @@
     "
     :pagination-label="getPaginationLabel"
     :rows="rows"
-    :rows-per-page-label="$t('general.rows_per_page')"
+    rows-per-page-label="Itens por página"
     :columns="props.columns"
     :visible-columns="visibleColumns"
     :filter="pagination.filter"
@@ -96,10 +96,10 @@
         <q-item-section>
           <span class="text-center">
             <div v-if="row.status && value" class="ativo body2 text-positive">
-              {{ $t("general.active") }}
+              Ativo
             </div>
             <div v-if="!row.status" class="inativo body2 text-accent">
-              {{ $t("general.inactive") }}
+              Inativo
             </div>
           </span>
         </q-item-section>
@@ -111,13 +111,13 @@
         <q-item-section>
           <span class="text-center">
             <div v-if="row.ativo && value" class="ativo body2 text-positive">
-              {{ $t("general.active") }}
+              Ativo
             </div>
             <div v-if="row.ativo && !value" class="ativo body2 text-positive">
-              {{ $t("general.active") }}
+              Ativo
             </div>
             <div v-if="!row.ativo" class="inativo body2 text-accent">
-              {{ $t("general.active") }}
+              Ativo
             </div>
           </span>
         </q-item-section>
@@ -128,7 +128,7 @@
       <div class="q-my-md row justify-center full-width">
         <q-spinner v-if="loading" color="primary" size="30px" />
         <div v-else class="q-pa-md body2">
-          {{ $t("errors.no_records_found") }}
+          Nenhum registro encontrado
         </div>
       </div>
     </template>
@@ -136,7 +136,7 @@
     <template #bottom="scope">
       <div class="flex full-width justify-end">
         <div class="flex items-center">
-          {{ $t("general.rows_per_page") }}
+          Re
           <q-select
             v-model="pagination.rowsPerPage"
             class="q-mx-sm"
@@ -148,7 +148,7 @@
               <q-item v-bind="selectData.itemProps">
                 <q-item-section>
                   <q-item-label>{{
-                    selectData.opt == 0 ? $t("general.all") : selectData.opt
+                    selectData.opt == 0 ? "Todos" : selectData.opt
                   }}</q-item-label>
                 </q-item-section>
               </q-item>
@@ -156,7 +156,7 @@
           </q-select>
         </div>
         <div class="flex items-center">
-          {{ pagination.from + "-" + pagination.to }} {{ $t("labels.of") }}
+          {{ pagination.from + "-" + pagination.to }} de
           {{ pagination.rowsNumber }}
         </div>
         <div class="flex items-center">

+ 19 - 39
src/components/geral/LeftMenuLayout.vue

@@ -27,29 +27,13 @@
         </q-btn>
       </div>
 
-      <q-list class="column q-mb-md no-wrap" style="border-radius: 6px">
-        <q-item v-ripple clickable>
-          <div class="flex">
-            <q-item-section avatar>
-              <template #default>
-                <img
-                  :src="someAvatar()"
-                  alt="avatar"
-                  style="width: 20px; height: 20px; border-radius: 50%"
-                />
-              </template>
-            </q-item-section>
-            <q-item-section>Usuario</q-item-section>
-          </div>
-          <q-tooltip
-            v-if="miniState"
-            anchor="center right"
-            self="center left"
-            :offset="[10, 10]"
-            >Usuario</q-tooltip
-          >
-        </q-item>
-      </q-list>
+      <div v-if="miniState" class="flex bg-primary">
+        <q-img src="../../assets/logo_simmer_closed.svg" style="width: 30px" />
+      </div>
+
+      <div v-else class="flex bg-primary">
+        <q-img src="../../assets/logo_simmer.svg" style="width: 140px" />
+      </div>
 
       <q-list class="column no-wrap">
         <template v-for="menu in menus" :key="menu.name">
@@ -67,13 +51,13 @@
             <q-item-section avatar>
               <q-icon :name="menu.icon" style="font-size: 18px" />
             </q-item-section>
-            <q-item-section>{{ $t(menu.title) }}</q-item-section>
+            <q-item-section>{{ menu.title }}</q-item-section>
             <q-tooltip
               v-if="miniState"
               anchor="center right"
               self="center left"
               :offset="[10, 10]"
-              >{{ $t(menu.title) }}</q-tooltip
+              >{{ menu.title }}</q-tooltip
             >
           </q-item>
           <!-- Expansive Menu with children -->
@@ -84,7 +68,7 @@
                 anchor="center right"
                 self="center left"
                 :offset="[10, 10]"
-                >{{ $t(menu.title) }}</q-tooltip
+                >{{ menu.title }}</q-tooltip
               >
               <q-expansion-item
                 v-model="isExpasionItemExpanded"
@@ -99,7 +83,7 @@
                   <q-item-section avatar>
                     <q-icon :name="menu.icon" style="font-size: 18px" />
                   </q-item-section>
-                  <q-item-section>{{ $t(menu.title) }}</q-item-section>
+                  <q-item-section>{{ menu.title }}</q-item-section>
                 </template>
                 <div v-for="child in menu.childrens" :key="child.name">
                   <q-item
@@ -113,13 +97,13 @@
                     <q-item-section avatar>
                       <q-icon :name="child.icon" style="font-size: 18px" />
                     </q-item-section>
-                    <q-item-section>{{ $t(child.title) }}</q-item-section>
+                    <q-item-section>{{ child.title }}</q-item-section>
                     <q-tooltip
                       v-if="miniState"
                       anchor="center right"
                       self="center left"
                       :offset="[10, 10]"
-                      >{{ $t(child.title) }}</q-tooltip
+                      >{{ child.title }}</q-tooltip
                     >
                   </q-item>
                 </div>
@@ -137,13 +121,13 @@
                 <q-item-section avatar>
                   <q-icon :name="menu.icon" style="font-size: 18px" />
                 </q-item-section>
-                <q-item-section>{{ $t(menu.title) }}</q-item-section>
+                <q-item-section>{{ menu.title }}</q-item-section>
                 <q-tooltip
                   v-if="miniState"
                   anchor="center right"
                   self="center left"
                   :offset="[10, 10]"
-                  >{{ $t(menu.title) }}</q-tooltip
+                  >{{ menu.title }}</q-tooltip
                 >
                 <q-menu anchor="top right" self="top left">
                   <q-list style="min-width: 100px">
@@ -161,7 +145,7 @@
                       <q-item-section avatar>
                         <q-icon :name="child.icon" style="font-size: 18px" />
                       </q-item-section>
-                      <q-item-section>{{ $t(child.title) }}</q-item-section>
+                      <q-item-section>{{ child.title }}</q-item-section>
                     </q-item>
                   </q-list>
                 </q-menu>
@@ -210,16 +194,12 @@ const childrenAreActive = (children) => {
   });
 };
 
-const someAvatar = () => {
-  return "https://cdn.quasar.dev/img/avatar4.jpg";
-};
-
 const isExpasionItemExpanded = ref(false);
 
 const menus = ref([
   {
     type: "single",
-    title: "navigation.dashboard",
+    title: "Dashboard",
     name: "HomePage",
     icon: "mdi-home-variant-outline",
     disable: false,
@@ -228,7 +208,7 @@ const menus = ref([
   },
   {
     type: "expansive",
-    title: "navigation.registration",
+    title: "Configurações",
     icon: "mdi-cog-outline",
     disable: false,
     permission: false,
@@ -236,7 +216,7 @@ const menus = ref([
     childrens: [
       {
         type: "single",
-        title: "navigation.users",
+        title: "Usuários",
         name: "UsersPage",
         icon: "mdi-account-multiple-outline",
         disable: false,

+ 202 - 5
src/css/app.scss

@@ -1,4 +1,110 @@
 // app global css in SCSS format
+html,
+body,
+#q-app {
+  font-family: "Montserrat" !important;
+  font-size: 14px;
+}
+
+.font-h1 {
+  font-family: "Montserrat";
+  font-size: 96px;
+  font-weight: 300;
+  line-height: 144px;
+}
+
+.font-h2 {
+  font-family: "Montserrat";
+  font-size: 60px;
+  font-weight: 300;
+  line-height: 90px;
+}
+
+.font-h3 {
+  font-family: "Montserrat";
+  font-size: 48px;
+  font-weight: 400;
+  line-height: 72px;
+}
+
+.font-h4 {
+  font-family: "Montserrat";
+  font-size: 34px;
+  font-weight: 400;
+  line-height: 51px;
+}
+
+.font-h5 {
+  font-family: "Montserrat";
+  font-size: 24px;
+  font-weight: 400;
+  line-height: 36px;
+}
+
+.font-h6 {
+  font-family: "Montserrat";
+  font-size: 20px;
+  font-weight: 500;
+  line-height: 30px;
+  letter-spacing: 0.7px;
+}
+
+.font-subtitle-1 {
+  font-family: "Montserrat";
+  font-size: 16px;
+  font-weight: 400;
+  line-height: 24px;
+  letter-spacing: 0.15px;
+}
+
+.font-subtitle-2 {
+  font-family: "Montserrat";
+  font-size: 14px;
+  font-weight: 500;
+  line-height: 21px;
+  letter-spacing: 0.1px;
+  text-align: left;
+}
+
+.font-body-1 {
+  font-family: "Montserrat";
+  font-size: 16px;
+  font-weight: 400;
+  line-height: 24px;
+  letter-spacing: 0.5px;
+}
+
+.font-body-2 {
+  font-family: "Montserrat";
+  font-size: 14px;
+  font-weight: 400;
+  line-height: 20px;
+  letter-spacing: 0.25px;
+}
+
+.font-overline {
+  font-family: "Montserrat";
+  font-size: 10px;
+  font-weight: 400;
+  line-height: 15px;
+  letter-spacing: 1.5px;
+}
+
+.font-caption {
+  font-family: "Montserrat";
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 18px;
+  letter-spacing: 0.4px;
+}
+
+.font-button {
+  font-family: "Montserrat";
+  font-size: 14px;
+  font-weight: 500;
+  line-height: 21px;
+  letter-spacing: 1.25px;
+}
 
 .input-disable {
   .q-field--outlined .q-field__control::before {
@@ -7,9 +113,100 @@
   }
 }
 
-.q-drawer:has(.detached-container) {
-  margin: 16px !important;
-  margin-bottom: 16px !important;
-  margin-left: 10px !important;
-  border-radius: 6px !important;
+.q-input-border {
+  .q-field__control::before {
+    border: 1px solid #b9b9b9 !important;
+    transition: border-color 0.36s cubic-bezier(0.4, 0, 0.2, 1);
+  }
+}
+
+.q-field--labeled .q-field__control,
+.q-field--focused .q-field__control {
+  border-radius: 8px !important;
+}
+
+.q-field--outlined.q-field--rounded .q-field__control {
+  border-radius: 8px;
+}
+
+// quasar component overrides
+.q-field__control,
+.q-item--active,
+.q-toggle__inner--truthy {
+  color: #ffd700 !important;
+  border-radius: 8px;
+}
+
+.q-input-no-border {
+  .q-field__control,
+  .q-item--active,
+  .q-toggle__inner--truthy,
+  .q-field--labeled .q-field__control,
+  .q-field--focused .q-field__control,
+  .q-field--outlined.q-field--rounded .q-field__control {
+    color: #ffd700 !important;
+    border-radius: 0px;
+  }
+}
+
+.select-rounded {
+  border-radius: 8px;
+}
+
+.default-button-padding {
+  padding: 12px 16px 12px 16px !important;
+  border-radius: 8px;
+}
+
+.q-checkbox__bg {
+  border-radius: 4px !important;
+  border: 1px solid #ffd700 !important;
+}
+
+.img-gradient {
+  position: relative;
+}
+
+.img-gradient::after {
+  content: "";
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 100%; /* A metade inferior da imagem */
+  background: linear-gradient(0, #090808 20.86%, rgba(0, 0, 0, 0.3) 81.63%);
+}
+
+.rounded-full {
+  border-radius: 50% !important;
+}
+
+.q-select__dialog {
+  background-color: #ffffff !important;
+  border: 0.4px solid #5b5a5a6e !important;
+  border-radius: 8px !important;
+  box-shadow: 0px 1px 2px 0px #00000040 !important;
+  color: #000000 !important;
+}
+
+.q-menu {
+  background-color: #ffffff;
+  border: 0.4px solid #5b5a5a6e;
+  border-radius: 8px !important;
+  box-shadow: 0px 1px 2px 0px #00000040;
+  color: #090808 !important;
+}
+
+.q-item,
+.q-field__append {
+  color: #090808 !important;
+}
+
+.card-size {
+  width: 100px;
+  height: 80px;
+  padding: 8px 16px 8px 16px;
+  border-radius: 8px;
+  box-shadow: 0px;
+  text-transform: capitalize;
 }

+ 47 - 32
src/css/quasar.variables.scss

@@ -1,35 +1,50 @@
-// Quasar SCSS (& Sass) Variables
-// --------------------------------------------------
-// To customize the look and feel of this app, you can override
-// the Sass/SCSS variables found in Quasar's source Sass/SCSS files.
 
-// Check documentation for full list of Quasar variables
 
-// Your own variables (that are declared here) and Quasar's own
-// ones will be available out of the box in your .vue/.scss/.sass files
-
-// It's highly recommended to change the default colors
-// to match your app's branding.
-// Tip: Use the "Theme Builder" on Quasar's documentation website.
-
-$primary: #2d69eb;
-$secondary: #d6d6d6;
-$accent: #ff1717;
-
-$dark: #1d1d1d;
-$dark-page: #0d0c0c;
-
-$positive: #21ba45;
-$negative: #c10015;
-$info: #31ccec;
-$warning: #f2c037;
-
-$page: #f5f5f5;
-
-.body--light {
-  --q-page: #f5f5f5;
-}
-
-.body--dark {
-  --q-page: #1d1d1d;
+$colors: (
+  "primary": #ED3237,
+  "primary-2": #F26569,
+  "primary-3": #F6999B,
+  "primary-4": #FBCCCE,
+  "primary-5": #F8E9E9,
+  "second": #C1C1C1,
+  "second-2": #D1D1D1,
+  "second-3": #E0E0E0,
+  "second-4": #F0F0F0,
+  "text": #232323,
+  "text-2": #565454,
+  "text-3": #919191,
+  "text-4": #D5D5D5,
+  "background": #EFEFEF,
+  "background-2": #F7F9F7,
+  "background-3": #FAFBF9,
+  "background-4": #F6F9FC,
+  "background-secondary": #848688,
+  "background-secondary-2": #A9AAAB,
+  "background-secondary-3": #C1C2C3,
+  "background-secondary-4": #DADADB,
+
+
+  "green": #01EC01,
+  "green-2": #41F141,
+  "green-3": #80F680,
+  "green-4": #C0FAC0,
+
+  "blue": #0167EE,
+  "blue-2": #418DF2,
+  "blue-3": #80B3F7,
+  "blue-4": #C0D9FB,
+
+  "yellow": #F8C808,
+  "yellow-2": #F9D646,
+  "yellow-3": #FBE384,
+  "yellow-4": #FDF1C2,
+);
+
+@each $name, $color in $colors {
+  .text-#{$name} {
+    color: $color !important;
+  }
+  .bg-#{$name} {
+    background: $color !important;
+  }
 }

+ 8 - 8
src/helpers/utils.js

@@ -1,4 +1,4 @@
-import { useI18n } from "vue-i18n";
+
 
 /**
  * Este é um arquivo que contem funções utilitárias.
@@ -9,15 +9,15 @@ import { useI18n } from "vue-i18n";
  * @description Regras de validação de inputs.
  */
 const inputRules = {
-  required: (value) => !!value || useI18n().t("rules.required"),
-  requiredNumber: (value) => !isNaN(value) || useI18n().t("rules.required"),
+  required: (value) => !!value || 'Este campo é obrigatório',
+  requiredNumber: (value) => !isNaN(value) || 'Este campo é obrigatório',
   requiredHideMessage: (value) => !!value,
-  min: (value) => value.length >= 3 || useI18n().t("rules.min", { min: 3 }),
+  min: (value) => value.length >= 3 || 'Este campo deve ter pelo menos 3 caracteres',
   email: (value) => {
     const pattern =
       /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
     if (!value || value == "") return true;
-    return pattern.test(value) || useI18n().t("rules.email");
+    return pattern.test(value) || 'Este campo deve ser um email válido';
   },
   emails: (value) => {
     if (!value || value == "") return true;
@@ -27,7 +27,7 @@ const inputRules = {
       .filter((email) => email);
     return (
       emails.every((email) => inputRules.email(email) == true) ||
-      useI18n().t("rules.email", 2)
+      'Estes campos devem ser emails válidos'
     );
   },
 };
@@ -54,10 +54,10 @@ const excerpt = (string, size = 30) => {
  * @returns {string} data formatada.
  */
 const formatDateDMYtoYMD = (date, time) => {
-  if (!date) throw new Error(useI18n().t("rules.required"));
+  if (!date) throw new Error('Este campo é obrigatório');
   const testDate =
     /^([0-2][0-9]|(3)[0-1])(\/)(((0)[0-9])|((1)[0-2]))(\/)\d{4}$/;
-  if (testDate.test(date) === false) throw new Error(useI18n().t("rules.date"));
+  if (testDate.test(date) === false) throw new Error('Este campo deve ser uma data válida');
 
   const [day, month, year] = date.split("/");
   return `${year}-${month}-${day} ${time ? time : ""}`;

+ 0 - 9
src/i18n/index.js

@@ -1,9 +0,0 @@
-import en from "./locales/en.json";
-import pt from "./locales/pt.json";
-import es from "./locales/es.json";
-
-export default {
-  "en-US": en,
-  "pt-BR": pt,
-  "es-ES": es,
-};

+ 0 - 59
src/i18n/locales/en.json

@@ -1,59 +0,0 @@
-{
-  "general": {
-    "add": "Add",
-    "edit": "Edit",
-    "options": "Options",
-    "welcome": "Welcome",
-    "version": "Version",
-    "all": "All",
-    "active": "Active",
-    "inactive": "Inactive",
-    "confirm_password": "Confirm Password",
-    "search": "Search",
-    "title": "Title",
-    "rows_per_page": "Rows per page",
-    "save": "Save",
-    "cancel": "Cancel"
-  },
-  "errors": {
-    "404": "Page not found",
-    "no_records_found": "No records found",
-    "failed": "Action failed",
-    "success": "Action was successful"
-  },
-  "navigation": {
-    "dashboard": "Dashboard",
-    "login": "Login",
-    "logout": "Logout",
-    "exit": "Exit",
-    "registration": "Registration",
-    "users": "Users"
-  },
-  "users": {
-    "user": "{something} user | {something} users",
-    "name": "Name",
-    "name_and_surname": "Name and Surname",
-    "password": "Password",
-    "getUser": "Get User",
-    "createUser": "Create User",
-    "updateUser": "Update User"
-  },
-  "labels": {
-    "of": "of",
-    "to": "to"
-  },
-  "permissions": {
-    "add": "You don't have permission to add this",
-    "view": "You don't have permission to view this",
-    "edit": "You don't have permission to edit this",
-    "delete": "You don't have permission to delete this",
-    "create": "You don't have permission to create this"
-  },
-  "rules": {
-    "required": "This field is required",
-    "min": "This field must be at least {min} characters",
-    "max": "This field must be at most {max} characters",
-    "email": "This field must be a valid email | These fields must be valid emails",
-    "date": "This field must be a valid date"
-  }
-}

+ 0 - 59
src/i18n/locales/es.json

@@ -1,59 +0,0 @@
-{
-  "general": {
-    "add": "Añadir",
-    "edit": "Editar",
-    "options": "Opciones",
-    "welcome": "Bienvenido",
-    "version": "Versión",
-    "all": "Todos",
-    "active": "Activo",
-    "inactive": "Inactivo",
-    "confirm_password": "Confirmar contraseña",
-    "search": "Buscar",
-    "title": "Título",
-    "rows_per_page": "Filas por página",
-    "save": "Guardar",
-    "cancel": "Cancelar"
-  },
-  "errors": {
-    "404": "Página no encontrada",
-    "no_records_found": "No se encontraron registros",
-    "failed": "La acción falló",
-    "success": "La acción fue exitosa"
-  },
-  "navigation": {
-    "dashboard": "Tablero",
-    "login": "Iniciar sesión",
-    "logout": "Cerrar sesión",
-    "exit": "Salir",
-    "registration": "Registro",
-    "users": "Usuarios"
-  },
-  "users": {
-    "user": "{something} usuario | {something} usuarios",
-    "name": "Nombre",
-    "name_and_surname": "Nombre y apellido",
-    "password": "Contraseña",
-    "getUser": "Obtener usuario",
-    "createUser": "Crear usuario",
-    "updateUser": "Actualizar usuario"
-  },
-  "labels": {
-    "of": "de",
-    "to": "a"
-  },
-  "permissions": {
-    "add": "No tienes permiso para agregar esto",
-    "view": "No tienes permiso para ver esto",
-    "edit": "No tienes permiso para editar esto",
-    "delete": "No tienes permiso para eliminar esto",
-    "create": "No tienes permiso para crear esto"
-  },
-  "rules": {
-    "required": "Este campo es obligatorio",
-    "min": "Este campo debe tener al menos {min} caracteres",
-    "max": "Este campo debe tener como máximo {max} caracteres",
-    "email": "Este campo debe ser un correo electrónico válido | Estos campos deben ser correos electrónicos válidos",
-    "date": "Este campo debe ser una fecha válida"
-  }
-}

+ 0 - 59
src/i18n/locales/pt.json

@@ -1,59 +0,0 @@
-{
-  "general": {
-    "add": "Adicionar",
-    "edit": "Editar",
-    "options": "Opções",
-    "welcome": "Bem-vindo",
-    "version": "Versão",
-    "all": "Todos",
-    "active": "Ativo",
-    "inactive": "Inativo",
-    "confirm_password": "Confirmar senha",
-    "search": "Buscar",
-    "title": "Título",
-    "rows_per_page": "Linhas por página",
-    "save": "Salvar",
-    "cancel": "Cancelar"
-  },
-  "errors": {
-    "404": "Página não encontrada",
-    "no_records_found": "Nenhum registro encontrado",
-    "failed": "A ação falhou",
-    "success": "A ação foi bem sucedida"
-  },
-  "navigation": {
-    "dashboard": "Dashboard",
-    "login": "Login",
-    "logout": "Logout",
-    "exit": "Sair",
-    "registration": "Registro",
-    "users": "Usuários"
-  },
-  "users": {
-    "user": "{something} usuario | {something} usuarios",
-    "name_and_surname": "Nome e sobrenome",
-    "name": "Nome",
-    "password": "Senha",
-    "getUser": "Obter usuário",
-    "createUser": "Criar usuário",
-    "updateUser": "Atualizar usuário"
-  },
-  "labels": {
-    "of": "de",
-    "to": "de"
-  },
-  "permissions": {
-    "add": "Você não tem permissão para adicionar isso",
-    "view": "Você não tem permissão para visualizar isso",
-    "edit": "Você não tem permissão para editar isso",
-    "delete": "Você não tem permissão para excluir isso",
-    "create": "Você não tem permissão para criar isso"
-  },
-  "rules": {
-    "required": "Este campo é obrigatório",
-    "min": "Este campo deve ter pelo menos {min} caracteres",
-    "max": "Este campo deve ter no máximo {max} caracteres",
-    "email": "Este campo deve ser um email válido | Estes campos devem ser emails válidos",
-    "date": "Este campo deve ser uma data válida"
-  }
-}

+ 1 - 2
src/pages/ErrorNotFound.vue

@@ -3,11 +3,10 @@
     class="fullscreen bg-blue text-white text-center q-pa-md flex flex-center"
   >
     <div>
-      <!-- eslint-disable-next-line @intlify/vue-i18n/no-raw-text -->
       <div style="font-size: 30vh">{{ "404" }}</div>
 
       <div class="text-h2" style="opacity: 0.4">
-        {{ $t("errors.404") }}
+        Página não encontrada
       </div>
 
       <q-btn

+ 3 - 3
src/pages/LoginPage.vue

@@ -6,7 +6,7 @@
       </div>
 
       <q-card-section class="text-center">
-        <div class="text-h4">{{ $t("general.welcome") }}</div>
+        <div class="text-h4">Bem-vindo</div>
       </q-card-section>
 
       <q-form
@@ -30,7 +30,7 @@
 
           <q-input
             v-model="password"
-            :label="$t('users.password')"
+            label="Senha"
             filled
             :type="isPwd ? 'password' : 'text'"
             class="q-mt-xs"
@@ -51,7 +51,7 @@
         <q-card-actions align="right">
           <q-btn
             color="primary"
-            :label="$t('navigation.login')"
+            label="Login"
             size="md"
             padding="md"
             type="submit"

+ 5 - 9
src/pages/users/UsersPage.vue

@@ -20,7 +20,6 @@
 import DefaultTable from "src/components/geral/DefaultTable.vue";
 import { ref, defineAsyncComponent } from "vue";
 import { useQuasar } from "quasar";
-import { useI18n } from "vue-i18n";
 import { permissionStore } from "src/stores/permission";
 import { getUsers, createUser, updateUser } from "src/api/user";
 
@@ -31,12 +30,11 @@ const AddEditUserDialog = defineAsyncComponent(
 const permission_store = permissionStore();
 const $q = useQuasar();
 const tableKey = ref(0);
-const { t } = useI18n();
 
 const columns = [
   {
     name: "nome",
-    label: t("users.name"),
+    label: "Nome",
     field: "name",
     align: "left",
     style: "width: 50%",
@@ -58,7 +56,7 @@ const onRowClick = ({ row }) => {
     $q.loading.hide();
     $q.notify({
       type: "negative",
-      message: t("permissions.view"),
+      message: "Você não tem permissão para visualizar usuários",
     });
     return;
   }
@@ -66,8 +64,7 @@ const onRowClick = ({ row }) => {
     component: AddEditUserDialog,
     componentProps: {
       user: row,
-      title: () =>
-        useI18n().t("users.user", { something: useI18n().t("general.edit") }),
+      title: 'Editar Usuário',
     },
   }).onOk(async (payload) => {
     await updateUser(payload, row.id);
@@ -80,7 +77,7 @@ const onAddItem = () => {
     $q.loading.hide();
     $q.notify({
       type: "negative",
-      message: t("permissions.add"),
+      message: "Você não tem permissão para adicionar usuários",
     });
     return;
   }
@@ -88,8 +85,7 @@ const onAddItem = () => {
     component: AddEditUserDialog,
 
     componentProps: {
-      title: () =>
-        useI18n().t("users.user", { something: useI18n().t("general.add") }),
+      title: 'Adicionar Usuário',
     },
   }).onOk(async (payload) => {
     await createUser(payload);

+ 4 - 5
src/pages/users/components/AddEditUserDialog.vue

@@ -6,8 +6,8 @@
         <q-form ref="formRef" class="row q-col-gutter-sm">
           <q-input
             v-model="name"
-            :label="$t('users.name')"
-            :hint="$t('users.name_and_surname')"
+            label="Nome"
+            hint="Nome e sobrenome"
             :rules="[inputRules.required]"
             class="col-6"
           />
@@ -19,7 +19,7 @@
           />
           <q-input
             v-model="password"
-            :label="$t('users.password')"
+            label="Senha"
             :rules="[inputRules.min(6)]"
             class="col-6"
           />
@@ -37,7 +37,6 @@
 import { ref } from "vue";
 import { inputRules } from "src/helpers/utils";
 import { useDialogPluginComponent } from "quasar";
-import { useI18n } from "vue-i18n";
 
 import DefaultDialogHeader from "src/components/geral/DefaultDialogHeader.vue";
 
@@ -54,7 +53,7 @@ const props = defineProps({
   },
   title: {
     type: Function,
-    default: () => useI18n().t("general.title"),
+    default: () => "Adicionar Usuário",
   },
 });
 

+ 1 - 2
src/router/index.js

@@ -8,7 +8,6 @@ import {
 import routes from "./routes";
 import { Cookies, Notify } from "quasar";
 import { permissionStore } from "src/stores/permission";
-import { useI18n } from "vue-i18n";
 /*
  * If not building with SSR mode, you can
  * directly export the Router instantiation;
@@ -45,7 +44,7 @@ export default route(function (/* { store, ssrContext } */) {
       const permission = getAccess(to.meta.requiredPermission, "view");
       if (!permission) {
         Notify.create({
-          message: useI18n().t("permissions.view"),
+          message: "Você não tem permissão para acessar essa página",
           type: "negative",
         });
         return next(from);