# TM **Repository Path**: eshax/tm ## Basic Information - **Project Name**: TM - **Description**: task manager - **Primary Language**: HTML - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-11-08 - **Last Updated**: 2026-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 鹤童版块任务管理系统 面向院内各版块(默认包括照护、医疗、餐饮、物业、社工、商业、品宣、教育、评估、社区、公益、综合办公室 12 个)的周工作管理系统。管理员可在“版块管理”中新增、修改、停用或删除版块(模板)。 系统以各版块的**周 / 月 / 年母板**为源,自动生成每周工作清单,按“**负责人确认初稿 → 管理员审核定稿 → 管理员发布**”的流程执行;支持材料提交与审核、未完成督办、人员轨迹、奖罚与小目标、站内通知,以及 Word / PDF 导出。数据保存在本机 SQLite,浏览器访问,无需安装客户端。 ## 功能特性 - **周清单自动生成**:按周 / 月 / 年母板生成周一至周日任务,自动去重,支持单版块或全部版块生成。 - **通用(集团)工作**:集团事项统一放在“通用”母板,自动下沉到全部版块;版块内只读,可从单个版块删除。 - **完整审核流程**:草稿 → 待负责人确认 → 待管理员审核 → 已定稿 → 已发布 → 已关闭。 - **任务维护**:负责人、管理员助手、管理员均可增删改任务;支持分类、备注、需交表标记。负责人在确认初稿时只能修改或删除自己新增的任务,母板生成的任务和管理员设置的任务为只读。 - **材料提交与审核**:需交表的任务上传工作表格,无需交表的任务填写完成说明即可提交;提交后进入“待审核”,管理员确认后才算“已完成”。已提交的材料可重新提交。 - **附件在线预览**:材料文件名为蓝色链接,图片和 Word 文档可直接在浏览器预览,PDF / 文本同理;ZIP 等无法预览的文件点击后直接下载。 - **附件管理**:按标签与任务标题检索历次提交的附件;负责人仅见本版块,管理员可为指定负责人授权其他版块。 - **奖罚与小目标栏目**:管理员可在“系统设置”中新增、改名、删除栏目并调整顺序;未发布清单自动同步,已发布清单保留发布时的栏目和内容。 - **未完成督办**:截止后未完成任务自动转逾期并生成督办,也可手动添加;管理员可一键提醒负责人,负责人可直接提交材料或填写完成说明;任务完成后自动消除对应督办。 - **奖罚与小目标**:工作奖罚、进转退亡奖罚、善终奖罚、院长小目标、重点目标、口号。 - **人员轨迹**:按人员名单维护每周周一至周日的排班 / 轨迹,班次从系统设置的选项下拉快速选择。 - **拆分小项**:一条内容含多个事项时,一键按顿号、分号或换行拆成多条任务或母板条目。 - **账号安全**:普通用户可自行修改密码;管理员可在“用户管理”查看普通用户明文密码并重置。 - **站内通知**:发送确认、定稿、发布、材料、截止提醒等消息。 - **导出**:周清单预览、Word(`.docx`)、PDF,版式参照 44/45 周样板。 - **定时任务**:自动生成下周清单、发布提醒、材料提醒、截止处理。 - **版块(模板)管理**:管理员可新增、修改、停用或删除版块;新增后会自动出现在周月年母板与周工作清单的版块选择中。 - **其他**:操作审计、数据库备份、系统设置、移动端自适应。 ## 技术栈 | 层 | 技术 | | --- | --- | | 运行时 | Node.js 22.5+(推荐 24),Windows 本地运行 | | 后端 | Express 5 + 内置 `node:sqlite` | | 前端 | 原生 HTML / CSS / JavaScript 单页应用,无需构建 | | 存储 | SQLite(`data/app.db`)+ 本地附件目录 | | 导出 | `docx` 生成 Word;Chrome / Edge 无头模式生成 PDF | ## 快速开始 1. 安装 [Node.js](https://nodejs.org/) 22.5 或更高版本(推荐 Node.js 24)。 2. 双击 `start.bat`:首次运行会自动安装依赖、启动服务并打开浏览器。 3. 也可手动运行: ```bat npm install npm start ``` 默认访问地址: - 端口被占用时会自动尝试 `3001`、`3002`…(未显式设置 `PORT` 时)。 - 可通过环境变量指定监听地址:`set PORT=8080 && set HOST=0.0.0.0 && npm start`。 - 首次启动会自动建库,写入 12 个版块、照护 / 品宣 / 综合办公室 / 社工 / 教育 / 餐饮 / 评估 / 公益 / 医疗 / 物业 / 商业 / 社区母板、44/45 周样板数据及演示人员。 - 旧数据库升级时会自动导入各版块周 / 月 / 年母板;标签为“集团”的条目会进入“通用”版块,并同步到尚未发布的周清单。 - 各版块内置母板条数:综合办公室 周 16 / 月 101 / 年 91;社工 周 5 / 月 15 / 年 12;教育 周 4 / 月 8 / 年 8;餐饮 周 9 / 月 22 / 年 13;评估 周 7 / 月 21 / 年 6;公益 周 5 / 月 15 / 年 30;医疗 周 21 / 月 40 / 年 37;物业 周 9 / 月 22 / 年 18;商业 周 7 / 月 4 / 年 5;社区 周 8 / 月 27 / 年 31。 ### 独立运行版(服务器无需安装 Node) ```bat npm install npm run build ``` 构建完成后,`dist/` 目录可直接复制到服务器运行: - `hetong-task-manager.exe`:已注入 Node 运行时和全部依赖,无需安装 Node.js。 - `public/`:前端页面资源,必须与可执行文件放在同一级。 - `start.bat`:双击启动,默认监听 `0.0.0.0:3000`。 - `data/`:运行时数据库、附件和导出文件,升级时请备份此目录。 - `部署说明.txt`:服务器部署注意事项。 `dist/` 和构建中间目录 `build/` 已加入 `.gitignore`,不会提交到仓库。当前 Windows 构建产物面向 Windows x64。 ### 构建产物对比 | 产物 | 体积 | 服务器要求 | 适用场景 | | --- | ---: | --- | --- | | Windows 独立版 | 约 91 MB | 无需 Node | Windows x64 | | Ubuntu 独立版 | 约 121 MB | 需 PM2(PM2 依赖 Node) | Linux x64,单文件二进制 | | 单文件 `.mjs` | 约 3.4 MB | Node.js 22.5+ / PM2 | Ubuntu + PM2,**推荐** | > 独立二进制约 121 MB,是因为把完整的 Node 运行时一起打包进去了;应用代码和依赖本身只有约 3.4 MB。服务器已经安装 Node/PM2 时,建议使用单文件 `.mjs` 版本。 ### Ubuntu / PM2 单文件版(推荐) ```bash npm install npm run build:mjs ``` 生成: - `dist/mjs/hetong-task-manager.mjs`:**单一文件**,已包含服务端依赖和前端资源。 - `dist/mjs/ecosystem.config.cjs`:PM2 配置(可选)。 - `dist/hetong-task-manager-mjs.tar.gz`:约 750 KB 的压缩包。 部署: ```bash tar -xzf hetong-task-manager-mjs.tar.gz cd mjs pm2 start ecosystem.config.cjs pm2 save pm2 startup ``` 也可以不用 PM2 配置,直接运行: ```bash HOST=0.0.0.0 PORT=3000 node hetong-task-manager.mjs ``` - 不需要 `node_modules`,不需要 `public` 目录。 - `data/` 会自动创建在 `.mjs` 文件所在目录。 - 服务器需要 Node.js 22.5+(推荐 24),因为使用了内置 `node:sqlite`。 ### Ubuntu / PM2 独立二进制版 在 Ubuntu(或 Windows 下的 WSL)中执行: ```bash npm install npm run build:linux ``` 生成: - `dist/ubuntu/hetong-task-manager`:Linux x64 独立可执行文件,已内置 Node 运行时。 - `dist/ubuntu/ecosystem.config.cjs`:PM2 配置。 - `dist/ubuntu/start.sh` / `stop.sh`:PM2 启动 / 停止脚本。 - `dist/ubuntu/public/`:前端资源。 - `dist/ubuntu/data/`:运行时数据目录。 - `dist/hetong-task-manager-ubuntu-x64.tar.gz`:可直接上传服务器的压缩包。 Ubuntu 服务器需安装 Node.js 22.5+(推荐 24)和 PM2;PM2 本身依赖 Node.js。部署步骤: ```bash # 上传并解压压缩包后 cd hetong-task-manager-ubuntu chmod +x start.sh stop.sh hetong-task-manager ./start.sh ``` 如需修改端口,编辑 `ecosystem.config.cjs` 中的 `PORT` / `HOST`,然后执行 `pm2 restart hetong-task-manager --update-env`。升级时保留 `data/` 目录即可保留数据库和附件。 ## 演示账号 | 角色 | 用户名 | 密码 | 说明 | | --- | --- | --- | --- | | 管理员 | `admin` | `admin123` | 全部权限:母板、定稿、发布、审核、设置 | | 管理员助手 | `office` | `123456` | 可编辑周清单文字、添加任务、维护人员,并可在审核中心退回不合格材料(不能通过) | | 照护负责人 | `zhaohu` | `123456` | 仅照护版块,确认初稿、提交材料 | | 其他版块负责人 | `yiliao` / `canyin` / `wuye` / `shegong` / `shangye` / `pinxuan` / `jiaoyu` / `pinggu` / `shequ` / `gongyi` / `bangongshi` | `123456` | 各自版块 | > 默认账号仅用于演示。上线前请到“用户管理”修改密码,并按需停用不需要的账号。 > > 观察者账号不预置,管理员可在“用户管理 → 新增账号”中选择“观察者”并绑定版块。 ## 密码管理 - **普通用户自行修改**:登录后点击左下角用户卡片旁的钥匙按钮,输入原密码和新密码即可修改。 - **管理员查看**:“用户管理”列表中的“密码(明文)”列会显示管理员助手和版块负责人的当前密码;管理员账号自身密码不展示。 - **管理员重置**:在“用户管理”点击普通用户的“重置密码”,设置新密码后立即生效,并同步显示明文。 - 修改或重置后,明文记录会同步更新;升级前使用非默认密码的旧账号显示“未记录”,重置一次后即可看到。 - 明文密码保存在本机数据库 `data/app.db` 中,仅用于内部账号管理。请限制 `data/` 目录访问权限,不要将数据库文件提交到代码仓库或发送到外部。 ## 角色与权限 | 操作 | 管理员 | 管理员助手 | 版块负责人 | 观察者 | | --- | :-: | :-: | :-: | :-: | | 查看全部版块 | ✓ | ✓ | 仅本版块 | 仅本版块 | | 生成周清单 / 发送确认 / 定稿 / 发布 | ✓ | — | — | — | | 增删改任务 | 仅未发布清单 | 仅未发布清单 | 仅本版块、确认阶段、仅本人添加的任务 | 只读 | | 维护奖罚、小目标等文字 | 仅未发布清单 | 仅未发布清单 | — | 只读 | | 提交材料 / 完成任务 | — | — | 仅本版块、已发布清单 | 只读 | | 审核材料 / 确认任务完成 | ✓ | 只读 | — | 只读 | | 查看附件管理 | 全部版块 | 全部版块 | 本版块 + 被授权版块 | 仅本版块 | | 附件跨版块授权 | ✓ | — | — | — | | 维护周 / 月 / 年母板 | ✓ | — | 查看本版块 | 查看本版块 | | 维护“通用”母板 | ✓ | — | — | — | | 版块内删除通用任务 | ✓ | ✓ | 仅本版块、确认阶段 | 只读 | | 人员轨迹、督办、通知 | ✓ | ✓ | 本版块 / 本人 | 本版块 / 本人(只读) | | 修改自己的密码 | ✓ | ✓ | ✓ | ✓ | | 查看 / 重置普通用户密码 | ✓ | — | — | — | | 版块、用户、系统设置 | ✓ | — | — | — | 负责人确认初稿时,只能修改或删除自己新增的任务;母板生成的任务和管理员设置的任务不能修改或删除。 清单发布后会锁定编辑,管理员/管理员助手不能再增删改任务、奖罚文字或人员轨迹;需要修改时先执行“退回”。提交材料和完成任务属于版块负责人的操作,管理员在“审核中心”审核材料或完成说明。 管理员助手可进入审核中心的“材料审核”,协助管理员退回不合格材料;只能退回,不能审核通过,也不能执行初稿定稿、发布等管理员操作。 观察者用于只读查阅:只能查看其绑定版块的周清单、母板、附件、督办和人员信息,不能新增、修改、删除、审核、定稿、发布或提交材料。系统会在后端拦截观察者的所有写操作,仅保留退出登录、修改本人密码和通知已读。 ## 业务流程 ```text 系统生成 → 负责人确认初稿 → 管理员审核定稿 → 管理员发布 → 执行与提交材料 → 管理员审核 ``` 1. **系统生成**:管理员在“工作台 / 周工作清单”点击“生成周清单”,选择周一起始日期,从周 / 月 / 年母板生成任务,可立即发送给负责人确认。 - 每天任务清单按来源显示不同背景色,便于一眼区分:周工作为蓝色、月工作为黄色、年工作为紫色、手动(非固定)为绿色;逾期任务统一显示浅红色。 - 每天任务顺序依次为:手动(非固定)→ 周工作 → 月工作 → 年工作。 - 任务筛选栏右侧提供颜色图例,并可按“全部周期”筛选周 / 月 / 年 / 非固定任务。 2. **负责人确认初稿**:负责人查看本版块清单,增删改任务后点击“提交初稿”。 3. **管理员审核定稿**:管理员在“审核中心 → 初稿审核”查看、增删改任务并定稿;负责人未提交时也可强制定稿。 4. **管理员发布**:定稿后在“审核中心 → 待发布”点击发布。发布后负责人可提交材料;未发布的清单只用于编辑确认,不显示“提交材料”和“确认完成”按钮。 5. **材料提交与审核**:需交表的任务上传工作表格后状态变为“待审核”;管理员审核通过后任务才变为“已完成”,并自动消除对应督办。 6. **未完成督办**:截止时间后仍未完成的待办任务自动转为逾期并生成督办;管理员、管理员助手、负责人也可手动添加督办事项。 ### 通用(集团)工作 - 在“周月年母板”的版块下拉框底部选择“通用”(与其他版块以分割线区分),统一维护集团事项。 - 通用母板中的周 / 月 / 年内容会在生成周清单时自动进入**全部版块**,并排在当日版块任务之前。 - 通用任务在各版块中带“通用”标识,内容为只读,不能编辑或拆分;可从某个版块单独删除,不影响通用母板和其他版块。 - 系统升级时会自动把原有分类为“集团”的母板条目迁入“通用”,并为尚未定稿的周清单补齐通用任务。 ### 附件管理 - 左侧菜单“附件管理”汇总各版块周清单任务提交的材料,以列表形式展示,默认包含全部历史周。 - 可按“标签”(任务分类,如会议、工作)、“任务标题”和周次过滤;例如选择“会议”并输入“14:00院舍周会”,即可看到 44、45、46 周等每周该任务提交的附件。 - 管理员和管理员助手可查看全部版块;版块负责人只能查看本版块的附件。 - 管理员可在“附件管理 → 授权管理”中为某个负责人新增或解除跨版块查看授权。授权仅影响附件的查看与下载,不改变周清单、任务编辑等其他权限。 - 已被替换的旧版本附件不在列表中重复展示,最终版本和审核中版本均可下载。 ### 状态说明 | 周清单状态 | 含义 | | --- | --- | | 草稿 | 已生成,尚未发送 | | 待负责人确认 | 已发送给负责人 | | 待管理员审核 | 负责人已提交初稿 | | 已定稿 | 管理员已确认内容,等待发布 | | 已发布 | 可执行、可提交材料 | | 已关闭 | 不再变更 | | 任务状态 | 含义 | | --- | --- | | 待完成 | 尚未提交材料 / 未完成 | | 待审核 | 材料已提交,等待管理员审核 | | 已完成 | 管理员已确认完成 | | 已逾期 | 超过截止时间仍未完成 | | 已取消 | 任务作废 | ## 周 / 月 / 年母板规则 - **周工作**:按周一至周日维护,每周重复生成。 - **月工作**:按 1-31 日维护,只在对应日期的所在周生成。 - **年工作**:按 1-12 月维护,只在包含每月 1 日的那一周生成。 - 每条母板可标记“需交表”,生成到周清单后即要求上传工作表格。 - 母板保存、复制或导入后,所有**尚未发布**(草稿、待确认、负责人已确认、已定稿)的周清单会自动同步母板内容;已发布或已关闭的清单保持不变,负责人手动添加的任务不会丢失。 - 一条内容包含多个事项时,可在周清单任务或母板条目上点击“拆分”,按顿号 / 分号 / 换行拆成多条;拆分前可逐项手动调整。已提交材料或已完成的任务不能拆分。 - 支持从其他版块复制母板,以及按行批量粘贴导入: - `分类 | 内容` - `分类:内容` - 行尾加 `| 需交表` > 院管委样板内容已合并到“照护”版块母板;品宣、综合办公室、社工、教育、餐饮、评估、公益、医疗、物业、商业、社区的周 / 月 / 年内容已内置到对应版块,标签为“集团”的条目位于“通用”版块。第 44、45 周为样板周,保留原始标题“鹤童院管委…”。 ## 定时任务 服务运行期间会执行以下后台任务,可在“系统设置”中启停或调整时间: | 时间 | 任务 | | --- | --- | | 每周日 07:00 | 自动生成下周清单并发送负责人确认 | | 每周日 12:00 | 提醒管理员审核定稿与发布 | | 每天 | 提醒负责人待提交材料 | | 每周六 22:00 | 处理逾期任务并生成督办 | - 截止时间、生成时间、发布星期等均可在“系统设置”调整。 - 后台任务只在服务进程运行时生效;电脑关机或程序关闭期间不会执行。 - 可在“系统设置”中点击“立即运行定时任务”手动补跑。 ## Word / PDF 导出 在“周工作详情”右上角可预览、导出 Word(`.docx`)和 PDF。 - 导出内容包含:标题、口号、奖罚、小目标、周一至周日任务表、人员轨迹。 - 版式参照 44/45 周样板。 - PDF 通过本机 Chrome 或 Edge 无头模式生成,请确保已安装其中任一浏览器。 - 附件上传大小上限为 20MB。 ## 数据与备份 | 内容 | 位置 | | --- | --- | | 数据库 | `data/app.db` | | 上传材料 | `data/uploads/` | | 临时导出 | `data/exports/`、`data/tmp/` | | 会话密钥 | `data/session-secret.txt` | - 管理员可在“系统设置”点击“下载数据库备份”获取当前数据库副本。 - 建议定期备份整个 `data/` 目录。 - 恢复时先停止服务,用备份文件替换 `data/app.db`,再重新启动。 - `data/` 已被 `.gitignore` 排除,不会提交到代码仓库。 ## 系统设置项 | 设置 | 默认值 | 说明 | | --- | --- | --- | | 机构名称 | 鹤童 | 用于导出标题与页脚 | | 发布星期 / 时间 | 周日 12:00 | 生成与发布提醒基准 | | 截止星期 / 时间 | 周六 22:00 | 逾期与督办处理时间 | | 自动生成 | 开启 | 周日自动生成下周清单 | | 生成时间 | 07:00 | 自动生成时刻 | | 自动发布 | 关闭 | 默认由管理员手动发布 | | 周号偏移 | +1 | 与样板文档一致,例如 2026-10-19 为第 44 周 | | 人员轨迹班次选项 | 休、早班、中班、晚班、夜班等 | 周清单“人员轨迹”下拉框的快捷选项,可增删排序 | | 定时任务总开关 | 开启 | 关闭后不执行任何后台任务 | ## 目录结构 ```text server/ 后端(Express + node:sqlite) routes/ 接口路由(认证、版块、母板、周清单、附件、导出等) db.js 数据库结构与设置读写 seed.js 初始化数据 pinxuan-master.js 品宣周 / 月 / 年母板及升级导入 builtin-master-data.js 综合办公室、社工、教育、餐饮、评估、公益、医疗、物业、商业、社区母板数据 section-masters.js 内置版块母板导入与“集团”条目去重 migrations.js 通用(集团)内容迁移与历史周清单补齐 generator.js 母板生成周任务 week-service.js 周清单生成与负责人查找 helpers.js 周详情、统计、设置等公共查询 export.js Word / PDF / 预览导出 scheduler.js 定时任务 auth.js 会话、权限、审计、通知 public/ 前端单页应用(无需构建) index.html app.js styles.css data/ 运行时数据(首次启动自动生成) start.bat Windows 一键启动 ``` ## 部署到云端 当前版本按本地 Windows 使用设计,SQLite 与附件存储在本地磁盘。部署到云服务器时: 1. Windows 服务器:使用 `npm run build` 生成的 `dist/` 独立运行版,服务器无需安装 Node.js,运行 `start.bat` 或 `hetong-task-manager.exe`,并持久化 `dist/data`。 2. Ubuntu 服务器(推荐):使用 `npm run build:mjs` 生成的 `dist/hetong-task-manager-mjs.tar.gz`(约 750 KB),解压后执行 `pm2 start ecosystem.config.cjs`;服务器需安装 Node.js 22.5+ 和 PM2。 3. Ubuntu 服务器(无需项目依赖):使用 `npm run build:linux` 生成的 `dist/hetong-task-manager-ubuntu-x64.tar.gz`,解压后执行 `./start.sh` 由 PM2 托管。 4. 如使用源码部署:安装 Node.js 22.5+,上传项目并执行 `npm install --omit=dev`,再使用 `npm start` 或进程守护工具(PM2 / NSSM)常驻运行。 5. 用 Nginx / Caddy 反向代理到 `127.0.0.1:3000` 并启用 HTTPS。 6. 持久化并定期备份 `data/`(Windows 独立版为 `dist/data/`,Ubuntu 版为 `dist/ubuntu/data/` 或 `dist/mjs/data/`)目录。 7. 如需公网多人访问,先修改所有默认密码,并限制管理端访问来源。 ## 常见问题 **Q:页面一直显示旧内容?** 静态资源带版本号(`?v=`),修改前端后可刷新页面;必要时修改 `public/index.html` 中的版本号强制更新。 **Q:PDF 导出失败?** 确认本机已安装 Chrome 或 Edge;PDF 依赖其无头模式渲染。 **Q:负责人收不到提醒?** 通知为站内通知,请查看页面右上角“通知”;同时确认服务正在运行,否则定时任务不会执行。 **Q:周号与日历周不一致?** 在“系统设置”调整“周号偏移”,默认 `+1` 与院管委样板一致。 **Q:如何新增版块或用户?** 管理员在“版块管理 / 用户管理”中维护;版块负责人账号需绑定对应版块。 --- 内部使用系统。请勿将包含真实人员与业务数据的 `data/` 目录提交到公共仓库。