2026-09-01 用户反馈:线上蝦皮商品详情页面 AI 匹配颜色尺码后不能保存;要求分析原因、修复、打包部署,并在浏览器回归。
window.isSecureContext=false
window.crypto.randomUUID
crypto.randomUUID()
gitea.env
提供一个兼容 HTTP/HTTPS 的前端 requestId 生成函数,统一替换 Admin 页面直接调用 crypto.randomUUID() 的写操作;恢复蝦皮 AI 颜色/尺码建议保存,并避免同类公网 HTTP 写操作继续失效。
crypto.getRandomValues()
web/src
无长期文档影响:仅恢复现有 requestId 契约在已允许的 HTTP 管理端环境中的实现兼容性,不改变 API、数据结构、业务规则、安全边界或运维命令,因此跳过 Wiki 更新与同步。
补充实测:当前公网 HTTP Chrome 中不仅 crypto.randomUUID 缺失,crypto.getRandomValues 也不可用。因此兼容层按“原生 randomUUID → getRandomValues → 非安全用途的本地 UUID v4 伪随机字节”降级。requestId 仅用于幂等去重,不作为密码、令牌或安全随机数;该回退才能覆盖本次真实线上环境。
crypto.randomUUID
crypto.getRandomValues
线上管理端运行于公网 HTTP,浏览器实测 window.isSecureContext=false,且 crypto.randomUUID / crypto.getRandomValues 均不可用。蝦皮规格保存函数在发出首个 PUT 前直接调用 crypto.randomUUID(),因此点击保存时前端同步中断,服务端没有任何保存请求;AI 建议接口本身不生成 requestId,所以能正常返回。
createRequestId()
randomUUID
getRandomValues
提交:dce4a4f fix(web): support request IDs over HTTP (#182),已推送 origin/main。
dce4a4f fix(web): support request IDs over HTTP (#182)
origin/main
pnpm exec jest tests/unit/utils/request-id.spec.js --runInBand
pnpm test:unit -- --runInBand
pnpm build:prod
pnpm lint
web/src/views/goauto/purchase-tasks/index.vue
git show HEAD^
/home/goauto/releases/20260901-005500-dce4a4f
/home/goauto/current
goauto.service
127.0.0.1:8010
127.0.0.1:9527
在 http://185.216.248.75:9527/#/shopee-products/index?productId=17900:
http://185.216.248.75:9527/#/shopee-products/index?productId=17900
PUT /api/admin/v1/shopee-products/17900/specs/mapping
回归只保存既有 AI 建议为待确认映射,未确认映射、未创建采购任务、订单或付款。
无长期事实变化,按工单方案跳过 Wiki 更新与同步。
No dependencies set.
The note is not visible to the blocked user.
原始需求摘要
2026-09-01 用户反馈:线上蝦皮商品详情页面 AI 匹配颜色尺码后不能保存;要求分析原因、修复、打包部署,并在浏览器回归。
当前事实与根因
window.isSecureContext=false。window.crypto.randomUUID不存在。crypto.randomUUID();因此点击“保存修改”后在首个请求前抛出前端异常,服务端没有收到保存请求。gitea.env读取且不写入工单或日志。目标
提供一个兼容 HTTP/HTTPS 的前端 requestId 生成函数,统一替换 Admin 页面直接调用
crypto.randomUUID()的写操作;恢复蝦皮 AI 颜色/尺码建议保存,并避免同类公网 HTTP 写操作继续失效。非目标
方案
crypto.randomUUID();不可用时使用crypto.getRandomValues()生成 RFC 4122 v4 UUID;若 Web Crypto 整体不可用则明确报错,不使用低熵伪随机数。web/src中直接生成 requestId 的调用统一迁移到该工具。验收标准
crypto.randomUUID()。风险与发布
文档影响
无长期文档影响:仅恢复现有 requestId 契约在已允许的 HTTP 管理端环境中的实现兼容性,不改变 API、数据结构、业务规则、安全边界或运维命令,因此跳过 Wiki 更新与同步。
补充实测:当前公网 HTTP Chrome 中不仅
crypto.randomUUID缺失,crypto.getRandomValues也不可用。因此兼容层按“原生 randomUUID → getRandomValues → 非安全用途的本地 UUID v4 伪随机字节”降级。requestId 仅用于幂等去重,不作为密码、令牌或安全随机数;该回退才能覆盖本次真实线上环境。实施完成,待用户验收
根因
线上管理端运行于公网 HTTP,浏览器实测
window.isSecureContext=false,且crypto.randomUUID/crypto.getRandomValues均不可用。蝦皮规格保存函数在发出首个 PUT 前直接调用crypto.randomUUID(),因此点击保存时前端同步中断,服务端没有任何保存请求;AI 建议接口本身不生成 requestId,所以能正常返回。实现
createRequestId():原生randomUUID→getRandomValues→ 仅用于幂等键的本地 UUID v4 回退。crypto.randomUUID()的写操作迁移到统一工具,避免同一 HTTP 环境下其他保存/创建动作发生相同故障。提交:
dce4a4f fix(web): support request IDs over HTTP (#182),已推送origin/main。自动化验证
pnpm exec jest tests/unit/utils/request-id.spec.js --runInBand:3/3 通过。pnpm test:unit -- --runInBand:10 suites、36 tests 全部通过。pnpm build:prod:通过。pnpm lint仍被web/src/views/goauto/purchase-tasks/index.vue的既有混合 Tab/空格阻断;对git show HEAD^的基线文件单独运行 ESLint,同样有 24 个错误,确认不是本工单引入。本工单未混入无关格式化。部署
/home/goauto/releases/20260901-005500-dce4a4f/home/goauto/current已切换到该目录。goauto.service:active。127.0.0.1:8010与127.0.0.1:9527健康检查通过。线上浏览器回归
在
http://185.216.248.75:9527/#/shopee-products/index?productId=17900:PUT /api/admin/v1/shopee-products/17900/specs/mapping。回归只保存既有 AI 建议为待确认映射,未确认映射、未创建采购任务、订单或付款。
文档影响
无长期事实变化,按工单方案跳过 Wiki 更新与同步。