# 药箱 · YaoXiang 家庭药品与应急物资管理系统 ## 功能介绍 ### 核心功能 - **药品管理**: 添加、编辑、删除药品信息,支持通用名、商品名、规格等 - **批次管理**: 每个药品可有多个批次,独立管理库存和有效期 - **分类管理**: 二级分类(药品/医疗器械/应急用品/消耗品) - **智能搜索**: 支持按名称、症状搜索,AI 自然语言搜索 - **AI 识别**: 拍照识别药盒、有效期、说明书,自动建档 - **到期提醒**: 90天/30天/7天过期提醒,支持有效期宽限(最多60天) - **库存提醒**: 低库存自动提醒 - **用户管理**: 多用户支持,角色权限划分(管理员/普通用户/只读) - **通知系统**: 支持 Server酱、PushPlus、Bark 等多种通知渠道 - **大屏模式**: 平板快速取药,大按钮方便操作 ### 技术特性 - **前端**: React 18 + TypeScript + Vite + Ant Design Mobile - **后端**: FastAPI + SQLAlchemy + SQLite - **AI**: 支持 OpenAI、Gemini、Claude、DeepSeek、Ollama - **部署**: Docker 单容器部署 ## 项目结构 ``` YaoXiang/ ├── frontend/ # 前端代码 │ ├── src/ │ │ ├── api/ # API 调用层 │ │ ├── components/ # 公共组件 │ │ ├── pages/ # 页面组件 │ │ ├── stores/ # 状态管理 │ │ ├── hooks/ # 自定义 Hooks │ │ ├── types/ # TypeScript 类型 │ │ └── utils/ # 工具函数 │ └── package.json │ ├── backend/ # 后端代码 │ ├── app/ │ │ ├── api/ # API 路由 │ │ ├── models/ # 数据模型 │ │ ├── schemas/ # Pydantic 模式 │ │ ├── services/ # 业务逻辑 │ │ ├── repositories/ # 数据访问 │ │ ├── ai/ # AI Provider │ │ └── notifications/ # 通知系统 │ └── requirements.txt │ ├── docs/ # 开发文档 ├── start.ps1 # Windows 启动脚本 ├── start.sh # Linux/Mac 启动脚本 └── README.md ``` ## 安装与运行 ### 前置要求 - Node.js 18+ - Python 3.11+ - npm ### 快速开始 **Windows:** ```powershell # 安装依赖 .\start.ps1 install # 启动服务 .\start.ps1 start ``` **Linux / Mac:** ```bash # 赋予执行权限(首次) chmod +x start.sh # 安装依赖 ./start.sh install # 启动服务 ./start.sh start ``` **手动安装:** ```bash # 安装前端依赖 cd frontend npm install # 安装后端依赖 cd ../backend python -m venv venv source venv/bin/activate # Windows: .\venv\Scripts\activate pip install -r requirements.txt # 启动后端 uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 # 启动前端(新终端) cd frontend npm run dev ``` ### 访问地址 - 前端: http://localhost:5173 - 后端 API: http://localhost:8000 - API 文档: http://localhost:8000/docs ### 默认账号 首次启动会自动创建管理员账号: - 用户名: admin - 密码: admin123 ## 配置说明 在 `backend/` 目录下创建 `.env` 文件: ```bash cp .env.example .env ``` ### AI API 配置 支持多种 AI Provider,选择一种配置即可: **OpenAI:** ```bash AI_PROVIDER=openai OPENAI_API_KEY=sk-your-api-key OPENAI_MODEL=gpt-4o ``` **Gemini:** ```bash AI_PROVIDER=gemini GEMINI_API_KEY=your-api-key GEMINI_MODEL=gemini-pro-vision ``` **DeepSeek:** ```bash AI_PROVIDER=deepseek DEEPSEEK_API_KEY=your-api-key DEEPSEEK_MODEL=deepseek-chat ``` **Ollama (本地部署):** ```bash AI_PROVIDER=ollama OLLAMA_BASE_URL=http://localhost:11434 OLLAMA_MODEL=llava ``` ### 通知配置 配置通知渠道,药品过期和库存不足时会发送提醒: **Server酱:** 1. 访问 https://sct.ftqq.com/ 注册获取 SendKey 2. 配置: ```bash NOTIFICATION_PROVIDERS=serverchan SERVERCHAN_KEY=your-send-key ``` **PushPlus:** 1. 访问 https://www.pushplus.plus/ 注册获取 Token 2. 配置: ```bash NOTIFICATION_PROVIDERS=pushplus PUSHPLUS_TOKEN=your-token ``` **多渠道同时启用:** ```bash NOTIFICATION_PROVIDERS=serverchan,pushplus SERVERCHAN_KEY=your-key PUSHPLUS_TOKEN=your-token ``` ### 其他配置 ```bash # 安全配置(请修改为自己的密钥) JWT_SECRET_KEY=your-secret-key # 数据库配置(默认 SQLite) DATABASE_URL=sqlite+aiosqlite:///./data/yaoxiang.db # 文件上传配置 UPLOAD_DIR=./data/uploads MAX_UPLOAD_SIZE=10485760 # 10MB ``` ## 常用命令 ```powershell # Windows .\start.ps1 install # 安装依赖 .\start.ps1 start # 启动所有服务 .\start.ps1 start:f # 仅启动前端 .\start.ps1 start:b # 仅启动后端 .\start.ps1 build # 构建生产版本 .\start.ps1 clean # 清理缓存 .\start.ps1 help # 显示帮助 ``` ```bash # Linux / Mac ./start.sh install # 安装依赖 ./start.sh start # 启动所有服务 ./start.sh start:f # 仅启动前端 ./start.sh start:b # 仅启动后端 ./start.sh build # 构建生产版本 ./start.sh clean # 清理缓存 ./start.sh help # 显示帮助 ``` ## 开发文档 详细文档请查看 `docs/` 目录: - [系统架构设计](docs/architecture.md) - [数据库设计](docs/database.md) - [前端开发文档](frontend/DEVELOPMENT.md) - [后端开发文档](backend/DEVELOPMENT.md) - [API 接口文档](docs/api.md) ## 许可证 MIT License ## 声明 本项目由 [小米 MiMoCode]([mimo.xiaomi.com/zh/mimocode](https://mimo.xiaomi.com/zh/mimocode)) 助生成。