Gitea MCP 未向当前会话暴露,按仓库规则回退项目根目录安全配置与 Gitea API 创建本工单;凭据未写入工单、代码或日志。
来源:用户于 2026-09-01 反馈,admin 里 SYB 商品页查看虾皮商品详情或 PDD 商品详情是新开浏览器标签页,使用起来麻烦。讨论后用户选择方案 B:把详情内容做成可以在原页面上原地弹出的抽屉,不新开标签页、不跳转路由,关闭后精确回到原来的位置(筛选、翻页状态不丢),并要求建单。
目的:消除"看一眼详情就要切标签页"的操作负担,尤其是 SYB 商品页需要来回对照虾皮商品和 PDD 商品信息的场景。
代码基线:3aab1f0(2026-09-01,当前 main)。核验日期 2026-09-01。原工单使用的 5338dd0 已过期;其后 #182、#183 修改了本单涉及的三个页面,实施必须保留统一 createRequestId() 以及 SYB collectionEligible 判断,禁止从旧基线提取后覆盖这些修复。
3aab1f0
main
5338dd0
createRequestId()
collectionEligible
el-drawer
pdd-products/index.vue:63
size="960px"
shopee-products/index.vue:79
size="1080px"
?productId=
created()
this.$route.query.productId
window.open(route.href, '_blank', 'noopener')
syb-products/index.vue:273-284
openShopeeDetail(shopeeProductId, targetColor, action)
openPddDetail(pddProductId)
purchaseActionRoute
shopee-products/index.vue:287-289
pdd-products/index.vue
pdd-products/index.vue:63-85
shopee-products/index.vue:79-130
beforeCloseDetail
?targetColor=
?action=link_pdd
openPddDetail
append-to-body
PddProductDetailDrawer.vue
ShopeeProductDetailDrawer.vue
targetColor
action
syb-products
shopee-products
window.open
pdd-products
SetMapping
ConfirmMapping
syb-products/index.vue
shopee-products/index.vue
web/src/views/goauto/pdd-products/PddProductDetailDrawer.vue
detail
related
relatedPurchase
stock
v-model:open
product-id
web/src/views/goauto/shopee-products/ShopeeProductDetailDrawer.vue
pddPicker
edit
target-color
openShopeeDetail
open
open=true
update:modelValue
product-updated
mapping-updated
pdd-linked
purchase-created
load()
现有抽屉视觉规范继续复用,不需要完整高保真原型;但“虾皮详情之上叠加 PDD 详情”属于新的交互状态。实施前至少提供标注截图或低保真图并由用户确认,覆盖:SYB 页原地打开虾皮/PDD 详情、虾皮抽屉叠加 PDD 抽屉、存在未保存草稿时关闭/切换商品确认、加载失败四种状态。工单需记录确认时间与覆盖范围。
pdd-products/index?productId=X
shopee-products/index?productId=X&targetColor=Y
this.load()
无长期文档影响。 未新增或修改接口、参数、数据结构;只是前端展示层的承载方式调整(页面级路由展示 → 可复用组件嵌入展示),业务规则、启动、测试、部署、排错方式均未变化。因此跳过 Wiki 更新与同步。
待确认(2026-09-01 已按评审意见更新;等待用户确认标注截图/低保真交互证据及上述组件契约后方可实施)。
Gitea MCP 当前会话未提供,按项目规则回退 Gitea API。以下证据复用现有 Element Plus 抽屉视觉,不改变颜色、字体、表格或业务按钮,只确认新的承载与层级行为。
┌──────────── SYB 商品列表(筛选 / 页码 / 勾选保持原值)────────────┐ │ 商品行 … [查看虾皮] [查看 PDD] │ │ │ │ ┌──── 虾皮详情抽屉 1080px ───────────────────┐ │ │ │ 标题 / 编辑 / PDD 关联 / AI 匹配 / 规格表 │ │ │ │ [关闭]│ │ │ └────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────┘
SYB 列表(背景锁定) ┌──── 虾皮详情 1080px(保留草稿)───────────────────────┐ │ 关联 PDD 商品 [查看详情] │ │ ┌──── PDD 详情 960px(顶层)─────────────────┐ │ │ │ 编辑 / 备货采购 / 关联虾皮 / 继续订单采购 │ │ │ │ [关闭] │ │ │ └────────────────────────────────────────────┘ │ └───────────────────────────────────────────────────────┘
┌────────────── 放弃未保存修改? ──────────────┐ │ 当前规格映射尚未保存。 │ │ [继续编辑] [放弃并关闭/切换] │ └──────────────────────────────────────────────┘
┌──── 商品详情抽屉 ────────────────────────────┐ │ [!] 商品详情加载失败,请稍后重试 │ │ [重新加载] [关闭] │ └──────────────────────────────────────────────┘
UX 校验结论:复用现有视觉;新增部分重点遵循状态保持、明确关闭路径、未保存 sheet dismissal 确认、可恢复错误、可见焦点和受控 z-index。请用户确认以上四种状态和组件契约后再实施生产代码。
用户于 2026-09-01 明确回复“确认 #186 低保真方案”。确认范围:SYB 原地打开虾皮/PDD 详情、虾皮详情上叠加 PDD 详情、未保存草稿关闭/切换确认、加载失败与重试,以及评论中列明的组件事件契约、请求代次保护、焦点/遮罩/Esc/滚动层级规则。现开始实施;基线 b31896e(已包含 #187),保留 #172、#182、#183 行为。Gitea MCP 当前会话未提供,继续回退 Gitea API。
已按 2026-09-01 用户确认的 #186 低保真方案完成实现并推送。
productId
action=link_pdd
createRequestId
pnpm exec eslint
pnpm run test:unit
pnpm run build:prod
git diff --check
scripts/verify.ps1 -Component web
web/src/views/goauto/purchase-tasks/index.vue
6ab2f62 feat(web): 内联展示商品详情抽屉 (#186)
origin/main
工单保持开启,等待人工验收。
经用户明确授权,已将 #186 最新提交发布到线上。
6ab2f62
20260901-112853-6ab2f62
/home/goauto/releases/20260901-112853-6ab2f62
d0b0bfe0fd0d56b382728eeba6daee4708749eec872c450a646ae907e19e4205
/home/goauto/releases/20260901-102000-3aab1f0
dist
goauto.service
active
/
/api/v1/app-config
工单继续保持待验收。
No dependencies set.
The note is not visible to the blocked user.
原始需求摘要
来源:用户于 2026-09-01 反馈,admin 里 SYB 商品页查看虾皮商品详情或 PDD 商品详情是新开浏览器标签页,使用起来麻烦。讨论后用户选择方案 B:把详情内容做成可以在原页面上原地弹出的抽屉,不新开标签页、不跳转路由,关闭后精确回到原来的位置(筛选、翻页状态不丢),并要求建单。
目的:消除"看一眼详情就要切标签页"的操作负担,尤其是 SYB 商品页需要来回对照虾皮商品和 PDD 商品信息的场景。
基线与已核实事实
代码基线:
3aab1f0(2026-09-01,当前main)。核验日期 2026-09-01。原工单使用的5338dd0已过期;其后 #182、#183 修改了本单涉及的三个页面,实施必须保留统一createRequestId()以及 SYBcollectionEligible判断,禁止从旧基线提取后覆盖这些修复。el-drawer(pdd-products/index.vue:63size="960px";shopee-products/index.vue:79size="1080px"),且都已支持"打开页面时通过?productId=直接展开抽屉"(各自created()读取this.$route.query.productId)。现在的"新开标签页"只是拿这套现成能力包了一层window.open(route.href, '_blank', 'noopener')。syb-products/index.vue:273-284:openShopeeDetail(shopeeProductId, targetColor, action)、openPddDetail(pddProductId),各有 2 处模板调用 +purchaseActionRoute按钮路由到这两个方法。shopee-products/index.vue:287-289:openPddDetail(pddProductId),2 处模板调用(列表列 + 详情抽屉内的"关联 PDD 商品"链接)。pdd-products/index.vue当前没有反向链接到虾皮商品详情(关联虾皮商品列表只在自身抽屉内筛选,不跳转)。pdd-products/index.vue:63-85):编辑商品、创建备货采购、关联虾皮商品列表(含自身分页/筛选/多选)、"继续订单采购"批量动作。shopee-products/index.vue:79-130):编辑档案、关联/更换 PDD 商品、#172 新增的颜色/尺码 AI 匹配(含低置信度不预填、AI 待确认的单独确认按钮)、添加规格值、未保存修改的关闭确认(beforeCloseDetail)、通过?targetColor=高亮指定行、通过?action=link_pdd自动弹出 PDD 选择器。openPddDetail),本单实施后这条链接需要变成"在当前已经打开的虾皮抽屉之上,再叠一层 PDD 抽屉",属于抽屉嵌套场景,Element Plus 的el-drawer原生支持层叠(append-to-body),机制上可行。目标
PddProductDetailDrawer.vue、ShopeeProductDetailDrawer.vue),接收目标 id(及必要的可选参数如targetColor/action)作为 prop,自身管理加载、展开状态。syb-products页面的"查看虾皮商品详情""查看 PDD 商品详情"、shopee-products页面的"查看关联 PDD 商品详情",全部从window.open改为挂载对应的抽屉组件,原地展开,不跳转路由、不新开标签页。pdd-products、shopee-products页面自身原有的详情抽屉,改为直接使用同一份提取出来的组件(同源实现,不留两份重复代码)。非目标
pdd-products页面到虾皮商品详情的反向链接(目前没有这条链接,本单不主动加,如需要另评估)。?productId=(及targetColor/action)直接访问对应整页仍然可以打开详情抽屉的既有行为——两种打开方式(整页直达、从其他页面原地弹出)都要继续可用,互不冲突。SetMapping/ConfirmMapping等接口行为。前置依赖与并行性
syb-products/index.vue,因此原“无代码重叠”判断不再适用,但不存在未完成依赖。syb-products/index.vue、shopee-products/index.vue、pdd-products/index.vue抽屉内部逻辑的任务不可并行,避免同文件冲突。固定实施方案
web/src/views/goauto/pdd-products/PddProductDetailDrawer.vue:把现有pdd-products/index.vue:63-85的抽屉内容、及其依赖的detail/related/relatedPurchase/stock相关 data、methods、computed 一并迁移进来,对外暴露v-model:open、product-idprop,内部自行请求数据,不依赖外部注入状态。web/src/views/goauto/shopee-products/ShopeeProductDetailDrawer.vue:同样迁移shopee-products/index.vue:79-130及其配套的detail/pddPicker/edit(是否一并内聚,视依赖紧密程度定)/#172 AI 建议相关状态与方法,对外暴露v-model:open、product-id、可选target-color、可选actionprop。pdd-products/index.vue、shopee-products/index.vue自身改为引用各自新组件,原有内联抽屉模板与相关 data/methods 删除,不保留重复实现。ShopeeProductDetailDrawer.vue内到 PDD 详情的跳转,改为挂载PddProductDetailDrawer.vue并原地展开,不再window.open/路由跳转。syb-products/index.vue引入这两个抽屉组件,openShopeeDetail/openPddDetail改为设置对应组件的open/product-id(及targetColor/action)而不是window.open;原有按钮路由(purchaseActionRoute等)指向的目标方法同步改造。?productId=直达整页展开详情的既有能力:pdd-products、shopee-products页面读取路由参数,给新抽屉组件传入初始product-id/open=true;同时验证页面已被 keep-alive 缓存后再次收到 query 变化的行为,不能只依赖首次created()。update:modelValue、product-updated、mapping-updated、pdd-linked、purchase-created。父页面收到事件后采用局部更新或保持原列表不刷新;不得直接调用父页面load()导致筛选、分页或选中行丢失。设计证据
现有抽屉视觉规范继续复用,不需要完整高保真原型;但“虾皮详情之上叠加 PDD 详情”属于新的交互状态。实施前至少提供标注截图或低保真图并由用户确认,覆盖:SYB 页原地打开虾皮/PDD 详情、虾皮抽屉叠加 PDD 抽屉、存在未保存草稿时关闭/切换商品确认、加载失败四种状态。工单需记录确认时间与覆盖范围。
验收标准
pdd-products、shopee-products页面自身通过?productId=直接访问,详情抽屉行为与改动前一致。beforeCloseDetail)在组件化后行为不变。?targetColor=高亮指定行、?action=link_pdd自动弹出 PDD 选择器,在组件化后行为不变。pdd-products、shopee-products页面不再各自维护一份重复的详情抽屉实现。createRequestId()和 #183 的collectionEligible行为完整保留。必测场景
pdd-products/index?productId=X、shopee-products/index?productId=X&targetColor=Y,行为与改动前一致。风险与安全门禁
this.load()等父页面副作用必须改为事件契约;否则可能直接破坏本单“来源页状态不丢”的核心目标。文档影响
无长期文档影响。 未新增或修改接口、参数、数据结构;只是前端展示层的承载方式调整(页面级路由展示 → 可复用组件嵌入展示),业务规则、启动、测试、部署、排错方式均未变化。因此跳过 Wiki 更新与同步。
状态
待确认(2026-09-01 已按评审意见更新;等待用户确认标注截图/低保真交互证据及上述组件契约后方可实施)。
实施前低保真交互证据(待用户确认)
Gitea MCP 当前会话未提供,按项目规则回退 Gitea API。以下证据复用现有 Element Plus 抽屉视觉,不改变颜色、字体、表格或业务按钮,只确认新的承载与层级行为。
状态 A:SYB 页面原地打开详情
状态 B:虾皮详情上叠加 PDD 详情
状态 C:未保存草稿时关闭或切换商品
状态 D:详情加载失败
组件交互契约
UX 校验结论:复用现有视觉;新增部分重点遵循状态保持、明确关闭路径、未保存 sheet dismissal 确认、可恢复错误、可见焦点和受控 z-index。请用户确认以上四种状态和组件契约后再实施生产代码。
用户于 2026-09-01 明确回复“确认 #186 低保真方案”。确认范围:SYB 原地打开虾皮/PDD 详情、虾皮详情上叠加 PDD 详情、未保存草稿关闭/切换确认、加载失败与重试,以及评论中列明的组件事件契约、请求代次保护、焦点/遮罩/Esc/滚动层级规则。现开始实施;基线 b31896e(已包含 #187),保留 #172、#182、#183 行为。Gitea MCP 当前会话未提供,继续回退 Gitea API。
实施完成,待验收
已按 2026-09-01 用户确认的 #186 低保真方案完成实现并推送。
实现
PddProductDetailDrawer.vue,承载 PDD 详情、编辑、关联订单采购和备货采购能力。ShopeeProductDetailDrawer.vue,承载虾皮详情、PDD 关联、规格编辑及 #172 AI 匹配,并在其上层嵌套 PDD 抽屉。window.open。productId、targetColor、action=link_pdd和 keep-alive 查询变化处理。createRequestId、#183collectionEligible;低置信度 AI 建议仍只展示原因、不预填。验证
pnpm exec eslint(5 个受影响 Vue 文件):通过。pnpm run test:unit:11 suites / 39 tests 全部通过。pnpm run build:prod:通过。git diff --check:通过。scripts/verify.ps1 -Component web:被本工单范围外web/src/views/goauto/purchase-tasks/index.vue既存混合空格/Tab 的 24 个 lint error 阻断;本次未修改该文件,目标文件 lint 与构建均通过。交付
6ab2f62 feat(web): 内联展示商品详情抽屉 (#186)origin/main工单保持开启,等待人工验收。
线上发布完成
经用户明确授权,已将 #186 最新提交发布到线上。
6ab2f6220260901-112853-6ab2f62/home/goauto/releases/20260901-112853-6ab2f62d0b0bfe0fd0d56b382728eeba6daee4708749eec872c450a646ae907e19e4205/home/goauto/releases/20260901-102000-3aab1f06ab2f62的生产 Webdist;未执行数据库迁移,未修改服务端配置、Agent APK 或当前 Agent 版本。goauto.service并重载 Nginx;服务状态active,进程工作目录指向新发布。/200、/api/v1/app-config200、Shopee/PDD 新详情抽屉分包均为 200。工单继续保持待验收。