Browse Source

optimize add ab from peer

lejianwen 1 year ago
parent
commit
2a6bda9b9e
2 changed files with 138 additions and 87 deletions
  1. 129 0
      src/views/peer/createABForm.vue
  2. 9 87
      src/views/peer/index.vue

+ 129 - 0
src/views/peer/createABForm.vue

@@ -0,0 +1,129 @@
1
+<template>
2
+
3
+  <el-form class="dialog-form" ref="form" :model="ABFormData" label-width="120px">
4
+    <el-form-item :label="T('Owner')" prop="user_ids" required>
5
+      <el-select v-model="ABFormData.user_ids" multiple @change="changeUser">
6
+        <el-option
7
+            v-for="item in allUsers"
8
+            :key="item.id"
9
+            :label="item.username"
10
+            :value="item.id"
11
+        ></el-option>
12
+      </el-select>
13
+    </el-form-item>
14
+    <el-form-item :label="T('AddressBookName')" v-if="ABFormData.user_ids.length<=1" required prop="collection_id">
15
+      <el-select v-model="ABFormData.collection_id" clearable @change="changeCollectionForUpdate">
16
+        <el-option :value="0" :label="T('MyAddressBook')"></el-option>
17
+        <el-option v-for="c in collectionListResForUpdate.list" :key="c.id" :label="c.name" :value="c.id"></el-option>
18
+      </el-select>
19
+    </el-form-item>
20
+    <el-form-item label="ID" prop="id" required>
21
+      <el-input v-model="ABFormData.id"></el-input>
22
+    </el-form-item>
23
+    <el-form-item :label="T('Username')" prop="username">
24
+      <el-input v-model="ABFormData.username"></el-input>
25
+    </el-form-item>
26
+    <el-form-item :label="T('Alias')" prop="alias">
27
+      <el-input v-model="ABFormData.alias"></el-input>
28
+    </el-form-item>
29
+    <el-form-item :label="T('Hostname')" prop="hostname">
30
+      <el-input v-model="ABFormData.hostname"></el-input>
31
+    </el-form-item>
32
+    <el-form-item :label="T('Platform')" prop="platform">
33
+      <el-select v-model="ABFormData.platform">
34
+        <el-option
35
+            v-for="item in ABPlatformList"
36
+            :key="item.value"
37
+            :label="item.label"
38
+            :value="item.value"
39
+        ></el-option>
40
+      </el-select>
41
+    </el-form-item>
42
+
43
+    <el-form-item :label="T('Tags')" prop="tags" v-if="ABFormData.user_ids.length<=1">
44
+      <el-select v-model="ABFormData.tags" multiple>
45
+        <el-option
46
+            v-for="item in tagListRes.list"
47
+            :key="item.name"
48
+            :label="item.name"
49
+            :value="item.name"
50
+        ></el-option>
51
+      </el-select>
52
+    </el-form-item>
53
+    <el-form-item>
54
+      <el-button @click="cancel">{{ T('Cancel') }}</el-button>
55
+      <el-button @click="ABSubmit" type="primary">{{ T('Submit') }}</el-button>
56
+    </el-form-item>
57
+  </el-form>
58
+</template>
59
+<script setup>
60
+
61
+  import { T } from '@/utils/i18n'
62
+  import { loadAllUsers } from '@/global'
63
+  import { onMounted, defineProps, defineEmits, onActivated } from 'vue'
64
+  import { useRepositories as useABRepositories } from '@/views/address_book'
65
+  import { batchCreate } from '@/api/address_book'
66
+  import { ElMessage } from 'element-plus'
67
+
68
+  const emits = defineEmits(['cancel', 'success'])
69
+  const props = defineProps({
70
+    peer: {
71
+      type: Object,
72
+      required: true,
73
+    },
74
+  })
75
+  const { allUsers, getAllUsers } = loadAllUsers()
76
+  onMounted(getAllUsers)
77
+  const {
78
+    platformList: ABPlatformList,
79
+    formData: ABFormData,
80
+    changeUserForUpdate,
81
+    changeCollectionForUpdate,
82
+    collectionListResForUpdate,
83
+    tagListRes,
84
+    fromPeer,
85
+  } = useABRepositories('admin')
86
+  onMounted(() => {
87
+    fromPeer(props.peer)
88
+    console.log(collectionListResForUpdate)
89
+  })
90
+
91
+  const changeUser = async (val) => {
92
+    ABFormData.collection_id = 0
93
+    ABFormData.tags = []
94
+    if (val.length === 1) {
95
+      changeUserForUpdate(val[0])
96
+    }
97
+    if (val.length === 0) {
98
+      collectionListResForUpdate.list = []
99
+    }
100
+  }
101
+
102
+  const ABSubmit = async () => {
103
+    if (ABFormData.user_ids.length === 0) {
104
+      ElMessage.error(T('ParamRequired', { param: T('Owner') }))
105
+      return
106
+    }
107
+    if (!ABFormData.id) {
108
+      ElMessage.error(T('ParamRequired', { param: 'ID' }))
109
+      return
110
+    }
111
+    if (ABFormData.user_ids.length > 1) {
112
+      ABFormData.collection_id = 0
113
+      ABFormData.tags = []
114
+    }
115
+    const res = await batchCreate(ABFormData).catch(_ => false)
116
+    if (res) {
117
+      ElMessage.success(T('OperationSuccess'))
118
+      emits('success')
119
+    }
120
+  }
121
+  const cancel = () => {
122
+    emits('cancel')
123
+  }
124
+
125
+</script>
126
+
127
+<style scoped lang="scss">
128
+
129
+</style>

+ 9 - 87
src/views/peer/index.vue

@@ -107,59 +107,10 @@
107 107
       </el-form>
108 108
     </el-dialog>
109 109
 
110
-    <el-dialog v-model="ABFormVisible" width="800" :title="T('Create')">
111
-      <el-form class="dialog-form" ref="form" :model="ABFormData" label-width="120px">
112
-        <el-form-item :label="T('Owner')" prop="user_ids" required>
113
-          <el-select v-model="ABFormData.user_ids" multiple>
114
-            <el-option
115
-                v-for="item in allUsers"
116
-                :key="item.id"
117
-                :label="item.username"
118
-                :value="item.id"
119
-            ></el-option>
120
-          </el-select>
121
-        </el-form-item>
122
-        <el-form-item label="ID" prop="id" required>
123
-          <el-input v-model="ABFormData.id"></el-input>
124
-        </el-form-item>
125
-        <el-form-item :label="T('Username')" prop="username">
126
-          <el-input v-model="ABFormData.username"></el-input>
127
-        </el-form-item>
128
-        <el-form-item :label="T('Alias')" prop="alias">
129
-          <el-input v-model="ABFormData.alias"></el-input>
130
-        </el-form-item>
131
-        <el-form-item :label="T('Hostname')" prop="hostname">
132
-          <el-input v-model="ABFormData.hostname"></el-input>
133
-        </el-form-item>
134
-        <el-form-item :label="T('Platform')" prop="platform">
135
-          <el-select v-model="ABFormData.platform">
136
-            <el-option
137
-                v-for="item in ABPlatformList"
138
-                :key="item.value"
139
-                :label="item.label"
140
-                :value="item.value"
141
-            ></el-option>
142
-          </el-select>
143
-        </el-form-item>
144
-
145
-        <el-form-item :label="T('Tags')" prop="tags">
146
-          <el-select v-model="ABFormData.tags" multiple>
147
-            <el-option
148
-                v-for="item in tagList"
149
-                :key="item.name"
150
-                :label="item.name"
151
-                :value="item.name"
152
-            ></el-option>
153
-          </el-select>
154
-        </el-form-item>
155
-        <el-form-item>
156
-          <el-button @click="ABFormVisible = false">{{ T('Cancel') }}</el-button>
157
-          <el-button @click="ABSubmit" type="primary">{{ T('Submit') }}</el-button>
158
-        </el-form-item>
159
-      </el-form>
110
+    <el-dialog v-model="ABFormVisible" width="800" :title="T('Create')" destroy-on-close>
111
+      <createABForm :peer="clickRow" @success="ABFormVisible=false" @cancel="ABFormVisible=false"></createABForm>
160 112
     </el-dialog>
161 113
 
162
-
163 114
     <el-dialog v-model="batchABFormVisible" width="800" :title="T('Create')">
164 115
       <el-form class="dialog-form" ref="form" :model="batchABFormData" label-width="120px">
165 116
         <el-form-item :label="T('Owner')" prop="user_id" required>
@@ -205,16 +156,14 @@
205 156
   import { T } from '@/utils/i18n'
206 157
   import { timeAgo } from '@/utils/time'
207 158
   import { jsonToCsv, downBlob } from '@/utils/file'
208
-  import { useRepositories as useABRepositories } from '@/views/address_book/index'
209 159
   import { loadAllUsers } from '@/global'
210
-  import { list as fetchTagList } from '@/api/tag'
211
-  import { batchCreate } from '@/api/address_book'
212 160
   import { useAppStore } from '@/store/app'
213 161
   import { connectByClient } from '@/utils/peer'
214 162
   import { CopyDocument } from '@element-plus/icons'
215 163
   import { handleClipboard } from '@/utils/clipboard'
216 164
   import { batchCreateFromPeers } from '@/api/address_book'
217 165
   import { useRepositories as useCollectionRepositories } from '@/views/address_book/collection'
166
+  import createABForm from '@/views/peer/createABForm.vue'
218 167
 
219 168
   const appStore = useAppStore()
220 169
   const listRes = reactive({
@@ -346,41 +295,12 @@
346 295
     }
347 296
   }
348 297
 
349
-  //添加到地址簿 start
350
-  const { allUsers, getAllUsers } = loadAllUsers()
351
-  onMounted(getAllUsers)
352
-  const {
353
-    platformList: ABPlatformList,
354
-    formVisible: ABFormVisible,
355
-    formData: ABFormData,
356
-    fromPeer,
357
-  } = useABRepositories('admin')
358
-  const toAddressBook = (peer) => {
359
-    fromPeer(peer)
298
+  const ABFormVisible = ref(false)
299
+  const clickRow = ref({})
300
+  const toAddressBook = (row) => {
301
+    clickRow.value = row
360 302
     ABFormVisible.value = true
361 303
   }
362
-  const ABSubmit = async () => {
363
-    const res = await batchCreate(ABFormData).catch(_ => false)
364
-    if (res) {
365
-      ElMessage.success(T('OperationSuccess'))
366
-      ABFormVisible.value = false
367
-    }
368
-  }
369
-  const tagList = ref([])
370
-  const fetchTagListData = async (user_id) => {
371
-    const res = await fetchTagList({ user_id }).catch(_ => false)
372
-    if (res) {
373
-      const ls = []
374
-      res.data.list.map(item => {
375
-        if (!ls.includes(item.name)) {
376
-          ls.push(item.name)
377
-        }
378
-      })
379
-      tagList.value = ls.map(item => ({ name: item }))
380
-    }
381
-  }
382
-  onMounted(fetchTagListData)
383
-  // 添加到地址簿 end
384 304
 
385 305
   const multipleSelection = ref([])
386 306
   const handleSelectionChange = (val) => {
@@ -408,6 +328,8 @@
408 328
   }
409 329
 
410 330
   // 批量添加到地址簿 start
331
+  const { allUsers, getAllUsers } = loadAllUsers()
332
+  onMounted(getAllUsers)
411 333
   const {
412 334
     listRes: collectionListResForBatchCreateAB,
413 335
     listQuery: collectionListQueryForBatchCreateAB,