lejianwen 1 год назад
Родитель
Сommit
bf00eb3fed
5 измененных файлов с 127 добавлено и 14 удалено
  1. 24 0
      src/api/my/login_log.js
  2. 6 0
      src/router/index.js
  3. 15 10
      src/views/login/log.js
  4. 4 4
      src/views/login/log.vue
  5. 78 0
      src/views/my/login_log/index.vue

+ 24 - 0
src/api/my/login_log.js

@@ -0,0 +1,24 @@
1
+import request from '@/utils/request'
2
+
3
+export function list (params) {
4
+  return request({
5
+    url: '/my/login_log/list',
6
+    params,
7
+  })
8
+}
9
+
10
+export function remove (data) {
11
+  return request({
12
+    url: '/my/login_log/delete',
13
+    method: 'post',
14
+    data,
15
+  })
16
+}
17
+
18
+export function batchDelete (data) {
19
+  return request({
20
+    url: '/my/login_log/batchDelete',
21
+    method: 'post',
22
+    data,
23
+  })
24
+}

+ 6 - 0
src/router/index.js

@@ -91,6 +91,12 @@ export const asyncRoutes = [
91 91
         meta: { title: 'ShareRecord', icon: 'Share' /*keepAlive: true*/ },
92 92
         component: () => import('@/views/my/share_record/index.vue'),
93 93
       },
94
+      {
95
+        path: 'loginLog',
96
+        name: 'MyLoginLog',
97
+        meta: { title: 'LoginLog', icon: 'List' /*keepAlive: true*/ },
98
+        component: () => import('@/views/my/login_log/index.vue'),
99
+      },
94 100
     ],
95 101
   },
96 102
   {

+ 15 - 10
src/views/login/log.js

@@ -1,13 +1,18 @@
1 1
 import { reactive, ref } from 'vue'
2
-import { batchDelete, list, remove } from '@/api/login_log'
3
-import { list as fetchPeers } from '@/api/peer'
2
+import { list as admin_fetchPeers } from '@/api/peer'
3
+import { list as my_fetchPeers } from '@/api/my/peer'
4 4
 import { ElMessage, ElMessageBox } from 'element-plus'
5 5
 import { useRoute } from 'vue-router'
6 6
 import { T } from '@/utils/i18n'
7
+import { batchDelete as admin_batchDelete, list as admin_list, remove as admin_remove } from '@/api/login_log'
8
+import { batchDelete as my_batchDelete, list as my_list, remove as my_remove } from '@/api/my/login_log'
7 9
 
8
-export function useRepositories () {
9
-  const route = useRoute()
10
-  const user_id = route.query?.user_id
10
+const apis = {
11
+  admin: { batchDelete: admin_batchDelete, list: admin_list, remove: admin_remove, fetchPeers: admin_fetchPeers },
12
+  my: { batchDelete: my_batchDelete, list: my_list, remove: my_remove, fetchPeers: my_fetchPeers },
13
+}
14
+
15
+export function useRepositories (api_type = 'my') {
11 16
 
12 17
   const listRes = reactive({
13 18
     list: [], total: 0, loading: false,
@@ -16,16 +21,16 @@ export function useRepositories () {
16 21
     page: 1,
17 22
     page_size: 10,
18 23
     is_my: 0,
19
-    user_id: user_id ? parseInt(user_id) : null,
24
+    user_id: null,
20 25
   })
21 26
 
22 27
   const getList = async () => {
23 28
     listRes.loading = true
24
-    const res = await list(listQuery).catch(_ => false)
29
+    const res = await apis[api_type].list(listQuery).catch(_ => false)
25 30
     listRes.loading = false
26 31
     if (res) {
27 32
       const uuids = res.data.list.filter(item => item.uuid).map(item => item.uuid)
28
-      const peers = await fetchPeers({ uuids }).catch(_ => false)
33
+      const peers = await apis[api_type].fetchPeers({ uuids }).catch(_ => false)
29 34
       if (peers?.data?.list) {
30 35
         res.data.list.forEach(item => {
31 36
           if (item.uuid) {
@@ -55,7 +60,7 @@ export function useRepositories () {
55 60
       return false
56 61
     }
57 62
 
58
-    const res = await remove({ id: row.id }).catch(_ => false)
63
+    const res = await apis[api_type].remove({ id: row.id }).catch(_ => false)
59 64
     if (res) {
60 65
       ElMessage.success(T('OperationSuccess'))
61 66
       getList()
@@ -77,7 +82,7 @@ export function useRepositories () {
77 82
       return false
78 83
     }
79 84
 
80
-    const res = await batchDelete({ ids }).catch(_ => false)
85
+    const res = await apis[api_type].batchDelete({ ids }).catch(_ => false)
81 86
     if (res) {
82 87
       ElMessage.success(T('OperationSuccess'))
83 88
       getList()

+ 4 - 4
src/views/login/log.vue

@@ -13,7 +13,7 @@
13 13
           </el-select>
14 14
         </el-form-item>
15 15
         <el-form-item>
16
-          <el-button type="primary" @click="handlerQuery">{{ T('Filter')}}</el-button>
16
+          <el-button type="primary" @click="handlerQuery">{{ T('Filter') }}</el-button>
17 17
           <el-button type="danger" @click="toBatchDelete">{{ T('BatchDelete') }}</el-button>
18 18
         </el-form-item>
19 19
       </el-form>
@@ -32,11 +32,11 @@
32 32
         <el-table-column prop="uuid" label="uuid" align="center"/>
33 33
         <el-table-column prop="ip" label="ip" align="center" width="150"/>
34 34
         <el-table-column prop="type" label="type" align="center" width="100"/>
35
-        <el-table-column prop="platform" label="platform" align="center" width="120" show-overflow-tooltip/>
35
+        <el-table-column prop="platform" label="Platform/UA" align="center" width="120" show-overflow-tooltip/>
36 36
         <el-table-column prop="created_at" :label="T('CreatedAt')" align="center"/>
37 37
         <el-table-column :label="T('Actions')" align="center" width="400">
38 38
           <template #default="{row}">
39
-            <el-button type="danger" @click="del(row)">{{T('Delete')}}</el-button>
39
+            <el-button type="danger" @click="del(row)">{{ T('Delete') }}</el-button>
40 40
           </template>
41 41
         </el-table-column>
42 42
       </el-table>
@@ -69,7 +69,7 @@
69 69
     handlerQuery,
70 70
     del,
71 71
     batchdel,
72
-  } = useRepositories()
72
+  } = useRepositories('admin')
73 73
 
74 74
   onMounted(getList)
75 75
   onActivated(getList)

+ 78 - 0
src/views/my/login_log/index.vue

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