26
26
<Icon :icon =" isPaused ? playIcon : pauseIcon" />
27
27
</el-button >
28
28
</el-tooltip >
29
+ <el-tooltip effect =" light" content =" Swtich Overwrite/Scroll" placement =" bottom" >
30
+ <el-button
31
+ :type =" isOverwrite ? 'success' : 'primary'"
32
+ link
33
+ :class =" { 'pause-active': isOverwrite }"
34
+ @click =" toggleOverwrite"
35
+ >
36
+ <Icon :icon =" switchIcon" />
37
+ </el-button >
38
+ </el-tooltip >
29
39
</el-button-group >
30
40
31
41
<el-divider v-if =" showFilter" direction =" vertical" />
@@ -105,6 +115,7 @@ import filterIcon from '@iconify/icons-material-symbols/filter-alt-off-outline'
105
115
import saveIcon from ' @iconify/icons-material-symbols/save'
106
116
import pauseIcon from ' @iconify/icons-material-symbols/pause-circle-outline'
107
117
import playIcon from ' @iconify/icons-material-symbols/play-circle-outline'
118
+ import switchIcon from ' @iconify/icons-material-symbols/cameraswitch-outline-rounded'
108
119
import scrollIcon1 from ' @iconify/icons-material-symbols/autoplay'
109
120
import scrollIcon2 from ' @iconify/icons-material-symbols/autopause'
110
121
import ExcelJS from ' exceljs'
@@ -121,7 +132,8 @@ interface LogData {
121
132
dir? : ' Tx' | ' Rx' | ' --'
122
133
data: string
123
134
ts: string
124
- id? : string
135
+ id: string
136
+ key? : string
125
137
dlc? : number
126
138
len? : number
127
139
device: string
@@ -132,7 +144,19 @@ interface LogData {
132
144
seqIndex? : number
133
145
children? : LogData [] | { name: string ; data: string }[]
134
146
}
135
-
147
+ const isOverwrite = ref (false )
148
+ function toggleOverwrite() {
149
+ isOverwrite .value = ! isOverwrite .value
150
+ if (isOverwrite .value ) {
151
+ // clearLog('Switch Overwrite Mode')
152
+ // remove duplicate data
153
+ const uniqueData = allLogData .filter (
154
+ (item , index , self ) => index === self .findIndex ((t ) => t .key === item .key )
155
+ )
156
+ allLogData = uniqueData
157
+ grid .loadData (allLogData )
158
+ }
159
+ }
136
160
const database = useDataStore ()
137
161
const instanceList = ref <string []>([])
138
162
const allInstanceList = computed (() => {
@@ -199,10 +223,12 @@ watch(globalStart, (val) => {
199
223
}
200
224
})
201
225
226
+ let expandskey: string [] = []
202
227
function clearLog(msg = ' Clear Trace' ) {
203
228
allLogData = []
204
229
205
230
scrollY = - 1
231
+ expandskey = []
206
232
// TODO:
207
233
grid .loadData ([])
208
234
grid .scrollYTo (0 )
@@ -233,15 +259,36 @@ const maxLogCount = 50000
233
259
const showLogCount = 500
234
260
235
261
function insertData2(data : LogData []) {
236
- allLogData .push (... data )
262
+ if (isOverwrite .value ) {
263
+ for (const item of data ) {
264
+ if (item .id ) {
265
+ // Find index of existing log with same id
266
+ const idx = allLogData .findIndex ((log ) => log .key === item .key )
267
+ if (idx !== - 1 ) {
268
+ // Overwrite the existing log entry
269
+ allLogData [idx ] = item
270
+ } else {
271
+ allLogData .push (item )
272
+ }
273
+ } else {
274
+ allLogData .push (item )
275
+ }
276
+ }
277
+ } else {
278
+ allLogData .push (... data )
279
+ }
237
280
if (allLogData .length > maxLogCount ) {
238
281
const excessRows = allLogData .length - maxLogCount
239
282
allLogData .splice (0 , excessRows )
240
283
}
241
284
242
285
// 根据暂停状态决定加载多少数据
243
286
const displayData = isPaused .value ? allLogData : allLogData .slice (- showLogCount )
287
+
244
288
grid .loadData (displayData )
289
+ if (isOverwrite .value ) {
290
+ grid .setExpandRowKeys (expandskey )
291
+ }
245
292
grid .scrollYTo (99999999999 )
246
293
}
247
294
function logDisplay(method : string , vals : LogItem []) {
@@ -250,6 +297,7 @@ function logDisplay(method: string, vals: LogItem[]) {
250
297
251
298
const logData: LogData [] = []
252
299
const insertData = (data : LogData ) => {
300
+ data .key = ` ${data .channel }-${data .device }-${data .id } `
253
301
logData .push (data )
254
302
}
255
303
for (const val of vals ) {
@@ -268,7 +316,8 @@ function logDisplay(method: string, vals: LogItem[]) {
268
316
channel: val .instance ,
269
317
msgType: CanMsgType2Str (val .message .data .msgType ),
270
318
name: val .message .data .name ,
271
- children: val .message .data .children
319
+ children: val .message .data .children ,
320
+ key: ` ${val .instance }-${val .message .data .id } `
272
321
})
273
322
} else if (val .message .method == ' ipBase' ) {
274
323
insertData ({
@@ -311,7 +360,7 @@ function logDisplay(method: string, vals: LogItem[]) {
311
360
name: testerName ,
312
361
data: ` ${data2str (val .message .data .recvData ? val .message .data .recvData : new Uint8Array (0 ))} ` .trim (),
313
362
ts: (val .message .data .ts / 1000000 ).toFixed (3 ),
314
- id: ' ' ,
363
+ id: testerName ,
315
364
len: val .message .data .recvData ? val .message .data .recvData .length : 0 ,
316
365
device: val .label ,
317
366
channel: val .instance ,
@@ -337,7 +386,7 @@ function logDisplay(method: string, vals: LogItem[]) {
337
386
name: testerName ,
338
387
data: ` ${data2str (val .message .data .recvData ? val .message .data .recvData : new Uint8Array (0 ))} ` .trim (),
339
388
ts: (val .message .data .ts / 1000000 ).toFixed (3 ),
340
- id: ' ' ,
389
+ id: testerName ,
341
390
len: val .message .data .recvData ? val .message .data .recvData .length : 0 ,
342
391
device: val .label ,
343
392
channel: val .instance ,
@@ -352,7 +401,7 @@ function logDisplay(method: string, vals: LogItem[]) {
352
401
name: ' ' ,
353
402
data: val .message .data .msg ,
354
403
ts: (val .message .data .ts / 1000000 ).toFixed (3 ),
355
- id: ' ' ,
404
+ id: ' canError ' ,
356
405
len: 0 ,
357
406
device: val .label ,
358
407
channel: val .instance ,
@@ -383,7 +432,7 @@ function logDisplay(method: string, vals: LogItem[]) {
383
432
name: ' ' ,
384
433
data: val .message .data .msg ,
385
434
ts: (val .message .data .ts / 1000000 ).toFixed (3 ),
386
- id: ' ' ,
435
+ id: ' linError ' ,
387
436
len: 0 ,
388
437
device: val .label ,
389
438
channel: val .instance ,
@@ -396,7 +445,7 @@ function logDisplay(method: string, vals: LogItem[]) {
396
445
name: ' ' ,
397
446
data: val .message .data .msg ,
398
447
ts: (val .message .data .ts / 1000000 ).toFixed (3 ),
399
- id: ' ' ,
448
+ id: ' linEvent ' ,
400
449
len: 0 ,
401
450
device: val .label ,
402
451
channel: val .instance ,
@@ -408,7 +457,7 @@ function logDisplay(method: string, vals: LogItem[]) {
408
457
name: ' ' ,
409
458
data: val .message .data .msg ,
410
459
ts: (val .message .data .ts / 1000000 ).toFixed (3 ),
411
- id: ' ' ,
460
+ id: ' udsScript ' ,
412
461
len: 0 ,
413
462
device: val .label ,
414
463
channel: val .instance ,
@@ -420,7 +469,7 @@ function logDisplay(method: string, vals: LogItem[]) {
420
469
name: ' ' ,
421
470
data: val .message .data .msg ,
422
471
ts: (val .message .data .ts / 1000000 ).toFixed (3 ),
423
- id: ' ' ,
472
+ id: ' udsSystem ' ,
424
473
len: 0 ,
425
474
device: val .label ,
426
475
channel: val .instance ,
@@ -721,11 +770,16 @@ watch(
721
770
},
722
771
{ deep: true }
723
772
)
724
- watch (isPaused , (v ) => {
725
- if (v ) {
773
+ watch ([ isPaused , isOverwrite ] , (v ) => {
774
+ if (v [ 1 ] ) {
726
775
columes .value [0 ].type = ' tree'
727
776
} else {
728
- columes .value [0 ].type = undefined
777
+ if (v [0 ]) {
778
+ columes .value [0 ].type = ' tree'
779
+ } else {
780
+ columes .value [0 ].type = undefined
781
+ scrollY = - 1
782
+ }
729
783
}
730
784
})
731
785
@@ -749,6 +803,7 @@ onMounted(() => {
749
803
DISABLED: true ,
750
804
HEADER_HEIGHT: 28 ,
751
805
CELL_HEIGHT: 28 ,
806
+ ROW_KEY: ' key' ,
752
807
ENABLE_SELECTOR: false ,
753
808
ENABLE_HISTORY: false ,
754
809
ENABLE_COPY: false ,
@@ -813,17 +868,23 @@ onMounted(() => {
813
868
814
869
grid .on (' onScrollY' , (v ) => {
815
870
if (! isPaused .value && scrollY !== - 1 && v < scrollY ) {
816
- isPaused .value = true
871
+ if (! isOverwrite .value ) {
872
+ isPaused .value = true
873
+ }
817
874
} else {
818
875
scrollY = v
819
876
}
820
877
})
878
+ grid .on (' expandChange' , (v ) => {
879
+ expandskey = v
880
+ })
821
881
})
822
882
watch ([tableWidth , tableHeight ], () => {
823
883
grid .loadConfig ({
824
884
WIDTH: tableWidth .value ,
825
885
HEIGHT: tableHeight .value
826
886
})
887
+ grid .setExpandRowKeys (expandskey )
827
888
})
828
889
829
890
onUnmounted (() => {
0 commit comments