Files
ReelShortWeb/docs/plans/PROGRESS.md
T

5.4 KiB
Raw Blame History

2026-10-22 后台转码设置页面

开工确认与计划

  • 仓库:ReelShortWeb
  • 基线:develop / origin/develop = 723d056
  • 工作区:开工前干净
  • 分支:feature/transcode-profile-settings
  • 计划:docs/plans/2026-10-22-transcode-profile-settings.md
$ git status --short --branch && git rev-parse --short HEAD
## develop...origin/develop
723d056

解读:基于指定 develop 基线创建隔离工作树。后端契约已确认字段为 enabled / segmentSeconds / ladder / sprite,权限为 episode:upload。 默认服务端动态菜单只读取 sys_menu,本单按“只改 Web”约束在不改后端的前提下, 对具备 episode:upload 的账号补充本地受控菜单,后端接口仍执行最终鉴权。

实现与门禁

  • 新增 /content/media-transcode 静态路由和服务端动态菜单补充; 菜单标题走 router.transcodeSettings,只在账号具备 episode:upload 时加入。
  • 新增转码设置页面,字段严格为 enabled / segmentSeconds / ladder / sprite; 支持档位增删、动态行校验、首个错误字段定位及服务端返回值回填。
  • API 使用现有 axios Result 包装,GET 初始化、PUT 保存;成功/失败/校验提示全部走中英 i18n。
  • 当前工程没有单元/组件测试框架,未新增依赖;使用 ESLint、TypeScript 与构建门禁。
$ pnpm lint:eslint
> fruitshorts-admin@1.0.0 lint:eslint /private/tmp/reelshortweb-transcode-settings
> eslint --fix --ext .js,.ts,.vue ./src

$ pnpm ts:check
> fruitshorts-admin@1.0.0 ts:check /private/tmp/reelshortweb-transcode-settings
> pnpm vue-tsc --noEmit --skipLibCheck

解读:ESLint 零告警,TypeScript 类型检查通过。

$ pnpm build:dev
> fruitshorts-admin@1.0.0 build:dev /private/tmp/reelshortweb-transcode-settings
> VITE_CJS_IGNORE_WARNING=1 vite build --mode dev

 WARN  Circular chunk: element-plus -> vue-chunks -> element-plus. Please adjust the manual chunk logic for these chunks.

Build successful. Please see dist-dev directory

解读:开发构建成功;circular chunk 为仓库既有 Element Plus 分包警告,本次未改构建配置。

2026-10-22 剧集转码面板组件拆分

  • 分支:feature/transcode-panel-split
  • 基线:develop / origin/develop = 52b10d3
  • 计划:docs/plans/2026-10-22-transcode-panel-split.md

已读取 AGENTS.md 与 CODING_STANDARDS.md。当前 EpisodeTranscodePanel.vue 为 816 行,超过单文件 500 行红线。 拆分将保持父组件的数据获取、轮询清理、分页请求与切集重置逻辑不变。

拆分结果

$ wc -l src/views/contentManagement/upload/EpisodeTranscodePanel.vue \
  src/views/contentManagement/upload/EpisodeTranscodeStatusBadge.vue \
  src/views/contentManagement/upload/EpisodeTranscodeStatusPanel.vue \
  src/views/contentManagement/upload/EpisodeTranscodeRenditions.vue \
  src/views/contentManagement/upload/EpisodeTranscodeFrames.vue \
  src/views/contentManagement/upload/episodeTranscodeUi.ts
266 EpisodeTranscodePanel.vue
45 EpisodeTranscodeStatusBadge.vue
155 EpisodeTranscodeStatusPanel.vue
119 EpisodeTranscodeRenditions.vue
315 EpisodeTranscodeFrames.vue
93 episodeTranscodeUi.ts

解读:父面板只保留接口调用、轮询、请求序号、分页状态与组件组合; 状态、清晰度、帧图分别独立,全部文件均低于 500 行。

门禁

$ pnpm ts:check
> vue-tsc --noEmit --skipLibCheck
(通过)

$ pnpm lint:eslint
> eslint --fix --ext .js,.ts,.vue ./src
(0 error / 0 warning)

$ pnpm build:dev
 WARN  Circular chunk: element-plus -> vue-chunks -> element-plus.
Build successful. Please see dist-dev directory

解读:组件 props/emits、类型检查、ESLint 和开发构建全部通过; 循环 chunk 为项目既有警告。轮询启停、接口路径、分页参数和 locales 文案未改变。

2026-10-22 转码媒资 ID 前端精度修复

  • 分支:feature/transcode-media-id-fix-ui
  • 基线:develop / origin/develop = a4893c3

已复现 Number('2113150398670966786') 变为 2113150398670966800。 本次将媒资、任务 id 全链路按字符串处理,禁止 Number 转换;没有媒资时 禁用重新转码并显示空态。

$ node -e "const id='2113150398670966786'; console.log(String(Number(id)))"
2113150398670966800

解读:Snowflake id 超过 JS 安全整数,字符串化后的 Number 已失真。

实现

  • EpisodeTranscodeItem 的 episodeId/mediaAssetId/taskId,以及 rendition/thumbnail 相关 id 类型改为字符串。
  • 父面板使用 detail.mediaAssetId 原始字符串和正则校验,不再 Number 转换。
  • 手动转码与帧图分页接口原样传递字符串 id。
  • mediaAssetId 为空时按钮保持禁用,空态优先展示后端 errorMsg 原因。

静态检查确认:

$ rg -n "Number\([^\n]*mediaAssetId|mediaAssetId[^\n]*Number\(" \
  src/views/contentManagement/upload src/api/admin
(无匹配)

门禁

$ pnpm lint:eslint
> eslint --fix --ext .js,.ts,.vue ./src
(0 error / 0 warning)

$ pnpm ts:check
> vue-tsc --noEmit --skipLibCheck
(通过)

$ pnpm build:dev
 WARN  Circular chunk: element-plus -> vue-chunks -> element-plus.
Build successful. Please see dist-dev directory

解读:字符串 id 链路、类型检查、ESLint 与开发构建均通过; 循环 chunk 为项目既有警告。