chore(P14-8): 完成运营化与验收收口

这个提交包含在:
2026-03-06 23:24:16 +08:00
父节点 b50b084100
当前提交 d8fff0ba21
共修改 28 个文件,包含 2820 行新增和 123 行删除
+21 -18
查看文件
@@ -251,17 +251,17 @@ function mapReimbursementSummary(item) {
},
owner: item.owner
? {
id: item.owner.id,
employeeNo: item.owner.employee_no,
name: item.owner.name,
}
id: item.owner.id,
employeeNo: item.owner.employee_no,
name: item.owner.name,
}
: null,
submitter: item.submitter
? {
id: item.submitter.id,
employeeNo: item.submitter.employee_no,
name: item.submitter.name,
}
id: item.submitter.id,
employeeNo: item.submitter.employee_no,
name: item.submitter.name,
}
: null,
createdAt: item.created_at?.toISOString?.() ?? null,
updatedAt: item.updated_at?.toISOString?.() ?? null,
@@ -403,6 +403,7 @@ async function reimbursementRoutes(fastify) {
fastify.post(
"/reimbursements",
{
schema: { tags: ["Reimbursements"], summary: "Create Reimbursement" },
preHandler: fastify.requirePermission("expense.create"),
},
async (request, reply) => {
@@ -526,6 +527,7 @@ async function reimbursementRoutes(fastify) {
fastify.get(
"/reimbursements",
{
schema: { tags: ["Reimbursements"], summary: "List Reimbursements" },
preHandler: fastify.authenticate,
},
async (request, reply) => {
@@ -602,6 +604,7 @@ async function reimbursementRoutes(fastify) {
fastify.get(
"/reimbursements/:id",
{
schema: { tags: ["Reimbursements"], summary: "Get Reimbursement Detail" },
preHandler: fastify.authenticate,
},
async (request, reply) => {
@@ -714,12 +717,12 @@ async function reimbursementRoutes(fastify) {
description: item.description,
expenseType: item.expense_type
? {
id: item.expense_type.id,
code: item.expense_type.code,
name: item.expense_type.name,
category: item.expense_type.category,
enabled: item.expense_type.enabled,
}
id: item.expense_type.id,
code: item.expense_type.code,
name: item.expense_type.name,
category: item.expense_type.category,
enabled: item.expense_type.enabled,
}
: null,
})),
budgetHint,
@@ -732,10 +735,10 @@ async function reimbursementRoutes(fastify) {
})),
pendingWorkflow: pendingInstance
? {
instanceId: pendingInstance.id,
stepId: pendingInstance.current_step_id,
task: pendingTask,
}
instanceId: pendingInstance.id,
stepId: pendingInstance.current_step_id,
task: pendingTask,
}
: null,
});
},