3.2 KiB
3.2 KiB
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(预期为是)。