Skip to content

Commit ceb1778

Browse files
committed
[vue3] fix 折叠功能引入后 log-size-limit 不生效的问题 tzfun#87
1 parent 02776ce commit ceb1778

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

src/Terminal.vue

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ const byteLen = reactive({
204204
})
205205
const showInputLine = ref<boolean>(true)
206206
const terminalLog = ref<MessageGroup[]>([])
207+
const logSize = ref<number>(0)
207208
const searchCmdResult = reactive({
208209
// 避免默认提示板与输入框遮挡,某些情况下需要隐藏提示板
209210
show: false,
@@ -595,6 +596,7 @@ const _clearLog = (clearHistory: boolean) => {
595596
store.clear(getName())
596597
} else {
597598
terminalLog.value = [];
599+
logSize.value = 0;
598600
}
599601
}
600602
@@ -949,8 +951,10 @@ const _pushMessage = (message: Message | Array<Message> | string) => {
949951
if (!message) return
950952
if (message instanceof Array) {
951953
for (let m of message) {
952-
_pushMessage0(m)
954+
_pushMessage0(m, false)
953955
}
956+
_checkLogSize()
957+
_jumpToBottom()
954958
return;
955959
}
956960
@@ -967,6 +971,7 @@ const _pushMessage = (message: Message | Array<Message> | string) => {
967971
}
968972
969973
_pushMessage0(message)
974+
_jumpToBottom()
970975
971976
if (message.type === 'json') {
972977
setTimeout(() => {
@@ -975,7 +980,7 @@ const _pushMessage = (message: Message | Array<Message> | string) => {
975980
}
976981
}
977982
978-
const _pushMessage0 = (message: Message) => {
983+
const _pushMessage0 = (message: Message, checkSize:boolean = false) => {
979984
_filterMessageType(message)
980985
if (message.type !== 'cmdLine' && props.pushMessageBefore) {
981986
props.pushMessageBefore(message, getName())
@@ -988,15 +993,36 @@ const _pushMessage0 = (message: Message) => {
988993
terminalLogLength = terminalLog.value.length
989994
let logGroup = terminalLog.value[terminalLogLength - 1]
990995
logGroup.logs.push(message)
996+
logSize.value++
991997
992-
// 留 10% 的缓冲
993-
let limit = Math.floor(props.logSizeLimit * 1.1)
994-
if (limit > 0 && terminalLogLength > limit) {
995-
let left = terminalLogLength - props.logSizeLimit
996-
terminalLog.value.splice(0, left)
998+
if (checkSize) {
999+
_checkLogSize()
9971000
}
1001+
}
9981002
999-
_jumpToBottom()
1003+
const _checkLogSize = () => {
1004+
if (props.logSizeLimit <= 0) {
1005+
console.warn("Invalid attribute 'log-size-limit':", props.logSizeLimit)
1006+
return;
1007+
}
1008+
1009+
// 留10%的缓冲
1010+
let limit = Math.floor(props.logSizeLimit * 1.1)
1011+
1012+
let count = logSize.value - limit;
1013+
while (count > 0) {
1014+
let group = terminalLog.value[0]
1015+
let leftCount = count - group.logs.length
1016+
if (leftCount >= 0) {
1017+
terminalLog.value.splice(0, 1)
1018+
logSize.value -= group.logs.length
1019+
} else {
1020+
group.logs.splice(0, count);
1021+
group.fold = false
1022+
logSize.value -= count
1023+
}
1024+
count = leftCount;
1025+
}
10001026
}
10011027
10021028
/**

test/App.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,6 @@ const setCommand = () => {
252252
:title="item.name"
253253
:context="item.context"
254254
context-suffix=" > "
255-
:warn-log-count-limit="200"
256255
:drag-conf="item.dragConf"
257256
:show-header="item.showHeader"
258257
:push-message-before="pushMessageBefore"

0 commit comments

Comments
 (0)