diff --git a/frontend/dist/assets/PersonalTodo-CLxJgd2z.css b/frontend/dist/assets/PersonalTodo-CLxJgd2z.css
deleted file mode 100644
index 6e48dc56..00000000
--- a/frontend/dist/assets/PersonalTodo-CLxJgd2z.css
+++ /dev/null
@@ -1 +0,0 @@
-.todo-card[data-v-addac169]{min-height:200px}.section-header[data-v-addac169]{font-weight:600;margin-bottom:8px}.input-row[data-v-addac169]{display:flex;gap:8px;margin-bottom:8px}.todo-list[data-v-addac169]{display:flex;flex-direction:column;gap:6px}.todo-item[data-v-addac169]{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;border:1px solid #ebeef5;border-radius:6px}.empty[data-v-addac169]{color:#888}
diff --git a/frontend/dist/assets/SectionCard-OU1yLKDy.css b/frontend/dist/assets/SectionCard-OU1yLKDy.css
deleted file mode 100644
index 352914ae..00000000
--- a/frontend/dist/assets/SectionCard-OU1yLKDy.css
+++ /dev/null
@@ -1 +0,0 @@
-.section-card[data-v-63b635fd]{min-height:220px}.section-header[data-v-63b635fd]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.list[data-v-63b635fd]{display:flex;flex-direction:column;gap:8px}.row[data-v-63b635fd]{padding:8px;border:1px solid #ebeef5;border-radius:6px;cursor:pointer}.row[data-v-63b635fd]:hover{background:#f5f7fa}.title[data-v-63b635fd]{font-weight:600}.meta[data-v-63b635fd]{margin-top:4px;display:flex;align-items:center;gap:8px;color:#666;font-size:12px}.sub[data-v-63b635fd],.empty[data-v-63b635fd]{color:#888}
diff --git a/frontend/dist/index.html b/frontend/dist/index.html
index 0dc8eb64..28c1d326 100644
--- a/frontend/dist/index.html
+++ b/frontend/dist/index.html
@@ -4,8 +4,8 @@
CTMS
-
-
+
+
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index cb517758..8ee2521b 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -1,4 +1,4 @@
-
+
diff --git a/frontend/src/api/axios.ts b/frontend/src/api/axios.ts
index d6dcf8e5..f87c959b 100644
--- a/frontend/src/api/axios.ts
+++ b/frontend/src/api/axios.ts
@@ -46,7 +46,7 @@ instance.interceptors.response.use(
}
router.push("/login");
};
- // 如果当前项目不存在或已失效,清理项目并跳到项目列表
+ // 如果当前项目不存在或已失效,清理项目并跳到工作台
if (status === 404 && typeof data?.message === "string" && data.message.toLowerCase().includes("study")) {
try {
const studyStore = useStudyStore();
@@ -54,7 +54,7 @@ instance.interceptors.response.use(
} catch {
/* ignore */
}
- router.push("/studies");
+ router.push("/workbench");
}
if (status === 401) {
handleUnauthorized();
diff --git a/frontend/src/components/Layout.vue b/frontend/src/components/Layout.vue
index 8a766776..a8ec118d 100644
--- a/frontend/src/components/Layout.vue
+++ b/frontend/src/components/Layout.vue
@@ -25,10 +25,6 @@
项目管理
-
-
- 项目列表
-
@@ -136,7 +132,7 @@ import { useAuthStore } from "../store/auth";
import { useStudyStore } from "../store/study";
import StudySelector from "./StudySelector.vue";
import {
- Monitor, User, Suitcase, List, House, Timer, UserFilled,
+ Monitor, User, Suitcase, House, Timer, UserFilled,
Warning, InfoFilled, QuestionFilled, Checked, Management,
Money, Collection, Memo, ArrowDown, SwitchButton
} from "@element-plus/icons-vue";
diff --git a/frontend/src/components/StudySelector.vue b/frontend/src/components/StudySelector.vue
index c5d68a79..55d52dad 100644
--- a/frontend/src/components/StudySelector.vue
+++ b/frontend/src/components/StudySelector.vue
@@ -1,16 +1,28 @@
-
+
{{ study.currentStudy?.name || "选择项目" }}
-
-
- 切换项目
+
+
+ 加载项目中...
-
+ 暂无可用项目
+
+
+
{{ item.name }}
+
{{ item.code }}
+
+
+
退出当前项目
@@ -19,21 +31,46 @@
diff --git a/frontend/src/views/workbench/MyWorkbench.vue b/frontend/src/views/workbench/MyWorkbench.vue
index 76f16691..2a8fb906 100644
--- a/frontend/src/views/workbench/MyWorkbench.vue
+++ b/frontend/src/views/workbench/MyWorkbench.vue
@@ -14,7 +14,7 @@