CountryPage.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <template>
  2. <div>
  3. <DefaultHeaderPage />
  4. <div>
  5. <DefaultTable
  6. ref="tableRef"
  7. :columns="columns"
  8. :api-call="getCountries"
  9. :delete-function="deleteCountry"
  10. :mostrar-selecao-de-colunas="false"
  11. :mostrar-botao-fullscreen="false"
  12. :mostrar-toggle-inativos="false"
  13. open-item
  14. add-item
  15. @on-row-click="onRowClick"
  16. @on-add-item="onAddItem"
  17. />
  18. </div>
  19. </div>
  20. </template>
  21. <script setup>
  22. import { defineAsyncComponent, useTemplateRef } from "vue";
  23. import { useQuasar } from "quasar";
  24. import { useI18n } from "vue-i18n";
  25. import { permissionStore } from "src/stores/permission";
  26. import { getCountries, deleteCountry } from "src/api/country";
  27. import DefaultTable from "src/components/defaults/DefaultTable.vue";
  28. import DefaultHeaderPage from "src/components/layout/DefaultHeaderPage.vue";
  29. const AddEditCountryDialog = defineAsyncComponent(
  30. () => import("src/pages/country/components/AddEditCountryDialog.vue"),
  31. );
  32. const permission_store = permissionStore();
  33. const $q = useQuasar();
  34. const tableRef = useTemplateRef("tableRef");
  35. const { t } = useI18n();
  36. const columns = [
  37. {
  38. name: "id",
  39. label: "ID",
  40. field: "id",
  41. align: "left",
  42. required: true,
  43. sortable: true,
  44. },
  45. {
  46. name: "nome",
  47. label: t("common.terms.name"),
  48. field: "name",
  49. align: "left",
  50. sortable: true,
  51. },
  52. {
  53. name: "code",
  54. label: t("common.terms.code"),
  55. field: "code",
  56. align: "center",
  57. sortable: true,
  58. },
  59. {
  60. name: "status",
  61. label: t("common.terms.status"),
  62. field: (row) =>
  63. row.status == "ACTIVE" ? t("common.status.active") : t("common.status.inactive"),
  64. align: "left",
  65. sortable: true,
  66. },
  67. {
  68. name: "actions",
  69. required: true,
  70. },
  71. ];
  72. const onRowClick = ({ row }) => {
  73. if (permission_store.getAccess("config.country", "edit") === false) {
  74. $q.loading.hide();
  75. $q.notify({
  76. type: "negative",
  77. message: t("validation.permissions.edit"),
  78. });
  79. return;
  80. }
  81. $q.dialog({
  82. component: AddEditCountryDialog,
  83. componentProps: {
  84. country: row,
  85. title: () =>
  86. useI18n().t("common.actions.edit") +
  87. " " +
  88. useI18n().t("ui.navigation.country"),
  89. },
  90. }).onOk(async (success) => {
  91. if (success) {
  92. tableRef.value.refresh();
  93. }
  94. });
  95. };
  96. const onAddItem = () => {
  97. if (permission_store.getAccess("config.country", "add") === false) {
  98. $q.loading.hide();
  99. $q.notify({
  100. type: "negative",
  101. message: t("validation.permissions.add"),
  102. });
  103. return;
  104. }
  105. $q.dialog({
  106. component: AddEditCountryDialog,
  107. componentProps: {
  108. title: () =>
  109. useI18n().t("common.actions.add") +
  110. " " +
  111. useI18n().t("ui.navigation.country"),
  112. },
  113. }).onOk(async (success) => {
  114. if (success) {
  115. tableRef.value.refresh();
  116. }
  117. });
  118. };
  119. </script>