Skip to content

About

自助插座配单工具

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SmartPoint 智能插座配单系统

Version License Node

一个专业的智能家居配单系统,支持智能插座推荐、设备去重、功率分析等功能。

功能特性 • 快速开始 • 部署指南 • 项目结构


功能特性

核心功能

  • 智能空间配单 - 支持多空间、多场景的智能设备配单
  • 设备去重检测 - 自动识别跨空间的全局设备(如扫地机器人)
  • 功率智能分析 - 基于设备功耗的电路推荐与负载分析
  • 设备数量管理 - 灵活配置设备数量(单台/多台)
  • 项目导入导出 - 支持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 部署

# 构建并启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

使用部署脚本

Linux/Mac

chmod +x deploy.sh
./deploy.sh

Windows

deploy.bat

项目结构

SmartPoint/
├── 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     # 预览将要清理的用户

API 文档

认证接口

  • 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 - 导出项目为Excel
  • POST /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!


许可证

ISC


联系方式

如有问题,请通过 GitHub Issues 联系我们。

About

自助插座配单工具

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages