feat: 商业保险新增员工汇总Tab
- 后端新增 /commercial-insurance/employee-summary 接口,按员工维度汇总商险 - 前端商业保险页面新增Tab切换:方案管理 + 员工汇总 - 员工汇总展示每人参保项、年保费合计、保额合计,底部带总计行
This commit is contained in:
@@ -129,4 +129,43 @@ router.post('/enrollments/:enrollmentId/terminate', async (req: AuthRequest, res
|
||||
} catch (err) { next(err) }
|
||||
})
|
||||
|
||||
// 员工商险汇总(按员工维度)
|
||||
router.get('/employee-summary', async (req: AuthRequest, res: Response, next: NextFunction) => {
|
||||
try {
|
||||
const enrollments = await prisma.commercialInsuranceEnrollment.findMany({
|
||||
where: { orgId: req.user!.orgId, status: 'ACTIVE' },
|
||||
include: {
|
||||
employee: { select: { id: true, name: true, department: true } },
|
||||
plan: { select: { id: true, name: true, type: true, provider: true, coverageAmount: true } },
|
||||
},
|
||||
})
|
||||
const summary: Record<string, any> = {}
|
||||
for (const e of enrollments) {
|
||||
if (!summary[e.employeeId]) {
|
||||
summary[e.employeeId] = {
|
||||
employeeId: e.employeeId,
|
||||
name: e.employee.name,
|
||||
department: e.employee.department,
|
||||
insurances: [],
|
||||
totalPremium: 0,
|
||||
totalCoverage: 0,
|
||||
}
|
||||
}
|
||||
summary[e.employeeId].insurances.push({
|
||||
planId: e.planId,
|
||||
planName: e.plan.name,
|
||||
type: e.plan.type,
|
||||
provider: e.plan.provider,
|
||||
premium: e.premium,
|
||||
coverageAmount: e.plan.coverageAmount,
|
||||
effectiveFrom: e.effectiveFrom,
|
||||
effectiveTo: e.effectiveTo,
|
||||
})
|
||||
summary[e.employeeId].totalPremium += e.premium
|
||||
summary[e.employeeId].totalCoverage += e.plan.coverageAmount
|
||||
}
|
||||
res.json({ success: true, data: Object.values(summary) })
|
||||
} catch (err) { next(err) }
|
||||
})
|
||||
|
||||
export default router
|
||||
|
||||
Reference in New Issue
Block a user