基于 Express + uni-app 的养老院管理系统设计与实现

基于 Express + uni-app 的养老院管理系统设计与实现(附核心功能与数据库设计)

随着养老服务逐渐走向数字化,传统纸质登记和分散式管理容易出现信息更新不及时、业务记录难追踪、医护协作效率低等问题。本文介绍一个基于 Express 与 uni-app 开发的养老院管理系统。系统围绕老人健康管理、医生信息、就诊预约、诊疗结果、处方以及药品库存等业务展开,并提供面向管理员、医生和老人用户的差异化功能。

一、项目概述

本项目采用前后端分离思路:移动端使用 uni-app 和 Vue 构建,可编译为微信小程序;服务端基于 Node.js 与 Express 提供页面服务和 API;业务数据由 MySQL 持久化保存。

系统主要解决以下问题:

  1. 统一维护老人、医生、健康档案和药品等基础数据;
  2. 串联就诊预约、预约处理、诊疗结果和处方开具流程;
  3. 通过角色权限隔离不同用户的数据与操作范围;
  4. 为管理人员提供信息维护、内容发布和药品库存管理入口。

二、技术栈

层级 主要技术
小程序端 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:药品购买。

除此之外,系统还使用 articlenoticeslidescommentcollectaccess_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 保存密码。更稳妥的方式是使用 bcryptargon2 加盐哈希,并进一步完善接口鉴权、参数校验、登录限流和令牌失效机制。数据库连接信息也应通过环境变量注入,避免写入源码。

八、项目运行思路

  1. 创建 MySQL 数据库并导入项目提供的 SQL 文件;
  2. 修改服务端数据库连接配置;
  3. 在服务端目录安装依赖并启动 Express 服务;
  4. 使用 HBuilderX 导入 uni-app 前端项目;
  5. 修改前端接口地址,运行到微信开发者工具;
  6. 分别使用老人、医生和管理员角色测试完整业务流程。

服务端依赖安装与启动命令如下:

bash 复制代码
npm install
npm start

九、测试重点

项目测试不能只验证页面能否打开,还应覆盖关键业务状态。建议重点检查:

  • 正确和错误账号的登录反馈;
  • 未审核、已禁用用户是否会被拒绝登录;
  • 老人能否正常提交预约;
  • 医生是否只能处理其权限范围内的数据;
  • 就诊结果和处方能否正确关联预约与老人;
  • 药品入库、购买与库存变化是否一致;
  • 管理员新增、修改、删除数据后,前台是否同步更新;
  • 空值、超长文本和非法编号是否被服务端拦截。

十、总结

该系统将养老院常见的用户管理、健康档案、就诊预约、诊疗结果、处方和药品管理集中到一个平台中。Express 适合快速构建轻量级 API,uni-app 则降低了小程序端的开发成本。对毕业设计而言,项目业务链条完整,既包含多角色权限,也覆盖数据库设计、接口开发和前端交互。

后续可继续增加护理计划、家属端、消息提醒、健康趋势图、库存预警和操作审计等功能,并将密码存储、Token 管理、数据权限和部署配置升级到生产级安全标准。


推荐标签: Express、Node.js、uni-app、MySQL、微信小程序

文章分类: 后端 / Node.js

相关推荐
明月_清风1 小时前
DeepSeek Harness 安全审计实录:四个 PoC 揭露的 Agent 运行时"信任危机"
后端·安全·agent
苏三说技术1 小时前
再见了EasyExcel,我决定用Apache Fesod
后端
XR1234567881 小时前
医院移动医护零漫游无线网络选型指南
java·后端·struts
ly76892 小时前
Spring Bean生命周期全流程:从BeanDefinition到销毁
java·后端·spring·bean生命周期·beandefinition·初始化回调
leeyi2 小时前
在 Go 里跑不信任的代码:WASM 沙箱的四道墙(第107篇)
后端
摇滚侠2 小时前
《Spring Boot 3:高级与架构设计》第 1 章 BeanDefinitionRegistry 阅读笔记 3
spring boot·笔记·后端
烂蜻蜓2 小时前
Flask入门教程(三十一):实用函数与类API——全局工具函数速查
后端·python·flask
计算机毕设定制辅导-无忧学长2 小时前
《基于Spring Boot传承之光非遗陶瓷烧造产品交易平台的设计与实现》
java·vue.js·spring boot·后端·毕业设计
Zane19942 小时前
内存都要回收,为什么JVM偏要把堆分成新生代和老年代
java·后端