基于 HarmonyOS ArkTS + Python Flask + MySQL 的办公用品申领管理系统。
本系统是一个完整的办公用品管理解决方案,支持员工申领办公用品、管理员审批、库存预警、数据统计等功能。采用前后端分离架构,前端使用鸿蒙原生 ArkTS 开发,后端使用 Python Flask 提供 RESTful API。
- 用户登录(员工/管理员双角色)
- 登录页记住账号功能
- 修改个人密码
- 管理员添加/删除用户
- 管理员重置用户密码
- 查看全部办公用品库存
- 按分类筛选物品(笔类/纸品类/文具/办公设备/耗材/数码产品/其他)
- 库存低于阈值自动预警(红色标识)
- 管理员新增/编辑/删除物品
- 库存变动记录追踪
- 库存报表导出(CSV)
- 员工选择物品、填写数量和用途提交申领
- 申领页显示当前库存及预警状态
- 单次申领数量限制(最多100件,不得超库存)
- 查看个人申领记录及状态
- 员工可撤回待审批的申请
- 管理员查看待审批申请
- 按关键词搜索申领记录
- 通过/驳回操作(驳回需填写理由)
- 审批通过自动扣减库存
- 今日申领数、待审批数、库存预警数
- 总申请、已通过、已驳回统计
- 热门申领物品排行
┌─────────────────────────────────────────────────────────┐
│ HarmonyOS App (ArkTS) │
├─────────────────────────────────────────────────────────┤
│ Pages: Index → Home → Stock/Apply/Record/StockLog │
│ Password / UserManage │
│ ↓ │
│ HttpUtil (@ohos.net.http) → RESTful API │
└─────────────────────────────────────────────────────────┘
│
▼ HTTP/JSON
┌─────────────────────────────────────────────────────────┐
│ Python Flask Backend (:5000) │
├─────────────────────────────────────────────────────────┤
│ Routes: /api/login, /api/goods/*, /api/apply/* │
│ /api/stock/*, /api/user/* │
│ ↓ │
│ PyMySQL → MySQL Database │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ MySQL Database │
├─────────────────────────────────────────────────────────┤
│ Tables: sys_user, office_goods, office_apply, stock_log│
└─────────────────────────────────────────────────────────┘
harmonyOffice/
├── App/ # HarmonyOS 前端项目
│ └── entry/src/main/
│ ├── ets/
│ │ ├── common/ # 公共工具
│ │ │ ├── Constant.ets # 全局常量
│ │ │ ├── Theme.ets # 主题配置
│ │ │ └── ToastUtil.ets # Toast工具
│ │ ├── model/ # 数据模型
│ │ │ ├── UserModel.ets
│ │ │ ├── GoodsModel.ets
│ │ │ └── ApplyModel.ets
│ │ ├── network/ # 网络请求
│ │ │ └── HttpUtil.ets
│ │ └── pages/ # 页面
│ │ ├── Index.ets # 登录页
│ │ ├── Home.ets # 首页(含统计面板)
│ │ ├── Stock.ets # 库存页(含分类筛选)
│ │ ├── Apply.ets # 申领页
│ │ ├── Record.ets # 记录/审批页(含搜索)
│ │ ├── Password.ets # 修改密码
│ │ ├── UserManage.ets # 用户管理
│ │ └── StockLog.ets # 库存变动记录
│ ├── resources/ # 资源文件
│ └── module.json5 # 模块配置
│
├── office_server/ # Python 后端
│ ├── app.py # Flask 入口
│ ├── config.py # 数据库配置
│ ├── db.py # 数据库封装
│ ├── init_sql.py # 初始化脚本
│ ├── migrate.py # 数据库迁移脚本
│ ├── requirements.txt # Python 依赖
│ └── routes/ # API 路由
│ ├── user_api.py # 用户接口
│ ├── stock_api.py # 库存接口
│ └── apply_api.py # 申领接口
│
└── README.md # 本文件
| 环境 | 版本要求 |
|---|---|
| DevEco Studio | 5.0+ |
| HarmonyOS SDK | API 12+ |
| Python | 3.8+ |
| MySQL | 8.0+ |
git clone <repository-url>
cd harmonyOffice编辑 office_server/config.py,填入你的 MySQL 连接信息:
MYSQL_HOST = 'your_mysql_host'
MYSQL_PORT = 3306
MYSQL_USER = 'your_username'
MYSQL_PASSWORD = 'your_password'
MYSQL_DB = 'harmonyoffice'cd office_server
pip install -r requirements.txt
python init_sql.py如果是从旧版本升级,运行迁移脚本:
python migrate.pypython app.py服务将在 http://127.0.0.1:5000 启动。
编辑 App/entry/src/main/ets/common/Constant.ets,修改后端地址:
static readonly BASE_URL: string = 'http://127.0.0.1:5000'在 DevEco Studio 中打开项目,连接设备或启动模拟器,点击 Run 按钮。
| 角色 | 账号 | 密码 | 部门 |
|---|---|---|---|
| 管理员 | admin | 123456 | 行政部 |
| 员工 | zhangsan | 123456 | 技术部 |
| 员工 | lisi | 123456 | 市场部 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/login | 用户登录 |
| POST | /api/user/change-password | 修改密码 |
| GET | /api/user/list | 用户列表(管理员) |
| POST | /api/user/add | 添加用户(管理员) |
| POST | /api/user/reset-password | 重置密码(管理员) |
| POST | /api/user/delete | 删除用户(管理员) |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/goods/list | 物品列表(支持?category=分类筛选) |
| GET | /api/goods/categories | 获取分类列表 |
| POST | /api/goods/add | 新增物品(管理员) |
| POST | /api/goods/update | 更新物品(管理员) |
| POST | /api/goods/delete | 删除物品(管理员) |
| GET | /api/stock/logs | 库存变动记录(分页) |
| GET | /api/stock/export | 库存报表导出(CSV) |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/apply/submit | 提交申领 |
| POST | /api/apply/cancel | 撤回申领 |
| GET | /api/apply/my | 我的申领记录 |
| GET | /api/apply/all | 全部记录(支持?status=&keyword=筛选) |
| POST | /api/apply/audit | 审批操作(管理员) |
| GET | /api/apply/stats | 数据统计(管理员) |
| GET | /api/apply/export | 申领记录导出(CSV) |
请求示例:
POST /api/login
{
"username": "admin",
"password": "123456",
"role": "admin"
}响应格式:
{
"code": 200,
"msg": "登录成功",
"data": {
"id": 1,
"username": "admin",
"role": "admin",
"real_name": "管理员"
}
}| 用途 | 颜色 |
|---|---|
| 主色调 | #6366F1 |
| 主色深 | #4F46E5 |
| 成功 | #10B981 |
| 警告 | #F59E0B |
| 危险 | #EF4444 |
| 背景 | #F8FAFC |
┌─────────────────┐
│ 登录页 │ ← Index.ets(记住账号)
├─────────────────┤
│ 首页 │ ← Home.ets(统计面板)
├────┬────┬───────┤
│库存│申领│审批(管理)│
│查询│提交│ 中心 │
├────┼────┼───────┤
│库存│用户│ 修改 │
│变动│管理│ 密码 │
└────┴────┴───────┘
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键 |
| username | VARCHAR(50) | 账号 |
| password | VARCHAR(100) | 密码 |
| role | VARCHAR(20) | 角色(admin/employee) |
| real_name | VARCHAR(50) | 姓名 |
| department | VARCHAR(50) | 部门 |
| create_time | DATETIME | 创建时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键 |
| name | VARCHAR(100) | 物品名称 |
| spec | VARCHAR(100) | 规格 |
| stock | INT | 库存数量 |
| warning_threshold | INT | 预警阈值 |
| category | VARCHAR(50) | 分类 |
| create_time | DATETIME | 创建时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键 |
| user_id | INT | 申请人ID |
| goods_id | INT | 物品ID |
| quantity | INT | 申领数量 |
| purpose | VARCHAR(500) | 用途 |
| status | VARCHAR(20) | 状态(pending/approved/rejected/cancelled) |
| reject_reason | VARCHAR(500) | 驳回理由 |
| create_time | DATETIME | 申请时间 |
| audit_time | DATETIME | 审批时间 |
| auditor_id | INT | 审批人ID |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键 |
| goods_id | INT | 物品ID |
| quantity | INT | 变动数量 |
| type | VARCHAR(20) | 类型(入库/出库) |
| remark | VARCHAR(500) | 备注 |
| create_time | DATETIME | 创建时间 |
检查 MySQL 连接配置是否正确,确保数据库服务可访问。
- 确认后端服务已启动
- 检查
Constant.ets中的BASE_URL配置 - 确保设备与后端在同一网络
在 DevEco Studio 中执行 Clean Project 后重新构建。
从旧版本升级时,运行 python migrate.py 添加新字段和表。