Files
one-pipe-system/openspec/changes/update-writeoff-application-and-superadmin-commission/design.md
luo 08889d2e42
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Failing after 28m40s
fix: some
2026-09-18 18:11:53 +08:00

3.2 KiB
Raw Blame History

Context

  • 核销申请弹窗 ApplicationFormDialog.vue 同时服务于两处入口:账单列表页传 presetBill(含 debtor_snapshot),申请列表页传 applicationEmployeeCollectionApplication 不含 debtor_snapshot)。
  • 收款方式接口 GET /api/admin/employee-collection-payment-methods 支持 keyword/page/page_size/enabled;账单接口支持 source_type/source_no/status/customer_id/created_from/created_topage/page_size
  • 「我的佣金」三页签为同一文件 my-commission/index.vue,接口均以 shop_id 作路径参数;超管账号无 shop_id,现有逻辑直接提示「未关联店铺」并 return。

Goals / Non-Goals

  • Goals弹窗数据可筛选、可分页、交互体验一致代办原因语义准确超管可查看任意店铺的佣金数据。
  • Non-Goals不改动后端接口契约仅使用现有查询参数不重构账单列表页与申请列表页。

Decisions

抽屉替代对话框

使用 ElDrawerdirection="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(预期为是)。