mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-07-22 04:16:07 +00:00
perf: 首页展示版本信息
This commit is contained in:
@@ -54,7 +54,7 @@ class RouterGroup(abc.ABC):
|
|||||||
return self.http_status(500, -2, str(e))
|
return self.http_status(500, -2, str(e))
|
||||||
|
|
||||||
new_f = handler_error
|
new_f = handler_error
|
||||||
new_f.__name__ = f.__name__
|
new_f.__name__ = (self.name + rule).replace('/', '__')
|
||||||
new_f.__doc__ = f.__doc__
|
new_f.__doc__ = f.__doc__
|
||||||
|
|
||||||
self.quart_app.route(rule, **options)(new_f)
|
self.quart_app.route(rule, **options)(new_f)
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import quart
|
||||||
|
|
||||||
|
from .....core import app
|
||||||
|
from .. import group
|
||||||
|
from .....utils import constants
|
||||||
|
|
||||||
|
|
||||||
|
@group.group_class('system', '/api/v1/system')
|
||||||
|
class SystemRouterGroup(group.RouterGroup):
|
||||||
|
|
||||||
|
async def initialize(self) -> None:
|
||||||
|
@self.route('/info', methods=['GET'])
|
||||||
|
async def _() -> str:
|
||||||
|
return self.success(
|
||||||
|
data={
|
||||||
|
"version": constants.semantic_version,
|
||||||
|
"debug": constants.debug_mode
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -5,7 +5,7 @@ import asyncio
|
|||||||
import quart
|
import quart
|
||||||
|
|
||||||
from ....core import app
|
from ....core import app
|
||||||
from .groups import logs
|
from .groups import logs, system
|
||||||
from . import group
|
from . import group
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,12 @@ from __future__ import print_function
|
|||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import os
|
||||||
|
|
||||||
from . import app
|
from . import app
|
||||||
from ..audit import identifier
|
from ..audit import identifier
|
||||||
from . import stage
|
from . import stage
|
||||||
|
from ..utils import constants
|
||||||
|
|
||||||
# 引入启动阶段实现以便注册
|
# 引入启动阶段实现以便注册
|
||||||
from .stages import load_config, setup_logger, build_app, migrate, show_notes
|
from .stages import load_config, setup_logger, build_app, migrate, show_notes
|
||||||
@@ -25,6 +27,10 @@ async def make_app(loop: asyncio.AbstractEventLoop) -> app.Application:
|
|||||||
# 生成标识符
|
# 生成标识符
|
||||||
identifier.init()
|
identifier.init()
|
||||||
|
|
||||||
|
# 确定是否为调试模式
|
||||||
|
if "DEBUG" in os.environ and os.environ["DEBUG"] in ["true", "1"]:
|
||||||
|
constants.debug_mode = True
|
||||||
|
|
||||||
ap = app.Application()
|
ap = app.Application()
|
||||||
|
|
||||||
ap.event_loop = loop
|
ap.event_loop = loop
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import time
|
|||||||
|
|
||||||
import colorlog
|
import colorlog
|
||||||
|
|
||||||
|
from ...utils import constants
|
||||||
|
|
||||||
|
|
||||||
log_colors_config = {
|
log_colors_config = {
|
||||||
"DEBUG": "green", # cyan white
|
"DEBUG": "green", # cyan white
|
||||||
@@ -22,7 +24,7 @@ async def init_logging(extra_handlers: list[logging.Handler] = None) -> logging.
|
|||||||
|
|
||||||
level = logging.INFO
|
level = logging.INFO
|
||||||
|
|
||||||
if "DEBUG" in os.environ and os.environ["DEBUG"] in ["true", "1"]:
|
if constants.debug_mode:
|
||||||
level = logging.DEBUG
|
level = logging.DEBUG
|
||||||
|
|
||||||
log_file_name = "data/logs/qcg-%s.log" % time.strftime(
|
log_file_name = "data/logs/qcg-%s.log" % time.strftime(
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
semantic_version = "v3.3.1.1"
|
semantic_version = "v3.3.1.1"
|
||||||
|
|
||||||
|
debug_mode = False
|
||||||
+43
-4
@@ -5,7 +5,13 @@
|
|||||||
<v-navigation-drawer id="navigation-drawer" :width="160" app permanent rail>
|
<v-navigation-drawer id="navigation-drawer" :width="160" app permanent rail>
|
||||||
<v-list-item id="logo-list-item">
|
<v-list-item id="logo-list-item">
|
||||||
<template v-slot:prepend>
|
<template v-slot:prepend>
|
||||||
<v-img src="@/assets/langbot-logo-block.png" height="32" width="32"></v-img>
|
<div id="logo-container">
|
||||||
|
<v-img id="logo-img" src="@/assets/langbot-logo-block.png" height="32" width="32"></v-img>
|
||||||
|
|
||||||
|
<div id="version-chip" v-tooltip="proxy.$store.state.version + (proxy.$store.state.debug ? ' (调试模式已启用)' : '')" :style="{ 'background-color': proxy.$store.state.debug ? '#c79a47' : '#1e9ae2' }">
|
||||||
|
{{ proxy.$store.state.version }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-divider></v-divider>
|
<v-divider></v-divider>
|
||||||
@@ -23,7 +29,7 @@
|
|||||||
<template v-slot:append>
|
<template v-slot:append>
|
||||||
<div>
|
<div>
|
||||||
<v-list density="compact" nav>
|
<v-list density="compact" nav>
|
||||||
<v-list-item id="about-list-item" title="关于" prepend-icon="mdi-cog-outline" v-tooltip="关于">
|
<v-list-item id="about-list-item" title="系统信息" prepend-icon="mdi-cog-outline" v-tooltip="系统信息">
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</div>
|
</div>
|
||||||
@@ -38,6 +44,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { getCurrentInstance } from 'vue'
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
@@ -46,9 +55,39 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
#logo-list-item {
|
#logo-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
margin-left: -0.2rem;
|
margin-left: -0.2rem;
|
||||||
margin-block: 0.5rem;
|
}
|
||||||
|
|
||||||
|
#logo-img {
|
||||||
|
/* margin-left: -0.2rem; */
|
||||||
|
}
|
||||||
|
|
||||||
|
#logo-list-item {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#version-chip {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
margin-top: 2.4rem;
|
||||||
|
margin-right: 0.3rem;
|
||||||
|
font-size: 0.55rem;
|
||||||
|
font-weight: 500;
|
||||||
|
padding-inline: 0.4rem;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #c79a47;
|
||||||
|
color: white;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
box-shadow: 0 0 0.1rem 0 rgba(0, 0, 0, 0.5);
|
||||||
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#about-list-item {
|
#about-list-item {
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ let logPointer = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const refreshLog = () => {
|
const refreshLog = () => {
|
||||||
proxy.$axios.get(`${proxy.$store.state.apiBaseUrl}/logs`, {
|
proxy.$axios.get(`/logs`, {
|
||||||
params: {
|
params: {
|
||||||
start_page_number: logPointer.start_page_number,
|
start_page_number: logPointer.start_page_number,
|
||||||
start_offset: logPointer.start_offset
|
start_offset: logPointer.start_offset
|
||||||
@@ -79,7 +79,7 @@ onUnmounted(() => {
|
|||||||
#log-card {
|
#log-card {
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
height: calc(100vh - 10rem);
|
height: calc(100vh - 9.5rem);
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,4 +17,5 @@ export function registerPlugins (app) {
|
|||||||
.use(store)
|
.use(store)
|
||||||
|
|
||||||
app.config.globalProperties.$axios = axios
|
app.config.globalProperties.$axios = axios
|
||||||
|
store.commit('initializeFetch')
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-2
@@ -6,8 +6,18 @@ export default createStore({
|
|||||||
state: {
|
state: {
|
||||||
apiBaseUrl: 'http://localhost:5300/api/v1',
|
apiBaseUrl: 'http://localhost:5300/api/v1',
|
||||||
autoRefreshLog: false,
|
autoRefreshLog: false,
|
||||||
version: '0.0.1'
|
version: 'v0.0.0',
|
||||||
|
debug: false
|
||||||
|
},
|
||||||
|
mutations: {
|
||||||
|
initializeFetch() {
|
||||||
|
axios.defaults.baseURL = this.state.apiBaseUrl
|
||||||
|
|
||||||
|
axios.get('/system/info').then(response => {
|
||||||
|
this.state.version = response.data.data.version
|
||||||
|
this.state.debug = response.data.data.debug
|
||||||
|
})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
mutations: {},
|
|
||||||
actions: {},
|
actions: {},
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user