293 lines
7.8 KiB
Markdown
293 lines
7.8 KiB
Markdown
|
|
# 移动端适配说明文档
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
本项目已完成移动端适配的基础架构搭建,支持PC端和移动端自动识别和路由跳转。
|
|||
|
|
|
|||
|
|
## 技术栈
|
|||
|
|
|
|||
|
|
- **UI组件库**: Vant 2.12.54 (移动端) + Element UI 2.15.12 (PC端)
|
|||
|
|
- **框架**: Vue 2.6.12
|
|||
|
|
- **路由**: Vue Router 3.4.9
|
|||
|
|
- **状态管理**: Vuex 3.6.0
|
|||
|
|
|
|||
|
|
## 目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
mes-ui/src/
|
|||
|
|
├── views/
|
|||
|
|
│ ├── mobile/ # 移动端页面目录
|
|||
|
|
│ │ ├── layout/ # 移动端布局
|
|||
|
|
│ │ │ ├── MobileLayout.vue # 主布局
|
|||
|
|
│ │ │ └── components/
|
|||
|
|
│ │ │ ├── MobileNavBar.vue # 顶部导航栏
|
|||
|
|
│ │ │ └── MobileTabBar.vue # 底部标签栏
|
|||
|
|
│ │ ├── home/ # 首页
|
|||
|
|
│ │ │ └── index.vue
|
|||
|
|
│ │ ├── workOrder/ # 工单模块
|
|||
|
|
│ │ │ ├── list.vue # 工单列表
|
|||
|
|
│ │ │ ├── detail.vue # 工单详情
|
|||
|
|
│ │ │ └── pickManage.vue # 领料管理
|
|||
|
|
│ │ ├── report/ # 报工模块
|
|||
|
|
│ │ │ ├── list.vue # 报工列表
|
|||
|
|
│ │ │ └── form.vue # 报工表单
|
|||
|
|
│ │ ├── profile/ # 个人中心
|
|||
|
|
│ │ │ └── index.vue
|
|||
|
|
│ │ └── components/ # 移动端公共组件
|
|||
|
|
│ │ └── MobileWorkOrderCard.vue # 工单卡片
|
|||
|
|
│ └── mes/ # PC端页面(原有)
|
|||
|
|
├── router/
|
|||
|
|
│ ├── index.js # 主路由
|
|||
|
|
│ └── mobile.js # 移动端路由模块
|
|||
|
|
├── utils/
|
|||
|
|
│ └── device.js # 设备检测工具
|
|||
|
|
└── api/ # API接口(PC和移动端共用)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 核心功能
|
|||
|
|
|
|||
|
|
### 1. 设备自动检测
|
|||
|
|
|
|||
|
|
系统会自动检测用户设备类型(PC或移动端),并在登录后自动跳转到对应界面。
|
|||
|
|
|
|||
|
|
**检测规则**:
|
|||
|
|
- User Agent 包含移动设备标识
|
|||
|
|
- 或屏幕宽度 <= 768px
|
|||
|
|
|
|||
|
|
**实现文件**: `src/utils/device.js`
|
|||
|
|
|
|||
|
|
### 2. 路由自动保护
|
|||
|
|
|
|||
|
|
路由守卫会自动检查设备类型和访问路径是否匹配:
|
|||
|
|
- 移动设备访问PC页面 → 自动重定向到移动端首页
|
|||
|
|
- PC设备访问移动页面 → 自动重定向到PC端首页
|
|||
|
|
|
|||
|
|
**实现文件**: `src/permission.js`
|
|||
|
|
|
|||
|
|
### 3. 登录后自动跳转
|
|||
|
|
|
|||
|
|
用户登录成功后,系统会根据设备类型自动跳转:
|
|||
|
|
- 移动设备 → `/mobile/home`
|
|||
|
|
- PC设备 → `/index`
|
|||
|
|
|
|||
|
|
**实现文件**: `src/views/login.vue`
|
|||
|
|
|
|||
|
|
## 移动端路由
|
|||
|
|
|
|||
|
|
所有移动端路由以 `/mobile` 开头:
|
|||
|
|
|
|||
|
|
| 路径 | 页面 | 显示TabBar |
|
|||
|
|
|------|------|-----------|
|
|||
|
|
| `/mobile/home` | 首页 | 是 |
|
|||
|
|
| `/mobile/workOrder` | 工单列表 | 是 |
|
|||
|
|
| `/mobile/workOrder/detail/:id` | 工单详情 | 否 |
|
|||
|
|
| `/mobile/workOrder/pickManage/:workOrderId` | 领料管理 | 否 |
|
|||
|
|
| `/mobile/report` | 报工列表 | 是 |
|
|||
|
|
| `/mobile/report/add/:workOrderEntryId` | 报工表单 | 否 |
|
|||
|
|
| `/mobile/report/add/continuous/:workOrderId` | 连续制造报工 | 否 |
|
|||
|
|
| `/mobile/profile` | 个人中心 | 是 |
|
|||
|
|
|
|||
|
|
## 已完成功能
|
|||
|
|
|
|||
|
|
### ✅ 第一阶段:基础架构
|
|||
|
|
1. 添加 Vant UI 组件库依赖
|
|||
|
|
2. 配置 Babel 支持 Vant 按需引入
|
|||
|
|
3. 创建设备检测工具
|
|||
|
|
4. 创建移动端路由模块
|
|||
|
|
5. 创建移动端布局组件(顶部导航栏 + 底部标签栏)
|
|||
|
|
6. 修改登录逻辑支持设备检测
|
|||
|
|
7. 修改路由守卫支持设备类型保护
|
|||
|
|
|
|||
|
|
### ✅ 第二阶段:工单模块
|
|||
|
|
1. 移动端首页(快捷入口、待办事项、数据统计)
|
|||
|
|
2. 工单列表页面(搜索、筛选、下拉刷新、上拉加载)
|
|||
|
|
3. 工单卡片组件
|
|||
|
|
4. 工单详情页面(基本信息、报工排产、领料记录)
|
|||
|
|
5. 占位页面(报工列表、报工表单、领料管理、个人中心)
|
|||
|
|
|
|||
|
|
## 待开发功能
|
|||
|
|
|
|||
|
|
### 🔲 第三阶段:完善工单模块
|
|||
|
|
- 报工表单页面
|
|||
|
|
- 领料管理页面
|
|||
|
|
- 工单状态操作(开始、暂停、关闭)
|
|||
|
|
|
|||
|
|
### 🔲 第四阶段:其他模块
|
|||
|
|
- 仓库模块
|
|||
|
|
- 质检模块
|
|||
|
|
- 设备模块
|
|||
|
|
- 其他业务模块...
|
|||
|
|
|
|||
|
|
## 安装和运行
|
|||
|
|
|
|||
|
|
### 1. 安装依赖
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd mes-ui
|
|||
|
|
npm install
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 启动开发服务器
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
npm run dev
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 访问地址
|
|||
|
|
|
|||
|
|
- PC端: http://localhost:80
|
|||
|
|
- 移动端: 使用手机浏览器访问或使用浏览器开发者工具切换到移动设备模式
|
|||
|
|
|
|||
|
|
### 4. 测试移动端
|
|||
|
|
|
|||
|
|
**方法一:使用浏览器开发者工具**
|
|||
|
|
1. 打开 Chrome 浏览器
|
|||
|
|
2. 按 F12 打开开发者工具
|
|||
|
|
3. 点击设备切换按钮(或按 Ctrl+Shift+M)
|
|||
|
|
4. 选择移动设备型号(如 iPhone 12)
|
|||
|
|
5. 刷新页面
|
|||
|
|
|
|||
|
|
**方法二:使用真机测试**
|
|||
|
|
1. 确保手机和电脑在同一局域网
|
|||
|
|
2. 获取电脑IP地址(如 192.168.1.100)
|
|||
|
|
3. 在手机浏览器访问 http://192.168.1.100:80
|
|||
|
|
|
|||
|
|
## API接口复用
|
|||
|
|
|
|||
|
|
移动端和PC端共用相同的后端API接口,无需修改后端代码。
|
|||
|
|
|
|||
|
|
**示例**:
|
|||
|
|
```javascript
|
|||
|
|
// PC端和移动端都使用相同的API
|
|||
|
|
import { listWorkOrder, getWorkOrder } from '@/api/mes/production/workOrder'
|
|||
|
|
|
|||
|
|
// 获取工单列表
|
|||
|
|
listWorkOrder({ pageNum: 1, pageSize: 10 })
|
|||
|
|
|
|||
|
|
// 获取工单详情
|
|||
|
|
getWorkOrder(workOrderId)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 开发指南
|
|||
|
|
|
|||
|
|
### 添加新的移动端页面
|
|||
|
|
|
|||
|
|
1. 在 `src/views/mobile/` 下创建页面组件
|
|||
|
|
2. 在 `src/router/mobile.js` 中添加路由配置
|
|||
|
|
3. 根据需要设置 `meta.showTabBar` 控制是否显示底部标签栏
|
|||
|
|
|
|||
|
|
**示例**:
|
|||
|
|
```javascript
|
|||
|
|
// src/router/mobile.js
|
|||
|
|
{
|
|||
|
|
path: 'newPage',
|
|||
|
|
component: () => import('@/views/mobile/newModule/newPage'),
|
|||
|
|
name: 'MobileNewPage',
|
|||
|
|
meta: {
|
|||
|
|
title: '新页面',
|
|||
|
|
showTabBar: false, // 不显示底部标签栏
|
|||
|
|
requiresAuth: true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 使用 Vant 组件
|
|||
|
|
|
|||
|
|
Vant 组件已配置按需引入,直接在组件中导入使用即可:
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<script>
|
|||
|
|
import { Button, Cell, Toast } from 'vant'
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
components: {
|
|||
|
|
[Button.name]: Button,
|
|||
|
|
[Cell.name]: Cell
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
showToast() {
|
|||
|
|
Toast('提示信息')
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 调用API接口
|
|||
|
|
|
|||
|
|
移动端直接复用PC端的API接口:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
import { listWorkOrder } from '@/api/mes/production/workOrder'
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
methods: {
|
|||
|
|
async loadData() {
|
|||
|
|
try {
|
|||
|
|
const response = await listWorkOrder(this.queryParams)
|
|||
|
|
this.list = response.rows
|
|||
|
|
} catch (error) {
|
|||
|
|
this.$toast.fail('加载失败')
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **样式隔离**: 移动端页面使用 Vant 组件,PC端页面使用 Element UI,两者样式互不影响
|
|||
|
|
2. **路由命名**: 移动端路由名称建议以 `Mobile` 开头,便于区分
|
|||
|
|
3. **响应式设计**: 移动端页面应适配 320px - 768px 宽度的设备
|
|||
|
|
4. **触摸优化**: 确保可点击元素最小尺寸为 44px × 44px
|
|||
|
|
5. **性能优化**: 使用虚拟滚动、图片懒加载等技术优化性能
|
|||
|
|
|
|||
|
|
## 常见问题
|
|||
|
|
|
|||
|
|
### Q: 如何手动切换PC/移动模式?
|
|||
|
|
|
|||
|
|
A: 可以使用设备检测工具手动设置:
|
|||
|
|
```javascript
|
|||
|
|
import { setDeviceType } from '@/utils/device'
|
|||
|
|
|
|||
|
|
// 切换到移动模式
|
|||
|
|
setDeviceType('mobile')
|
|||
|
|
location.reload()
|
|||
|
|
|
|||
|
|
// 切换到PC模式
|
|||
|
|
setDeviceType('pc')
|
|||
|
|
location.reload()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 移动端页面如何访问Vuex状态?
|
|||
|
|
|
|||
|
|
A: 移动端和PC端共用同一个Vuex store,直接访问即可:
|
|||
|
|
```javascript
|
|||
|
|
computed: {
|
|||
|
|
userName() {
|
|||
|
|
return this.$store.state.user.name
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 如何调试移动端页面?
|
|||
|
|
|
|||
|
|
A:
|
|||
|
|
1. 使用Chrome开发者工具的设备模拟功能
|
|||
|
|
2. 使用真机 + Chrome远程调试
|
|||
|
|
3. 使用 vconsole 在移动端显示控制台
|
|||
|
|
|
|||
|
|
## 更新日志
|
|||
|
|
|
|||
|
|
### 2026-03-07
|
|||
|
|
- ✅ 完成移动端基础架构搭建
|
|||
|
|
- ✅ 完成设备自动检测和路由保护
|
|||
|
|
- ✅ 完成移动端布局组件(导航栏 + 标签栏)
|
|||
|
|
- ✅ 完成移动端首页
|
|||
|
|
- ✅ 完成工单列表和详情页面
|
|||
|
|
- ✅ 完成工单卡片组件
|
|||
|
|
|
|||
|
|
## 联系方式
|
|||
|
|
|
|||
|
|
如有问题,请联系开发团队。
|