feat(huya): 礼包名默认空白,改用「常用礼包」备选按钮

新建协作单以前会把「上次选的礼包」自动填进礼包名(localStorage
huya.collab.lastGift)。连开几单同一个礼包是省事,但每开一单都顶着上一次的
选择,稍不留神就按错礼包建单;而且这个自动值会被草稿自动保存吃进去,
下次打开又「恢复」出来。

- 新建弹窗**不再预填礼包名**:删掉 lastGift 的读写,字段默认空白。
- 草稿恢复只带订单号 / 店铺 / CK / 截图 / 备注,礼包名留空;
  hasDraftContent() 也不再认「只有礼包名」的草稿(否则被旧逻辑自动填过的
  那份草稿会一直弹「已恢复上次未提交的草稿」)。
- 新增 GET /external-orders/gifts/frequent:按台账里的使用次数排序
  (次数相同看最近一次使用),新建与补资料弹窗在字段上方渲染最多 6 个按钮,
  只显示**当前礼包缓存里还有的**(活动换 SID 后老礼包会整批下架)。
- 新增 5 例测试,并做了 3 次反向验证(去掉次数排序 / 改成升序 / 去掉空名过滤)。

补资料弹窗的初值仍是「这一单自己的礼包」,详情抽屉编辑也不动 —— 那不是
「上次选的」。
This commit is contained in:
yml2213
2026-10-18 10:53:04 +08:00
parent c441b6c663
commit 21f7ee3f3f
8 changed files with 244 additions and 28 deletions
+28
View File
@@ -904,6 +904,34 @@ CK 失效了业务上可能仍然有效。列表上只做**显式提示**(红
**没有动的地方**:单行「查积分 / 兑换记录」与详情抽屉里的按钮仍是 `both`(一个动作查两件事),
`scope` 是**可选参数**、默认值就是原来的行为 —— 老的调用方一个字段不加也照旧。
### 11.10 2026-10-18 第七轮:礼包名默认空白 + 常用礼包备选
需求原文:"礼包名 需要优化, 每次都会选择上次选中的, 修复这个, 可以在上方留几个经常选择的";
补充:"不能带上次的, 需要默认空白, 只留下 几个备选"。
原来的行为:新建时自动把「上次选的礼包」填进 `gift_name`(`localStorage['huya.collab.lastGift']`)。
连开几单同一个礼包确实省事,但**每开一单都顶着上一次的选择**,稍不留神就按错礼包建单;
而且这个自动值会被草稿自动保存吃进去,下次打开又"恢复"出来。
| 面 | 落地 |
| --- | --- |
| 默认值 | **礼包名一律空白**:删掉 `LAST_GIFT_KEY`(不再写、不再读),新建弹窗不预填 |
| 草稿 | 恢复草稿时**只恢复订单号 / 店铺 / CK / 截图 / 备注,礼包名留空**;`hasDraftContent()` 不再把「只有礼包名」当有内容(否则一份被旧逻辑自动填过的草稿会一直弹"已恢复草稿") |
| 常用礼包 | 新增 `GET /external-orders/gifts/frequent?limit=8` → `service.frequent_gift_names()`:按使用次数降序、次数相同按最近一次使用;新建与补资料弹窗在字段**上方**渲染最多 6 个按钮(短标签 + Tooltip 显示全名与用过次数) |
| 过滤 | 按钮只显示**当前礼包缓存里还有的**那几个(活动换 SID 后老礼包会整批下架,见 §11.4);缓存为空时整行不显示 |
**四条口径**:
1. **礼包名是"点一下"的事,不值得替用户记住**:CK / 截图那些重活才需要草稿,礼包有备选按钮后一次点击即可,
所以宁可默认空白。
2. **服务层只回答"历史上哪些用得多"**:`frequent_gift_names` **不判断**当前活动还有没有这个礼包 ——
那是前端拿礼包缓存比对的事;活动换 SID 后礼包整批变,服务层不该替前端猜(§11.4 的教训)。
3. **空礼包名不进榜单**:那是"还没填",不是一种礼包(SQL 里滤掉,有用例钉着)。
4. **次数相同看最近**:并列时让最近用过的排前面,符合"常用"的直觉(有用例 + 反向验证)。
**没有动的地方**:详情抽屉里编辑既有订单的礼包名仍是"显示这一单自己的值"(本来就该如此);
补资料弹窗的初值仍是**这一单自己的礼包**(不是"上次选的"),没有改成空白。
---
## 12. 风险