# INBOX — 给 Codex 的指令队列(FruitServer 仓库内) > **Codex 每次开始任务前必须先读本文件**(2026-10-16 起指令通道从 specs 仓库迁到本仓库)。 > 按条目顺序执行,处理完的条目标记 `[已处理]`。指令来源:项目经理(Trae)。有异议在条目下留言,不要静默跳过。 > > **规范以 specs 仓库为准**(`AGENTS.md`、`CODING_STANDARDS.md`、`GIT_WORKFLOW.md`、`docs/01~20`、`docs/plans/codex-研发任务清单.md`)—— > specs 现在**只拉取、由项目负责人更新**,我们不再往它提交。工作留痕写在本仓库 `docs/plans/PROGRESS.md`。 > ⚠️ **双 Agent 协作红线(Trae + Codex 共守)** > 1. **单一写者**:同一时刻只有一个 agent 在改代码/写 PROGRESS/跑门禁。 > 2. **留痕**:谁干活谁写 `docs/plans/PROGRESS.md`(命令 + 原始输出 + 解读,逐动作追加)。Trae 接手时用「【Trae 接手】」标记。 > 3. **git 不冲突**:提交前先 `git status`/`git log`;只 `git add` 自己的文件,禁止 `git add -A`/`.`;不夹带对方改动。 > 4. **文件不覆盖**:写 INBOX/PROGRESS 前先读最新,追加不覆盖。 > 5. **求助通道**:遇到阻塞/不确定,在本文件顶部写「【待 Trae 协助】+ 问题描述」。 > 6. **禅道同步**:任务「开始/完成」时同步更新禅道任务状态。 > 7. **验收归用户**:每批做完**停在干净交接点**,由用户亲自验证;回执必须含「用户可照做的验证步骤 + 每步预期结果」。 > 8. **门禁(不达标不提交)**:后端 = `mvn test` 全过(核心接口须有契约测试);Web = `pnpm build:pro` 通过 + eslint 零错误;Flutter = `dart analyze lib test` 零告警 + `flutter test` 全过。 > 9. **分支(按 `GIT_WORKFLOW.md`)**:从 `develop` 拉 `feature/<模块>-<简述>`,小步提交;完成后 `git checkout develop && git merge --no-ff feature/...` 再 `git push origin develop`;**绝不动 `main`**(dev→main 走 PR,由用户操作)。 > 10. **设备验证必须「设备侧取证」(2026-10-16 新增,血的教训)**:真机 / 模拟器 / 小程序等目标设备的验证,**证据必须产自设备侧**(设备侧集成测试、设备日志、设备截图、设备侧抓到的连接)。**禁止**用"在开发机上 `curl` 某地址返回 200"证明设备可达 —— 本机 curl 本机网卡地址必然 200,这是**假阳性**(已实际误导过一次:`10.157.242.1` 是开发机 VPN 网卡地址,手机根本不可达,导致真机「剧目列表加载失败」)。**拿不到设备侧证据的,一律标「未验证」**,不得写成"已验证"。 --- ## [待处理] 2026-10-19 | K27.2 清屏态增加「退出清屏」浮动按钮 **用户指令(2026-10-19,原文)**: > 「而且有了清屏自然要有退出清屏按钮啊」 **口径** - 播放页与首页 feed 进入清屏态后,画面右上角保留一个「退出清屏」浮动按钮,点击恢复控制层。 - 按钮规格:36×36 圆形,底色 `Color(0x80000000)`,图标白色 `Icons.fullscreen_exit_rounded`(size 18),距顶部安全区 8、右侧 12。 - Key:播放页 `player-exit-clear-screen`,首页 `home-feed-exit-clear-screen`。 - tooltip 新增 l10n key `exitClearScreen`,三语齐全:en `Exit clear screen` / zh `退出清屏` / id `Keluar dari layar bersih`。 - 点击只恢复控制层,**不改变播放/暂停状态**;恢复后按钮消失。 - 保留「清屏态点击画面恢复控制层」的现有手势。 - 按钮不自动隐藏,与控制层显示状态严格互斥。 **测试** 1. 点 `player-clear-screen` 后 `player-exit-clear-screen` 出现,控件区仍隐藏。 2. 点 `player-exit-clear-screen` 后顶栏/底部/中心按钮恢复,退出按钮消失,播放态不变。 3. 首页 `home-feed-clear-screen` → `home-feed-exit-clear-screen` 出现;点击后 overlay 恢复、按钮消失。 4. 既有测试全过。 **流程**:可从 `develop` 拉 `fix/flutter-exit-clear-screen`;门禁 `dart analyze lib test` 零告警 + `flutter test` 全过 + `flutter build apk --debug`;`--no-ff` 合回 develop 并 push;作者 `Zhou Weidong <502333560@qq.com>`;PROGRESS 留痕;真机验收由用户执行。 --- ## [待处理] 2026-10-19 | K27.1 中心按钮改口径:播放中不显示,仅暂停时显示播放按钮 **用户指令(2026-10-19,原文)**: > 「播放按钮不用显示啊 就点击暂停的时候显示」 **口径(覆盖 K27 第三节,其余不变)** - 播放中:**不显示任何中心按钮**;点击画面 = 暂停(点一下暂停)。 - 暂停后:中心显示播放按钮(Key 沿用 `player-play-toggle`,`playing: false`),点击或再点画面 = 播放;播放开始后按钮立即消失。 - 首页沉浸 feed 同步:暂停时显示中心播放按钮 `home-feed-center-play`,播放中不显示;点画面仍是播放/暂停切换。 - 清屏状态下中心按钮一并隐藏;点画面先恢复控制层,不改变播放态。 - 不引入任何定时器;控制层仍然常驻。 **实现要点** 1. `_PlaybackOverlay`:把 `if (widget.playing) PlayerCenterToggle(playing: true)` 改为 `if (!widget.playing) PlayerCenterToggle(playing: false, onTap: widget.onTogglePlay)`。 2. `_onVideoTap`:控制层可见时直接 `widget.onTogglePlay()`;清屏时只恢复控制层。 3. `player_view.dart` 首页分支:恢复暂停态中心播放按钮(`home-feed-center-play` → `setUserWantsPlay(true)`),播放态不渲染;PiP/清屏时不渲染。 4. 测试更新: - 播放中 `player-play-toggle` 不存在;点画面后视频暂停且按钮出现;点按钮后恢复播放且按钮消失。 - 首页暂停后 `home-feed-center-play` 出现,播放后消失。 - 清屏隐藏中心按钮,点画面恢复控制层。 - `pump` 5 秒控件仍在。 5. 门禁/分支/提交规范同 K27:从 `develop` 拉 `fix/flutter-paused-play-toggle`,`dart analyze lib test` 零告警 + `flutter test` 全过 + `flutter build apk --debug`,`--no-ff` 合回 develop 并 push,作者 `Zhou Weidong <502333560@qq.com>`,PROGRESS 留痕;真机验收由用户执行。 --- ## [已完成·待用户验收] 2026-10-19 | K27 播放器控制层交互重做:清屏按钮 + 取消自动隐藏 + 暂停按钮即时消失 **用户指令(2026-10-19,原文)**: > 「现在播放页不对啊 不是点击播放或暂停 等一会所有的按钮都消失了 而是要要清屏按钮 点了清屏其他的才消失 点击暂停是点击一下 暂停 在点击下播放 暂停按钮消失这样」 **现状问题(Trae 勘察)** - `player_view.dart` 的 `_PlaybackOverlayState` 有 `Timer? _hideTimer` + `_scheduleHide()`,2.5 秒后把 `_controlsVisible` 置 false,属于「等一会全部消失」。 - 首页 `player_view.dart` 中 `shouldShowFeedPauseIndicator` 分支会在暂停后常驻一个中心播放按钮(`home-feed-center-play`)。 - 播放页中心按钮 `player-play-toggle` 常驻,暂停后也不消失。 - 首页 `HomeFeedOverlay` 没有清屏按钮;播放页顶栏只有返回 / 标题 / 更多。 ### 一、控制层常驻(删除一切定时隐藏) 1. `_PlaybackOverlayState` 删除 `Timer? _hideTimer`、`_scheduleHide()`、`initState/dispose` 中的定时器逻辑;`import 'dart:async'` 若无其它用途一并删除。 2. `_controlsVisible` 只由用户显式动作改变:点「清屏」→ 隐藏;清屏状态下点画面 → 恢复。**不得有任何延时自动隐藏**。 3. 进入播放页、切集、选集返回、PiP 返回时,控制层默认可见。 ### 二、清屏按钮 **播放页(`_PlaybackOverlay`)** 1. 顶栏右侧、`player-more` 左侧新增清屏按钮,复用 `_TopAction`(36×36),Key `player-clear-screen`,图标 `Icons.fullscreen_rounded`。 2. 点击后隐藏:顶栏(`player-controls-top`)、中心按钮、进度条、三按钮、评论卡、`1.0x` 角标;画面上只剩视频。 3. 清屏状态下点击画面任意处 → 恢复控制层,**不切换播放/暂停**。 4. tooltip 走 l10n 新增 key `clearScreen`,en/zh/id 三语必须齐全(en `Clear screen` / zh `清屏` / id `Bersihkan layar`)。 **首页沉浸 feed** 1. `HomeFeedOverlay` 顶栏在「搜索」与「更多」之间新增清屏按钮,Key `home-feed-clear-screen`,36×36 圆钮,样式复用 `_RoundIcon`。 2. 点击后隐藏整个 HomeFeedOverlay(剧名行、右侧 rail、底部玻璃卡)、首页暂停提示与渐变遮罩,只留视频。 3. 该显隐状态由 `player_view.dart` 持有(例如 `_feedChromeVisible`),清屏后点画面恢复,且不切换播放状态。 ### 三、中心播放/暂停按钮 1. 播放中且控制层可见 → 中心显示暂停按钮(`PlayerCenterToggle(playing: true)`,Key `player-play-toggle`)。 2. 点击中心暂停按钮 → 执行暂停,并且**该按钮立即消失**;不显示常驻的播放按钮。 3. 暂停中点击画面 → 播放;恢复播放后中心暂停按钮随控制层恢复显示。 4. 删除首页暂停后的常驻播放按钮分支(`shouldShowFeedPauseIndicator` / `home-feed-center-play`)。若 helper 及测试因此失效,一并删除并更新测试,不留死代码。 5. 首页与播放页必须共用 `PlayerCenterToggle`,样式不得分叉。 ### 四、保持不变 - 票据三态、进度条 seek、选集、评论、下一集、下载授权、PiP、倍数角标等既有逻辑不改。 - 不新增第三方依赖;不改后端、不改 Web。 ### 五、测试(先红后绿) 更新/新增 widget test,至少覆盖: 1. 播放页初始控制层可见;`pump` 5 秒后 `player-controls-top` / `player-controls-bottom` 仍然存在(证明无自动隐藏)。 2. 点 `player-clear-screen` → 顶栏、底部控制区、中心按钮都消失;点画面恢复,且播放态不变。 3. 播放中中心暂停按钮存在;点击后播放态变为暂停且中心按钮消失;再点画面恢复播放。 4. 首页点 `home-feed-clear-screen` → `home-feed-title`、`home-feed-info-card` 消失;点画面恢复。 5. 既有全部测试通过(含 `player_fullscreen_test.dart`、`player_center_toggle_test.dart`)。 ### 六、门禁与流程 - 从 `develop` 拉 `fix/flutter-player-clear-screen`。 - 门禁:`dart analyze lib test` 零告警、`flutter test` 全过、`flutter build apk --debug`。 - 完成后 `git checkout develop && git merge --no-ff` 并 push;提交身份 `Zhou Weidong <502333560@qq.com>`;禁用 `git add -A`。 - 本批只做代码改造与本地门禁;**真机验证由用户执行**,Codex 不得自行真机验证,回执里给出用户可照做的验证步骤与每步预期结果。 - 在 `docs/plans/PROGRESS.md` 追加留痕(命令 + 原始输出 + 解读)。 --- ## [已完成·待用户验收] 2026-10-19 | K26 客户端按「移动端设计预览.html」校正六屏 **用户指令(2026-10-19)**:「现在看 移动端设计预览.html 按这个来」。 > 新增权威设计文件(本地已同步): > `/Users/jianghaifeng/Desktop/ReelShort/docs/移动端设计预览.html` > 该文件优先于之前的 Stitch screens;颜色/布局/组件尺寸以它为准。 > 保留 K24 已接入的 Outfit/Plus Jakarta Sans 字体,其余按预览校正。 ### 一、全局 Token(按预览) - 主色 `#FF5B3D`、强调 `#9278EA`、背景 `#0B0C10`、底栏 `#0D0D11`、 卡片 `#1B1C21` / `#1C1D21`、输入 `#25252A`、正文 `#E6E1E3`、次要 `#D2CDD0`、浅橙 `#FFA490`。 - 圆角:卡片 10–14、按钮 9、chips 20、封面 10;不再统一全圆。 - 字体沿用 Outfit(标题)/ Plus Jakarta Sans(正文);字号按预览 9/10/11/12/13/14/15/18/20。 - 更新 `AppColors`/`AppDimens`/`GlassPanel` 默认值;保留现有语义名。 ### 二、首页(预览 01) 1. 顶部:剧名 + 右侧搜索/菜单 28px 圆钮;不再显示 HOT/Season/剧集头像 Follow。 2. 右侧互动:Like / Comment / Share / Favorite 四项,22px 图标 + 9px 文案/计数; 下载/PiP 继续收进“更多”。 3. 底部玻璃卡(`rgba(15,15,20,.72)`、blur 6、radius 14、padding 11/12): - 题材 tags(都市/甜宠,8px) - `第 x 集 / 共 y 集`(9px) - 剧集标题(13px 800) - 两个等宽 34px 按钮:`▶ 追剧`(橙色)/ `选集`(#2a2a30) 4. 底部 3 Tab 文案与图标按预览(首页/发现/我的)。 ### 三、发现页(预览 02) 1. 顶部:Logo + `发现` + 搜索圆钮 + 头像。 2. 搜索框 36px、`#25252A`、全圆、左侧搜索图标。 3. 分类 chips:推荐/悬疑/恋爱/动作,选中橙底白字。 4. Continue Watching 卡:`#1C1D21`、radius 12、52×66 封面、标题/集数/3px 进度、右侧 56×28 橙色“继续”。 5. 4 个快捷入口(筛选/排行榜/新剧/收藏):`#202126`、radius 12、高 62、16px 图标 + 9px 文案。 6. `热门短剧` 标题带 3×18 橙色竖条 + 右侧 `全部 ›`;2 列网格,封面高 120、radius 10、 左上“免费”角标、底部渐变标题、下方 11px 标题 + 9px 题材。 7. 移除预览中没有的额外区块(轮播/多余 banner)。 ### 四、详情页(预览 03) 1. Hero 高 190、圆角 0、左上 28px 圆形返回;不再放分享/收藏浮层。 2. 内容:`N 集 · 已完结`(紫色 9px,完结无数据时只显示 N 集)、标题 18px、简介 11px / 1.6。 3. `▶ 开始观看` 40px 橙色按钮。 4. `选集` 标题 + 横向/换行集数 chips(1 起,选中橙底白字,锁定紫色)。 5. 简化 K25 的统计/CTA 行/剧集预览卡;保留播放、收藏、下载逻辑(收藏/下载可放“更多”)。 6. 不加底部 Tab。 ### 五、播放器(预览 04 + 用户要求全屏) 1. 全屏播放(用户已明确);顶部 46px:28px 返回 + 居中 `剧名 · 第 x 集` + 28px 更多。 2. 视频区:中心 52px 播放圆钮;右下 `1.0x` 倍速文字;无右侧互动栏。 3. 进度条 3px、`#FF5B3D` 播放段、`#474248` 轨道。 4. 三按钮行:`选集` / `评论` / `下一集`,高 32、radius 9,下一集橙色,末集置灰。 5. 一条精选评论卡:`#1B1C21`、radius 10、头像/昵称/时间/正文;无评论隐藏。 6. 下载/PiP 收进更多;保留票据、自动连播、进度、互动逻辑。 ### 六、我的页(预览 05) 1. 顶部:Logo + `我的` + 搜索圆钮 + 头像。 2. 用户行:48px 头像、昵称、欢迎语、右侧“登录/注册”chip(已登录显示账号信息)。 3. 金币卡:`#201B1E`、radius 13、金币图标、我的金币、`0 金币 · 去充值`、右侧 `›`。 4. Continue Watching 卡:`#1B1C21`、radius 12、50×64 封面、标题、第 x 集 · 时间、橙色“继续”。 5. Tabs:历史(橙色)/ 收藏 / 喜欢;一条历史卡(48×60 封面、标题、集数/时间、播放圆钮)。 6. 语言行:`#1B1C21`、radius 12、语言 + 当前值(橙色)。 7. 底部 3 Tab;原 My List 区块保留在 Me 页内部。 ### 七、登录页(预览 06) 1. 居中 64px 渐变 Logo(`#FF5B3D → #9278EA`,radius 18)+ `水果短剧` 20px + 副标题 11px。 2. 三个 44px 入口:Google(白底)、手机号(`#25252A`)、邮箱(`#25252A`); Google/手机号后端未就绪时置灰并提示“即将开放”;邮箱进入现有邮箱表单。 3. 底部 9px 法律文案:继续即代表同意《用户协议》与《隐私政策》。 4. 保留 K21 邮箱表单作为二级页,不改认证逻辑。 ### 八、数据与测试 - 预览中的 12.4k、3.2k、已完结、VIP 等:有真实数据才显示,否则隐藏,不伪造。 - 更新首页/发现/详情/播放器/我的/登录相关测试;保留播放、进度、收藏、下载、PiP 行为断言。 - 新增:预览布局关键 Key、3 Tab、搜索、Continue Watching、选集 chips、全屏播放器三按钮、登录入口。 - `dart analyze lib test` 零告警;`flutter test` 全过;`flutter build apk --debug` 通过。 ### 九、Git - 从干净 `develop`(基线 `eefabb6`)拉 `feature/flutter-k26-mobile-preview`,小步提交; `--no-ff` 合并回 develop 并 push;作者 `Zhou Weidong <502333560@qq.com>`;不动 main。 - 计划文档 `FruitServer/docs/plans/2026-10-19-K26.md`;留痕写 `PROGRESS.md`。 - 回执:六屏改动、token、测试条数与门禁原始输出、数据缺口、真机验收步骤。 --- ## [待处理] 2026-10-19 | K25 客户端详情页 + 播放器对齐设计稿 **用户指令(2026-10-19)**:「开始实现详情页和播放器」。 > 设计权威:`docs/design/screens/03-detail.html`、`04-player.html`(origin/main 或 `/tmp/specs-design/docs/design/screens/`)。 > 设计系统沿用 K24 的 Obsidian Flare token、Outfit/Plus Jakarta Sans、GlassPanel;不改后端接口/模型字段,缺失数据不伪造。 ### 一、详情页(`03-detail.html`) 1. **Hero**:16:9 横版头图(优先 `drama.coverUrl`,无则 `posterUrl`),底部渐变; 左上玻璃返回、右上玻璃分享/收藏;图上叠加 `Trailer 0:45`、`4K UHD` 玻璃 pill(无数据时只显示 4K/隐藏)。 2. **元数据**:集数 pill(`N Episodes`)、完结/榜单名次(模型无字段则隐藏)、标题 24px、 `Season 1 • DramaPulse Original Release`、播放量(`viewCount`)、题材标签;评分无字段则隐藏。 3. **简介卡**:`#12141A`/GlassPanel 圆角 16、正文 14px、默认 2 行 + `More` 展开;保留现有 l10n 文案。 4. **CTA 行**:`Start Watching`(或继续观看集数)橙色全宽胶囊 + 48×48 收藏 + 48×48 下载; 举报入口收进右上“更多”;保留现有 Favorite/Download/Report 逻辑。 5. **Episodes 区**:标题 `Episodes (N)` + 范围 chips(如 `1-30`,无数据可只显示全部); 横向集数 chips(46×44、选中橙色、锁定紫色);下方 2 列剧集预览卡(96×64 缩略图、Free/Coin、 时长、锁态);保留现有选集跳转与下载入口。 6. 详情页为 push 页面,不加底部 Tab;加载/失败/空态保留返回按钮(现状已有)。 ### 二、播放器(`04-player.html`) 1. **模式拆分**: - `homeMode=true`(首页沉浸 feed)保持现状全屏竖滑; - `homeMode=false`(从详情进入)改为设计稿的“卡片式播放器”: 顶部导航(返回、居中剧名 + `Ep.x`、更多)、9:10 圆角 16 视频框、下方进度与操作区、评论卡。 2. **顶部/视频框**:`Auto-Next On` 紫色 pill、`1.0x` 倍速 pill、中心橙色播放按钮、 右侧 36px 点赞/全屏;场景标签(无数据隐藏)。 3. **进度条**:1.5px 轨、缓冲段 white/30、播放段 `#FF5B3D`、白色 thumb; 左侧当前时间、中间 `Ep x / N`、右侧总时长;保留拖动 seek。 4. **三按钮行**:`Episodes` 玻璃胶囊、`Comments (count)` 玻璃胶囊、`Next Ep` 橙色胶囊; 分别打开现有选集、评论弹窗、下一集;没有下一集时置灰。 5. **精选评论卡**:`#14161E` 16px 圆角、VIP 标记(有数据才显示)、点赞数、`View all N`; 复用 `CommentController`;无评论时隐藏。 6. 保留现有播放票据、自动连播、PiP、下载、互动逻辑;下载/PiP 收进顶部“更多”。 7. 不要改 `playback_session`/ticket 协议;只改 UI 组织与控件。 ### 三、数据缺口(不得伪造) - 评分、完结状态、Top 排名、VIP、剧级点赞/评论计数、场景标签:模型/接口没有就隐藏; - `viewCount`、集数、题材、`Episode.locked`、`freeEpisodes/unlockCoin` 已有,按现有字段渲染。 ### 四、测试与门禁 - 更新详情/播放器相关 widget 测试;保留 PiP、进度、票据错误、收藏/下载等既有行为断言; - 新增:16:9 hero、CTA 行、剧集 chips、播放器卡片模式、三按钮行、进度条颜色; - `dart analyze lib test` 零告警;`flutter test` 全过;`flutter build apk --debug` 通过。 - 真机验收由用户执行;不伪造设备侧证据。 ### 五、Git 与回执 - 从干净 `develop`(基线 `4553606`)拉 `feature/flutter-k25-detail-player`,小步提交; 完成后 `--no-ff` 合并回 develop 并 push;作者 `Zhou Weidong <502333560@qq.com>`;不动 main。 - 计划文档 `FruitServer/docs/plans/2026-10-19-K25.md`;留痕写 `PROGRESS.md`。 - 回执:详情/播放器结构、保留/新增的 Key、测试条数与门禁原始输出、数据缺口、真机验收步骤。 --- ## [待处理] 2026-10-19 | K24 客户端 UI 对齐设计稿(设计系统 + 首页 + 发现) **用户指令(2026-10-19)**:「修改客户端 UI,读 specs 下 docs 下的 screens」。 > 设计权威文件(已全部读取): > `docs/design/DESIGN.md`、`docs/design/README.md`、`docs/design/screens/01-home.html`、`02-discover.html` > (以及 03-detail / 04-player / 05-me / 06-login,后三屏留到 K25/K26)。 > **口径冲突以 README + screens HTML 为准**:`#0B0C10 / #16181F / #FF5B3D / #9278EA`; > `DESIGN.md` 顶部 YAML 的 `#ffb4a5/#cdbdff` 是自动生成色板,不采用。 ### 一、本批范围 只做「设计系统 + 底部导航 + 首页 + 发现页」。详情页、播放器、我的页、登录页留到 K25/K26。 不改后端接口、Web、specs;不改业务数据模型字段;缺失的评分/完结/榜单名次不要伪造。 ### 二、设计 Token(全局) 1. `lib/core/theme/app_colors.dart` 改为 Obsidian Flare: - background `#0B0C10`、card `#16181F`、surface-elevated `#1D1E28`、bar `#0B0C10`(95% + blur) - primary `#FF5B3D`、pressed `#FF4321`、secondary/lavender `#9278EA` - gold `#FBBF24`、danger/free `#FF5B3D`、success `#34D399` - on-surface `#FFFFFF` / `#E3E2E8`、muted `#A1A1AA`、subtle `#71717A` - border `rgba(255,255,255,0.08)`、glass 高亮 `rgba(255,255,255,0.12-0.14)` - 保留现有语义命名(`AppColors.blue` 等)以免大面积改名,但值统一到新色板;新增 `secondary`、`lavender`、`onSurface`。 2. `app_theme.dart`:主色/次色/背景/卡片/描边/进度条统一;固定深色;按钮/chip 使用全圆角; 进度条改为 1–2px;补充 `Outfit`(标题)与 `Plus Jakarta Sans`(正文)字体。 3. 字体:下载 Outfit + Plus Jakarta Sans 的 OFL TTF 放入 `assets/fonts/`,`pubspec.yaml` 注册; 禁止运行时依赖网络字体;若下载失败,使用系统字体并在回执标注未完成项。 4. 新增 `lib/core/widgets/glass_panel.dart`(BackdropFilter 16/24px、半透明渐变、白 8–14% 描边、 可选圆角 16/24/26),供首页底部卡、顶部按钮等复用。 5. 间距/圆角:页面 gutter 16、卡片圆角 16–24、按钮/chip 全圆、卡片间距 12–16;补充到 `app_dimens.dart`。 ### 三、底部导航(3 Tab) - 改为 **Home / Discover / Me** 三项,Keys 保留 `tab-home`、`tab-discover`、`tab-my`; 删除 `tab-my-list` 独立 Tab(原 My List 内容并入 Me 页)。 - 选中态:橙色图标 + 橙色文案 + 下方 1px 橙色圆点;未选中 `white/45`。 - 背景 `#0B0C10/95` + 顶部 `white/5` 分隔 + backdrop blur;高度与安全区按设计。 - 修正现有 tab 映射:Home 进沉浸 feed,Discover 进发现,Me 进个人页; `My List` 入口保留在 Me 页内部(History/Watchlist/Liked)。 - 更新受影响的 widget 测试,不再断言 4 Tab;保留 Home/Discover/Me 的行为断言。 ### 四、首页(Home) 按 `01-home.html` 重做首页沉浸层(保留 `PlayerPage(homeMode: true)` 视频 feed): 1. 顶部:状态栏安全区 + 剧名、`HOT` 徽章、`Season 1 • Vertical Cinema` 副标题;右侧搜索/更多 36px 玻璃圆钮。 2. 右侧互动栏:剧集头像 48px + 橙色 Follow `+`;Like / Comment / Bookmark / Share, 44–46px 玻璃圆形按钮 + 11px 计数/文案;保留下载/PiP 时收进“更多”菜单,避免超出设计动作集。 3. 底部玻璃信息卡(26px 圆角、blur 24): - 题材 chips(`#9278EA/15` 与 `#FF5B3D/15` 半透明底) - `Ep. x / y` pill - 2 行简介 - 1px 进度条(播放段 `#FF5B3D`)+ 当前/总时长 - `Follow Series` 橙色胶囊主 CTA + `Episodes` 玻璃胶囊 4. 顶部/右侧/底部渐变 scrim 按设计稿比例;文字加 `0 2px 8px rgba(0,0,0,.75)` 或置于玻璃 pill。 5. 复用现有 Player 逻辑(进度、选集、点赞/收藏/评论),不要重写播放链路。 ### 五、发现页(Discover) 按 `02-discover.html` 重做: 1. 顶部品牌行(橙点 + DramaPulse/FruitShorts + 副标题)+ 右侧头像入口。 2. 44px 搜索框(左侧搜索图标、右侧语音占位),接通现有 `DiscoverLogic.search` 过滤; `searchRequest` 时聚焦。 3. 全圆分类 chips,选中橙色实心(未选中 `white/8`)。 4. Continue Watching 卡:海报 64×88、`Ep. x / y • xx min left`、65% 橙色进度、橙色 Play 按钮; 数据用现有观看记录;没有记录时隐藏该卡。 5. 4 个快捷入口:Filter / Top Charts / New / Watchlist(玻璃卡 + 图标 + 文案)。 6. Trending Dramas:标题 + See All;**2 列**网格,海报比例约 3/4.2、16px 圆角; 封面叠加 Free/VIP/HOT 徽章(有数据才显示)、评分(模型无字段则隐藏)、播放量(用 `viewCount`)。 7. 移除发现页顶层 3D 轮播(设计稿没有);轮播组件保留但不再挂在 Discover;若删除组件需确认无测试引用。 8. 标题 12px、副标题 11px,卡片底色 `#15161E`;与设计一致。 ### 六、测试与门禁 - 更新受影响的既有测试(4 Tab → 3 Tab;Discover 结构变化),保留播放/进度/收藏等行为断言。 - 新增测试:3 Tab 映射、玻璃卡渲染、Discover 搜索过滤、2 列网格。 - `dart analyze lib test` 零告警;`flutter test` 全过;`flutter build apk --debug` 通过。 - 真机验收由用户执行;不伪造评分/完结/榜单数据。 ### 七、Git 与回执 - 从干净 `develop` 拉 `feature/flutter-k24-design-system`,小步提交;完成后 `--no-ff` 合并回 develop 并 push; 作者 `Zhou Weidong <502333560@qq.com>`;不动 main。 - 计划文档 `FruitServer/docs/plans/2026-10-19-K24.md`;留痕写 `PROGRESS.md`。 - 回执:token/字体落地、3 Tab、Home/Discover 结构、测试条数与门禁原始输出、已知数据缺口、真机验收步骤。 --- ## [已处理·待用户验收] 2026-10-19 | K23.1 后台修正:品牌文字、删除按钮红色、布局回归 **用户反馈(2026-10-19,附截图)**: 1. 「图片的文字没有改过来」——浅色侧边栏里 `FruitShorts` 仍是蓝色,应改为正常深色品牌字; 2. 「删除按钮统一用红色背景」——当前多处删除仍是文字/次要样式; 3. 「有的布局乱了」——K23 后菜单、弹窗或顶栏存在对齐/溢出问题。 > 只改 `ReelShortWeb` 视觉/交互;不改接口、后端业务、客户端、main。 ### 一、品牌文字颜色 - `src/store/modules/app.ts`: - `setMenuTheme` 浅色分支 `logoTitleTextColor: 'inherit'` → `'#303133'`(或 `var(--el-text-color-primary)`); - `setHeaderTheme` 浅色分支 `topHeaderTextColor: 'inherit'` → `'#303133'`; - 深色分支保持 `#fff`。 - 检查 `Logo.vue`、`ToolHeader.vue`、`Breadcrumb.vue`,确保浅色菜单/顶栏不再出现蓝色品牌字或蓝色继承文字。 - 登录页品牌色保持现状。 ### 二、删除按钮统一红色背景 1. 全仓扫描所有「删除 / 移除 / 删除菜单」按钮,统一为 `type="danger"` 实心红底、白字, 表格内 `size="small"`;禁止 `link`、`plain`、`text`、`class="danger-action"` 的浅色文字样式。 2. 至少覆盖: - `views/contentManagement/DramaManagementView.vue` - `views/contentManagement/EpisodeManagementView.vue` - `views/contentManagement/BannerManagementView.vue` - `views/contentManagement/CategoryManagementView.vue` - `views/operation/NoticeManagementView.vue` - `views/commerce/ProductManagementView.vue` - `views/governance/ContentGovernanceView.vue`(评论删除、敏感词删除) - `views/userManagement/AdminUsersView.vue` - `views/permission/RoleManagementView.vue`(当前 `link`) - `views/permission/RoleCategoriesView.vue`(补 `size="small"`) - `views/permission/MenuManagementView.vue`(当前 `plain`) - `views/creator-center/DramaEditView.vue` 与 `views/creator-center/WorkspaceView.vue` 的删除/下线 - `views/commerce/OrderManagementView.vue`、`views/creator/CreatorAuditView.vue` 的 `danger-action` 危险操作(退款/回收/冻结等)统一实心红底白字。 3. 删除确认弹窗的确认按钮也改为红色背景(`confirmButtonClass: 'el-button--danger'` 并确认样式生效)。 4. 调整操作列宽度,确保红底按钮不换行、不挤出单元格;同一列按钮高度一致。 ### 三、布局回归修正 逐项用浏览器检查并修复: 1. 浅色/深色侧边栏:品牌图与文字垂直居中,品牌字不换行、不溢出;折叠/展开正常。 2. 菜单展开:一级与二级文字左边缘对齐(42px 基线),行高 44/40,无重叠/多余空白;popper 同样。 3. 短剧编辑弹窗:680px 与 375px 宽度下无横向滚动;封面预览/文件名/操作按钮不挤压; 数字输入两列对齐;底部“取消/保存修改”固定可见。 4. 锁定屏幕弹窗:440px 下标题/说明/表单/底部按钮不裁切,取消与锁定按钮高度一致。 5. 表格页:红色删除按钮加入后,操作列不换行、不出现横向溢出;1024 与 375 宽度验证。 6. 顶栏/标签页/面包屑:图标与文字基线一致,无错位。 ### 四、验收与门禁 - `pnpm lint:eslint` 零错误;`pnpm build:pro` 通过。 - 浏览器自查:1440×900、1024×768、375×812;浅色/深色;登录页、工作台、短剧管理编辑弹窗、 锁定屏幕、菜单展开;控制台 0 error、0 404;`scrollWidth <= clientWidth`。 - 回执附:品牌色改动、删除按钮清单、布局修复项、门禁原始输出、浏览器自查结论。 ### 五、Git - 从干净 `develop`(基线 `fe1ae95`)拉 `feature/web-k23-fixes`,小步提交, `--no-ff` 合并回 develop 并 push;作者 `Zhou Weidong <502333560@qq.com>`。 - 计划文档 `FruitServer/docs/plans/2026-10-19-K23.1.md`;留痕写 `PROGRESS.md`。 - 用户负责最终验证;本批不再扩大范围。 --- ## [已处理·待用户验收] 2026-10-19 | K23 后台视觉深化:主色、菜单、编辑弹窗与锁屏 **用户指令(2026-10-19,附三张截图)**:「现在着重优化 UI 及交互」。 截图问题: 1. 左侧菜单子项无图标、缩进/行高/选中态不统一; 2. 短剧编辑弹窗里封面直接暴露超长 URL,数字输入框布局松散; 3. 锁定屏幕弹窗标题被分隔线穿过、右上角图标错位、缺少取消入口。 > 只改 `ReelShortWeb` 视觉/交互 + `FruitServer` 菜单图标种子 SQL;不改接口契约、后端业务、客户端、main。 ### 一、主色统一为品牌辣椒红 - `src/styles/business/theme.css` 的 `--el-color-primary` 由 `#409eff` 改为 `#c4322a`, 同步 `light-3/5/7/8/9`、`dark-2`(参考值:`#d3615b / #e19995 / #f0c2c0 / #f5d9d8 / #faeeed / #9d2822`)。 - 按钮、开关、链接、选中菜单、标签页激活态、焦点环统一走 `var(--el-color-primary)`; 检查白字/红底、红字/白底对比度 ≥ 4.5:1;成功/警告/危险语义色保持不变。 - 登录页品牌色已用 `--app-brand`,保持不变;全站不再出现默认 Element 蓝。 ### 二、左侧菜单(口径更正:子菜单统一不用图标) > 用户 2026-10-19 更正:**不是子菜单图标为空,而是子菜单统一不要图标;当前问题是没对齐、视觉不好看。** > 不要给子菜单加图标,也不要在子菜单预留图标位置。 1. **子菜单图标一律清空**: - `sys_menu` 中所有 `type='MENU'` 的子菜单 `icon` 置为空串(含 id 4/5/7/8/9/10/11/12/13/14/16/18/19/21/23/25/27/29/30/31/33); - 同步 `sql/data.sql` 与 `sql/data-phase1.sql`,并实际执行到开发库; - 菜单管理页保存子菜单时也不落图标(或保存后清空),避免以后又出现图标; - 渲染层对嵌套菜单项强制不渲染图标(即使库里有历史值也只显示文字)。 2. **对齐与视觉**(新增 `src/styles/business/menu.css`,作用域 `#v-menu`): - 一级菜单:行高 44px,左侧 padding 16px,图标 18px,图标与文字间距 8px; - 二级菜单:行高 40px,**文字左边缘与一级菜单文字左边缘对齐**(即一级 padding + 图标 18 + 间距 8 = 42px), 不出现“子项文字比父项文字更靠左/更靠右”的错位; - 二级菜单不渲染图标,也不保留空白图标位;选中/悬浮背景从文字左边缘开始,圆角 8px; - 一级/二级的选中态、悬浮态、展开箭头、折叠态、popper 子菜单保持一致; - 深色模式选中态用深主色底 + 白字,浅色模式浅主色底 + 主色文字;行距紧凑,不出现大块空白。 ### 三、短剧编辑弹窗(`DramaManagementView.vue`) 1. 弹窗宽 680px,`close-on-click-modal=false`,内容区可滚动、底部按钮固定; 表单分三块:`基础信息`(名称/类型/简介)、`付费设置`(免费集数/单集解锁金币/是否热门)、`封面`。 2. 数字输入:`el-input-number` 固定宽 180、`controls-position="right"`,两列等宽对齐。 3. **封面编辑器重做**: - 左侧 2:3 预览(约 96×128),无封面时显示虚线占位; - 右侧显示状态 chip(已上传/未上传)、文件名(只显示 basename,不显示完整路径)、 `更换封面` / `移除` 操作;上传中显示进度遮罩; - **不再展示原始 URL 输入框**;如需查看,提供“查看原图”链接在新窗口打开; - 上传前校验类型(jpg/png/webp)与大小(≤5MB),失败在弹窗内提示并可重试; - `移除` 只清空本地表单,保存后生效。 4. 表单加 `:model` + `:rules`(名称必填、类型必选),保存时 `validate()`,错误显示在字段下方; 保留现有保存接口与字段,不改 payload。 5. 保存按钮 loading/disabled 防重复(已有 `saving`,补齐禁用与关闭保护)。 ### 四、锁定屏幕弹窗(`LockDialog.vue`) - 宽度 440,`max-height` 调整到 320–360,去掉全屏按钮(该弹窗不需要全屏)。 - 重做头部:标题左对齐、无穿过的分隔线、关闭按钮右对齐;标题下加一行说明“输入密码解锁当前会话”。 - 内容居中:头像 64、姓名 14、密码框 100% 宽;密码框支持回车提交。 - 底部:`取消`(关闭)+ `锁定`(primary,宽度不小于 96)。 - 删除 `console.log('set: ', val)`,不改变锁定逻辑。 ### 五、交互与一致性 - 弹窗统一:标题/内容/底部间距、圆角、按钮高度(36/40)、暗色模式可读。 - 破坏性操作不新增逻辑;本批只做视觉与上述表单交互。 - 不修改接口、不新增权限点、不改业务流程。 ### 六、验收与门禁 - `pnpm lint:eslint` 零错误;`pnpm build:pro` 通过。 - 开发库子菜单 `icon` 已全部置空;`GET /admin/auth/menus` 自检:一级菜单有图标,二级菜单 icon 为空。 - 浏览器自查(不作为用户验收):登录页/工作台/短剧管理/锁定屏幕;1024 与 375 宽度; 暗色/浅色;控制台 0 error、0 404。 - 用户浏览器验收:菜单图标与行距、红色主色、短剧编辑弹窗封面、锁屏弹窗。 ### 七、Git 与回执 - `ReelShortWeb` 从干净 `develop`(基线 `3e8312e`)拉 `feature/web-k23-admin-polish`; `FruitServer` 只改菜单图标 SQL 种子,单独提交并 push。 - 完成后各自 `--no-ff` 合并回 `develop` 并 push;作者 `Zhou Weidong <502333560@qq.com>`。 - 计划文档 `FruitServer/docs/plans/2026-10-19-K23.md`;留痕写 `PROGRESS.md`。 - 回执:主色变量、子菜单图标落库结果、弹窗改动、门禁原始输出、浏览器自查结论。 --- ## [已处理·待用户验收] 2026-10-19 | K22.1 后台收尾:登录文案、图标残留与文件清理 **用户反馈(2026-10-19,附登录页截图)**: 1. 「这个下面的文字可以不要」——登录页标题下方的说明段落与三个标签(短剧与剧集 / 发布状态 / 角色权限)删掉。 2. 「还有图标没有改过来」——仍有旧品牌图/旧图标来源:浏览器 favicon、首屏 loading 的 `/logo.png`、mock 路由里的旧图标、在线图标开关。 3. 「有些文件该删除的删除掉」——删除已确认无引用的文件与 mock 体系。 > 只改 `ReelShortWeb`;不改接口契约、后端业务、客户端、main。用户直接在浏览器验收。 ### 一、登录页文案 - `src/views/Login/Login.vue` 删除 `
` 中的说明段落 `

{{ t('login.message') }}

` 与 `