log.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <div>
  3. <el-card class="list-query" shadow="hover">
  4. <el-form inline label-width="80px">
  5. <el-form-item label="用户">
  6. <el-select v-model="listQuery.user_id" clearable>
  7. <el-option
  8. v-for="item in allUsers"
  9. :key="item.id"
  10. :label="item.username"
  11. :value="item.id"
  12. ></el-option>
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item>
  16. <el-button type="primary" @click="handlerQuery">筛选</el-button>
  17. <el-button type="danger" @click="toBatchDelete">{{ T('BatchDelete') }}</el-button>
  18. </el-form-item>
  19. </el-form>
  20. </el-card>
  21. <el-card class="list-body" shadow="hover">
  22. <el-table :data="listRes.list" v-loading="listRes.loading" border @selection-change="handleSelectionChange">
  23. <el-table-column type="selection" align="center" width="50"/>
  24. <el-table-column prop="id" label="ID" align="center" width="100"/>
  25. <el-table-column :label="T('Owner')" align="center" width="120">
  26. <template #default="{row}">
  27. <span v-if="row.user_id"> <el-tag>{{ allUsers?.find(u => u.id === row.user_id)?.username }}</el-tag> </span>
  28. </template>
  29. </el-table-column>
  30. <el-table-column prop="client" label="client" align="center" width="120"/>
  31. <el-table-column prop="peer.id" :label="T('Peer')" align="center"/>
  32. <el-table-column prop="uuid" label="uuid" align="center"/>
  33. <el-table-column prop="ip" label="ip" align="center" width="150"/>
  34. <el-table-column prop="type" label="type" align="center" width="100"/>
  35. <el-table-column prop="platform" label="platform" align="center" width="120"/>
  36. <el-table-column prop="created_at" :label="T('CreatedAt')" align="center"/>
  37. <el-table-column :label="T('Actions')" align="center" width="400">
  38. <template #default="{row}">
  39. <el-button type="danger" @click="del(row)">删除</el-button>
  40. </template>
  41. </el-table-column>
  42. </el-table>
  43. </el-card>
  44. <el-card class="list-page" shadow="hover">
  45. <el-pagination background
  46. layout="prev, pager, next, sizes, jumper"
  47. :page-sizes="[10,20,50,100]"
  48. v-model:page-size="listQuery.page_size"
  49. v-model:current-page="listQuery.page"
  50. :total="listRes.total">
  51. </el-pagination>
  52. </el-card>
  53. </div>
  54. </template>
  55. <script setup>
  56. import { onActivated, onMounted, ref, watch } from 'vue'
  57. import { loadAllUsers } from '@/global'
  58. import { useRepositories } from '@/views/login/log.js'
  59. import { T } from '@/utils/i18n'
  60. const { allUsers, getAllUsers } = loadAllUsers()
  61. getAllUsers()
  62. const {
  63. listRes,
  64. listQuery,
  65. getList,
  66. handlerQuery,
  67. del,
  68. batchdel,
  69. } = useRepositories()
  70. onMounted(getList)
  71. onActivated(getList)
  72. watch(() => listQuery.page, getList)
  73. watch(() => listQuery.page_size, handlerQuery)
  74. const multipleSelection = ref([])
  75. const handleSelectionChange = (val) => {
  76. multipleSelection.value = val
  77. }
  78. const toBatchDelete = () => {
  79. if (multipleSelection.value.length === 0) {
  80. return
  81. }
  82. batchdel(multipleSelection.value)
  83. }
  84. </script>
  85. <style scoped lang="scss">
  86. .list-query .el-select {
  87. --el-select-width: 160px;
  88. }
  89. </style>