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
         meta: { title: 'ShareRecord', icon: 'Share' /*keepAlive: true*/ },
91
         meta: { title: 'ShareRecord', icon: 'Share' /*keepAlive: true*/ },
92
         component: () => import('@/views/my/share_record/index.vue'),
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
 import { reactive, ref } from 'vue'
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
 import { ElMessage, ElMessageBox } from 'element-plus'
4
 import { ElMessage, ElMessageBox } from 'element-plus'
5
 import { useRoute } from 'vue-router'
5
 import { useRoute } from 'vue-router'
6
 import { T } from '@/utils/i18n'
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
   const listRes = reactive({
17
   const listRes = reactive({
13
     list: [], total: 0, loading: false,
18
     list: [], total: 0, loading: false,
@@ -16,16 +21,16 @@ export function useRepositories () {
16
     page: 1,
21
     page: 1,
17
     page_size: 10,
22
     page_size: 10,
18
     is_my: 0,
23
     is_my: 0,
19
-    user_id: user_id ? parseInt(user_id) : null,
24
+    user_id: null,
20
   })
25
   })
21
 
26
 
22
   const getList = async () => {
27
   const getList = async () => {
23
     listRes.loading = true
28
     listRes.loading = true
24
-    const res = await list(listQuery).catch(_ => false)
29
+    const res = await apis[api_type].list(listQuery).catch(_ => false)
25
     listRes.loading = false
30
     listRes.loading = false
26
     if (res) {
31
     if (res) {
27
       const uuids = res.data.list.filter(item => item.uuid).map(item => item.uuid)
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
       if (peers?.data?.list) {
34
       if (peers?.data?.list) {
30
         res.data.list.forEach(item => {
35
         res.data.list.forEach(item => {
31
           if (item.uuid) {
36
           if (item.uuid) {
@@ -55,7 +60,7 @@ export function useRepositories () {
55
       return false
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
     if (res) {
64
     if (res) {
60
       ElMessage.success(T('OperationSuccess'))
65
       ElMessage.success(T('OperationSuccess'))
61
       getList()
66
       getList()
@@ -77,7 +82,7 @@ export function useRepositories () {
77
       return false
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
     if (res) {
86
     if (res) {
82
       ElMessage.success(T('OperationSuccess'))
87
       ElMessage.success(T('OperationSuccess'))
83
       getList()
88
       getList()

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

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