- 智能空间配单 - 支持多空间、多场景的智能设备配单
- 设备去重检测 - 自动识别跨空间的全局设备(如扫地机器人)
- 功率智能分析 - 基于设备功耗的电路推荐与负载分析
- 设备数量管理 - 灵活配置设备数量(单台/多台)
- 项目导入导出 - 支持Excel格式的配单方案导入导出
- 管理后台 - 完整的设备规则、空间数据管理后台
- 设备去重算法 - 支持3种范围类型(每空间/每层/全屋)的智能去重
- 图标智能映射 - 自动识别emoji和文本图标
- 响应式设计 - 完美适配移动端和桌面端
- TypeScript全覆盖 - 类型安全的开发体验
- Node.js: >= 18.0.0
- MySQL: >= 8.0
- pnpm: >= 8.0.0
# 安装 pnpm (如果还没安装)
npm install -g pnpm
# 安装项目依赖
pnpm install# 创建数据库
mysql -u root -p
CREATE DATABASE smartpoint CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;
# 导入数据库结构
cd packages/server
mysql -u root -p smartpoint < sql/init.sql复制 packages/server/.env.example 到 packages/server/.env 并修改配置:
# 服务器配置
PORT=3001
NODE_ENV=development
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=your_password
DB_DATABASE=smartpoint
# JWT密钥
JWT_SECRET=your-secret-key-change-in-production
JWT_EXPIRES_IN=7d# 在项目根目录执行
# 启动后端服务 (端口 3001)
pnpm server:dev
# 新开终端,启动前端服务 (端口 5173)
pnpm web:dev访问 http://localhost:5173 开始使用
- 用户名:
admin - 密码: 运行
pnpm admin:password生成
# 1. 构建所有包
pnpm build
# 2. 启动生产服务
cd packages/server && npm run start:prod# 构建并启动所有服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose downchmod +x deploy.sh
./deploy.shdeploy.batSmartPoint/
├── packages/
│ ├── server/ # NestJS 后端服务
│ │ ├── src/
│ │ │ ├── entities/ # TypeORM 数据库实体
│ │ │ ├── modules/ # 业务模块
│ │ │ ├── auth/ # 认证模块
│ │ │ └── main.ts # 应用入口
│ │ ├── sql/ # 数据库脚本
│ │ └── scripts/ # 工具脚本
│ │
│ ├── web/ # Vue 3 前端应用
│ │ ├── src/
│ │ │ ├── views/ # 页面组件
│ │ │ ├── components/ # 公共组件
│ │ │ ├── utils/ # 工具函数
│ │ │ └── stores/ # Pinia 状态管理
│ │ └── index.html
│ │
│ └── parser/ # 规则解析器
│
├── README.md # 项目文档
├── docker-compose.yml # Docker 编排文件
├── deploy.sh # Linux/Mac 部署脚本
└── deploy.bat # Windows 部署脚本
| 表名 | 说明 | 关键字段 |
|---|---|---|
users |
用户表 | username, password, role |
admins |
管理员表 | username, password_hash |
spaces |
空间表 | space_key, space_name, icon |
zones |
区域表 | space_id, zone_name |
devices |
设备表 | zone_id, name, scope_type, scope_limit |
warnings |
警告规则表 | space_id, trigger_condition |
projects |
项目表 | user_id, configuration |
- scope_type:
space(每空间) /floor(每层) /house(全屋) - scope_limit: 数量限制(0=不限,1=唯一,2=最多2个...)
- device_group: 设备分组标识(如
sweeper,aircon)
# 开发
pnpm server:dev # 启动后端开发服务器
pnpm web:dev # 启动前端开发服务器
# 构建
pnpm build # 构建所有包
pnpm server:build # 仅构建后端
pnpm web:build # 仅构建前端
# 数据库
pnpm db:init # 初始化数据库
pnpm migration:add-device-scope # 运行设备去重字段迁移
# 工具
pnpm admin:password # 生成管理员密码哈希
pnpm users:cleanup # 清理未使用的测试用户
pnpm users:preview # 预览将要清理的用户POST /api/auth/register- 用户注册POST /api/auth/login- 用户登录POST /api/auth/admin/login- 管理员登录
GET /api/spaces- 获取空间列表GET /api/spaces/:id/devices- 获取空间设备POST /api/projects- 创建项目GET /api/projects/:id/export- 导出项目为ExcelPOST /api/recommend- 生成设备推荐
- 框架: NestJS 10.x
- ORM: TypeORM 0.3.x
- 数据库: MySQL 8.0
- 认证: JWT + Passport
- Excel: ExcelJS
- 框架: Vue 3.4 + Composition API
- UI库: Vant 4.x
- 状态管理: Pinia 2.x
- 路由: Vue Router 4.x
- 构建: Vite 5.x
- HTTP: Axios
- Excel: XLSX
编辑 packages/server/src/data/rules.json:
{
"space_key": "kitchen",
"space_name": "厨房",
"zones": [
{
"zone_name": "烹饪区",
"devices": [
{
"name": "油烟机",
"scope_type": "house",
"scope_limit": 1,
"device_group": "range_hood"
}
]
}
]
}在管理后台或直接修改数据库:
UPDATE devices
SET
scope_type = 'house',
scope_limit = 1,
device_group = 'sweeper'
WHERE name LIKE '%扫地机器人%';# 查找占用端口的进程
lsof -i :3001 # Mac/Linux
netstat -ano | findstr :3001 # Windows
# 杀死进程
kill -9 <PID> # Mac/Linux
taskkill /F /PID <PID> # Windows检查 packages/server/.env 中的数据库配置是否正确
确认后端运行在 http://localhost:3001,检查 packages/web/vite.config.ts 中的 proxy 配置
欢迎提交 Issue 和 Pull Request!
如有问题,请通过 GitHub Issues 联系我们。