基于 Express + uni-app 的养老院管理系统设计与实现(附核心功能与数据库设计)
随着养老服务逐渐走向数字化,传统纸质登记和分散式管理容易出现信息更新不及时、业务记录难追踪、医护协作效率低等问题。本文介绍一个基于 Express 与 uni-app 开发的养老院管理系统。系统围绕老人健康管理、医生信息、就诊预约、诊疗结果、处方以及药品库存等业务展开,并提供面向管理员、医生和老人用户的差异化功能。
一、项目概述
本项目采用前后端分离思路:移动端使用 uni-app 和 Vue 构建,可编译为微信小程序;服务端基于 Node.js 与 Express 提供页面服务和 API;业务数据由 MySQL 持久化保存。
系统主要解决以下问题:
- 统一维护老人、医生、健康档案和药品等基础数据;
- 串联就诊预约、预约处理、诊疗结果和处方开具流程;
- 通过角色权限隔离不同用户的数据与操作范围;
- 为管理人员提供信息维护、内容发布和药品库存管理入口。
二、技术栈
| 层级 | 主要技术 |
|---|---|
| 小程序端 | uni-app、Vue、微信小程序 |
| 服务端 | Node.js、Express 4 |
| 模板与页面 | art-template、HTML、CSS |
| 数据库 | MySQL |
| 数据访问 | mysql 驱动、封装式 Service 层 |
| 身份状态 | express-session、访问令牌 |
| 文件处理 | express-fileupload |
服务端入口通过 Express 注册静态资源、模板引擎、跨域、Session、文件上传和业务路由,并监听配置文件指定的端口。
javascript
const express = require("express");
const bodyParser = require("body-parser");
const session = require("express-session");
const cors = require("cors");
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cors());
app.use(session({
secret: "express:sess",
resave: false,
saveUninitialized: true,
cookie: { maxAge: 1800000, httpOnly: true }
}));
三、系统角色与功能
1. 老人用户
老人用户可以完成注册登录、个人资料维护、医生信息查询、就诊预约、药品信息浏览与购买,并在个人中心查看健康信息、预约记录、诊疗结果、处方和药品购买记录。
2. 医生用户
医生登录后可查看授权范围内的健康信息和预约数据,对预约进行处理,记录就诊结果,并为老人开具处方。医生端重点承担从预约到诊疗结果落库的业务处理。
3. 管理员
管理员负责系统用户、老人用户、医生用户、健康信息、医生信息、预约记录、诊疗结果、处方、药品分类、药品信息、药品入库与购买记录等数据的维护。此外,管理员还可管理轮播图、公告和养老资讯等平台内容。
四、核心业务流程
系统的主要医疗服务流程可以概括为:
text
老人查看医生信息
↓
提交就诊预约
↓
医生查看并处理预约
↓
录入就诊结果
↓
开具处方
↓
老人查询个人诊疗记录
药品业务则由药品分类、药品信息、药品入库和药品购买四类数据共同支撑。管理员维护药品资料和库存,老人用户在前台查看药品详情并提交购买记录。
五、数据库设计
数据库以用户、医疗和药品三类数据为核心。主要业务表包括:
user:系统登录账户;elderly_users:老人用户档案;doctor_users:医生用户档案;health_information:老人健康信息;doctor_information:医生展示与出诊信息;visit_appointment:就诊预约;visit_results:就诊结果;prescription_issuance:处方开具;drug_classification:药品分类;drug_information:药品信息;drugs_warehousing:药品入库;drug_purchase:药品购买。
除此之外,系统还使用 article、notice、slides、comment、collect 和 access_token 等通用表,支持资讯、公告、轮播图、收藏及令牌管理。
设计表结构时,应为用户编号、医生编号、预约状态、创建时间等高频查询字段建立合适索引,并使用明确的状态枚举约束业务流转。涉及库存变化时,入库和购买操作应放在事务中执行,避免并发更新导致库存不一致。
六、后端分层设计
项目后端按照路由、控制器、服务和数据库访问进行组织:
text
router
└─ 将 URL 分发给对应控制器
controllers
└─ 接收参数、校验身份并组织业务流程
services
└─ 封装各业务实体的增删改查
core/mysql.js
└─ 负责 MySQL 连接和 SQL 执行
这种结构把 HTTP 处理与数据操作分开,增加新模块时可以沿用统一的控制器和服务层规范。例如新增"护理记录"功能时,只需补充数据表、Service、Controller、路由和前端页面,无需修改其他模块的主体逻辑。
七、登录与权限处理
登录流程首先根据用户名查询账户,再校验用户组、账户状态和密码。登录成功后,服务端保存 Session,同时生成访问令牌供小程序请求携带。
javascript
const password = md5(body.password);
if (password === user.password) {
req.session.user = user;
const token = md5(user.user_id + "_" + Date.now());
// 保存 token,并返回给客户端
}
在生产项目中,不建议继续使用普通 MD5 保存密码。更稳妥的方式是使用 bcrypt 或 argon2 加盐哈希,并进一步完善接口鉴权、参数校验、登录限流和令牌失效机制。数据库连接信息也应通过环境变量注入,避免写入源码。
八、项目运行思路
- 创建 MySQL 数据库并导入项目提供的 SQL 文件;
- 修改服务端数据库连接配置;
- 在服务端目录安装依赖并启动 Express 服务;
- 使用 HBuilderX 导入 uni-app 前端项目;
- 修改前端接口地址,运行到微信开发者工具;
- 分别使用老人、医生和管理员角色测试完整业务流程。
服务端依赖安装与启动命令如下:
bash
npm install
npm start
九、测试重点
项目测试不能只验证页面能否打开,还应覆盖关键业务状态。建议重点检查:
- 正确和错误账号的登录反馈;
- 未审核、已禁用用户是否会被拒绝登录;
- 老人能否正常提交预约;
- 医生是否只能处理其权限范围内的数据;
- 就诊结果和处方能否正确关联预约与老人;
- 药品入库、购买与库存变化是否一致;
- 管理员新增、修改、删除数据后,前台是否同步更新;
- 空值、超长文本和非法编号是否被服务端拦截。
十、总结
该系统将养老院常见的用户管理、健康档案、就诊预约、诊疗结果、处方和药品管理集中到一个平台中。Express 适合快速构建轻量级 API,uni-app 则降低了小程序端的开发成本。对毕业设计而言,项目业务链条完整,既包含多角色权限,也覆盖数据库设计、接口开发和前端交互。
后续可继续增加护理计划、家属端、消息提醒、健康趋势图、库存预警和操作审计等功能,并将密码存储、Token 管理、数据权限和部署配置升级到生产级安全标准。
推荐标签: Express、Node.js、uni-app、MySQL、微信小程序
文章分类: 后端 / Node.js