rebuild(stage-9): deliver deterministic intelligent screening

This commit is contained in:
leefer
2026-07-30 05:15:17 +08:00
parent 6cb52e864a
commit 158257ebb8
46 changed files with 7322 additions and 34 deletions
+14 -1
View File
@@ -3,23 +3,36 @@ import { createRouter, createWebHistory } from "vue-router";
import SystemManagementView from "./views/SystemManagementView.vue";
import WorkspaceView from "./views/WorkspaceView.vue";
import EntityDetailView from "./views/EntityDetailView.vue";
import TrackingPage from "../pages/screener/TrackingPage.vue";
import { findWorkspace } from "./workspaceRegistry";
export default createRouter({
history: createWebHistory(),
routes: [
{ path: "/", redirect: "/workspace/emotion" },
{
path: "/workspace/screener/tracking",
name: "screener-tracking",
component: TrackingPage,
meta: { title: "智能选股" },
},
{
path: "/workspace/:workspace",
name: "workspace",
component: WorkspaceView,
beforeEnter: (to) => (findWorkspace(String(to.params.workspace)) ? true : "/workspace/emotion"),
},
{ path: "/system", name: "system", component: SystemManagementView },
{
path: "/system",
name: "system",
component: SystemManagementView,
meta: { title: "系统管理" },
},
{
path: "/market/:entityType/:identifier",
name: "entity-detail",
component: EntityDetailView,
meta: { title: "行情详情" },
},
{ path: "/:pathMatch(.*)*", redirect: "/workspace/emotion" },
],
+4 -1
View File
@@ -5,7 +5,10 @@ import { useRoute } from "vue-router";
import { findWorkspace } from "../workspaceRegistry";
const route = useRoute();
const title = computed(() => findWorkspace(String(route.params.workspace ?? ""))?.title ?? "系统管理");
const title = computed(() => {
if (typeof route.meta.title === "string") return route.meta.title;
return findWorkspace(String(route.params.workspace ?? ""))?.title ?? "小白复盘";
});
</script>
<template>
+1 -2
View File
@@ -18,8 +18,7 @@ const menuRoot = ref<HTMLElement | null>(null);
const refreshing = ref(false);
const title = computed(() => {
if (route.name === "system") return "系统管理";
if (route.name === "entity-detail") return "行情详情";
if (typeof route.meta.title === "string") return route.meta.title;
return findWorkspace(String(route.params.workspace ?? "emotion"))?.title ?? "小白复盘";
});
@@ -4,6 +4,7 @@ import { useRoute } from "vue-router";
import EmptyState from "../../shared/components/EmptyState.vue";
import MarketWorkspaceView from "../../pages/market/MarketWorkspaceView.vue";
import ScreenerPage from "../../pages/screener/ScreenerPage.vue";
import { useMarketStore } from "../../shared/stores/market";
import { useSessionStore } from "../../shared/stores/session";
import { useUiStore } from "../../shared/stores/ui";
@@ -29,6 +30,7 @@ const implementedMarket = computed(() =>
<template>
<MarketWorkspaceView v-if="implementedMarket" :workspace-key="workspace.key" />
<ScreenerPage v-else-if="workspace.key === 'screener'" />
<main v-else class="page-frame">
<header class="page-header">
<h1>{{ workspace.title }}</h1>