Close213/215 本地资源注册与后台表查询 #232
Reference in New Issue
Block a user
Delete Branch "codex/admin-database-table-query"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
关联 Issue
背景
本 PR 合并处理两个规模较小、已完成统一 review 的客户端与后台能力改动,整体已基于远端最新 master。
本地资源注册(#213)
后台表查询(#215)
验证
npm run admin-web:typechecknpm run admin-web:buildnpm run check:encodinggit diff --checkrustfmt --edition 2024 --check server-rs/crates/api-server/src/admin.rs限制
21de0e2f12to991d7a19ea后台数据库表查询支持结构化筛选与详情优化to WIP: Close213 补充本地资源注册类型审查 head sha:
991d7a19ea发现 1 个阻塞问题,已在行内评论说明。
@@ -3290,0 +3546,4 @@return actual_number.partial_cmp(&expected_number);}}let actual_text = value_to_string(actual)?;【明确问题】此处仅在 actual 是 JSON number 时才按数值比较;当数据库返回的单元格是字符串(代码注释声称需要兼容字符串化值)时,
actual.as_f64()为 None,随后会退化为字符串字典序。例如 actual="12"、expected="5" 的 gt 会判断为 false,导致筛选漏掉符合条件的行。风险:后台对字符串化数字使用 gt/gte/lt/lte 得到错误结果。建议先对 actual.as_str() 做 trim().parse::()(并对 expected 同样统一解析),双方都不是有限数值时再按字符串比较;补充字符串数字的回归测试。本次审查 head sha:
991d7a19eaClose213 补充本地资源注册类型to WIP: Close213/215 本地资源注册与后台表查询当前 head 的远端 CI 已全绿,但后台查询交互和筛选契约仍有阻塞问题,请修复以下行内问题后重新请求审核。
@@ -213,2 +250,3 @@const querySearch = options.search ?? search;const queryFilters = options.filters ?? filters;const queryFilters =options.filters ?? buildDatabaseFiltersJson(conditions);这里现在会从 conditions 生成 filters,但页面标题区的“查询”按钮仍直接调用 refreshRows,绕过 handleSearch 的完整性校验。用户添加了启用但未填完的条件后点击顶部查询时,buildDatabaseFiltersJson 会静默丢弃该条件并查询全部/剩余条件,结果会误导管理员。请让两个查询入口统一走同一校验逻辑。
@@ -298,1 +496,3 @@if (!detailRow) {async function handleCopyDetailField(column: string, value: unknown) {const copiedText = stringifyDetailValue(value);if (!copiedText) {null/undefined 字段在详情中显示为“-”,但 stringifyDetailValue 将其变成空字符串,随后这里直接 return,点击对应“复制”按钮不会写剪贴板,也不会显示 Toast。请明确复制 null/展示值并给出反馈,避免空字段操作无响应。
@@ -482,2 +943,4 @@data-clickable="true"tabIndex={0}onClick={() => setDetailRow(row)}onKeyDown={(event) => handleRowKeyDown(event, row)}行内新增的 keydown 处理会对 Enter/Space 无条件打开行详情。焦点位于 AdminUserReferenceButton 等行内按钮时,键盘事件仍会冒泡到 tr,可能同时打开用户详情和行详情。请在行处理器中过滤 button/a/input/select/textarea 目标,或阻止子控件的 keydown 冒泡。
@@ -3276,0 +3420,4 @@}return Ok(());}if op.requires_scalar_value() {eq/ne 没有被 requires_scalar_value 覆盖,因此缺少 value 的条件数组会被接受,运行时在 operator matcher 中按 Null 兜底。这样无法区分明确的 null 筛选与畸形请求,可能产生意外匹配。请要求 eq/ne 提供 value,或在契约中显式定义 null 语义。