3.5 KiB
3.5 KiB
市场排名与 AI 选期代码审查问题记录
审查基线:499b084。记录日期:2026-07-28。
本文件记录静态代码审查发现的问题。当前 HAR 无法独立构建,修复后仍需在宿主工程完成编译和业务回归。
1. 市场排名空响应仍展示旧缓存
状态:待修复;优先级:高
MarketRankingNodeComponent.updateCardData() 命中 Tab 缓存后,仅在没有缓存时才用 HTTP 返回结果替换 cardData。当接口成功返回空数组时,旧榜单仍会显示,且空合约列表不会建立新的行情订阅,页面可能长期停留在旧数据。
- 证据:
src/main/ets/market-ranking/MarketRankingNodeComponent.ets:183-213 - 建议:将成功的 HTTP 响应视为权威结果;空数组应清空页面和对应缓存。非空响应可按新合约列表保留匹配的旧行情值。
- 验证:先加载非空榜单,再让刷新接口返回空数组,页面应进入空状态且不再接收旧订阅回调。
2. HTTP 合约字段缺少运行时校验
状态:待修复;优先级:高
两个 Fetcher 都通过类型断言直接使用 JSON,未校验合约代码、市场和名称。市场排名点击处仅排除 undefined,无法拦截 null 或空字符串;AI 选期点击和行情订阅均未做防御。
- 证据:
src/main/ets/market-ranking/MarketRankingDataFetcher.ets:47-51src/main/ets/market-ranking/MarketRankingNodeComponent.ets:634-638src/main/ets/ai-pick/AiPickDataFetcher.ets:102-108src/main/ets/ai-pick/AiPickNodeComponent.ets:709-711
- 建议:在 Fetcher 边界过滤或拒绝非法数据;点击跳转前再次校验代码和市场均为非空字符串。
- 验证:覆盖字段缺失、
null、空字符串和错误数组结构,确保不崩溃、不发送非法 4106 请求。
3. 最新价精度被转换或固定
状态:待修复;优先级:中
行情客户端将价格字符串转换为 number。AI 选期随后固定保留两位小数,可能把三位或更多精度的合约价格舍入;市场排名也会丢失尾随精度。
- 证据:
src/main/ets/node/clients/AiPickHqRequestClient.ets:122-130src/main/ets/ai-pick/AiPickUtils.ets:161-163src/main/ets/node/clients/MarketRankingHqRequestClient.ets:120-130
- 建议:保留行情层格式化后的价格字符串,或使用宿主统一的合约精度格式化能力。
- 验证:选择整数、一位、两位和三位小数精度的合约,与宿主行情页逐项对比。
4. 多语言资源未覆盖
状态:待修复;优先级:中
市场排名和 AI 选期文案只存在于 base 中文资源中,zh_CN、en_US 未定义对应条目;本地卡片配置中的中文标题和说明还会优先于资源文案。
- 证据:
src/main/resources/base/element/string.json:204-309src/main/resources/zh_CN/element/string.jsonsrc/main/resources/en_US/element/string.jsonsrc/main/resources/rawfile/first_page_cards_config.json:96-140
- 建议:按仓库约定补齐三套字符串资源,并明确静态卡片配置的本地化策略;大数单位等展示文本也应纳入资源管理。
- 验证:切换中文和英文系统语言,检查标题、Tab、空状态、说明弹层、主力标签和数值单位。
测试缺口
当前测试仅包含模板示例。后续至少应覆盖缓存后空响应、非法合约字段、异步旧回调失效、价格精度,以及市场排名指标与周期参数映射。