add README.md
This commit is contained in:
145
README.md
Normal file
145
README.md
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
# 小财记账 (XiaoCai Accounting)
|
||||||
|
|
||||||
|
AI 驱动的内部群聊记账系统,通过自然语言对话自动记录采购信息。
|
||||||
|
|
||||||
|
## 功能特性
|
||||||
|
|
||||||
|
- **AI 自然语言记账** — 聊天中输入"打印纸一包,30元,已付"即可自动创建采购记录
|
||||||
|
- **采购清单管理** — 按月汇总,支持编辑、删除、附件管理,状态追踪(待付款→已付款→已收货→已完成)
|
||||||
|
- **多群聊支持** — 每个项目独立群聊,支持白名单权限控制
|
||||||
|
- **实时推送** — WebSocket 实时同步消息和采购变更
|
||||||
|
- **移动端适配** — 响应式设计,支持滑动手势、图片双指缩放拖拽
|
||||||
|
- **管理员功能** — 群聊管理、采购导出 CSV、全局汇总
|
||||||
|
|
||||||
|
## 技术栈
|
||||||
|
|
||||||
|
| 层 | 技术 |
|
||||||
|
|---|---|
|
||||||
|
| 后端 | Node.js + Express + WebSocket (ws) |
|
||||||
|
| 数据库 | SQLite (better-sqlite3) |
|
||||||
|
| AI | DeepSeek API |
|
||||||
|
| 前端 | 原生 HTML/CSS/JS,无框架 |
|
||||||
|
| 部署 | Docker + Docker Compose |
|
||||||
|
| 认证 | JWT |
|
||||||
|
|
||||||
|
## 项目结构
|
||||||
|
|
||||||
|
```
|
||||||
|
xiaocai-ai-server/
|
||||||
|
├── docker-compose.yml # Docker 编排
|
||||||
|
├── build.sh # 构建脚本
|
||||||
|
├── server/
|
||||||
|
│ ├── server.js # 入口
|
||||||
|
│ ├── db.js # 数据库初始化 + 迁移
|
||||||
|
│ ├── utils.js # 时间工具函数
|
||||||
|
│ ├── handlers.js # AI 结果处理 + 对话状态
|
||||||
|
│ ├── package.json
|
||||||
|
│ ├── Dockerfile
|
||||||
|
│ ├── ai/
|
||||||
|
│ │ ├── prompt.js # Prompt 模板
|
||||||
|
│ │ ├── validator.js # JSON Schema 校验
|
||||||
|
│ │ └── client.js # DeepSeek API 客户端
|
||||||
|
│ ├── middleware/
|
||||||
|
│ │ └── auth.js # JWT 认证 + 管理员中间件
|
||||||
|
│ ├── routes/
|
||||||
|
│ │ ├── auth.js # 登录 / 用户信息
|
||||||
|
│ │ ├── rooms.js # 群聊 CRUD
|
||||||
|
│ │ ├── messages.js # 消息 + AI 分析
|
||||||
|
│ │ └── purchases.js # 采购 CRUD / 汇总 / 导出
|
||||||
|
│ ├── ws/
|
||||||
|
│ │ └── index.js # WebSocket 连接管理 + 广播
|
||||||
|
│ └── public/
|
||||||
|
│ ├── index.html # 单页应用
|
||||||
|
│ ├── css/style.css # 样式
|
||||||
|
│ └── js/
|
||||||
|
│ ├── store.js # 全局状态管理
|
||||||
|
│ ├── chat.js # 消息渲染 + 图片处理
|
||||||
|
│ ├── ws.js # WebSocket + 聊天列表
|
||||||
|
│ ├── purchases.js # 采购清单 + 编辑 + 手势
|
||||||
|
│ └── auth.js # 登录 / 初始化
|
||||||
|
└── docs/
|
||||||
|
└── v2.md # 重构设计文档
|
||||||
|
```
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
### 环境变量
|
||||||
|
|
||||||
|
创建 `.env` 文件:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 用户账号(username:password 逗号分隔)
|
||||||
|
USERS=admin:admin123,user1:pass1
|
||||||
|
|
||||||
|
# 管理员列表(逗号分隔)
|
||||||
|
ADMINS=admin
|
||||||
|
|
||||||
|
# DeepSeek API Key
|
||||||
|
DEEPSEEK_API_KEY=sk-xxx
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker 部署
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 构建并启动
|
||||||
|
./build.sh
|
||||||
|
|
||||||
|
# 或手动
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
服务默认监听 `3000` 端口。
|
||||||
|
|
||||||
|
## API 概览
|
||||||
|
|
||||||
|
### 认证
|
||||||
|
| 方法 | 路径 | 说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| POST | `/api/login` | 登录获取 JWT |
|
||||||
|
|
||||||
|
### 群聊
|
||||||
|
| 方法 | 路径 | 说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| GET | `/api/rooms` | 群聊列表(按活跃时间排序) |
|
||||||
|
| POST | `/api/rooms` | 新建群聊 |
|
||||||
|
| PUT | `/api/rooms/:id` | 编辑群聊 |
|
||||||
|
| DELETE | `/api/rooms/:id` | 删除群聊(管理员) |
|
||||||
|
|
||||||
|
### 消息
|
||||||
|
| 方法 | 路径 | 说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| GET | `/api/rooms/:id/messages` | 获取消息历史 |
|
||||||
|
| POST | `/api/rooms/:id/messages` | 发送消息(触发 AI 分析) |
|
||||||
|
| POST | `/api/upload` | 上传图片 |
|
||||||
|
|
||||||
|
### 采购
|
||||||
|
| 方法 | 路径 | 说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| GET | `/api/rooms/:id/purchases` | 群聊采购清单 |
|
||||||
|
| GET | `/api/purchases/:id` | 采购详情(含历史 + 附件) |
|
||||||
|
| PUT | `/api/purchases/:id` | 更新采购记录 |
|
||||||
|
| DELETE | `/api/purchases/:id` | 删除采购记录 |
|
||||||
|
| POST | `/api/purchases/:id/attachments` | 添加附件 |
|
||||||
|
| DELETE | `/api/purchases/:id/attachments` | 删除附件 |
|
||||||
|
| GET | `/api/summary` | 全局采购汇总 |
|
||||||
|
| GET | `/api/rooms/:id/purchases/export` | 导出 CSV |
|
||||||
|
|
||||||
|
## 采购状态流转
|
||||||
|
|
||||||
|
```
|
||||||
|
待付款 → 已付款 → 已收货 → 已完成
|
||||||
|
```
|
||||||
|
|
||||||
|
- **聊天 AI** — 仅负责新建记录,修改操作引导用户去采购清单手动完成
|
||||||
|
- **采购清单** — 点击条目进入详情,可编辑所有字段、管理附件、查看操作历史
|
||||||
|
|
||||||
|
## 设计原则
|
||||||
|
|
||||||
|
- AI 不负责更新已有记录,所有修改由用户手动完成
|
||||||
|
- 新建记录通过聊天自然语言输入
|
||||||
|
- 移动端优先:滑动手势、数字键盘、双指缩放
|
||||||
|
- 操作历史自动记录所有变更,可追溯
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
Reference in New Issue
Block a user