index.vue 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <template>
  2. <div class="flex flex-col sm:flex-row w-full justify-between">
  3. <Department v-model="query.department_id" @searchDepartmentUsers="search" v-if="hasRoles" class="dark:bg-regal-dark" />
  4. <div :class="hasRoles ? 'w-full ml-0 sm:ml-2 mt-2 sm:mt-0' : 'w-full'">
  5. <Search :search="search" :reset="reset">
  6. <template v-slot:body>
  7. <el-form-item label="用户名">
  8. <el-input v-model="query.username" clearable />
  9. </el-form-item>
  10. <el-form-item label="邮箱">
  11. <el-input v-model="query.email" clearable />
  12. </el-form-item>
  13. <el-form-item label="状态">
  14. <Select v-model="query.status" clearable api="status" />
  15. </el-form-item>
  16. </template>
  17. </Search>
  18. <div class="table-default">
  19. <Operate :show="open" />
  20. <el-table :data="tableData" class="mt-3" v-loading="loading">
  21. <el-table-column prop="username" label="用户名" width="150" />
  22. <el-table-column prop="avatar" label="头像">
  23. <template #default="scope">
  24. <el-avatar :src="scope.row.avatar" />
  25. </template>
  26. </el-table-column>
  27. <el-table-column prop="email" label="邮箱" />
  28. <el-table-column prop="status" label="状态">
  29. <template #default="scope">
  30. <Status v-model="scope.row.status" :id="scope.row.id" :api="api" />
  31. </template>
  32. </el-table-column>
  33. <el-table-column prop="created_at" label="创建时间" />
  34. <el-table-column label="操作" width="200">
  35. <template #default="scope">
  36. <Update @click="open(scope.row.id)" />
  37. <Destroy @click="destroy(api, scope.row.id)" />
  38. </template>
  39. </el-table-column>
  40. </el-table>
  41. <Paginate />
  42. </div>
  43. <Dialog v-model="visible" :title="title" destroy-on-close>
  44. <Create @close="close(reset)" :primary="id" :api="api" :has-roles="hasRoles" />
  45. </Dialog>
  46. </div>
  47. </div>
  48. </template>
  49. <script lang="ts" setup>
  50. import {computed, onMounted, ref} from 'vue'
  51. import Create from './create.vue'
  52. import {useGetList} from '/admin/composables/curd/useGetList'
  53. import {useDestroy} from '/admin/composables/curd/useDestroy'
  54. import {useOpen} from '/admin/composables/curd/useOpen'
  55. import Department from './components/department.vue'
  56. import {useUserStore} from '/admin/stores/modules/user'
  57. import {isUndefined} from '/admin/support/helper'
  58. const userStore = useUserStore()
  59. const api = 'users'
  60. const { data, query, search, reset, loading } = useGetList(api)
  61. const { destroy, deleted } = useDestroy()
  62. const { open, close, title, visible, id } = useOpen()
  63. const tableData = computed(() => data.value?.data)
  64. const roles = ref<Array<Object>>()
  65. const hasRoles = ref<boolean>(false)
  66. onMounted(() => {
  67. search()
  68. deleted(reset)
  69. hasRoles.value = !isUndefined(userStore.getRoles)
  70. })
  71. </script>