# 后台转码设置页面 ## 目标 1. 在内容管理下新增「转码设置」页面,权限沿用 `episode:upload`。 2. 页面字段与 FruitServer `MediaTranscodeProfile` 完全一致。 3. 对接 `GET/PUT /admin/media/transcode-profile`,保存后回填服务端响应。 4. 前端校验规则与后端一致,并在失败时定位到首个错误字段。 ## 方案 - API:在 `src/api/admin/media.ts` 增加读取、保存函数,类型定义放 `src/api/admin/types.ts`;响应继续遵循现有 `Result {code,message,data}`。 - 路由:静态路由表增加 `/content/media-transcode`;默认服务端动态路由模式下, 根据 `episode:upload` 权限把同一条本地路由补充进服务端 `/content` 菜单, 已存在同名菜单时不重复添加,仅统一 i18n 标题。 - 页面:`views/systemManagement/TranscodeSettingsView.vue`,使用 Element Plus 表单、 表格、数字输入和开关;保存按钮受 `episode:upload` 控制。 - 校验: - quality 非空且忽略首尾空格后唯一; - width/height 为正偶数; - videoBitrateKbps/audioBitrateKbps 为正整数; - segmentSeconds 2–10; - sprite.intervalSeconds 1–10、columns 5–20、thumbWidth 120–240; - ladder 至少一档 enabled。 - 校验失败由 Element Plus 定位到首个错误 prop,动态列表错误会定位到对应行。 - 所有可见文案、提示和校验信息进入 `zh-CN.ts` / `en.ts`。 ## 非目标 - 不修改 FruitServer、ReelShort 或接口契约。 - 不新增权限码、不新增依赖、不启动服务。 ## 测试与门禁 - 当前工程没有单元/组件测试框架,不引入新依赖;使用 TS 类型检查和构建门禁。 - `pnpm lint:eslint` - `pnpm ts:check` - `pnpm build:dev`