R35-2 审批通知补结构化摘要
这个提交包含在:
@@ -42,6 +42,8 @@ const leaveListQuerySchema = z.object({
|
||||
scope: z.enum(["own", "all"]).optional(),
|
||||
page: z.coerce.number().int().min(1).optional(),
|
||||
pageSize: z.coerce.number().int().min(1).max(100).optional(),
|
||||
dateFrom: DATE_ONLY_SCHEMA.optional(),
|
||||
dateTo: DATE_ONLY_SCHEMA.optional(),
|
||||
});
|
||||
|
||||
const leaveBalanceQuerySchema = z.object({
|
||||
@@ -107,11 +109,25 @@ function parseLeaveListQuery(query) {
|
||||
throw buildValidationError(parsed.error.flatten());
|
||||
}
|
||||
|
||||
const dateFrom = parsed.data.dateFrom ? new Date(`${parsed.data.dateFrom}T00:00:00.000Z`) : null;
|
||||
const dateTo = parsed.data.dateTo ? new Date(`${parsed.data.dateTo}T00:00:00.000Z`) : null;
|
||||
if (dateFrom && Number.isNaN(dateFrom.getTime())) {
|
||||
throw buildValidationError({ dateFrom: "invalid" });
|
||||
}
|
||||
if (dateTo && Number.isNaN(dateTo.getTime())) {
|
||||
throw buildValidationError({ dateTo: "invalid" });
|
||||
}
|
||||
if (dateFrom && dateTo && dateFrom > dateTo) {
|
||||
throw buildValidationError({ dateTo: "must_be_after_dateFrom" });
|
||||
}
|
||||
|
||||
return {
|
||||
status: parsed.data.status,
|
||||
scope: parsed.data.scope ?? "own",
|
||||
page: parsed.data.page ?? 1,
|
||||
pageSize: parsed.data.pageSize ?? 20,
|
||||
dateFrom,
|
||||
dateTo,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -415,6 +431,14 @@ async function leaveRoutes(fastify) {
|
||||
const where = {
|
||||
...(query.status ? { status: query.status } : {}),
|
||||
...(query.scope === "all" && canViewAll ? {} : { owner_id: request.employee.id }),
|
||||
...(query.dateFrom || query.dateTo
|
||||
? {
|
||||
AND: [
|
||||
...(query.dateFrom ? [{ end_date: { gte: query.dateFrom } }] : []),
|
||||
...(query.dateTo ? [{ start_date: { lte: query.dateTo } }] : []),
|
||||
],
|
||||
}
|
||||
: {}),
|
||||
};
|
||||
|
||||
const [items, total] = await Promise.all([
|
||||
|
||||
在新工单中引用
屏蔽一个用户