## ADDED Requirements ### Requirement: 核销申请弹窗抽屉与收款方式远程搜索 创建/修改核销申请弹窗 MUST 以从右侧滑出的抽屉形式呈现,并 MUST 保留表单校验、关闭时重置与底部提交/取消操作。收款方式 MUST 改为远程搜索下拉:请求 MUST 携带 `keyword`、`page_size` 为 `20`、`enabled` 为 `true`,仅展示启用项;输入关键字 MUST 经防抖后发起请求,并发时 MUST 丢弃过期响应。编辑已提交申请时,MUST 能回显并保留当前已选收款方式,即使其不在当前搜索结果内。 #### Scenario: 打开弹窗 - **GIVEN** 用户点击创建或修改核销申请 - **WHEN** 弹窗打开 - **THEN** 弹窗 MUST 从右侧滑出 - **AND** MUST 保留表单字段、校验与底部操作 #### Scenario: 收款方式远程搜索 - **GIVEN** 用户打开收款方式下拉 - **WHEN** 输入关键字 - **THEN** 前端 MUST 以防抖方式调用收款方式接口,携带 `keyword`、`page_size=20`、`enabled=true` - **AND** 仅展示接口返回的启用项 - **AND** 过期请求的响应 MUST NOT 覆盖最新结果 #### Scenario: 编辑场景回显已选收款方式 - **GIVEN** 正在修改的申请已选择某收款方式且其不在首屏搜索结果中 - **WHEN** 弹窗初始化 - **THEN** 下拉 MUST 回显该收款方式名称 - **AND** MUST NOT 因搜索而清空已选值 ### Requirement: 核销账单候选筛选与分页 核销申请弹窗的核销账单候选列表 MUST 默认以 `page_size` 为 `20` 加载,MUST NOT 固定请求 100 条。候选列表 MUST 支持按来源(`source_type`)、来源单号(`source_no`)、核销状态(`status`)、店铺(`customer_id`)与创建时间(`created_from` / `created_to`)筛选,店铺筛选 MUST 使用远程搜索。筛选条件变化 MUST 回到第 1 页重新加载。翻页 MUST NOT 清空已选账单与已填核销金额;当前页之外已选账单 MUST 仍计入核销合计并随申请提交。 #### Scenario: 默认分页加载 - **GIVEN** 用户打开核销申请弹窗 - **WHEN** 账单候选列表加载 - **THEN** 请求 MUST 使用 `page_size=20` - **AND** MUST 提供分页或加载更多入口以访问后续数据 #### Scenario: 按条件筛选账单 - **GIVEN** 用户已打开核销申请弹窗 - **WHEN** 其填写来源、来源单号、核销状态、店铺或起止时间中的任意条件 - **THEN** 前端 MUST 以对应查询参数从第 1 页重新加载候选账单 - **AND** 店铺 MUST 通过远程搜索选择 #### Scenario: 翻页保持已选 - **GIVEN** 用户已在当前页勾选账单并填写核销金额 - **WHEN** 其翻页后返回或直接提交 - **THEN** 已勾选账单与核销金额 MUST 保持不变 - **AND** 核销合计 MUST 包含所有页已选账单 ### Requirement: 代办原因按所选账单责任员工判定 核销申请的 `acting_reason` MUST 仅在「当前登录账号为超级管理员(`user_type` 为 `1`)且存在非本人负责的所选账单」时展示并必填。责任员工 MUST 取自账单 `debtor_snapshot.account_id`,缺失时回退 `debtor_account_id`。当所选账单全部归属于当前登录账号时,前端 MUST NOT 展示且 MUST NOT 提交 `acting_reason`;当尚未选择任何账单或无法取得责任员工信息时,超级管理员 MUST 视为代办并要求填写。 #### Scenario: 超管为他人代办需填原因 - **GIVEN** 当前登录账号为超级管理员 - **WHEN** 其选择责任员工 `account_id` 不等于当前账号 `id` 的账单 - **THEN** 代办原因字段 MUST 展示且必填 - **AND** 未填写即提交 MUST 被阻止 #### Scenario: 超管本人办理无需原因 - **GIVEN** 当前登录账号为超级管理员且所选账单全部由其本人负责 - **WHEN** 其提交核销申请 - **THEN** 代办原因字段 MUST NOT 展示 - **AND** 提交载荷 MUST NOT 包含 `acting_reason` #### Scenario: 非超管不判定代办 - **GIVEN** 当前登录账号不是超级管理员 - **WHEN** 其创建或重新提交核销申请 - **THEN** 代办原因字段 MUST NOT 展示