CityPage.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <template>
  2. <div>
  3. <DefaultHeaderPage />
  4. <div>
  5. <DefaultTable
  6. ref="tableRef"
  7. :columns="columns"
  8. :api-call="getCities"
  9. :delete-function="deleteCity"
  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 { getCities, deleteCity } from "src/api/city";
  27. import DefaultTable from "src/components/defaults/DefaultTable.vue";
  28. import DefaultHeaderPage from "src/components/layout/DefaultHeaderPage.vue";
  29. const AddEditCityDialog = defineAsyncComponent(
  30. () => import("src/pages/city/components/AddEditCityDialog.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: "state",
  54. label: t("ui.navigation.state"),
  55. field: (row) => row.state.name,
  56. align: "left",
  57. sortable: true,
  58. },
  59. {
  60. name: "country",
  61. label: t("ui.navigation.country"),
  62. field: (row) => row.country.name,
  63. align: "left",
  64. sortable: true,
  65. },
  66. {
  67. name: "status",
  68. label: t("common.terms.status"),
  69. field: (row) =>
  70. row.status == "ACTIVE" ? t("common.status.active") : t("common.status.inactive"),
  71. align: "left",
  72. sortable: true,
  73. },
  74. {
  75. name: "actions",
  76. required: true,
  77. },
  78. ];
  79. const onRowClick = ({ row }) => {
  80. if (permission_store.getAccess("config.city", "edit") === false) {
  81. $q.loading.hide();
  82. $q.notify({
  83. type: "negative",
  84. message: t("validation.permissions.edit"),
  85. });
  86. return;
  87. }
  88. $q.dialog({
  89. component: AddEditCityDialog,
  90. componentProps: {
  91. city: row,
  92. title: () =>
  93. useI18n().t("common.actions.edit") +
  94. " " +
  95. useI18n().t("ui.navigation.city"),
  96. },
  97. }).onOk(async (success) => {
  98. if (success) {
  99. tableRef.value.refresh();
  100. }
  101. });
  102. };
  103. const onAddItem = () => {
  104. if (permission_store.getAccess("config.city", "add") === false) {
  105. $q.loading.hide();
  106. $q.notify({
  107. type: "negative",
  108. message: t("validation.permissions.add"),
  109. });
  110. return;
  111. }
  112. $q.dialog({
  113. component: AddEditCityDialog,
  114. componentProps: {
  115. title: () =>
  116. useI18n().t("common.actions.add") + " " + useI18n().t("ui.navigation.city"),
  117. },
  118. }).onOk(async (success) => {
  119. if (success) {
  120. tableRef.value.refresh();
  121. }
  122. });
  123. };
  124. </script>