mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-02-13 00:10:27 +00:00
feat: 新版webui
This commit is contained in:
97
napcat.webui/src/utils/terminal.ts
Normal file
97
napcat.webui/src/utils/terminal.ts
Normal file
@@ -0,0 +1,97 @@
|
||||
import { LogLevel } from '@/const/enum'
|
||||
|
||||
export const gradientText = (
|
||||
text: string,
|
||||
startColor: [number, number, number] = [255, 0, 0],
|
||||
endColor: [number, number, number] = [0, 0, 255],
|
||||
bold: boolean = false,
|
||||
italic: boolean = false,
|
||||
underline: boolean = false
|
||||
) => {
|
||||
const steps = text.length
|
||||
const colorStep = startColor.map(
|
||||
(start, index) => (endColor[index] - start) / steps
|
||||
)
|
||||
|
||||
let coloredText = ''
|
||||
for (let i = 0; i < steps; i++) {
|
||||
const color = startColor.map((start, index) =>
|
||||
Math.round(start + colorStep[index] * i)
|
||||
)
|
||||
coloredText += `\x1b[38;2;${color[0]};${color[1]};${color[2]}m${text[i]}`
|
||||
}
|
||||
|
||||
// 添加样式
|
||||
if (bold) {
|
||||
coloredText = `\x1b[1m${coloredText}`
|
||||
}
|
||||
if (italic) {
|
||||
coloredText = `\x1b[3m${coloredText}`
|
||||
}
|
||||
if (underline) {
|
||||
coloredText = `\x1b[4m${coloredText}`
|
||||
}
|
||||
|
||||
return coloredText + '\x1b[0m' // 重置颜色和样式
|
||||
}
|
||||
|
||||
export const logColor = {
|
||||
[LogLevel.DEBUG]: 'green',
|
||||
[LogLevel.INFO]: 'black',
|
||||
[LogLevel.WARN]: 'yellow',
|
||||
[LogLevel.ERROR]: 'red',
|
||||
[LogLevel.FATAL]: 'red'
|
||||
} as const
|
||||
|
||||
export const colorizeLogLevel = (content: string) => {
|
||||
const logLevel = content.match(/\[[a-zA-Z]+\]/) || []
|
||||
let _content = content
|
||||
const level =
|
||||
(logLevel?.[0]?.replace('[', '').replace(']', '') as LogLevel) ??
|
||||
LogLevel.INFO
|
||||
const color = logColor[level]
|
||||
switch (color) {
|
||||
case 'green':
|
||||
_content = `\x1b[32m${_content}\x1b[0m`
|
||||
break
|
||||
case 'black':
|
||||
_content = `\x1b[30m${_content}\x1b[0m`
|
||||
break
|
||||
case 'yellow':
|
||||
_content = `\x1b[33m${_content}\x1b[0m`
|
||||
break
|
||||
case 'red':
|
||||
_content = `\x1b[31m${_content}\x1b[0m`
|
||||
break
|
||||
default:
|
||||
_content = `\x1b[30m${_content}\x1b[0m`
|
||||
}
|
||||
return {
|
||||
content: _content,
|
||||
level
|
||||
}
|
||||
}
|
||||
|
||||
export const colorizeLogLevelWithTag = (content: string, level: LogLevel) => {
|
||||
let _content = content
|
||||
switch (level) {
|
||||
case LogLevel.DEBUG:
|
||||
_content = `\x1b[32m[DEBUG] ${content}\x1b[0m`
|
||||
break
|
||||
case LogLevel.INFO:
|
||||
_content = `\x1b[30m[INFO] ${content}\x1b[0m`
|
||||
break
|
||||
case LogLevel.WARN:
|
||||
_content = `\x1b[33m[WARN] ${content}\x1b[0m`
|
||||
break
|
||||
case LogLevel.ERROR:
|
||||
_content = `\x1b[31m[ERROR] ${content}\x1b[0m`
|
||||
break
|
||||
case LogLevel.FATAL:
|
||||
_content = `\x1b[31m[FATAL] ${content}\x1b[0m`
|
||||
break
|
||||
default:
|
||||
_content = `\x1b[30m${content}\x1b[0m`
|
||||
}
|
||||
return _content
|
||||
}
|
||||
Reference in New Issue
Block a user