修正CEO报销财务兜底与部署护栏(07-28-ceo-finance-fallback)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s

这个提交包含在:
2026-07-28 13:42:48 +08:00
父节点 37b625c5dc
当前提交 35948729cf
共修改 31 个文件,包含 980 行新增和 74 行删除
+1 -1
查看文件
@@ -8,7 +8,7 @@ export type ApprovalRoleCode =
| "finance_mgr"
| "administration"
| "hr";
export type ApprovalOwnerSelfFallbackRoleCode = "finance_mgr";
export type ApprovalOwnerSelfFallbackRoleCode = "finance" | "finance_mgr";
export type ApprovalRule = {
id: string;
+10 -6
查看文件
@@ -27,9 +27,13 @@ const ROLE_OPTIONS: Array<{ code: ApprovalRoleCode; label: string }> = [
{ code: "finance", label: "finance" },
{ code: "finance_mgr", label: "finance_mgr" },
];
const OWNER_SELF_FALLBACK_ROLE_OPTIONS = ROLE_OPTIONS.filter(
(role) => role.code === "finance_mgr",
);
const OWNER_SELF_FALLBACK_ROLE_OPTIONS: Array<{
code: ApprovalOwnerSelfFallbackRoleCode;
label: string;
}> = [
{ code: "finance", label: "财务" },
{ code: "finance_mgr", label: "财务负责人(兼容)" },
];
function formatAmount(value: string | null) {
if (!value) return "-";
@@ -47,7 +51,7 @@ export function ApprovalRulesPage() {
const [level1Role, setLevel1Role] = useState<ApprovalRoleCode>("manager");
const [level2Role, setLevel2Role] = useState<ApprovalRoleCode | "">("");
const [level3Role, setLevel3Role] = useState<ApprovalRoleCode | "">("");
const [ownerSelfFallbackRole, setOwnerSelfFallbackRole] = useState<ApprovalOwnerSelfFallbackRoleCode | "">("finance_mgr");
const [ownerSelfFallbackRole, setOwnerSelfFallbackRole] = useState<ApprovalOwnerSelfFallbackRoleCode | "">("finance");
const [enabled, setEnabled] = useState(true);
const [editOpen, setEditOpen] = useState(false);
@@ -102,7 +106,7 @@ export function ApprovalRulesPage() {
setLevel1Role("manager");
setLevel2Role("");
setLevel3Role("");
setOwnerSelfFallbackRole("finance_mgr");
setOwnerSelfFallbackRole("finance");
setEnabled(true);
setError("");
toast.success("规则已创建");
@@ -334,7 +338,7 @@ export function ApprovalRulesPage() {
</option>
))}
</select>
<p className="text-xs text-zinc-500">推荐 finance_mgr;不使用 admin。</p>
<p className="text-xs text-zinc-500">推荐财务;系统管理员不参与业务审批。</p>
</div>
<div className="flex items-center gap-2 pt-6">
@@ -899,7 +899,7 @@ async function mockWave4Apis(page: Page, options: Wave4MockOptions = {}) {
level1Role: "manager",
level2Role: null,
level3Role: null,
ownerSelfFallbackRole: "finance_mgr",
ownerSelfFallbackRole: "finance",
enabled: true,
priority: 1,
createdAt: "2026-05-29T08:00:00.000Z",
@@ -1067,6 +1067,19 @@ test("PC 财务列表使用明确动作入口", async ({ page }) => {
await expect(page.getByTestId("invoice-export-csv")).toBeVisible();
});
test("审批规则负责人本人兜底默认财务并兼容财务负责人", async ({ page }) => {
await mockWave4Apis(page);
await page.setViewportSize({ width: 1440, height: 960 });
await login(page);
await page.goto("/system/approval-rules");
const fallbackSelect = page.getByTestId("approval-rules-create-owner-self-fallback");
await expect(fallbackSelect).toHaveValue("finance");
await expect(fallbackSelect.locator('option[value="finance"]')).toHaveText("财务");
await expect(fallbackSelect.locator('option[value="finance_mgr"]')).toHaveText("财务负责人(兼容)");
await expect(page.getByText("推荐财务;系统管理员不参与业务审批。")).toBeVisible();
});
test("/payment-batches 在 768x1024 与 1024x768 下操作列可达", async ({ page }) => {
await mockWave4Apis(page);
await login(page);