OAFLOW1 支持负责人本人报销兜底审批

这个提交包含在:
2026-05-24 21:12:18 +08:00
父节点 d6ae1cff89
当前提交 2e778d3c9f
共修改 23 个文件,包含 1324 行新增和 86 行删除
+29 -16
查看文件
@@ -2,7 +2,7 @@ const Fastify = require("fastify");
const { AppError } = require("../../../src/utils/AppError");
const featureFlagState = {
const featureFlagState = vi.hoisted(() => ({
portalHome: true,
announcements: false,
presenceBoard: false,
@@ -13,7 +13,7 @@ const featureFlagState = {
projectDomain: false,
projectCommunicationLog: false,
projectClosureChecklist: false,
};
}));
vi.mock("../../../src/services/featureFlags", () => ({
FEATURE_FLAG_KEYS: {
@@ -224,13 +224,25 @@ async function buildApp(options = {}) {
},
featureFlag: {
findUnique: vi.fn(async ({ where }) => {
if (where.flag_key !== "portal_home_v1") {
const enabledByFlagKey = {
portal_home_v1: featureFlagState.portalHome,
announcements_v1: featureFlagState.announcements,
presence_board_v1: featureFlagState.presenceBoard,
weekly_report_v1: featureFlagState.weeklyReport,
employee_lifecycle_v1: featureFlagState.employeeLifecycle,
todo_board_v1: featureFlagState.todoBoard,
payment_batch_v1: featureFlagState.paymentBatch,
project_domain_v1: featureFlagState.projectDomain,
project_communication_log_v1: featureFlagState.projectCommunicationLog,
project_closure_checklist_v1: featureFlagState.projectClosureChecklist,
};
if (!Object.prototype.hasOwnProperty.call(enabledByFlagKey, where.flag_key)) {
return null;
}
return {
id: "flag-portal-home",
flag_key: "portal_home_v1",
override_mode: "force_on",
id: `flag-${where.flag_key}`,
flag_key: where.flag_key,
override_mode: enabledByFlagKey[where.flag_key] ? "force_on" : "force_off",
rollout_type: "global",
department_ids: [],
note: "",
@@ -284,16 +296,16 @@ async function buildApp(options = {}) {
app.decorate("prisma", prisma);
app.decorate("config", {
appTimezone: "Asia/Shanghai",
portalHomeEnabled: true,
announcementsEnabled: false,
presenceBoardEnabled: false,
weeklyReportEnabled: false,
employeeLifecycleEnabled: false,
todoBoardEnabled: false,
paymentBatchEnabled: false,
projectDomainEnabled: false,
projectCommunicationLogEnabled: false,
projectClosureChecklistEnabled: false,
portalHomeEnabled: featureFlagState.portalHome,
announcementsEnabled: featureFlagState.announcements,
presenceBoardEnabled: featureFlagState.presenceBoard,
weeklyReportEnabled: featureFlagState.weeklyReport,
employeeLifecycleEnabled: featureFlagState.employeeLifecycle,
todoBoardEnabled: featureFlagState.todoBoard,
paymentBatchEnabled: featureFlagState.paymentBatch,
projectDomainEnabled: featureFlagState.projectDomain,
projectCommunicationLogEnabled: featureFlagState.projectCommunicationLog,
projectClosureChecklistEnabled: featureFlagState.projectClosureChecklist,
});
app.decorate("authenticate", async (request) => {
if (!request.headers.authorization) {
@@ -509,6 +521,7 @@ describe("portal routes", () => {
pendingBatchCount: 3,
failedItemCount: 2,
riskCount: 0,
paymentBatchEnabled: true,
href: "/ap-operations",
});