Skip to content

feat(setting): 添加分类与目录路由预览 - #678

Draft
bgColorGray wants to merge 2 commits into
jxxghp:v3from
bgColorGray:codex/category-route-preview
Draft

feat(setting): 添加分类与目录路由预览#678
bgColorGray wants to merge 2 commits into
jxxghp:v3from
bgColorGray:codex/category-route-preview

Conversation

@bgColorGray

@bgColorGray bgColorGray commented Aug 14, 2026

Copy link
Copy Markdown

关联

变更

  • 在“存储 & 目录”设置中增加目录匹配模式,默认按配置顺序匹配,可显式切换为精确规则优先。
  • 新增 useDirectoryRouteSettings,以单一设置契约管理目录、匹配模式、远端快照、本地草稿、保存锁和静默刷新代次。
  • 新增路由预览对话框,向后端发送当前未保存的分类与目录草稿以及存储、源路径、目标路径等完整硬约束。
  • 展示自动/指定分类、最终目录、两种模式对比、分类规则命中条件、全部目录候选、排除原因和冲突告警。
  • 分类编辑器接受真实配置快照,兼容合法的 null 兜底规则;保存期间若继续编辑,则保留最新草稿并提示再次保存。
  • 目录设置使用 saved / outdated / failed 显式保存结果,避免旧快照保存成功后误报最新草稿已保存。
  • 路由预览使用输入 revision 与请求代次丢弃过期响应,输入变化时立即清除旧结果。
  • 补齐简体中文、繁体中文和英文文案,并适配桌面与移动端布局。

依赖与兼容性

验证

  • 分类编辑、目录设置及两类竞态聚焦测试:31 passed。
  • 全量测试:1931 passed;唯一失败是 Node 26 localStorage 故障注入的既有基线用例 subscribe page > keeps page state usable when sort storage reads or writes fail
  • TypeScript、ESLint、Prettier、生产构建和 PWA service worker 构建通过。
  • 使用真实 Vite 页面检查 1440x1000 与 390x844 视口,匹配模式控件和预览对话框无重叠或溢出。
  • 严格可维护性复审:APPROVED。
  • git diff --check 与敏感信息扫描通过。

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR-Agent Code Review

该 PR 新增目录匹配模式、分类草稿联动和后端路由预览,并补充了相应类型、界面与多语言支持。当前异步加载与草稿状态处理存在一处可覆盖既有分类配置的数据丢失风险,以及两处可能产生错误或过期预览结果的状态同步回归,建议修复后再合并。

审查提交:5ba1006

openSharedDialog(
CategoryEditDialog,
{},
{ initialConfig: cloneDeep(categoryConfig.value) },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

配置覆写

categoryConfig 在请求完成前就以空配置初始化,并始终作为 initialConfig 传入,导致 CategoryEditDialog 跳过自身的数据加载。首次请求较慢或失败时,用户可以打开一个看似已加载但实际为空的编辑器并保存,从而用空配置覆盖服务端已有分类,违反编辑器必须基于已加载配置保存的约定。修正边界是区分“尚未加载”与“已加载为空”,不能将前者的占位值作为可保存的初始配置。

try {
const result = await api.get<{ value?: unknown }>(`system/setting/${directoryMatchModeKey}`)
directoryMatchMode.value = result.value === 'specificity' ? 'specificity' : 'sequential'
} catch (error) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

错误回退

loadDirectoryMatchMode 在任何读取异常时都会把当前值改为 sequential。当已加载或已保存为 specificity 的页面遇到一次静默刷新失败时,预览会立即使用错误模式,随后保存目录还会将该回退值写回服务端;这违反了仅在设置缺失或值无效时回退的兼容约定。修正边界是读取失败时保留最后一次成功值,并避免持久化未成功加载的回退状态。

}
}

watch([movieList, tvList], () => emit('draft-change', buildPayload()), { deep: true })

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

伪草稿

parseConfig 在挂载时会修改两个受深度监听的列表,因此仅打开对话框也会发出 draft-change,而父组件会将任意此类事件标记为未保存草稿。此后静默刷新会拒绝同步实际未修改的分类配置,使其他会话或服务端更新无法进入后续预览,违反 dirty 状态只表示真实用户修改的不变式。修正边界是过滤初始化产生的事件,或根据初始快照判断配置是否确实发生变化。

@bgColorGray

Copy link
Copy Markdown
Author

已完成上一轮审查后的状态重构与回归:

  • 使用 useDirectoryRouteSettings 统一管理远端快照、本地草稿、保存锁和静默刷新代次。
  • 兼容合法的 null 分类兜底规则,并避免加载/保存期间覆盖更新草稿。
  • 目录保存返回 saved / outdated / failed,不会再把旧快照成功误报成最新草稿已保存。
  • 路由预览使用输入 revision 与请求代次丢弃过期响应,输入变化会立即清除旧结果。
  • 相关聚焦测试 31 passed;TypeScript、ESLint、Prettier 和生产构建通过。
  • 独立严格可维护性复审结果:APPROVED

本次自动 PR-Agent 工作流的红灯是三个回退模型均返回 429 WEEKLY_LIMIT_EXCEEDED,未生成新的代码审查 finding;这不是前端测试或构建失败。

@bgColorGray
bgColorGray marked this pull request as draft August 14, 2026 11:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant