UsuariosTab.vue 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <div>
  3. <DefaultTable
  4. v-model:rows="filteredRows"
  5. title="Lista de Usuários"
  6. :columns
  7. description="Usuários"
  8. no-api-call
  9. add-item
  10. add-item-route="UserAddPage"
  11. >
  12. <template #body-cell-user_type="{ row }">
  13. <q-td align="left">{{ userTypeLabel(row.user_type) }}</q-td>
  14. </template>
  15. <template #body-cell-status="{ row }">
  16. <q-td align="center">
  17. <q-badge
  18. :color="row.status === 'ACTIVE' ? 'positive' : 'warning'"
  19. :label="row.status === 'ACTIVE' ? 'Ativo' : 'Inativo'"
  20. />
  21. </q-td>
  22. </template>
  23. <template #body-cell-actions="{ row }">
  24. <q-td auto-width>
  25. <q-item-section class="no-wrap" style="flex-direction: row">
  26. <q-btn
  27. outline
  28. icon="mdi-account-edit-outline"
  29. style="width: 36px"
  30. class="q-mr-sm"
  31. @click.prevent.stop="onEdit(row)"
  32. />
  33. <q-btn
  34. outline
  35. icon="mdi-trash-can-outline"
  36. style="width: 36px"
  37. class="q-mr-sm"
  38. @click.prevent.stop="() => {}"
  39. />
  40. </q-item-section>
  41. </q-td>
  42. </template>
  43. </DefaultTable>
  44. </div>
  45. </template>
  46. <script setup>
  47. import { ref, computed, onMounted } from "vue";
  48. import { useRouter } from "vue-router";
  49. import DefaultTable from "src/components/defaults/DefaultTable.vue";
  50. import { getUsers } from "src/api/user";
  51. const router = useRouter();
  52. const funcaoSelected = ref(null);
  53. const allUsers = ref([]);
  54. const USER_TYPE_LABELS = {
  55. ADMIN: "Administrador (Franqueadora)",
  56. ADMIN_FRANCHISEE: "Administrador (Franqueada)",
  57. };
  58. const userTypeLabel = (type) => USER_TYPE_LABELS[type] ?? type;
  59. const filteredRows = computed(() => {
  60. return allUsers.value.filter((row) => {
  61. if (funcaoSelected.value && row.user_type !== funcaoSelected.value.value)
  62. return false;
  63. return true;
  64. });
  65. });
  66. const columns = ref([
  67. { name: "name", label: "Nome", field: "name", align: "left" },
  68. { name: "email", label: "E-mail", field: "email", align: "left" },
  69. { name: "user_type", label: "Função", field: "user_type", align: "left" },
  70. { name: "status", label: "Status", field: "status", align: "center" },
  71. { name: "actions", label: "Ações", field: null, align: "center" },
  72. ]);
  73. function onEdit(row) {
  74. router.push({ name: "UserEditPage", params: { id: row.id } });
  75. }
  76. onMounted(async () => {
  77. try {
  78. allUsers.value = await getUsers();
  79. } catch (error) {
  80. console.error("Failed to load users:", error);
  81. }
  82. });
  83. </script>