实现 B-2b 统一报销工作台迁移(reimbursement-form-shared-component-migration)

这个提交包含在:
2026-09-02 07:35:01 +08:00
父节点 6bca91a360
当前提交 abdd250325
共修改 38 个文件,包含 1850 行新增和 2723 行删除
@@ -330,7 +330,12 @@ function workflowTaskDetail(status: "pending" | "completed" = "pending") {
entityType: "reimbursement",
currentStatus: isCompleted ? "approved" : "reviewing",
currentStepId: isCompleted ? null : "step-dg7",
contextData: { standardViolations: [] },
contextData: {
standardViolations: [],
budgetCheck: null,
budgetCheckStatus: "not_applicable",
parseStatus: "ready",
},
startedAt: "2026-05-12T08:00:00.000Z",
completedAt: isCompleted ? "2026-05-12T09:00:00.000Z" : null,
},
@@ -842,29 +847,6 @@ async function expectMobileDetailHeaderSpacing(page: Page, testId: string) {
expect(metrics!.gap).toBeGreaterThanOrEqual(12);
}
async function expectApprovalActionsStable(page: Page) {
const actions = await page.evaluate(() =>
Array.from(document.querySelectorAll<HTMLElement>(".mobile-approval-action-grid > button")).map((button) => {
const rect = button.getBoundingClientRect();
return {
left: rect.left,
right: rect.right,
top: rect.top,
width: rect.width,
};
}),
);
expect(actions).toHaveLength(3);
const firstTop = actions[0].top;
for (const action of actions) {
expect(Math.abs(action.top - firstTop)).toBeLessThanOrEqual(2);
expect(action.width).toBeGreaterThanOrEqual(64);
}
expect(actions[0].right).toBeLessThanOrEqual(actions[1].left + 2);
expect(actions[1].right).toBeLessThanOrEqual(actions[2].left + 2);
}
async function expectActionTileGapStable(page: Page) {
const gaps = await page.evaluate(() =>
Array.from(document.querySelectorAll<HTMLElement>("[data-testid='mobile-action-grid'] .mobile-icon-action")).map((tile) => {
@@ -999,31 +981,24 @@ test.describe("MIF7 移动信息架构整改", () => {
await mobile.page.getByTestId("mobile-pending-summary").getByRole("link").first().click();
await expect(mobile.page).toHaveURL(/\/mobile\/approvals\/task-dg7$/);
await expect(mobile.page.getByTestId("mobile-approvals-detail")).toBeVisible();
await expect(mobile.page.getByTestId("reimbursement-mobile-workspace")).toBeVisible();
await expect(mobile.page.getByTestId("reimbursement-approval-evidence")).toBeVisible();
await expect(mobile.page.getByTestId("mobile-approvals-list")).toHaveCount(0);
await expect(mobile.page.getByTestId("mobile-bottom-nav")).toHaveCount(0);
await expect(mobile.page.getByTestId("mobile-approvals-detail")).not.toContainText("业务单号");
await expect(mobile.page.getByTestId("mobile-approvals-detail")).toContainText("报销单 BX20260512001");
await expect(mobile.page.getByTestId("mobile-approvals-history")).toContainText("提交 · 测试员工");
await expect(mobile.page.getByTestId("mobile-approvals-history")).toContainText("转审 · 测试审批人");
await expect(mobile.page.getByTestId("mobile-approvals-history")).not.toContainText("transferToEmployeeId");
await expectMobileApprovalStatusSlots(mobile.page);
await expectMobileDetailHeaderSpacing(mobile.page, "mobile-approvals-detail-header");
await expectApprovalActionsStable(mobile.page);
await expect(mobile.page.getByTestId("reimbursement-mobile-workspace")).not.toContainText("业务单号");
await expect(mobile.page.getByTestId("mobile-reimbursement-detail-header")).toContainText("BX20260512001");
await expect(mobile.page.getByTestId("reimbursement-mobile-workspace")).toContainText("提交 · 测试员工");
await expect(mobile.page.getByTestId("reimbursement-mobile-workspace")).toContainText("转审 · 测试审批人");
await expect(mobile.page.getByTestId("reimbursement-mobile-workspace")).not.toContainText("transferToEmployeeId");
await expectMobileDetailHeaderSpacing(mobile.page, "mobile-reimbursement-detail-header");
await expect(mobile.page.getByTestId("mobile-approvals-sticky-actions")).toBeVisible();
await expect(mobile.page.getByTestId("mobile-approvals-approve")).toBeVisible();
await expect(mobile.page.getByTestId("mobile-approvals-approve")).toHaveCSS("min-height", "48px");
await expectNoMobileShellRegression(mobile.page);
await mobile.page.screenshot({ path: screenshotPath("manager-approval-push-detail"), fullPage: true });
await mobile.page.getByTestId("mobile-approvals-detail-header").getByRole("button", { name: "返回" }).click();
await expect(mobile.page).toHaveURL(/\/mobile$/);
await mobile.page.getByTestId("mobile-pending-summary").getByRole("link").first().click();
await expect(mobile.page).toHaveURL(/\/mobile\/approvals\/task-dg7$/);
await mobile.page.getByTestId("mobile-approval-reimbursement-detail-link").click();
await expect(mobile.page).toHaveURL(/\/mobile\/reimbursements\/reimbursement-dg7$/);
await expect(mobile.page.getByTestId("mobile-reimbursement-items")).toBeVisible();
await mobile.page.getByTestId("mobile-reimbursement-detail-header").getByRole("button", { name: "返回" }).click();
await expect(mobile.page).toHaveURL(/\/mobile\/approvals\/task-dg7$/);
await expectApprovalActionsStable(mobile.page);
await expect(mobile.page).toHaveURL(/\/mobile$/);
await mobile.page.goto("/mobile/approvals");
await expect(mobile.page.getByRole("tab", { name: "待我审批" })).toBeVisible();
@@ -1034,9 +1009,10 @@ test.describe("MIF7 移动信息架构整改", () => {
await expect(mobile.page.getByTestId("mobile-approvals-task-task-dg7-completed")).toBeVisible();
await mobile.page.getByTestId("mobile-approvals-task-task-dg7-completed").click();
await expect(mobile.page).toHaveURL(/\/mobile\/approvals\/task-dg7-completed$/);
await expect(mobile.page.getByTestId("mobile-approvals-detail-header")).toBeVisible();
await expect(mobile.page.getByTestId("reimbursement-mobile-workspace")).toBeVisible();
await expect(mobile.page.getByTestId("mobile-reimbursement-detail-header")).toBeVisible();
await expect(mobile.page.getByTestId("mobile-bottom-nav")).toHaveCount(0);
await mobile.page.getByTestId("mobile-approvals-detail-header").getByRole("button", { name: "返回" }).click();
await mobile.page.getByTestId("mobile-reimbursement-detail-header").getByRole("button", { name: "返回" }).click();
await expect(mobile.page).toHaveURL(/\/mobile\/approvals\?taskTab=completed$/);
await expect(mobile.page.getByRole("tab", { name: "已处理" })).toHaveAttribute("data-state", "active");
await mobile.page.screenshot({ path: screenshotPath("approver-task-tabs"), fullPage: true });
@@ -1130,8 +1106,8 @@ test.describe("MIF7 移动信息架构整改", () => {
await expect(mobile.page.getByTestId("mobile-bottom-nav")).toHaveCount(0);
const sectionOrder = await mobile.page.evaluate(() =>
[
"mobile-reimbursement-items",
"mobile-reimbursement-attachments",
"approval-item-evidence",
"approval-attachments",
"mobile-reimbursement-processing-progress",
].map((testId) => document.querySelector(`[data-testid='${testId}']`)?.getBoundingClientRect().top ?? -1),
);