chore: 导入旧记忆备份供恢复

This commit is contained in:
2026-09-23 22:38:40 +08:00
parent 5313fcee7a
commit 6a6a895eaf
638 changed files with 29816 additions and 1 deletions
@@ -0,0 +1,42 @@
---
title: 前端与业务实现踩坑及沟通教训
type: experience
permalink: main/projects/d44c219a-0b31-4de1-b160-323eb34a4c6a/前端与业务实现踩坑及沟通教训
stable_id: 67a86e88-a750-4cd8-9650-c1b7cfbf22b9
scope: project
memory_type: experience
project_id: d44c219a-0b31-4de1-b160-323eb34a4c6a
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 2
request_id: artveris-migrate-2026-09-03-exp-04-fix
created_at: '2026-09-03T03:47:27.319265+00:00'
updated_at: '2026-09-03T03:48:31.568783+00:00'
tags:
- frontend
- communication
- pitfall
- lesson
---
前端:
- PC 点击轮播卡片打不开查看器:`pointerdown` 即 `setPointerCapture` 会把后续 click 改派到容器,改为确认横向拖动后才捕获。
- 轮播无缝循环:首尾各加克隆张,`transitionend` 时无动画跳回真实张。
- 上传 FormData 不要手动设 Content-Type(交由 axios 设边界)。
- C 端切换短码不刷新:需 watch route param。
- 上链状态前端 `rowIsOnchain` 要认 ONCHAIN/CONFIRMING/PENDING(确认中即已上链不可重触),仅 FAILED 可重试。
- 接口入参:多处 `BigInt(id)` 非法入参会 500,统一用 `parseBigId` 返回 400。
业务实现:
- 首扫激活必须条件更新 `updateMany(where:{id,status:INACTIVE})`,“读后写”并发会双重首扫且丢增量。
- 备份恢复端必须校验 app/版本/模型全集,否则残缺包会清库(先清后写)。
- “先写库后入队”需入队失败补偿(回写 FAILED/回滚),Redis 抖动否则留悬挂记录。
- `hashData` 必须稳定序列化(JSON.stringify 受 key 顺序影响)。
- `void promise` 无 catch 会 unhandled rejection(操作日志拦截器曾中招)。
- ZIP 解析:倒序定位真实 EOCD/ZIP64,按实际解压字节流计数,不能信任中央目录声明大小;`100002` 条目是防恶意内存耗尽的技术阈值非业务上限。
沟通教训:
- 用户描述“显示 X 而不是 Y”大概率是吐槽现状 X、想要 Y(AppKey 掩码事件连错两轮),拿不准先确认。
- UI 布局任务必须附截图级验收标准,否则容易做成“能编译但难看”。
- 甲方“不做 NFT”、“SKU”等用词与技术含义不同(实为不做二级交易 / 一款档案),关键口径必须反复澄清后再动模型。
- QA 后彻底清理测试数据(档案/修订/日志/查询计数/上传文件),回滚到种子基线。