diff --git a/src/server/routes/vehicles.ts b/src/server/routes/vehicles.ts index 56d8ca5..1572a35 100644 --- a/src/server/routes/vehicles.ts +++ b/src/server/routes/vehicles.ts @@ -690,6 +690,28 @@ app.get('/dept-stats', async (c) => { mgrMap.get(mgr)!.push(v); } + // 补齐:业务部门内所有在职用户,即使当前无车辆也需显示 + const deptNames = Array.from(deptMap.keys()).filter((d) => d !== '公务车'); + if (deptNames.length > 0) { + const placeholders = deptNames.map(() => '?').join(','); + const [userRows] = await pool.query( + `SELECT u.user_name, dep.dep_name + FROM tab_user u + LEFT JOIN tab_department dep ON dep.id = u.dep_id AND dep.is_deleted = 0 + WHERE u.is_deleted = 0 + AND dep.dep_name IN (${placeholders})`, + deptNames, + ); + for (const r of userRows as any[]) { + const dept = r.dep_name as string | null; + const mgr = r.user_name as string | null; + if (!dept || !mgr) continue; + const mgrMap = deptMap.get(dept); + if (!mgrMap) continue; + if (!mgrMap.has(mgr)) mgrMap.set(mgr, []); + } + } + // Compute attendance & avg mileage from realtime data const getMileageStats = (vList: Vehicle[]) => { const todayActive = vList.filter((v) => (todayMileageMap.get(v.plateNumber) || 0) > 0).length;