# 数学脑 · 开发需求文档 > 版本:MVP v6.0 | 更新日期:2023年 --- ## 一、项目概述 | 项目 | 内容 | |------|------| | **产品名** | 数学脑 | | **代码名** | miniapp | | **类型** | 移动端 SPA(单页应用)Web App | | **架构** | Flask(Python 后端) + 原生 HTML/CSS/JS(前端) | | **适应端** | iPhone 移动端(390px 宽度,100dvh,safe-area 适配) | | **数据库** | SQLite | | **AI 引擎** | DeepSeek Chat API | --- ## 二、技术栈 | 层级 | 技术 | 用途 | |------|------|------| | 后端框架 | Flask 3.x(Python) | 路由、API、数据库管理 | | 数据库 | SQLite(SQLite3) | 视频数据、行为日志 | | 前端 | 原生 HTML5 + CSS3 + Vanilla JS | SPA 页面切换、视觉小说引擎 | | AI 集成 | DeepSeek Chat API | AI 数学助教对话 | | 故事数据 | JSON(seed_story.json) | 8 章互动剧情节点树 | | 视频数据 | JSON(seed_videos.json)→ SQLite | 54 条专业分区视频 | | UI 风格 | 自制设计系统(CSS 变量 + flex/grid) | iPhone 式移动端适配 | --- ## 三、项目文件结构 ``` miniapp/ ├── app.py # Flask 后端主文件 ├── data/ │ ├── seed_story.json # 8章93节点互动剧情数据 │ ├── seed_videos.json # 54条专业分区种子视频 │ ├── miniapp_v3.db # SQLite 数据库 │ ├── build_story.py # 剧情JSON生成脚本 │ └── novel/ # 原著小说txt(素材参考) │ ├── 葫芦侠行(第一章).txt │ ├── 葫芦侠行(第二章).txt │ ├── ... │ └── 框架.txt ├── static/ │ ├── css/ │ │ └── style.css # 全局样式(~1400行) │ └── js/ │ └── app.js # 前端核心逻辑(~550行) └── templates/ └── index.html # SPA 入口页面(~286行) ``` --- ## 四、后端 API 接口 | 路径 | 方法 | 参数 | 返回 | 说明 | |------|------|------|------|------| | `/` | GET | — | HTML | 返回 SPA 首页 | | `/api/videos` | GET | `module`(选填), `discipline`(选填) | `{code, data, disciplines}` | 视频列表 + 学科分类 | | `/api/chat` | POST | `{message, student_id}` | `{code, reply, is_fallback}` | AI 对话(DeepSeek) | | `/api/story` | GET | — | `{code, data}` | 获取互动剧情 JSON | | `/api/log` | POST | `{user_id, action, target}` | `{code, msg}` | 行为日志记录 | | `/api/students` | GET | — | `{code, data}` | 学生列表(B端预留) | ### 视频数据模型(videos 表) | 字段 | 类型 | 说明 | |------|------|------| | id | INTEGER PK | 自增 | | title | TEXT NOT NULL | 视频标题 | | module | TEXT | 所属模块(如"数人") | | sub_category | TEXT | 子分类 | | discipline | TEXT | 学科(如"人工智能") | | discipline_icon | TEXT | 学科 emoji | | video_url | TEXT | 外部视频链接 | | description | TEXT | 视频简介 | | duration_min | INTEGER | 时长(分钟) | | author | TEXT | 作者(学院+姓名) | --- ## 五、前端架构 ### 五层设计 ``` ┌─────────────────────────────────┐ │ index.html │ ← 结构层:DOM 容器 ├─────────────────────────────────┤ │ style.css │ ← 表现层:响应式 + 动画 ├─────────────────────────────────┤ │ app.js │ ← 逻辑层:路由 + 状态 + API ├─────────────────────────────────┤ │ seed_story.json │ ← 数据层:剧情节点树 ├─────────────────────────────────┤ │ Flask API │ ← 服务层:数据库 + AI └─────────────────────────────────┘ ``` ### 核心 JavaScript 模块 | 模块 | 函数 | 功能 | |------|------|------| | **全局状态** | `vnState`, `allVideos`, `storyData` | 应用级状态管理 | | **模块切换** | `switchModule()`, `hideAllPanels()` | 四Tab页面切换、DOM显隐 | | **发现页面** | `loadVideos()`, `renderVideoList()`, `renderDisciplineGrid()` | 视频流渲染、12学科网格 | | **知识页面** | `renderShushuoFeed()`, `updateShushuoHero()` | 知识卡片Feed渲染 | | **数学人生** | `navigateVN()`, `buildChoiceButtons()`, `applyVNStats()` | 视觉小说引擎核心 | | **AI聊天** | `openChat()`, `sendMessage()`, `quickAsk()` | AI对话弹窗 | | **数据持久化** | `saveVNState()`, `loadVNSave()`, `resetVNSave()` | localStorage存档 | --- ## 六、视觉小说引擎(VN Engine) ### 剧情数据模型 ```json { "title": "葫芦侠行", "start_node": "ch1_start", "nodes": { "节点ID": { "scene": "场景描述文本", "character": "说话角色", "sprite": "角色立绘URL(可选)", "choices": [ { "text": "选项文本", "next": "下一节点ID", "effects": { "shuli": 整数, // 数理根基变化 "xiayi": 整数, // 侠义声望变化 "xinzhi": 整数, // 心志韧性变化 "favorability": { // 角色好感度变化 "角色名": 整数 } } } ] } } } ``` ### 四属性系统 | 属性 | 键名 | 初始值 | 说明 | |------|------|--------|------| | 📐 数理根基 | `shuli` | 10 | 解锁高阶功法、影响论道胜负 | | ⚔️ 侠义声望 | `xiayi` | 10 | 影响NPC态度、武林大会成绩 | | 🧘 心志韧性 | `xinzhi` | 10 | 面对挫折的选择余地 | | 💕 好感度 | `favorability` | 0(每人) | 触发专属剧情、影响结局 | ### 当前剧情规模 - **8 章**:初入江湖 → 西部教习 → 数理论道 → 脑学初创 → 报国之路 → 暗流涌动 → 陋室修炼 → 真相之门 - **93 个交互节点** - **8+ 种结局**(真相守望、数理宗师、逍遥江湖、出海远航、悲情英雄、堕落之路、冤狱、虚无) --- ## 七、UI 设计系统 ### 色彩系统 | 用途 | CSS 变量 | 色值 | |------|----------|------| | 发现页主色 | `--shuren` | `#F97316`(橙) | | 知识页主色 | `--shushuo` | `#3B82F6`(蓝) | | 数学人生主色 | `--shusi` | `#10B981`(绿) | | 我的页主色 | `--mine` | `#8B5CF6`(紫) | | 页面背景 | `--bg` | `#F2F3F7` | | 卡片背景 | `--card` | `#FFFFFF` | | 主文字 | `--text` | `#1E1E2E` | ### 布局规范 - **容器宽度**:`min(390px, 100vw)`(iPhone 比例) - **桌面端**:居中显示 + `border-radius: 34px` + 阴影(模拟设备壳) - **底部 TabBar**:白色半透明玻璃感 + `backdrop-filter: blur(18px)` + safe-area - **顶部状态栏**:白色半透明 + 模糊 + `z-index: 50` - **字体**:`-apple-system, PingFang SC, Microsoft YaHei` --- ## 八、部署与运行 ### 启动命令 ```powershell cd C:\Users\Asus\Desktop\miniapp py app.py ``` ### 访问地址 ``` http://127.0.0.1:5000/ ``` ### 环境要求 - Python 3.12+ - Flask - requests - python-docx(素材提取用,非运行时必需) ### 数据初始化 - 首次启动自动执行 `init_db()` + `load_seed_videos()` - 54 条视频数据从 `seed_videos.json` 导入 SQLite - 互动剧情从 `seed_story.json` 按需读取 - 旧数据库可通过改名绕过锁定问题 --- ## 九、待开发需求 ### P0(核心) - [ ] 用户登录系统(OAuth/手机号) - [ ] 视频上传与审核后台 - [ ] 互动剧情章节选择器(允许跳章/读档) - [ ] 个人中心真实数据绑定(收藏、观看记录、剧情存档) ### P1(增强) - [ ] 社交功能(评论、点赞、分享) - [ ] 知识页数学小测验 - [ ] 视觉小说立绘 + 背景图系统 - [ ] 好感度可视化面板 - [ ] 多端适配(小程序版本) ### P2(远期) - [ ] 微服务拆分 - [ ] 实时协作编辑(多人剧情共创) - [ ] AI 生成剧情分支 - [ ] 数据分析看板(学生行为)