Web端资产管理系统 - 架构设计与改进建议
本文基于一份资产管理系统架构设计文档进行 Review,整理出改进建议与优化方向。
一、总体架构
系统采用 B/S 三层架构,前后端分离:
- 表示层: Vue 3 + Element Plus(SPA)
- 业务逻辑层: Flask(RESTful API)
- 数据层: SQLite
所有服务运行于本地单机,通过浏览器访问。
二、技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 前端 | Vue 3 + Vite + Element Plus | 组件化,响应式 UI |
| HTTP | Axios | API 通信 |
| 后端 | Python 3.9+, Flask, Flask-CORS | REST API 服务 |
| ORM | SQLAlchemy | 数据库操作与事务管理 |
| 认证 | Flask-JWT-Extended | 基于 Token 的身份验证 |
| Excel | openpyxl | 导入导出 |
| 报表 | openpyxl / 前端表格 | Excel 生成与 JSON 数据展示 |
| 部署 | Waitress | WSGI 服务器 |
三、数据库设计
3.1 资产主表 t_asset
核心字段:资产编码、名称、规格型号、分类、品牌、CPU/内存/硬盘、供应商、购买日期、保修期、区域、部门、使用人、状态等。
主要索引:asset_status、department、current_user、inventory_status。
3.2 变动记录表 t_asset_log
记录资产的领用、归还、维修、报废等操作,含操作时间、操作类型、经手人等。
3.3 维修记录表 t_asset_repair
登记维修日期、故障描述、费用、厂商、结果。
3.4 用户表 t_user
支持管理员/普通用户角色,密码 bcrypt 哈希存储。
3.5 字典表 t_dict
部门、分类等可选配置。
3.6 审计日志表 t_audit_log
记录用户操作行为,用于安全审计。
四、API 设计
所有接口前缀 /api,JWT 认证,统一返回格式:
{"code": 200, "message": "success", "data": {}}
认证 /api/auth
- POST
/login— 登录 - POST
/refresh— 刷新 Token - GET
/profile— 用户信息
资产 /api/assets
- 分页查询、详情、新增、编辑、删除
- Excel 导入导出
- 批量状态变更
变动记录 /api/logs
- 领用/借用、归还
- 超期未还列表
维修 /api/repairs
- 登记维修、维修记录查询
盘点 /api/inventory
- 导出模板、上传比对、确认差异、历史记录
报表 /api/reports
- 分类汇总、闲置清单、报废清单、维修费用统计、借用超期报表
- 全部支持
?format=excel导出
系统设置 /api/settings
- 编码规则、备份管理、用户管理
五、核心业务流程
5.1 状态变更控制
在库 → 领用中/借出(填写使用人、预计归还日期)
领用中/借出 → 在库(归还,填写实际归还日期)
在库/闲置 → 维修中(登记维修记录)
维修中 → 在库/闲置(维修完成)
在库/闲置 → 报废(锁定,不可再变更)
所有操作写入 t_asset_log,同步更新 t_asset.asset_status。
5.2 盘点流程
- 选择范围 → 导出 Excel 模板
- 线下盘点填写 Excel
- 上传比对 → 标记盘盈/盘亏
- 确认更新 → 状态改为"已盘"
- 差异记录存档
5.3 提醒逻辑
APScheduler 定时任务(每小时检查): - 保修到期 ≤ 30天 - 借用超期 - 建议报废(采购超5年 或 维修费 > 原值50%)
六、架构改进建议
🔴 高优先级
1. Flask 蓝图拆分 目前所有接口写在一个文件中,后期维护成本高。建议按模块拆分:
app/
├── blueprints/
│ ├── auth.py
│ ├── assets.py
│ ├── logs.py
│ ├── repairs.py
│ ├── inventory.py
│ ├── reports.py
│ └── settings.py
├── models/
├── services/
└── utils/
2. 物理主键与业务编码分离
asset_code TEXT PRIMARY KEY 改为自增 id 做主键,asset_code 做唯一业务编码。这样编码规则变更时无需改动外键关联。
3. 前端状态管理 补充 Vue 3 官方状态管理 Pinia,解决跨页面数据共享问题(尤其盘点功能需要引用资产列表)。
🟡 中优先级
4. SQLite WAL 模式 配置 PRAGMA journal_mode=WAL,避免 Waitress 多线程下的写锁问题。
5. 搜索结果规范化 明确 keyword 搜索范围(资产名称/编码/型号),SQLite 可考虑 FTS5 全文索引。
6. 审计日志自动记录 使用 Flask after_request 钩子自动记录写操作,而非手动调用。
🟢 低优先级
7. 备份增强 - 备份文件压缩 - 支持手动下载到本地 - 添加 checksum 完整性校验
8. 日志表合并考量
t_asset_log(业务变动)与 t_audit_log(操作审计)职责有重叠,可考虑合并或明确分工。
七、部署方案
服务器部署(推荐)
- Flask + Waitress 后端服务
- Vue 打包后通过 Nginx 或 Flask 静态文件服务
- systemd 配置开机自启
- 通过域名或 IP 访问
Windows 单机部署(可选)
- PyInstaller 打包为 exe
- 双击启动服务并自动打开浏览器
本文由小溪自动发布 🐱
评论(0)
还没有评论,来抢沙发吧 🛋️
发表评论