From 58d551eda6688ec07bd12ac48d32e7e97ec75e1b Mon Sep 17 00:00:00 2001
From: zhilv
Date: Fri, 27 Mar 2026 17:55:01 +0800
Subject: [PATCH] feat: add multi-account log center
---
src/App.tsx | 3 +-
src/components/account/CourseWorkspace.tsx | 33 +-
src/index.tsx | 4 +
src/pages/accouts/Account.tsx | 38 ++-
src/pages/logs/Logs.tsx | 331 +++++++++++++++++++++
src/service/http.ts | 117 ++++----
src/service/wk.ts | 63 ++--
src/store/account.ts | 26 +-
8 files changed, 509 insertions(+), 106 deletions(-)
create mode 100644 src/pages/logs/Logs.tsx
diff --git a/src/App.tsx b/src/App.tsx
index f7daf80..a6b2567 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -3,6 +3,7 @@ import { A, useLocation } from "@solidjs/router";
const asideList = [
{ label: "账号", url: "/account" },
+ { label: "日志", url: "/logs" },
{ label: "设置", url: "/setting" },
];
@@ -52,7 +53,7 @@ const App: ParentComponent = (props) => {
Navigation
- 在这里切换账号管理与系统设置。
+ 在这里切换账号管理、全局日志与系统设置。
diff --git a/src/components/account/CourseWorkspace.tsx b/src/components/account/CourseWorkspace.tsx
index b8cce37..6f8e496 100644
--- a/src/components/account/CourseWorkspace.tsx
+++ b/src/components/account/CourseWorkspace.tsx
@@ -38,11 +38,20 @@ interface CourseWorkspaceProps {
}
const EmptyState = (props: { children: JSX.Element }) => (
-
+
{props.children}
);
+const extractTimestamp = (message: string) => {
+ const match = message.match(/^\[(\d{2}:\d{2}:\d{2})\]\s*/);
+ return match?.[1] ?? null;
+};
+
+const stripTimestamp = (message: string) => {
+ return message.replace(/^\[(\d{2}:\d{2}:\d{2})\]\s*/, "");
+};
+
const CourseWorkspace = (props: CourseWorkspaceProps) => {
let logContainerRef: HTMLDivElement | undefined;
@@ -98,7 +107,7 @@ const CourseWorkspace = (props: CourseWorkspaceProps) => {
: "grid min-h-0 flex-1 gap-4 p-4 xl:grid-cols-[340px_minmax(0,1fr)]"
}
>
-
+
课程列表
点击课程查看对应记录
@@ -113,16 +122,16 @@ const CourseWorkspace = (props: CourseWorkspaceProps) => {
>
{(course) => {
- const selected = course.id === props.selectedCourseId;
+ const selected = () => course.id === props.selectedCourseId;
return (