rebuild(stage-4): deliver shared shell and account interfaces

This commit is contained in:
leefer
2026-07-30 02:08:20 +08:00
parent d1c658d8ef
commit 3b75bf2d63
47 changed files with 3042 additions and 99 deletions
@@ -0,0 +1,35 @@
<script setup lang="ts">
import { computed } from "vue";
import { useRoute } from "vue-router";
import EmptyState from "../../shared/components/EmptyState.vue";
import { useMarketStore } from "../../shared/stores/market";
import { useSessionStore } from "../../shared/stores/session";
import { useUiStore } from "../../shared/stores/ui";
import { findWorkspace } from "../workspaceRegistry";
const route = useRoute();
const market = useMarketStore();
const session = useSessionStore();
const ui = useUiStore();
const workspace = computed(() => findWorkspace(String(route.params.workspace)) ?? findWorkspace("emotion")!);
const locked = computed(
() => ["screener", "mentor", "heaven"].includes(workspace.value.key) && !session.account?.smart_access,
);
</script>
<template>
<main class="page-frame">
<header class="page-header">
<h1>{{ workspace.title }}</h1>
<p class="page-subtitle">{{ workspace.description }} · 数据日期 {{ market.selectedDate }}</p>
</header>
<div v-if="locked" class="notice notice-warning membership-lock">
<span><strong>{{ workspace.title }}仅对会员开放</strong>开通会员后可使用完整智能功能</span>
<button class="btn btn-small" type="button" @click="ui.openDialog('membership')">查看会员状态</button>
</div>
<section class="card" :class="{ 'locked-content': locked }" :aria-disabled="locked">
<EmptyState title="暂无可显示数据" description="当前日期尚未载入该页面的有效行情数据。" />
</section>
</main>
</template>