# H5 Monorepo 工程

基于 pnpm workspace 的 Monorepo 项目，包含 Vue3 大屏和 Vue3 移动端两个子项目。

## 项目结构

```
H5/
├── packages/
│   ├── screen/          # Vue3 大屏项目
│   │   ├── src/
│   │   │   ├── views/
│   │   │   ├── components/
│   │   │   ├── router/
│   │   │   ├── store/
│   │   │   └── styles/
│   │   ├── vite.config.js
│   │   └── package.json
│   ├── mobile/          # Vue3 移动端项目
│   │   ├── src/
│   │   │   ├── views/
│   │   │   ├── components/
│   │   │   ├── router/
│   │   │   └── styles/
│   │   ├── vite.config.js
│   │   └── package.json
│   └── shared/          # 共享代码库
│       ├── api/         # 接口封装
│       ├── utils/       # 工具函数
│       ├── config/      # 配置文件
│       └── package.json
├── pnpm-workspace.yaml
├── package.json
└── README.md
```

## 技术栈

### 大屏项目 (screen)
- Vue 3
- Vite 5
- Vue Router 4
- Pinia
- ECharts 5
- Vue-ECharts
- Sass

### 移动端项目 (mobile)
- Vue 3
- Vite 5
- Vue Router 4
- Pinia
- Vant 4（移动端 UI 组件库）
- 自动按需引入组件
- Sass

### 共享库 (shared)
- Axios（请求封装）
- 工具函数（防抖/节流/日期格式化/深拷贝等）
- 统一配置管理

## 快速开始

### 安装依赖

```bash
# 安装 pnpm (如果还没安装)
npm install -g pnpm

# 安装所有依赖
pnpm install
```

### 开发命令

```bash
# 启动大屏项目（端口：3000）
pnpm dev:screen

# 启动 H5 移动端（端口：8080）
pnpm dev:mobile

# 构建大屏项目
pnpm build:screen

# 构建 H5 移动端
pnpm build:mobile

# 构建所有项目
pnpm build:all

# 代码检查
pnpm lint
```

## 项目说明

### 1. 大屏项目 (screen)

**访问地址：** `http://localhost:3000`

**特点：**
- 适配大屏分辨率 (1920x1080)
- 数据可视化（ECharts）
- 暗色主题设计
- 响应式布局

**目录结构：**
```
packages/screen/src/
  ├── views/         # 页面组件
  ├── components/    # 通用组件
  ├── router/        # 路由配置
  ├── store/         # Pinia 状态管理
  ├── assets/        # 静态资源
  └── styles/        # 全局样式
```

### 2. 移动端项目 (mobile)

**访问地址：** `http://localhost:8080`

**特点：**
- 响应式设计，适配移动端
- Vant UI 组件库
- 自动按需引入，减小包体积
- 支持 PWA
- 适合嵌入第三方 APP

**可用组件：**
- NavBar（导航栏）
- Tabbar（底部导航）
- Cell/CellGroup（单元格列表）
- Grid（宫格）
- Button（按钮）
- Toast（轻提示）
- Dialog（弹窗）
- Image（图片）
- 等 60+ 组件

**目录结构：**
```
packages/mobile/src/
  ├── views/         # 页面组件
  ├── components/    # 通用组件
  ├── router/        # 路由配置
  ├── store/         # Pinia 状态管理
  ├── assets/        # 静态资源
  └── styles/        # 全局样式
```

### 3. 共享库 (shared)

共享代码可在两个项目中复用：

```javascript
// 在项目中引入 API
import { getUserInfo, getDataList } from '@shared/api'

// 引入工具函数
import { formatDate, debounce, throttle } from '@shared/utils'

// 引入配置
import { API_CONFIG, APP_CONFIG } from '@shared/config'
```

**可用工具函数：**
- `formatDate()` - 日期格式化
- `debounce()` - 防抖
- `throttle()` - 节流
- `deepClone()` - 深拷贝

## 环境变量

项目使用 `.env` 文件管理环境变量：

- `.env.development` - 开发环境
- `.env.production` - 生产环境

**示例：**
```bash
# .env.development
VITE_API_BASE_URL=http://localhost:3000/api
```

## 开发建议

### 1. 共享代码复用

将通用的业务逻辑、API 接口、工具函数放在 `packages/shared` 中，避免重复代码。

### 2. 组件开发

- **大屏项目**：使用 ECharts 开发数据可视化组件
- **移动端项目**：优先使用 Vant 组件，减少自定义开发

### 3. 样式规范

- 使用 Sass 预处理器
- 遵循 BEM 命名规范
- 组件样式使用 `scoped`

### 4. API 请求

统一使用 `@shared/api` 中封装的请求方法，自动处理 token、错误等。

## 注意事项

1. 本项目使用 **JavaScript**，未使用 TypeScript
2. 使用 **pnpm** 作为包管理工具，不要使用 npm 或 yarn
3. 大屏和移动端项目独立运行，通过 shared 包共享代码
4. 移动端项目基于 Vue3 + Vant，**不是 uni-app**，仅支持 H5
5. 如需扩展到小程序，建议使用 uni-app 或 Taro 重新搭建

## 部署说明

### 大屏项目部署

```bash
# 构建
pnpm build:screen

# 构建产物在 packages/screen/dist
# 部署到 Nginx 或其他静态服务器
```

### 移动端部署

```bash
# 构建
pnpm build:mobile

# 构建产物在 packages/mobile/dist
# 可以嵌入到第三方 APP 的 WebView 中
```

## 浏览器支持

### 大屏项目
- Chrome >= 87
- Firefox >= 78
- Safari >= 14
- Edge >= 88

### 移动端项目
- iOS Safari >= 10
- Android Chrome >= 5.0
- 微信浏览器

## 常见问题

### 1. 端口被占用

修改对应项目的 `vite.config.js` 中的 `server.port` 配置。

### 2. 组件按需引入不生效

移动端项目使用 `unplugin-vue-components` 自动按需引入 Vant 组件，无需手动引入。

### 3. 如何添加新页面？

```bash
# 1. 在 src/views 中创建页面组件
# 2. 在 src/router/index.js 中添加路由配置
```

## 技术支持

- Vue 3 文档：https://cn.vuejs.org/
- Vant 文档：https://vant-ui.github.io/vant/
- ECharts 文档：https://echarts.apache.org/zh/index.html
- Pinia 文档：https://pinia.vuejs.org/zh/

## 许可证

MIT
