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

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 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 20
   if (!addr) {
21 21
     return
22 22
   }
@@ -69,7 +69,7 @@ export async function getPeerSlat (id) {
69 69
     await _ws.open()
70 70
     console.log(new Date() + ': Connected to relay server')
71 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 73
       uuid,
74 74
     })
75 75
     _ws.sendRendezvous({ request_relay })
@@ -94,5 +94,5 @@ export async function getPeerSlat (id) {
94 94
 }
95 95
 
96 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 51
         <el-table-column prop="username" :label="T('Username')" align="center" width="120"/>
52 52
         <el-table-column prop="uuid" :label="T('Uuid')" align="center" width="120" show-overflow-tooltip/>
53 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 55
         <el-table-column prop="created_at" :label="T('CreatedAt')" align="center" width="150"/>
55 56
         <el-table-column prop="updated_at" :label="T('UpdatedAt')" align="center" width="150"/>
56 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 49
                   <br>
50 50
                   <span>{{ T('You can reference export file') }}</span>
51 51
                 </div>
52
-
53 52
               </template>
54
-
55 53
             </el-upload>
56 54
             <el-button @click="showImport=false" type="primary">{{ T('Cancel') }}</el-button>
57 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 57
             </template>
60 58
           </el-popover>
61 59
           <el-button type="danger" @click="toBatchDelete">{{ T('BatchDelete') }}</el-button>
@@ -64,36 +62,44 @@
64 62
       </el-form>
65 63
     </el-card>
66 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 69
       <el-table :data="listRes.list" v-loading="listRes.loading" border size="small" @selection-change="handleSelectionChange">
68 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 103
         <el-table-column :label="T('Actions')" align="center" width="500" class-name="table-actions" fixed="right">
98 104
           <template #default="{row}">
99 105
             <el-button type="success" @click="connectByClient(row.id)">{{ T('Link') }}</el-button>
@@ -150,7 +156,9 @@
150 156
         <el-form-item :label="T('Version')" prop="version">
151 157
           <el-input v-model="formData.version"></el-input>
152 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 162
         <el-form-item>
155 163
           <el-button @click="formVisible = false">{{ T('Cancel') }}</el-button>
156 164
           <el-button @click="submit" type="primary">{{ T('Submit') }}</el-button>
@@ -196,6 +204,28 @@
196 204
         </el-form-item>
197 205
       </el-form>
198 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 229
   </div>
200 230
 </template>
201 231
 
@@ -211,7 +241,7 @@
211 241
   import { loadAllUsers } from '@/global'
212 242
   import { useAppStore } from '@/store/app'
213 243
   import { connectByClient } from '@/utils/peer'
214
-  import { CopyDocument } from '@element-plus/icons'
244
+  import { ArrowDown, ArrowUp, CopyDocument, Setting } from '@element-plus/icons'
215 245
   import { handleClipboard } from '@/utils/clipboard'
216 246
   import { batchCreateFromPeers } from '@/api/address_book'
217 247
   import { useRepositories as useCollectionRepositories } from '@/views/address_book/collection'
@@ -495,6 +525,47 @@
495 525
   }
496 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 569
 </script>
499 570
 
500 571
 <style scoped lang="scss">