📱 扫描上方小程序码即可体验实验室库存管理系统。
🚀 项目简介
实验室库存管理系统(Laboratory Inventory Management System)是一套用于管理实验室耗材的全栈解决方案,核心特点是多租户数据隔离——通过 labName 字段将不同实验室的库存数据完全隔离,互不干扰。
项目采用前后端分离 + MCP 集成的架构,由三个子项目组成:
Frontend (Taro) → Backend API (Express) → MongoDB (Mongoose) ↓ MCP Server (read-only queries for AI)🖥️ 前端(no-nutui/)
基于 Taro 4.1 + Vue 3 + TypeScript 的跨端应用,一套代码同时支持微信小程序、H5 和支付宝小程序:
npm run dev:weapp # 微信小程序(主要)npm run dev:h5 # H5 网页版npm run dev:alipay # 支付宝小程序⚙️ 后端(no1_express/)
基于 Node.js + Express + MongoDB 的 REST API,采用标准的 MVC 分层结构(route → controller → service → model),统一返回 { errCode, errorInfo, data } 格式。
🤖 MCP Server(mcp/)
独立的 HTTP 只读服务,为 AI 助手提供查询能力,所有查询都需要传入 labName 参数,保证跨实验室数据安全。
💡 核心特性
1. 多实验室数据隔离
这是项目最重要的架构设计:
- JWT Token 中包含
labName字段 - 所有数据库查询都按
labName过滤 - 跨实验室操作会被直接拒绝
- MCP 服务所有查询同样要求
labName参数
2. 库存状态自动管理
库存状态通过 Mongoose 钩子自动计算,无需人工维护:
| 状态 | 判定条件 |
|---|---|
| 过期(expired) | expiryDate < now |
| 临期(expiring_soon) | 30 天内过期 |
| 缺货(out_of_stock) | quantity === 0 |
| 低库存(low_stock) | quantity <= minQuantity |
3. 完整的审计追踪
所有库存操作都会生成 Transaction 记录,包含操作人信息、时间戳、操作前后数量、操作类型(采购入库、归还入库、领用出库、使用出库),方便追溯。
4. 并发安全
后端使用 MongoDB 原子 $inc 操作更新数量,保证多用户并发领用时数据一致。
5. JWT 鉴权与自动续期
前端将 Token 存储在 Taro.getStorageSync('token'),后端每次请求自动校验并续期,新的 Token 通过响应头返回。
📦 数据模型
核心数据模型包括:User(用户与角色)、Inventory(库存)、Lab(实验室)、Transaction(出入库记录)、ExperimentPlan(实验计划)、ShareRequest(资源共享申请)、LabMember(实验室成员)等。
其中 Inventory 内置了 searchItems(keyword) 搜索方法,支持按名称、编码、分类、供应商、规格等进行检索。
🛠️ 本地开发
# 终端 1:后端cd no1_express && npm run dev
# 终端 2:前端cd no-nutui && npm run dev:weapp
# 终端 3:MCP(可选)cd mcp && npm start三个项目共享同一个 MongoDB 数据库,前端通过 src/api/config.ts 中的 VITE_BACKEND_BASE_URL 配置后端地址。
💭 总结
这个项目是一套架构清晰、工程化完善的实验室库存管理解决方案:通过 labName 实现多租户隔离,通过 MCP Server 拥抱 AI 生态,前端跨端一套代码多端运行,后端注重数据安全与审计。对于需要管理实验室耗材、或是想学习多租户 + 前后端分离架构的同学,都有不错的参考价值。
NOTE项目在前端工程化方面也很完善:ESLint + Stylelint + Husky + Commitlint + lint-staged 一应俱全,遵循 Conventional Commit 提交规范。
有问题? 欢迎在评论区交流讨论!
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时




