feat: 新增客片案例与团队共创模块,重构玩法与配置

- 新增客片案例全流程功能,包含前台页面、管理端配置、后端API、数据库迁移与文档
- 新增团队共创详情页面与对应接口
- 重构玩法模块:将静态playData替换为动态API获取,拆分类型定义到playTypes.ts
- 优化vite构建配置与环境变量处理,调整详情页操作栏文案
- 更新全量相关文档与配图,新增客片案例、团队共创API文档
- 新增测试用例,完善数据归一化逻辑
- 调整路由配置与环境变量示例文件
This commit is contained in:
duanshuwen committed 2026-08-19 20:23:04 +08:00
1 parent cda8069630
commit 7ba92f3c5d
76 files changed
+7970 -137

No files matched your search

@@ -1,11 +1,12 @@
import { useMemo, useState } from "react";
import { BriefcaseBusiness, Home, LogOut, MapPin } from "lucide-react";
import { Headset, Home, List, LogOut } from "lucide-react";
import { clearToken } from "@/api";
import { EmptyState } from "@/components/admin/EmptyState";
import { ToastStack } from "@/components/admin/ToastStack";
import { Button } from "@/components/ui/button";
import { StructurePage } from "@/pages/structure/StructurePage";
import { ConciergePage } from "@/pages/structure/ConciergePage";
import { HomePage } from "@/pages/structure/HomePage";
import { WanfaPage } from "@/pages/structure/WanfaPage";
import type { Tab, Toast } from "@/types/admin";
const sidebarGroups: {
@@ -18,8 +19,8 @@ const sidebarGroups: {
label: "前台页面",
items: [
{ id: "home", label: "首页", icon: Home, description: "" },
{ id: "play", label: "玩法", icon: MapPin, description: "" },
{ id: "butler", label: "管家", icon: BriefcaseBusiness, description: "" },
{ id: "play", label: "玩法", icon: List, description: "" },
{ id: "butler", label: "管家", icon: Headset, description: "" },
],
},
];
@@ -61,6 +62,7 @@ export function AdminShell({ onLogout }: { onLogout: () => void }) {
<main className="admin-shell">
<aside className="sidebar">
<div className="brand-block">
<span className="brand-mark" aria-hidden="true">万</span>
<b>万趣管理端</b>
</div>
<nav>
@@ -111,13 +113,11 @@ export function AdminShell({ onLogout }: { onLogout: () => void }) {
</div>
</header>
{activeTab === "home" ? (
<StructurePage key="home-page" fixedPage="home" notify={notify} />
<HomePage key="home-page" notify={notify} />
) : activeTab === "play" ? (
<StructurePage key="play-page" fixedPage="play" notify={notify} />
<WanfaPage key="wanfa-page" notify={notify} />
) : activeTab === "butler" ? (
<section className="work-area">
<EmptyState text="管家页面内容待配置" />
</section>
<ConciergePage key="concierge-page" notify={notify} />
) : null}
</section>
<ToastStack