## Context - 核销申请弹窗 `ApplicationFormDialog.vue` 同时服务于两处入口:账单列表页传 `presetBill`(含 `debtor_snapshot`),申请列表页传 `application`(`EmployeeCollectionApplication` 不含 `debtor_snapshot`)。 - 收款方式接口 `GET /api/admin/employee-collection-payment-methods` 支持 `keyword/page/page_size/enabled`;账单接口支持 `source_type/source_no/status/customer_id/created_from/created_to` 与 `page/page_size`。 - 「我的佣金」三页签为同一文件 `my-commission/index.vue`,接口均以 `shop_id` 作路径参数;超管账号无 `shop_id`,现有逻辑直接提示「未关联店铺」并 return。 ## Goals / Non-Goals - Goals:弹窗数据可筛选、可分页、交互体验一致;代办原因语义准确;超管可查看任意店铺的佣金数据。 - Non-Goals:不改动后端接口契约(仅使用现有查询参数);不重构账单列表页与申请列表页。 ## Decisions ### 抽屉替代对话框 使用 `ElDrawer`(`direction="rtl"`,宽度适配表单内容),保留原有表单校验、`destroy-on-close` 语义与底部操作按钮;关闭时沿用既有重置逻辑。 ### 收款方式远程搜索 改为 `ElSelect` + `filterable` + `remote`,请求 `getPaymentMethods({ page: 1, page_size: 20, keyword, enabled: true })`;输入经防抖后请求,并以请求序号丢弃过期响应,避免竞态。编辑场景需缓存已选项,保证不在首屏结果内时仍能回显名称。 ### 核销账单候选筛选与分页 沿用 `EmployeeCollectionBillQueryParams`,默认 `page_size=20`;新增与账单列表页一致的筛选表单,「店铺」映射 `customer_id` 并用 `ShopService.getShops` 远程搜索。已选账单与核销金额使用独立于当前页的集合维护,翻页/筛选不清空,核销合计覆盖所有已选账单。 ### 代办原因判定 `isActing` 改为「当前账号 `user_type === 1` 且存在非本人负责的所选账单」。责任员工取所选账单 `debtor_snapshot.account_id`,缺失时回退 `debtor_account_id`;未选择账单或无法取得责任员工信息时,超管视为代办并要求填写。 ### 我的佣金全局店铺选择 页面顶部新增 `ElSelect`,仅 `userStore.info.user_type === 1` 时展示,选项经 `ShopService.getShops` 远程搜索。`currentShopId = isSuperAdmin ? selectedShopId : userStore.info?.shop_id`;切换店铺时重置分页并刷新概览与当前页签。超管未选择时展示选择提示,而非阻断。 ## Risks / Trade-offs - 账单候选分页后,用户可能因筛选条件过窄而看不到目标账单;通过保留筛选条件与已选集合降低影响。 - 代办判定依赖 `debtor_snapshot` / `debtor_account_id` 数据完整性;数据缺失时按「代办必填」处理,偏保守但符合合规要求。 ## Migration - 无数据迁移。行为变化:超管本人办理核销申请不再要求填写代办原因。 ## Open Questions - 账单接口是否支持按 `shop_id` 过滤;现有类型仅有 `customer_id`,若后续新增需同步 `EmployeeCollectionBillQueryParams`。 - 超管在「提现资料」页签提交/替换资格时,是否应使用所选店铺 `shop_id`(预期为是)。