三步解锁Windows 11性能加速:Win11Debloat系统优化完全指南
2026/7/1 10:01:21
在中小企业的日常管理中,考勤和午餐统计往往是一件琐碎但必须处理好的小事。市面上的SaaS软件要么功能过于臃肿,要么价格昂贵;而纯手工的Excel记录又容易出错且难以协同。
C:\myApp\attendance-enterprise
本文将详细复盘如何使用Node.js + SQLite + 原生前端技术,从零开始构建一个轻量、实用且具备高度定制化(如客饭统计、多Sheet导出、日历设置)的考勤系统。
最初的需求很明确:一个Web端的应用程序,能够管理员工信息,记录每日上下班时间,统计订饭人数(含客饭),并支持周视图录入和Excel月度报表导出。
但在开发过程中,我们遇到了几个典型的业务挑战:
我们将构建一个包含以下核心模块的单页应用(SPA风格):
为了保证部署简单(无需安装MySQL等大型数据库)且开发迅速,我们选用了以下技术栈:
node-xlsx最初的设计较为简单,但在处理“客饭”和“节假日”时进行了迭代:
users: 基础员工表。attendance: 记录clock_in,clock_out。meals: 记录员工个人的订饭状态。holidays: 存储节假日日期。daily_extras(新增): 专门用于存储每日手动的“客饭/额外份数”,与员工个人数据解耦。在早期版本中,我们尝试直接LEFT JOIN考勤表和订饭表,结果发现如果某人同一天有多条记录(异常数据),统计结果会成倍增加。
解决方案:采用子查询 (Subqueries)。
/* 优化后的 SQL 逻辑 */SELECTu.id,u.name,(SELECTCOUNT(*)FROMattendance aWHEREa.user_id=u.id...ANDa.clock_inISNOTNULL)asdays_worked,(SELECTCOUNT(*)FROMmeals mWHEREm.user_id=u.id...ANDm.taken=1)asmeals_countFROMusers u这样确保了考勤和订饭的计数互不干扰,绝对准确。
这是前端逻辑最复杂的模块。
date.toISOString()会导致在中国时区(UTC+8)的周日早上被转换为前一天的日期。YYYY-MM-DD字符串。视觉优先级 = 今天(蓝) > 节假日(粉) = 周末(粉) > 工作日(白)。我们在后端返回holidays数组,前端weekly.js在渲染每一列时进行比对匹配。单一的汇总表无法满足财务核对需求。我们利用node-xlsx构建了多 Sheet 输出:
最初的节假日设置是枯燥的列表。为了提升体验,我们手写了一个JS 日历组件:
经过数次迭代,系统达到了生产可用标准:
员工勾选数 + 手动输入数 = 总订饭数,数据实时入库。