fix: 优化报销制单下载与付款进度(09-08-reimbursement-payment-closeout)
这个提交包含在:
@@ -559,7 +559,7 @@ async function mockSystemActionApis(
|
||||
}
|
||||
if (!options.paymentOrderFile) throw new Error("合成制单文件未配置");
|
||||
paymentOrderExportCount += 1;
|
||||
await route.fulfill({ status: 200, contentType: "application/vnd.ms-excel", headers: { "content-disposition": "attachment; filename=payment-order-PAY-ACTION-001.xls" }, body: options.paymentOrderFile });
|
||||
await route.fulfill({ status: 200, contentType: "application/vnd.ms-excel", headers: { "content-disposition": `attachment; filename=payment-order-PAY-ACTION-001.xls; filename*=UTF-8''${encodeURIComponent("报销制单_PAY-ACTION-001.xls")}` }, body: options.paymentOrderFile });
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -838,18 +838,29 @@ test.describe("R7E 全站高风险操作二次确认", () => {
|
||||
await page.goto(`/payment-batches?id=${paymentBatchId}`);
|
||||
const actions = page.getByTestId(mobile ? "payment-batch-mobile-actions" : "payment-batch-action-panel");
|
||||
await expect(actions.getByTestId("payment-batch-action-downloadOrder")).toBeVisible();
|
||||
const sideActions = page.getByTestId("payment-batch-action-panel");
|
||||
const progress = page.getByTestId("payment-batch-processing-panel");
|
||||
await expect(progress).toBeVisible();
|
||||
expect(await progress.evaluate((element) => Boolean(element.previousElementSibling?.querySelector('[data-testid="payment-batch-action-panel"]')))).toBe(true);
|
||||
const actionBounds = await sideActions.boundingBox();
|
||||
const progressBounds = await progress.boundingBox();
|
||||
expect(actionBounds).not.toBeNull();
|
||||
expect(progressBounds).not.toBeNull();
|
||||
expect(progressBounds!.y).toBeGreaterThanOrEqual(actionBounds!.y + actionBounds!.height);
|
||||
expect(await page.evaluate(() => document.documentElement.scrollWidth <= window.innerWidth)).toBe(true);
|
||||
await page.screenshot({ path: testInfo.outputPath("before-payment-order.png"), fullPage: true });
|
||||
await actions.getByTestId("payment-batch-action-downloadOrder").click();
|
||||
const dialog = page.getByRole("dialog");
|
||||
await expect(dialog.getByRole("button", { name: "确认下载" })).toBeDisabled();
|
||||
await expect(dialog.getByRole("button", { name: "确认下载" })).toBeEnabled();
|
||||
await expect(dialog.getByRole("textbox")).toHaveCount(0);
|
||||
await dialog.getByRole("button", { name: "返回", exact: true }).click();
|
||||
expect(calls.paymentOrderReasons).toEqual([]);
|
||||
await actions.getByTestId("payment-batch-action-downloadOrder").click();
|
||||
await dialog.getByRole("textbox", { name: "制单下载原因" }).fill("合成网银制单验证");
|
||||
await expect(dialog).toContainText("文件包含完整银行账号");
|
||||
const firstDownload = page.waitForEvent("download");
|
||||
await dialog.getByRole("button", { name: "确认下载" }).click();
|
||||
const downloaded = await firstDownload;
|
||||
expect(downloaded.suggestedFilename()).toBe("payment-order-PAY-ACTION-001.xls");
|
||||
expect(downloaded.suggestedFilename()).toBe("报销制单_PAY-ACTION-001.xls");
|
||||
const downloadedPath = await downloaded.path();
|
||||
if (!downloadedPath) throw new Error("未收到合成制单文件");
|
||||
expect(readFileSync(downloadedPath).equals(paymentOrderFile)).toBe(true);
|
||||
@@ -862,12 +873,12 @@ test.describe("R7E 全站高风险操作二次确认", () => {
|
||||
if (mobile) await page.getByRole("menuitem", { name: "重新下载制单" }).click();
|
||||
else await actions.getByTestId("payment-batch-action-redownloadOrder").click();
|
||||
await expect(dialog).toContainText("请勿重复提交");
|
||||
await dialog.getByRole("textbox", { name: "制单下载原因" }).fill("合成文件重新下载验证");
|
||||
await expect(dialog.getByRole("textbox")).toHaveCount(0);
|
||||
const secondDownload = page.waitForEvent("download");
|
||||
await dialog.getByRole("button", { name: "确认下载" }).click();
|
||||
await secondDownload;
|
||||
await expect(page.getByTestId("payment-batch-detail-panel")).toContainText("已生成 2 次");
|
||||
expect(calls.paymentOrderReasons).toEqual(["合成网银制单验证", "合成文件重新下载验证"]);
|
||||
expect(calls.paymentOrderReasons).toEqual([undefined, undefined]);
|
||||
expect(calls.executePaymentBatch).toBe(0);
|
||||
expect(calls.uploadPaymentReceipt).toBe(0);
|
||||
});
|
||||
@@ -880,7 +891,7 @@ test.describe("R7E 全站高风险操作二次确认", () => {
|
||||
await page.goto(`/payment-batches?id=${paymentBatchId}`);
|
||||
await page.getByTestId("payment-batch-action-panel").getByTestId("payment-batch-action-downloadOrder").click();
|
||||
const dialog = page.getByRole("dialog");
|
||||
await dialog.getByRole("textbox", { name: "制单下载原因" }).fill("合成制单失败验证");
|
||||
await expect(dialog.getByRole("textbox")).toHaveCount(0);
|
||||
await dialog.getByRole("button", { name: "确认下载" }).click();
|
||||
await expect.poll(() => calls.paymentOrderReasons.length).toBe(1);
|
||||
await expect(dialog.getByRole("button", { name: "确认下载" })).toBeEnabled();
|
||||
@@ -906,9 +917,9 @@ test.describe("R7E 全站高风险操作二次确认", () => {
|
||||
].join(",")).evaluateAll((nodes) => nodes.map((node) => node.getAttribute("data-testid")));
|
||||
expect(sectionOrder).toEqual([
|
||||
"payment-batch-detail-panel",
|
||||
"payment-batch-processing-panel",
|
||||
"payment-batch-items-panel",
|
||||
"payment-batch-receipt-panel",
|
||||
"payment-batch-processing-panel",
|
||||
]);
|
||||
await expect(page.getByTestId("payment-batch-detail-panel")).toContainText("¥88.00");
|
||||
await expect(page.getByTestId("payment-batch-items-panel")).toContainText("¥88.00");
|
||||
@@ -921,7 +932,7 @@ test.describe("R7E 全站高风险操作二次确认", () => {
|
||||
};
|
||||
});
|
||||
expect(responsiveContract.gridColumns.split(" ").filter(Boolean)).toHaveLength(2);
|
||||
expect(responsiveContract.actionPosition).toBe("sticky");
|
||||
expect(responsiveContract.actionPosition).toBe("static");
|
||||
});
|
||||
|
||||
test("付款详情展示费用明细并支持回单在线查看,下载仍要求用途", async ({ page }) => {
|
||||
|
||||
在新工单中引用
屏蔽一个用户