ProviderPage.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <template>
  2. <div>
  3. <DefaultHeaderPage />
  4. <div>
  5. <DefaultTable
  6. ref="tableRef"
  7. :columns="columns"
  8. :api-call="getProviders"
  9. :delete-function="deleteProvider"
  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. <template #body-cell-approval_status="slotProps">
  19. <q-td :props="slotProps">
  20. <q-badge
  21. :color="{ pending: 'warning', accepted: 'positive', rejected: 'negative' }[slotProps.row.approval_status] ?? 'grey'"
  22. :label="$t(`provider.approval_status.${slotProps.row.approval_status}`)"
  23. />
  24. </q-td>
  25. </template>
  26. </DefaultTable>
  27. </div>
  28. </div>
  29. </template>
  30. <script setup>
  31. import { defineAsyncComponent, useTemplateRef } from "vue";
  32. import { useQuasar } from "quasar";
  33. import { useI18n } from "vue-i18n";
  34. import { permissionStore } from "src/stores/permission";
  35. import { getProviders, deleteProvider } from "src/api/provider";
  36. import DefaultTable from "src/components/defaults/DefaultTable.vue";
  37. import DefaultHeaderPage from "src/components/layout/DefaultHeaderPage.vue";
  38. const AddEditProviderDialog = defineAsyncComponent(
  39. () => import("src/pages/provider/components/AddEditProviderDialog.vue"),
  40. );
  41. const permission_store = permissionStore();
  42. const $q = useQuasar();
  43. const tableRef = useTemplateRef("tableRef");
  44. const { t } = useI18n();
  45. const columns = [
  46. {
  47. name: "document",
  48. label: t("provider.fields.document"),
  49. field: "document",
  50. align: "left",
  51. sortable: true,
  52. },
  53. {
  54. name: "user",
  55. label: t("common.terms.user"),
  56. field: (row) => row.user?.name || "-",
  57. align: "left",
  58. sortable: true,
  59. },
  60. {
  61. name: "birth_date",
  62. label: t("provider.fields.birth_date"),
  63. field: "birth_date",
  64. align: "left",
  65. sortable: true,
  66. },
  67. {
  68. name: "approval_status",
  69. label: t("provider.fields.approval_status"),
  70. field: "approval_status",
  71. align: "left",
  72. sortable: true,
  73. },
  74. {
  75. name: "average_rating",
  76. label: t("provider.fields.average_rating"),
  77. field: (row) => row.average_rating || "-",
  78. align: "left",
  79. sortable: true,
  80. },
  81. {
  82. name: "total_services",
  83. label: t("provider.fields.total_services"),
  84. field: "total_services",
  85. align: "left",
  86. sortable: true,
  87. },
  88. {
  89. name: "daily_price_8h",
  90. label: t("provider.fields.daily_price_8h"),
  91. field: (row) => row.daily_price_8h ? `R$ ${row.daily_price_8h}` : "-",
  92. align: "left",
  93. sortable: true,
  94. },
  95. {
  96. name: "actions",
  97. required: true,
  98. },
  99. ];
  100. const onRowClick = ({ row }) => {
  101. if (permission_store.getAccess("config.provider", "edit") === false) {
  102. $q.loading.hide();
  103. $q.notify({
  104. type: "negative",
  105. message: t("validation.permissions.edit"),
  106. });
  107. return;
  108. }
  109. $q.dialog({
  110. component: AddEditProviderDialog,
  111. componentProps: {
  112. provider: row,
  113. title: () =>
  114. useI18n().t("common.actions.edit") +
  115. " " +
  116. useI18n().t("ui.navigation.provider"),
  117. },
  118. }).onOk(async (success) => {
  119. if (success) {
  120. tableRef.value.refresh();
  121. }
  122. });
  123. };
  124. const onAddItem = () => {
  125. if (permission_store.getAccess("config.provider", "add") === false) {
  126. $q.loading.hide();
  127. $q.notify({
  128. type: "negative",
  129. message: t("validation.permissions.add"),
  130. });
  131. return;
  132. }
  133. $q.dialog({
  134. component: AddEditProviderDialog,
  135. componentProps: {
  136. title: () =>
  137. useI18n().t("common.actions.add") + " " + useI18n().t("ui.navigation.provider"),
  138. },
  139. }).onOk(async (success) => {
  140. if (success) {
  141. tableRef.value.refresh();
  142. }
  143. });
  144. };
  145. </script>