MIF7F-1/MIF7F-2/MIF7F-3 修复移动返回标签并勘误

这个提交包含在:
2026-05-13 00:55:39 +08:00
父节点 c83dbb7376
当前提交 eed8e37033
共修改 8 个文件,包含 96 行新增和 30 行删除
@@ -240,22 +240,23 @@ function buildNotifications() {
] satisfies MockNotification[];
}
function workflowTaskSummary() {
function workflowTaskSummary(status: "pending" | "completed" = "pending") {
const isCompleted = status === "completed";
return {
id: "task-dg7",
id: isCompleted ? "task-dg7-completed" : "task-dg7",
instanceId: "instance-dg7",
stepId: "step-dg7",
stepName: "主管审批",
assigneeId: "employee-dg7-manager",
assigneeRole: null,
status: "pending",
outcome: null,
status,
outcome: isCompleted ? "approved" : null,
createdAt: "2026-05-12T08:00:00.000Z",
completedAt: null,
completedAt: isCompleted ? "2026-05-12T09:00:00.000Z" : null,
workflowInstance: {
entityType: "reimbursement",
entityId: "reimbursement-dg7",
currentStatus: "reviewing",
currentStatus: isCompleted ? "approved" : "reviewing",
},
businessSummary: {
reference: "BX20260512001",
@@ -263,40 +264,41 @@ function workflowTaskSummary() {
applicantName: "测试员工",
amount: "168.00",
duration: null,
businessStatus: "reviewing",
businessStatus: isCompleted ? "approved" : "reviewing",
},
allowedActions: ["approve", "reject", "return", "transfer"],
allowedActions: isCompleted ? [] : ["approve", "reject", "return", "transfer"],
};
}
function workflowTaskDetail() {
function workflowTaskDetail(status: "pending" | "completed" = "pending") {
const isCompleted = status === "completed";
return {
task: {
id: "task-dg7",
id: isCompleted ? "task-dg7-completed" : "task-dg7",
instanceId: "instance-dg7",
stepId: "step-dg7",
stepName: "主管审批",
assigneeId: "employee-dg7-manager",
assigneeRole: null,
status: "pending",
outcome: null,
status,
outcome: isCompleted ? "approved" : null,
comment: null,
createdAt: "2026-05-12T08:00:00.000Z",
completedAt: null,
completedAt: isCompleted ? "2026-05-12T09:00:00.000Z" : null,
},
workflowInstance: {
id: "instance-dg7",
entityType: "reimbursement",
currentStatus: "reviewing",
currentStepId: "step-dg7",
currentStatus: isCompleted ? "approved" : "reviewing",
currentStepId: isCompleted ? null : "step-dg7",
contextData: { standardViolations: [] },
startedAt: "2026-05-12T08:00:00.000Z",
completedAt: null,
completedAt: isCompleted ? "2026-05-12T09:00:00.000Z" : null,
},
reimbursement: {
id: "reimbursement-dg7",
formNumber: "BX20260512001",
status: "reviewing",
status: isCompleted ? "approved" : "reviewing",
reimbursementDate: "2026-05-12",
totalAmount: "168.00",
description: "差旅报销",
@@ -306,7 +308,7 @@ function workflowTaskDetail() {
leaveRequest: null,
purchaseRequest: null,
travelRequest: null,
allowedActions: ["approve", "reject", "return", "transfer"],
allowedActions: isCompleted ? [] : ["approve", "reject", "return", "transfer"],
history: [],
};
}
@@ -543,11 +545,12 @@ async function mockApis(page: Page, role: RolePreset, notifications: MockNotific
}
if (pathName === "/api/workflow/tasks") {
const workflowStatus = url.searchParams.get("status") === "completed" ? "completed" : "pending";
await fulfillJson(route, {
page: 1,
pageSize: Number(url.searchParams.get("pageSize") ?? 100),
total: role === "manager" ? 1 : 0,
items: role === "manager" ? [workflowTaskSummary()] : [],
items: role === "manager" ? [workflowTaskSummary(workflowStatus)] : [],
});
return;
}
@@ -557,6 +560,11 @@ async function mockApis(page: Page, role: RolePreset, notifications: MockNotific
return;
}
if (pathName === "/api/workflow/tasks/task-dg7-completed") {
await fulfillJson(route, workflowTaskDetail("completed"));
return;
}
if (pathName === "/api/workflow/approvers") {
await fulfillJson(route, { page: 1, pageSize: 100, total: 0, items: [] });
return;
@@ -861,6 +869,16 @@ test.describe("MIF7 移动信息架构整改", () => {
await mobile.page.goto("/mobile/approvals");
await expect(mobile.page.getByRole("tab", { name: "待我审批" })).toBeVisible();
await expect(mobile.page.getByRole("tab", { name: "已处理" })).toBeVisible();
await mobile.page.getByRole("tab", { name: "已处理" }).click();
await expect(mobile.page).toHaveURL(/\/mobile\/approvals\?taskTab=completed$/);
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("mobile-bottom-nav")).toHaveCount(0);
await mobile.page.getByTestId("mobile-approvals-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 });
} finally {
await mobile.context.close();
@@ -922,6 +940,17 @@ test.describe("MIF7 移动信息架构整改", () => {
await mockApis(mobile.page, "employee", notifications);
await loginForMobile(mobile.page, "employee");
await mobile.page.goto("/mobile/reimbursements");
await mobile.page.getByTestId("mobile-reimbursements-tab-approved").click();
await expect(mobile.page).toHaveURL(/\/mobile\/reimbursements\?status=approved$/);
await mobile.page.getByTestId("mobile-reimbursement-card").first().getByRole("link", { name: "查看详情" }).click();
await expect(mobile.page).toHaveURL(/\/mobile\/reimbursements\/reimbursement-dg7$/);
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-reimbursement-detail-header").getByRole("button", { name: "返回" }).click();
await expect(mobile.page).toHaveURL(/\/mobile\/reimbursements\?status=approved$/);
await expect(mobile.page.getByTestId("mobile-reimbursements-tab-approved")).toHaveAttribute("data-state", "active");
await mobile.page.goto("/mobile/reimbursements/reimbursement-dg7");
await expect(mobile.page.getByTestId("mobile-reimbursement-detail-header")).toBeVisible();
await expect(mobile.page.getByTestId("mobile-bottom-nav")).toHaveCount(0);