Browse Source

add batch delete for log

ljw 1 year ago
parent
commit
cb1bf5307a

+ 16 - 0
src/api/audit.js

@@ -15,6 +15,14 @@ export function remove (data) {
15 15
   })
16 16
 }
17 17
 
18
+export function batchDelete (data) {
19
+  return request({
20
+    url: '/audit_conn/batchDelete',
21
+    method: 'post',
22
+    data,
23
+  })
24
+}
25
+
18 26
 export function fileList (params) {
19 27
   return request({
20 28
     url: '/audit_file/list',
@@ -29,3 +37,11 @@ export function fileRemove (data) {
29 37
     data,
30 38
   })
31 39
 }
40
+
41
+export function fileBatchDelete (data) {
42
+  return request({
43
+    url: '/audit_file/batchDelete',
44
+    method: 'post',
45
+    data,
46
+  })
47
+}

+ 8 - 0
src/api/login_log.js

@@ -14,3 +14,11 @@ export function remove (data) {
14 14
     data,
15 15
   })
16 16
 }
17
+
18
+export function batchDelete (data) {
19
+  return request({
20
+    url: '/login_log/batchDelete',
21
+    method: 'post',
22
+    data,
23
+  })
24
+}

+ 15 - 3
src/views/audit/connList.vue

@@ -10,11 +10,13 @@
10 10
         </el-form-item>
11 11
         <el-form-item>
12 12
           <el-button type="primary" @click="handlerQuery">筛选</el-button>
13
+          <el-button type="danger" @click="toBatchDelete">{{ T('BatchDelete') }}</el-button>
13 14
         </el-form-item>
14 15
       </el-form>
15 16
     </el-card>
16 17
     <el-card class="list-body" shadow="hover">
17
-      <el-table :data="listRes.list" v-loading="listRes.loading" border>
18
+      <el-table :data="listRes.list" v-loading="listRes.loading" border @selection-change="handleSelectionChange">
19
+        <el-table-column type="selection" align="center" width="50"/>
18 20
         <el-table-column prop="id" label="ID" align="center" width="100"/>
19 21
         <el-table-column :label="T('Peer')" prop="peer_id" align="center" width="120"/>
20 22
         <el-table-column :label="T('FromPeer')" prop="from_peer" align="center" width="120"/>
@@ -49,7 +51,7 @@
49 51
 </template>
50 52
 
51 53
 <script setup>
52
-  import { onActivated, onMounted, watch } from 'vue'
54
+  import { onActivated, onMounted, ref, watch } from 'vue'
53 55
   import { useRepositories } from '@/views/audit/reponsitories'
54 56
   import { T } from '@/utils/i18n'
55 57
 
@@ -59,6 +61,7 @@
59 61
     getList,
60 62
     handlerQuery,
61 63
     del,
64
+    batchdel,
62 65
   } = useRepositories()
63 66
 
64 67
   onMounted(getList)
@@ -67,7 +70,16 @@
67 70
   watch(() => listQuery.page, getList)
68 71
 
69 72
   watch(() => listQuery.page_size, handlerQuery)
70
-
73
+  const multipleSelection = ref([])
74
+  const handleSelectionChange = (val) => {
75
+    multipleSelection.value = val
76
+  }
77
+  const toBatchDelete = () => {
78
+    if (multipleSelection.value.length === 0) {
79
+      return
80
+    }
81
+    batchdel(multipleSelection.value)
82
+  }
71 83
 </script>
72 84
 
73 85
 <style scoped lang="scss">

+ 27 - 3
src/views/audit/fileList.vue

@@ -10,11 +10,13 @@
10 10
         </el-form-item>
11 11
         <el-form-item>
12 12
           <el-button type="primary" @click="handlerQuery">筛选</el-button>
13
+          <el-button type="danger" @click="toBatchDelete">{{ T('BatchDelete') }}</el-button>
13 14
         </el-form-item>
14 15
       </el-form>
15 16
     </el-card>
16 17
     <el-card class="list-body" shadow="hover">
17
-      <el-table :data="listRes.list" v-loading="listRes.loading" border max-height="750">
18
+      <el-table :data="listRes.list" v-loading="listRes.loading" border max-height="750" @selection-change="handleSelectionChange">
19
+        <el-table-column type="selection" align="center" width="50"/>
18 20
         <el-table-column prop="id" label="ID" align="center" width="100"/>
19 21
         <el-table-column :label="T('Peer')" prop="peer_id" align="center" width="120"/>
20 22
         <el-table-column :label="T('FromPeer')" prop="from_peer" align="center" width="120"/>
@@ -22,8 +24,18 @@
22 24
         <el-table-column :label="T('Ip')" prop="ip" align="center" width="120"/>
23 25
         <el-table-column prop="type" :label="T('Type')" align="center" width="200">
24 26
           <template #default="{row}">
25
-            <el-tag v-if="row.type === 1" type="warning"> {{T('ToRemote')}}: <el-icon><Right/></el-icon> {{row.peer_id}}</el-tag>
26
-            <el-tag v-else>{{T('ToLocal')}}: <el-icon><Right/></el-icon> {{row.from_peer}}</el-tag>
27
+            <el-tag v-if="row.type === 1" type="warning"> {{ T('ToRemote') }}:
28
+              <el-icon>
29
+                <Right/>
30
+              </el-icon>
31
+              {{ row.peer_id }}
32
+            </el-tag>
33
+            <el-tag v-else>{{ T('ToLocal') }}:
34
+              <el-icon>
35
+                <Right/>
36
+              </el-icon>
37
+              {{ row.from_peer }}
38
+            </el-tag>
27 39
           </template>
28 40
         </el-table-column>
29 41
         <el-table-column prop="num" :label="T('Num')" align="center" width="100"/>
@@ -96,6 +108,7 @@
96 108
     getList,
97 109
     handlerQuery,
98 110
     del,
111
+    batchdel,
99 112
   } = useFileRepositories()
100 113
 
101 114
   onMounted(getList)
@@ -111,6 +124,17 @@
111 124
     showFiles.value = files
112 125
     allFilesVisible.value = true
113 126
   }
127
+
128
+  const multipleSelection = ref([])
129
+  const handleSelectionChange = (val) => {
130
+    multipleSelection.value = val
131
+  }
132
+  const toBatchDelete = () => {
133
+    if (multipleSelection.value.length === 0) {
134
+      return
135
+    }
136
+    batchdel(multipleSelection.value)
137
+  }
114 138
 </script>
115 139
 
116 140
 <style scoped lang="scss">

+ 43 - 1
src/views/audit/reponsitories.js

@@ -1,5 +1,5 @@
1 1
 import { reactive } from 'vue'
2
-import { list, remove, fileList, fileRemove } from '@/api/audit'
2
+import { list, remove, fileList, fileRemove, batchDelete, fileBatchDelete } from '@/api/audit'
3 3
 import { ElMessage, ElMessageBox } from 'element-plus'
4 4
 import { useRoute } from 'vue-router'
5 5
 import { formatTime } from '@/utils/time'
@@ -52,13 +52,34 @@ export function useRepositories () {
52 52
       getList()
53 53
     }
54 54
   }
55
+  const batchdel = async (rows) => {
56
+    const ids = rows.map(r => r.id)
57
+    if (!ids.length) {
58
+      ElMessage.warning(T('PleaseSelectData'))
59
+      return false
60
+    }
61
+    const cf = await ElMessageBox.confirm(T('Confirm?', { param: T('BatchDelete') }), {
62
+      confirmButtonText: T('Confirm'),
63
+      cancelButtonText: T('Cancel'),
64
+      type: 'warning',
65
+    }).catch(_ => false)
66
+    if (!cf) {
67
+      return false
68
+    }
55 69
 
70
+    const res = await batchDelete({ ids }).catch(_ => false)
71
+    if (res) {
72
+      ElMessage.success(T('OperationSuccess'))
73
+      getList()
74
+    }
75
+  }
56 76
   return {
57 77
     listRes,
58 78
     listQuery,
59 79
     getList,
60 80
     handlerQuery,
61 81
     del,
82
+    batchdel,
62 83
   }
63 84
 }
64 85
 
@@ -109,12 +130,33 @@ export function useFileRepositories () {
109 130
       getList()
110 131
     }
111 132
   }
133
+  const batchdel = async (rows) => {
134
+    const ids = rows.map(r => r.id)
135
+    if (!ids.length) {
136
+      ElMessage.warning(T('PleaseSelectData'))
137
+      return false
138
+    }
139
+    const cf = await ElMessageBox.confirm(T('Confirm?', { param: T('BatchDelete') }), {
140
+      confirmButtonText: T('Confirm'),
141
+      cancelButtonText: T('Cancel'),
142
+      type: 'warning',
143
+    }).catch(_ => false)
144
+    if (!cf) {
145
+      return false
146
+    }
112 147
 
148
+    const res = await fileBatchDelete({ ids }).catch(_ => false)
149
+    if (res) {
150
+      ElMessage.success(T('OperationSuccess'))
151
+      getList()
152
+    }
153
+  }
113 154
   return {
114 155
     listRes,
115 156
     listQuery,
116 157
     getList,
117 158
     handlerQuery,
118 159
     del,
160
+    batchdel,
119 161
   }
120 162
 }

+ 25 - 2
src/views/login/log.js

@@ -1,5 +1,5 @@
1
-import { reactive } from 'vue'
2
-import { list, remove } from '@/api/login_log'
1
+import { reactive, ref } from 'vue'
2
+import { batchDelete, list, remove } from '@/api/login_log'
3 3
 import { list as fetchPeers } from '@/api/peer'
4 4
 import { ElMessage, ElMessageBox } from 'element-plus'
5 5
 import { useRoute } from 'vue-router'
@@ -62,11 +62,34 @@ export function useRepositories () {
62 62
     }
63 63
   }
64 64
 
65
+  const batchdel = async (rows) => {
66
+    const ids = rows.map(r => r.id)
67
+    if (!ids.length) {
68
+      ElMessage.warning(T('PleaseSelectData'))
69
+      return false
70
+    }
71
+    const cf = await ElMessageBox.confirm(T('Confirm?', { param: T('BatchDelete') }), {
72
+      confirmButtonText: T('Confirm'),
73
+      cancelButtonText: T('Cancel'),
74
+      type: 'warning',
75
+    }).catch(_ => false)
76
+    if (!cf) {
77
+      return false
78
+    }
79
+
80
+    const res = await batchDelete({ ids }).catch(_ => false)
81
+    if (res) {
82
+      ElMessage.success(T('OperationSuccess'))
83
+      getList()
84
+    }
85
+  }
86
+
65 87
   return {
66 88
     listRes,
67 89
     listQuery,
68 90
     getList,
69 91
     handlerQuery,
70 92
     del,
93
+    batchdel,
71 94
   }
72 95
 }

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

@@ -14,12 +14,13 @@
14 14
         </el-form-item>
15 15
         <el-form-item>
16 16
           <el-button type="primary" @click="handlerQuery">筛选</el-button>
17
+          <el-button type="danger" @click="toBatchDelete">{{ T('BatchDelete') }}</el-button>
17 18
         </el-form-item>
18 19
       </el-form>
19 20
     </el-card>
20 21
     <el-card class="list-body" shadow="hover">
21
-      <!--      <el-tag type="danger" style="margin-bottom: 10px">不建议在此操作地址簿,可能会造成数据不同步</el-tag>-->
22
-      <el-table :data="listRes.list" v-loading="listRes.loading" border>
22
+      <el-table :data="listRes.list" v-loading="listRes.loading" border @selection-change="handleSelectionChange">
23
+        <el-table-column type="selection" align="center" width="50"/>
23 24
         <el-table-column prop="id" label="ID" align="center" width="100"/>
24 25
         <el-table-column :label="T('Owner')" align="center" width="120">
25 26
           <template #default="{row}">
@@ -53,7 +54,7 @@
53 54
 </template>
54 55
 
55 56
 <script setup>
56
-  import { onActivated, onMounted, watch } from 'vue'
57
+  import { onActivated, onMounted, ref, watch } from 'vue'
57 58
   import { loadAllUsers } from '@/global'
58 59
   import { useRepositories } from '@/views/login/log.js'
59 60
   import { T } from '@/utils/i18n'
@@ -67,6 +68,7 @@
67 68
     getList,
68 69
     handlerQuery,
69 70
     del,
71
+    batchdel,
70 72
   } = useRepositories()
71 73
 
72 74
   onMounted(getList)
@@ -75,7 +77,16 @@
75 77
   watch(() => listQuery.page, getList)
76 78
 
77 79
   watch(() => listQuery.page_size, handlerQuery)
78
-
80
+  const multipleSelection = ref([])
81
+  const handleSelectionChange = (val) => {
82
+    multipleSelection.value = val
83
+  }
84
+  const toBatchDelete = () => {
85
+    if (multipleSelection.value.length === 0) {
86
+      return
87
+    }
88
+    batchdel(multipleSelection.value)
89
+  }
79 90
 </script>
80 91
 
81 92
 <style scoped lang="scss">