Files
H3ConuMS-v2/移动端设计思路.md
T
v6ole f1f8518985 ```
feat(auth): 添加用户权限获取接口并完善JWT令牌角色信息

- 在JWT令牌中添加用户角色信息
- 新增get_my_permissions接口用于获取当前用户权限码列表
- 重构认证回调逻辑,增加错误日志记录
- 更新用户信息获取接口使用Authorization头验证
```
2026-04-06 00:40:08 +08:00

10 KiB
Raw Blame History

H3C ONU设备管理系统 - 移动端适配设计思路

项目背景

当前H3C ONU设备管理系统主要针对桌面端设计,在移动设备上存在以下问题:

  1. 布局在小屏幕上显示不全,需要左右滚动
  2. 按钮和交互元素太小,难以点击
  3. 表格数据在小屏幕上难以阅读
  4. 导航菜单在手机上使用不便
  5. 响应式断点设置不合理

设计目标

为移动端用户提供专用的小屏幕优化布局,聚焦核心功能,提升现场维护、外出监控和应急处理场景下的使用体验。

用户场景分析

移动端用户主要使用场景:

  1. 现场维护:快速查看设备状态,执行简单操作
  2. 外出监控:随时了解整体运行情况
  3. 应急处理:进行紧急操作和故障排查

核心功能范围

移动端聚焦以下三个核心功能:

  1. 统计预览 - 了解整体运行状态
  2. 设备列表 - 查找和管理具体设备
  3. OLT管理 - 管理OLT设备和端口

功能精简:移动端暂不需要新增、删除设备等复杂管理功能。

整体设计方案

一、架构方案:混合响应式设计

  • 独立移动端布局:为小屏幕(<768px)设计专用布局
  • 组件复用:复用现有Vue组件和业务逻辑
  • 渐进增强:桌面端功能完整,移动端聚焦核心
  • 主题继承:完全支持现有的深色/浅色主题切换

二、技术实现方案

推荐使用方案A:响应式断点 + 条件渲染

<template>
  <div class="mobile-layout" v-if="isMobile">
    <!-- 移动端专用布局 -->
    <BottomNavigation />
    <DeviceCards v-if="currentTab === 'devices'" />
  </div>
  <div class="desktop-layout" v-else>
    <!-- 现有桌面布局 -->
    <Sidebar />
    <DeviceTable />
  </div>
</template>

<script>
// 使用CSS媒体查询检测屏幕尺寸
const isMobile = window.matchMedia('(max-width: 768px)').matches
</script>

详细设计说明

1. 导航系统 - 底部导航栏

[统计] [设备] [OLT] [我的]

设计要点:

  • 固定底部,符合移动端使用习惯
  • 图标+文字,清晰易懂
  • 当前选中项高亮显示
  • 支持徽章提示(如设备告警数量)

2. 设备列表 - 卡片式设计

卡片内容(折叠状态):

┌─────────────────────────┐
│ MAC: aabb-ccdd-eeee ● 在线 │
│ 学校: 第一中学          │
│ 楼宇: 教学楼A-301       │
│ 场所:计算机教室         │
│ 房间号:201            │
└─────────────────────────┘

点击展开后拓展显示:

┌─────────────────────────┐
│ MAC: aabb-ccdd-eeee ● 在线 │
│ 学校: 第一中学          │
│ 楼宇: 教学楼A-301       │
│ 场所:计算机教室         │
│ 房间号:201            │
├─────────────────────────┤
│ [更新] [编辑] [业务下发] │
├─────────────────────────┤
│ 距离: 1235M           │
│ 端口: Onu2/0/2:15        │
│ 型号:WA6520H-EGPON/A  │
│ 所属 OLT:七百弄乡中心机房  │
│ 备注:由于是微机室,需配置 │
│      设备1000M带宽限速   │
└─────────────────────────┘

设计优势:

  • 信息层次清晰,重点突出(MAC、在线状态、学校名称、楼宇、场所、房间号)
  • 节省屏幕空间
  • 操作按钮在展开后显示,避免误触

3. 统计预览 - 可折叠面板

┌─────────────────────────┐
│ 📊 统计概览             │
│ ▼ 总体状态              │
│   在线: 3852/4000 (96%) │
│   城区: 95%  城郊: 92%  │
│   乡镇: 88%             │
├─────────────────────────┤
│ ▶ 详细统计(点击展开)  │
├─────────────────────────┤
│ ▶ 告警统计(点击展开)  │
└─────────────────────────┘

功能特点:

  • 默认显示关键指标
  • 详细内容可折叠,按需展开
  • 支持按区域/学校筛选
  • 支持时间范围选择

4. OLT管理 - 卡片+展开式

卡片内容:

┌─────────────────────────┐
│  192.168.1.100   ● 正常 │
│ 安装位置: 岩滩接入网机房 │
│ 环路: 0个       [检测]  │
├─────────────────────────┤
│ [快速扫描] [端口管理] [编辑] │
└─────────────────────────┘

功能分层:

  • 卡片显示:IP地址、环路检测状态、快速扫描按钮、端口管理按钮、编辑按钮

视觉设计规范

1. 主题继承

  • 完全支持现有的深色/浅色两种主题风格
  • 用户可自由切换主题
  • 保持一致的品牌视觉语言

2. 设计原则

  • 触摸友好:最小点击区域44×44px
  • 信息密度:适当减少信息密度,避免拥挤
  • 操作简化:复杂操作分步骤引导
  • 反馈及时:操作后提供明确反馈

3. 响应式断点

  • 移动端< 768px
  • 平板端768px - 1024px(可考虑适配)
  • 桌面端> 1024px(现有布局)

技术实施方案

第一阶段:基础框架(1-2天)

  1. 添加移动端检测逻辑
  2. 创建底部导航组件
  3. 设置移动端专用路由
  4. 适配现有主题系统

第二阶段:核心页面(3-5天)

  1. 设备卡片组件开发
  2. 统计折叠面板
  3. OLT管理卡片
  4. 响应式表格重构

第三阶段:交互优化(2-3天)

  1. 触摸手势支持
  2. 加载状态优化
  3. 离线能力增强
  4. 性能优化

组件设计规范

1. 设备卡片组件 (DeviceCard.vue)

<template>
  <div class="device-card" @click="toggleExpand">
    <div class="card-header">
      <span class="device-name">{{ device.name }}</span>
      <span class="status-badge" :class="device.status">
        {{ device.status === 'online' ? '● 在线' : '○ 离线' }}
      </span>
    </div>
    
    <div class="card-content">
      <div class="info-row">
        <span class="label">MAC:</span>
        <span class="value">{{ device.mac }}</span>
      </div>
      <div class="info-row">
        <span class="label">学校:</span>
        <span class="value">{{ device.school }}</span>
      </div>
      <!-- 更多信息... -->
    </div>
    
    <div v-if="expanded" class="card-expanded">
      <!-- 展开后的详细信息和操作按钮 -->
    </div>
  </div>
</template>

2. 底部导航组件 (BottomNavigation.vue)

<template>
  <nav class="bottom-nav">
    <router-link 
      v-for="item in navItems" 
      :key="item.path" 
      :to="item.path"
      class="nav-item"
      :class="{ active: $route.path.startsWith(item.path) }"
    >
      <span class="nav-icon">{{ item.icon }}</span>
      <span class="nav-label">{{ item.label }}</span>
    </router-link>
  </nav>
</template>

性能优化策略

1. 数据加载优化

  • 分页加载设备列表
  • 虚拟滚动长列表
  • 图片和图标懒加载

2. 网络优化

  • API请求合并
  • 数据缓存策略
  • 离线模式支持

3. 渲染优化

  • 组件懒加载
  • 避免不必要的重渲染
  • 使用CSS动画代替JS动画

测试策略

1. 设备兼容性测试

  • iOS Safari
  • Android Chrome
  • 微信内置浏览器
  • 不同屏幕尺寸

2. 功能测试

  • 触摸操作测试
  • 手势支持测试
  • 网络切换测试
  • 主题切换测试

3. 性能测试

  • 页面加载时间
  • 内存使用情况
  • 滚动流畅度
  • 电池消耗

后续扩展考虑

1. 功能扩展

  • 推送通知(设备离线告警)
  • 扫码快速定位设备
  • 语音搜索和操作
  • 离线数据同步

2. 体验优化

  • PWA支持(添加到主屏幕)
  • 深色模式自动切换
  • 手势快捷操作
  • 自定义快捷功能

3. 平台扩展

  • 微信小程序版本
  • 企业微信集成
  • 钉钉工作台集成
  • 移动端APP

总结

本设计方案通过重新规划移动端专用布局,采用卡片式设计、底部导航、可折叠面板等移动端友好模式,解决了当前系统在移动设备上的可用性问题。方案既保持了与现有系统的功能一致性,又针对移动端使用场景进行了优化,能够显著提升移动端用户体验。

核心价值:

  1. 专注核心功能:聚焦统计、设备、OLT三大核心场景
  2. 优化交互体验:卡片式设计更适合触摸操作
  3. 保持系统一致性:复用现有组件和主题
  4. 可扩展性强:为后续功能扩展预留空间

文档创建时间:2026年4月4日 基于与项目负责人的详细讨论结果整理

  1. 删除物料报错 inventory.js:12 DELETE http://10.10.10.14:5173/api/inventory/materials/1 400 (Bad Request)

  2. 出入库记录点击单据编号应该可以看到出库或者入库单填写时的详细信息

  3. 因为“数据导入”功能只导入了设备数据,所以不需要单独做一个页面了,改为在设备列表页面添加一个“数据导入”按钮,点击按钮后打开一个文件选择框,选择文件后进行数据导入(提供导入文件模板)。

  4. 给现有的OLT列表也添加一个区域(和设备列表的区域内容同步,默认先选择城区,后续我再自己修改),并且设置区域权限,区域管理员只能管理对应区域的OLT。

  5. 我发现现在的30分钟定时检查好像有点问题,还不是触发完了之后所有设备都显示离线,请帮我排查一下

  6. 新增一个设置,超级管理员可以设置定时检查时间,默认是30分钟,用户可以自己设置,但是不能小于5分钟。

OLT管理页面的“区域”是需要跟用户管理页面中,区域管理员的“分配区域”是同步的,因为区域管理员应该只能查看到自己区域内的OLT,现在OLT管理页面的区域只有三个选项,这是不对的。