修复:支持员工按完整目标号码批量叫号
问题:批量叫号仅按数量输入,员工无法直接叫到 0002x 号段。 实现:允许输入完整目标号码,按待叫队列换算连续数量,保持 FIFO,并拦截非法目标和超上限操作。 验证:前端 68 项测试、类型检查和生产构建通过。
This commit is contained in:
1 parent
4405bf96f7
commit
815085e98b
2 files changed
+91
-4
No files matched your search
@@ -239,6 +239,55 @@ describe("StaffPage scene-focused H5", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("can call through a full target number beyond the 0001x range", async () => {
|
||||
const callNext = vi.spyOn(api, "callNext").mockResolvedValueOnce({
|
||||
batch: {
|
||||
id: "batch-2",
|
||||
batch_number: 5,
|
||||
status: "CALLED",
|
||||
called_at: "2026-07-10T09:03:00Z",
|
||||
ticket_count: 13,
|
||||
people_count: 28,
|
||||
tickets: [{ id: "called-25", ticket_number: "00025", status: "CALLED", party_size: 2 }],
|
||||
},
|
||||
revision: 9,
|
||||
device_results: [{ channel: "SIMULATOR", status: "SUCCESS" }],
|
||||
});
|
||||
|
||||
try {
|
||||
renderScene("/staff");
|
||||
const targetInput = screen.getByRole("textbox", { name: "叫到号码" });
|
||||
expect(targetInput).toHaveValue("00014");
|
||||
|
||||
fireEvent.change(targetInput, { target: { value: "00025" } });
|
||||
fireEvent.click(screen.getByRole("button", { name: "批量叫号" }));
|
||||
|
||||
await waitFor(() => expect(callNext).toHaveBeenCalledWith("project-1", 8, "TICKET", 13, expect.any(String)));
|
||||
} finally {
|
||||
callNext.mockRestore();
|
||||
}
|
||||
});
|
||||
|
||||
it("rejects a target outside the waiting queue or beyond the configured batch limit", () => {
|
||||
const callNext = vi.spyOn(api, "callNext");
|
||||
try {
|
||||
renderScene("/staff");
|
||||
const targetInput = screen.getByRole("textbox", { name: "叫到号码" });
|
||||
|
||||
fireEvent.change(targetInput, { target: { value: "00040" } });
|
||||
fireEvent.click(screen.getByRole("button", { name: "批量叫号" }));
|
||||
expect(callNext).not.toHaveBeenCalled();
|
||||
expect(screen.getByRole("alert")).toHaveTextContent("请输入当前待叫队列中的完整目标号码");
|
||||
|
||||
fireEvent.change(targetInput, { target: { value: "00033" } });
|
||||
fireEvent.click(screen.getByRole("button", { name: "批量叫号" }));
|
||||
expect(callNext).not.toHaveBeenCalled();
|
||||
expect(screen.getByRole("alert")).toHaveTextContent("从 00013 叫到 00033 共 21 个号码,超过单次上限 20 个");
|
||||
} finally {
|
||||
callNext.mockRestore();
|
||||
}
|
||||
});
|
||||
|
||||
it("updates number indicators after creation without showing a success card", async () => {
|
||||
vi.spyOn(api, "createTicket").mockResolvedValueOnce({
|
||||
ticket: { id: "ticket-30", ticket_number: "00030", status: "WAITING", party_size: 3 },
|
||||
|
||||
Reference in new issue
Block a user