Просмотр исходного кода

fix: webclient share
feat: peer list

lejianwen месяцев назад: 5
Родитель
Сommit
3998c2a921
3 измененных файлов с 108 добавлено и 36 удалено
  1. 3 3
      src/utils/webclient.js
  2. 1 0
      src/views/my/peer/index.vue
  3. 104 33
      src/views/peer/index.vue

+ 3 - 3
src/utils/webclient.js

@@ -16,7 +16,7 @@ export const toWebClientLink = (row) => {
16
 }
16
 }
17
 
17
 
18
 export async function getPeerSlat (id) {
18
 export async function getPeerSlat (id) {
19
-  const [addr, port] = app.setting.rustdeskConfig.value.id_server.split(':')
19
+  const [addr, port] = app.setting.rustdeskConfig.id_server.split(':')
20
   if (!addr) {
20
   if (!addr) {
21
     return
21
     return
22
   }
22
   }
@@ -69,7 +69,7 @@ export async function getPeerSlat (id) {
69
     await _ws.open()
69
     await _ws.open()
70
     console.log(new Date() + ': Connected to relay server')
70
     console.log(new Date() + ': Connected to relay server')
71
     const request_relay = rendezvous.RequestRelay.fromPartial({
71
     const request_relay = rendezvous.RequestRelay.fromPartial({
72
-      licence_key: app.setting.rustdeskConfig.value.key || undefined,
72
+      licence_key: app.setting.rustdeskConfig.key || undefined,
73
       uuid,
73
       uuid,
74
     })
74
     })
75
     _ws.sendRendezvous({ request_relay })
75
     _ws.sendRendezvous({ request_relay })
@@ -94,5 +94,5 @@ export async function getPeerSlat (id) {
94
 }
94
 }
95
 
95
 
96
 export function getV2ShareUrl (token) {
96
 export function getV2ShareUrl (token) {
97
-  return `${app.setting.rustdeskConfig.value.api_server}/webclient2/#/?share_token=${token}`
97
+  return `${app.setting.rustdeskConfig.api_server}/webclient2/#/?share_token=${token}`
98
 }
98
 }

+ 1 - 0
src/views/my/peer/index.vue

@@ -51,6 +51,7 @@
51
         <el-table-column prop="username" :label="T('Username')" align="center" width="120"/>
51
         <el-table-column prop="username" :label="T('Username')" align="center" width="120"/>
52
         <el-table-column prop="uuid" :label="T('Uuid')" align="center" width="120" show-overflow-tooltip/>
52
         <el-table-column prop="uuid" :label="T('Uuid')" align="center" width="120" show-overflow-tooltip/>
53
         <el-table-column prop="version" :label="T('Version')" align="center" width="80"/>
53
         <el-table-column prop="version" :label="T('Version')" align="center" width="80"/>
54
+        <el-table-column prop="alias" :label="T('Alias')" align="center" width="80"/>
54
         <el-table-column prop="created_at" :label="T('CreatedAt')" align="center" width="150"/>
55
         <el-table-column prop="created_at" :label="T('CreatedAt')" align="center" width="150"/>
55
         <el-table-column prop="updated_at" :label="T('UpdatedAt')" align="center" width="150"/>
56
         <el-table-column prop="updated_at" :label="T('UpdatedAt')" align="center" width="150"/>
56
         <el-table-column :label="T('Actions')" align="center" width="500" class-name="table-actions" fixed="right">
57
         <el-table-column :label="T('Actions')" align="center" width="500" class-name="table-actions" fixed="right">

+ 104 - 33
src/views/peer/index.vue

@@ -49,13 +49,11 @@
49
                   <br>
49
                   <br>
50
                   <span>{{ T('You can reference export file') }}</span>
50
                   <span>{{ T('You can reference export file') }}</span>
51
                 </div>
51
                 </div>
52
-
53
               </template>
52
               </template>
54
-
55
             </el-upload>
53
             </el-upload>
56
             <el-button @click="showImport=false" type="primary">{{ T('Cancel') }}</el-button>
54
             <el-button @click="showImport=false" type="primary">{{ T('Cancel') }}</el-button>
57
             <template #reference>
55
             <template #reference>
58
-              <el-button @click="showImport=true" type="danger">{{ T('Import') }}</el-button>
56
+              <el-button @click="showImport=true" type="danger" :icon="ArrowDown">{{ T('Import') }}</el-button>
59
             </template>
57
             </template>
60
           </el-popover>
58
           </el-popover>
61
           <el-button type="danger" @click="toBatchDelete">{{ T('BatchDelete') }}</el-button>
59
           <el-button type="danger" @click="toBatchDelete">{{ T('BatchDelete') }}</el-button>
@@ -64,36 +62,44 @@
64
       </el-form>
62
       </el-form>
65
     </el-card>
63
     </el-card>
66
     <el-card class="list-body" shadow="hover">
64
     <el-card class="list-body" shadow="hover">
65
+      <div style="text-align: right; margin-bottom: 10px">
66
+        <el-button :icon="Setting" @click="showColumnSetting"></el-button>
67
+      </div>
68
+
67
       <el-table :data="listRes.list" v-loading="listRes.loading" border size="small" @selection-change="handleSelectionChange">
69
       <el-table :data="listRes.list" v-loading="listRes.loading" border size="small" @selection-change="handleSelectionChange">
68
         <el-table-column type="selection" width="55" align="center"/>
70
         <el-table-column type="selection" width="55" align="center"/>
69
-        <el-table-column prop="id" label="ID" align="center" width="150">
70
-          <template #default="{row}">
71
-            <span>{{ row.id }} <el-icon @click="handleClipboard(row.id, $event)"><CopyDocument/></el-icon></span>
72
-          </template>
73
-        </el-table-column>
74
-        <el-table-column prop="cpu" label="CPU" align="center" width="100" show-overflow-tooltip/>
75
-        <el-table-column prop="hostname" :label="T('Hostname')" align="center" width="120"/>
76
-        <el-table-column prop="memory" :label="T('Memory')" align="center" width="120"/>
77
-        <el-table-column prop="os" :label="T('Os')" align="center" width="120" show-overflow-tooltip/>
78
-        <el-table-column prop="last_online_time" :label="T('LastOnlineTime')" align="center" min-width="120">
79
-          <template #default="{row}">
80
-            <div class="last_oline_time">
81
-              <span> {{ row.last_online_time ? timeAgo(row.last_online_time * 1000) : '-' }}</span> <span class="dot" :class="{red: timeDis(row.last_online_time) >= 60, green: timeDis(row.last_online_time)< 60}"></span>
82
-            </div>
83
-          </template>
84
-        </el-table-column>
85
-        <el-table-column prop="last_online_ip" :label="T('LastOnlineIp')" align="center" min-width="120"/>
86
-        <el-table-column prop="username" :label="T('Username')" align="center" width="120"/>
87
-        <el-table-column prop="group_id" :label="T('Group')" align="center" width="120">
88
-          <template #default="{row}">
89
-            <span v-if="row.group_id"> <el-tag>{{ groupListRes.list?.find(g => g.id === row.group_id)?.name }} </el-tag> </span>
90
-            <span v-else> - </span>
91
-          </template>
92
-        </el-table-column>
93
-        <el-table-column prop="uuid" :label="T('Uuid')" align="center" width="120" show-overflow-tooltip/>
94
-        <el-table-column prop="version" :label="T('Version')" align="center" width="80"/>
95
-        <el-table-column prop="created_at" :label="T('CreatedAt')" align="center" width="150"/>
96
-        <el-table-column prop="updated_at" :label="T('UpdatedAt')" align="center" width="150"/>
71
+        <template v-for="c in visibleColumns.filter(cc => cc.visible)" :key="c">
72
+          <el-table-column v-if="c.name==='id'" prop="id" label="ID" align="center" width="150">
73
+            <template #default="{row}">
74
+              <span>{{ row.id }} <el-icon @click="handleClipboard(row.id, $event)"><CopyDocument/></el-icon></span>
75
+            </template>
76
+          </el-table-column>
77
+          <el-table-column v-if="c.name==='cpu'" prop="cpu" label="CPU" align="center" width="100" show-overflow-tooltip/>
78
+          <el-table-column v-if="c.name==='hostname'" prop="hostname" :label="T('Hostname')" align="center" width="120"/>
79
+          <el-table-column v-if="c.name==='memory'" prop="memory" :label="T('Memory')" align="center" width="120"/>
80
+          <el-table-column v-if="c.name==='os'" prop="os" :label="T('Os')" align="center" width="120" show-overflow-tooltip/>
81
+          <el-table-column v-if="c.name==='last_online_time'" prop="last_online_time" :label="T('LastOnlineTime')" align="center" min-width="120">
82
+            <template #default="{row}">
83
+              <div class="last_oline_time">
84
+                <span> {{ row.last_online_time ? timeAgo(row.last_online_time * 1000) : '-' }}</span> <span class="dot" :class="{red: timeDis(row.last_online_time) >= 60, green: timeDis(row.last_online_time)< 60}"></span>
85
+              </div>
86
+            </template>
87
+          </el-table-column>
88
+          <el-table-column v-if="c.name==='last_online_ip'" prop="last_online_ip" :label="T('LastOnlineIp')" align="center" min-width="120"/>
89
+          <el-table-column v-if="c.name==='username'" prop="username" :label="T('Username')" align="center" width="120"/>
90
+          <el-table-column v-if="c.name==='group_id'" prop="group_id" :label="T('Group')" align="center" width="120">
91
+            <template #default="{row}">
92
+              <span v-if="row.group_id"> <el-tag>{{ groupListRes.list?.find(g => g.id === row.group_id)?.name }} </el-tag> </span>
93
+              <span v-else> - </span>
94
+            </template>
95
+          </el-table-column>
96
+          <el-table-column v-if="c.name==='uuid'" prop="uuid" :label="T('Uuid')" align="center" width="120" show-overflow-tooltip/>
97
+          <el-table-column v-if="c.name==='version'" prop="version" :label="T('Version')" align="center" width="80"/>
98
+          <el-table-column v-if="c.name==='alias'" prop="alias" :label="T('Alias')" align="center" width="80"/>
99
+          <el-table-column v-if="c.name==='created_at'" prop="created_at" :label="T('CreatedAt')" align="center" width="150"/>
100
+          <el-table-column v-if="c.name==='updated_at'" prop="updated_at" :label="T('UpdatedAt')" align="center" width="150"/>
101
+        </template>
102
+
97
         <el-table-column :label="T('Actions')" align="center" width="500" class-name="table-actions" fixed="right">
103
         <el-table-column :label="T('Actions')" align="center" width="500" class-name="table-actions" fixed="right">
98
           <template #default="{row}">
104
           <template #default="{row}">
99
             <el-button type="success" @click="connectByClient(row.id)">{{ T('Link') }}</el-button>
105
             <el-button type="success" @click="connectByClient(row.id)">{{ T('Link') }}</el-button>
@@ -150,7 +156,9 @@
150
         <el-form-item :label="T('Version')" prop="version">
156
         <el-form-item :label="T('Version')" prop="version">
151
           <el-input v-model="formData.version"></el-input>
157
           <el-input v-model="formData.version"></el-input>
152
         </el-form-item>
158
         </el-form-item>
153
-
159
+        <el-form-item :label="T('Alias')" prop="alias">
160
+          <el-input v-model="formData.alias"></el-input>
161
+        </el-form-item>
154
         <el-form-item>
162
         <el-form-item>
155
           <el-button @click="formVisible = false">{{ T('Cancel') }}</el-button>
163
           <el-button @click="formVisible = false">{{ T('Cancel') }}</el-button>
156
           <el-button @click="submit" type="primary">{{ T('Submit') }}</el-button>
164
           <el-button @click="submit" type="primary">{{ T('Submit') }}</el-button>
@@ -196,6 +204,28 @@
196
         </el-form-item>
204
         </el-form-item>
197
       </el-form>
205
       </el-form>
198
     </el-dialog>
206
     </el-dialog>
207
+
208
+    <el-dialog v-model="columnSettingVisible" title="Column Setting">
209
+      <div v-for="(row, key) in visibleColumns" :key="key" style="margin-bottom: 10px;display: flex;align-items: center">
210
+        <div style="width: 200px">
211
+          <el-checkbox v-model="row.visible" :label="true">{{ T(row.label) }}</el-checkbox>
212
+        </div>
213
+        <div @click="upColumn(key)" style="width: 100px;cursor: pointer">
214
+          <el-icon :size="20">
215
+            <ArrowUp/>
216
+          </el-icon>
217
+        </div>
218
+        <div @click="downColumn(key)" style="width: 100px;cursor: pointer">
219
+          <el-icon :size="20">
220
+            <ArrowDown/>
221
+          </el-icon>
222
+        </div>
223
+      </div>
224
+      <span slot="footer" class="dialog-footer">
225
+        <el-button @click="columnSettingVisible = false">{{ T('Cancel') }}</el-button>
226
+        <el-button type="primary" @click="saveColumnSetting">{{ T('Save') }}</el-button>
227
+      </span>
228
+    </el-dialog>
199
   </div>
229
   </div>
200
 </template>
230
 </template>
201
 
231
 
@@ -211,7 +241,7 @@
211
   import { loadAllUsers } from '@/global'
241
   import { loadAllUsers } from '@/global'
212
   import { useAppStore } from '@/store/app'
242
   import { useAppStore } from '@/store/app'
213
   import { connectByClient } from '@/utils/peer'
243
   import { connectByClient } from '@/utils/peer'
214
-  import { CopyDocument } from '@element-plus/icons'
244
+  import { ArrowDown, ArrowUp, CopyDocument, Setting } from '@element-plus/icons'
215
   import { handleClipboard } from '@/utils/clipboard'
245
   import { handleClipboard } from '@/utils/clipboard'
216
   import { batchCreateFromPeers } from '@/api/address_book'
246
   import { batchCreateFromPeers } from '@/api/address_book'
217
   import { useRepositories as useCollectionRepositories } from '@/views/address_book/collection'
247
   import { useRepositories as useCollectionRepositories } from '@/views/address_book/collection'
@@ -495,6 +525,47 @@
495
   }
525
   }
496
   // 批量添加到地址簿 end
526
   // 批量添加到地址簿 end
497
 
527
 
528
+  const columnSettingVisible = ref(false)
529
+  const allColumns = ref([
530
+    { name: 'id', visible: true, label: 'Id' },
531
+    { name: 'cpu', visible: true, label: 'Cpu' },
532
+    { name: 'hostname', visible: true, label: 'Hostname' },
533
+    { name: 'memory', visible: true, label: 'Memory' },
534
+    { name: 'os', visible: true, label: 'Os' },
535
+    { name: 'last_online_time', visible: true, label: 'LastOnlineTime' },
536
+    { name: 'last_online_ip', visible: true, label: 'LastOnlineIp' },
537
+    { name: 'username', visible: true, label: 'Username' },
538
+    { name: 'group_id', visible: true, label: 'Group' },
539
+    { name: 'uuid', visible: true, label: 'Uuid' },
540
+    { name: 'version', visible: true, label: 'Version' },
541
+    { name: 'alias', visible: true, label: 'Alias' },
542
+    { name: 'created_at', visible: true, label: 'CreatedAt' },
543
+    { name: 'updated_at', visible: true, label: 'UpdatedAt' },
544
+  ])
545
+  const visibleColumns = ref(JSON.parse(localStorage.getItem('peer_visible_columns')) || allColumns.value)
546
+  const showColumnSetting = () => {
547
+    columnSettingVisible.value = true
548
+  }
549
+  const saveColumnSetting = () => {
550
+    localStorage.setItem('peer_visible_columns', JSON.stringify(visibleColumns.value))
551
+    ElMessage.success(T('OperationSuccess'))
552
+    columnSettingVisible.value = false
553
+  }
554
+
555
+  const upColumn = (index) => {
556
+    if (index === 0) return
557
+    const col = visibleColumns.value[index]
558
+    visibleColumns.value.splice(index, 1)
559
+    visibleColumns.value.splice(index - 1, 0, col)
560
+
561
+  }
562
+  const downColumn = (index) => {
563
+    if (index === visibleColumns.value.length - 1) return
564
+    const col = visibleColumns.value[index]
565
+    visibleColumns.value.splice(index, 1)
566
+    visibleColumns.value.splice(index + 1, 0, col)
567
+
568
+  }
498
 </script>
569
 </script>
499
 
570
 
500
 <style scoped lang="scss">
571
 <style scoped lang="scss">