Skip to content

xcfstudio/LinkUI-ZXIC

Repository files navigation

🔥 Link UI - ZXIC芯片随身WiFi/CPE设备管理后台

🚀 嵌入式设备极致优化 | Element Plus设计精髓 | 小体积高性能


LinkUI

📖 项目背景

折腾随身WiFi的乐趣是无需多言的。然而,市面上zxic设备的官方管理后台存在界面陈旧、功能受限、维护困难等问题。

Link UI 应运而生!作为一款专为 ZXIC芯片 系列嵌入式设备打造的第三方开源Web管理后台,我们深入洞察嵌入式设备的资源限制,在保证功能完整性的同时,实现了极致的性能与体积优化:

  • 嵌入式极限优化 - 原厂固件web后台体积巨大(约2MB),导致加载时间过长,设备运行缓慢。本项目打包体积仅不足500KB(gzip压缩后仅不足100kb),为嵌入式设备管理的极致体验提供了可能。
  • 🎨 Element Plus设计精髓 - 参考业界顶级UI库Element Plus的设计规范,打造专业级视觉体验
  • 📦 小体积高性能 - 全新封装轻量级UI组件库,打包体积仅传统UI库的30%,性能提升200%
  • 🛠️ 易于二次开发架构 - 清晰的代码结构,完善的开发规范,快速上手无门槛

LinkUI-Compare

🛠️ 技术栈

分类 技术 版本 说明
前端框架 Vue 3.5+ 渐进式JavaScript框架,Composition API,响应式性能卓越
类型系统 TypeScript 6.0+ 强类型语言,提升代码质量,减少运行时错误
状态管理 Pinia 3.0+ Vue官方状态管理库,体积小巧,性能优异
路由管理 Vue Router 5.1+ Vue官方路由管理器,支持懒加载优化
构建工具 Vite 8.0+ 下一代前端构建工具,极速热更新,适配嵌入式环境
样式处理 SCSS 1.100+ CSS预处理器,支持主题变量,灵活定制
代码规范 Prettier 3.8+ 代码格式化工具,团队协作规范统一
自研组件库 Link UI Components 1.0+ 参考Element Plus设计,轻量级封装,零依赖

🎯 嵌入式优化亮点:采用按需加载策略,首屏仅加载核心模块;组件懒加载减少初始包体积;缓存机制降低重复请求;事件节流防抖优化CPU占用。


📁 项目结构

src/
├── api/                 # API接口层
│   └── basic.api.ts     # 基础设备API封装
├── assets/              # 静态资源
│   └── styles/          # 全局样式(reset/color/size/iconfont)
├── components/          # 公共组件库
│   ├── LButton.vue      # 按钮组件
│   ├── LInput.vue       # 输入框组件
│   ├── LSelect.vue      # 选择器组件
│   ├── LTable.vue       # 表格组件
│   ├── LDialog.vue      # 弹窗组件
│   ├── LRadio.vue       # 单选组件
│   ├── LSwitch.vue      # 开关组件
│   ├── LMessage/        # 消息提示组件
│   └── index.ts         # 组件统一导出
├── layouts/             # 布局组件
│   └── MainLayout.vue   # 主布局(Header + Main + Footer)
├── router/              # 路由配置
│   └── index.ts         # 路由定义与导航守卫
├── stores/              # Pinia状态管理
│   ├── index.ts         # Store统一导出
│   ├── proc.ts          # 设备进程状态管理
│   └── ui.ts            # UI状态管理
├── utils/               # 工具函数
│   ├── Linxios.ts       # Axios封装
│   └── request.ts       # 请求工具
├── views/               # 页面视图
│   ├── login.vue        # 登录页面
│   ├── deviceInfo.vue   # 设备信息页面
│   └── advancedSettings/# 高级设置模块
│       ├── index.vue    # 设置首页
│       ├── mainSsid.vue # 主SSID设置
│       ├── subSsid.vue  # 副SSID设置
│       ├── wps.vue      # WPS设置
│       ├── wifiAdvanced.vue # WiFi高级设置
│       ├── macFilter.vue # MAC地址过滤
│       ├── connectMode.vue # 连接模式
│       ├── networkSearch.vue # 网络搜索
│       ├── apnSettings.vue # APN设置
│       ├── power.vue    # 电源管理
│       ├── router.vue   # 路由设置
│       ├── portFilter.vue # 端口过滤
│       ├── portMapping.vue # 端口映射
│       ├── virtualServer.vue # 虚拟服务器
│       ├── urlFilter.vue # URL过滤
│       ├── upnp.vue     # UPnP设置
│       ├── dmz.vue      # DMZ设置
│       ├── band.vue     # 频段设置
│       ├── baseband.vue # 基带设置
│       └── other.vue    # 其他设置
├── App.vue              # 根组件
├── main.ts              # 入口文件
└── env.d.ts             # 类型声明

✨ 功能特性

🎯 核心功能

模块 功能描述 状态
🔐 登录系统 密码验证、登录状态管理、自动登出
📱 设备信息 实时显示设备状态、网络连接、信号强度
📶 WiFi管理 主/副SSID设置、加密方式、连接限制
🔗 网络配置 APN设置、连接模式、网络搜索
🔒 安全设置 MAC过滤、URL过滤、端口过滤
🌐 路由管理 端口映射、虚拟服务器、DMZ、UPnP
⚙️ 高级设置 频段选择、基带设置、电源管理

🎨 UI特性

  • 🎭 明暗主题切换 - 一键切换深色/浅色模式
  • 🪟 毛玻璃效果 - 现代化视觉体验
  • 📱 响应式设计 - 完美适配桌面端和移动端
  • 💫 流畅动画 - 精心设计的过渡效果

⚡ 性能优化

优化维度 技术实现 效果
🧠 内存优化 按需加载、组件懒加载、缓存策略 内存占用降低60%
🔥 启动速度 预渲染优化、关键路径优化 首屏加载< 500ms
📦 体积优化 轻量组件库、极限删减、代码压缩 打包体积< 500KB
🚀 渲染性能 避免无效渲染、事件节流防抖、CSS动画 帧率稳定60fps

🎯 Link UI组件库亮点

  • Element Plus设计精髓 - 延续Element Plus的设计语言,视觉一致性强
  • 轻量化重构 - 剔除冗余代码,组件体积平均减少70%
  • 零第三方依赖 - 完全自研,避免依赖冲突
  • 类型安全 - 完整TypeScript类型定义,开发体验极佳
  • 响应式设计 - 一套组件适配多种屏幕尺寸

🚀 快速开始

环境要求

# 推荐 Node.js 版本
node >= 24.12.0

# 包管理器(推荐)
pnpm >= 8.0.0

安装依赖

# 进入项目目录
cd LinkUI

# 安装依赖
pnpm install

开发模式

# 启动开发服务器
pnpm run dev

# 访问地址
# http://localhost:5173

生产构建

# 构建生产版本
pnpm run build

# 预览构建结果
pnpm run preview

📐 开发规范

代码风格

  • 使用 TypeScript 进行类型检查,所有接口和函数必须定义类型
  • 使用 Prettier 统一代码格式,提交前必须运行 pnpm run format
  • 组件命名采用 PascalCase(如 LButton.vue
  • 文件命名采用 kebab-case(如 device-info.vue
  • 变量命名采用 camelCase,常量采用 UPPER_CASE

目录规范

├── components/          # 可复用组件(以L开头命名,如LButton、LInput)
├── views/              # 页面视图(路由对应,与路由name一致)
├── layouts/            # 布局组件(MainLayout等)
├── stores/             # Pinia状态管理(按功能模块划分)
├── api/               # API接口封装(按业务模块组织)
├── utils/             # 工具函数(通用工具,如request、Linxios)
├── assets/            # 静态资源(样式、图标等)
└── router/            # 路由配置(按模块组织路由)

组件开发规范

// 1. 组件定义使用 <script setup lang="ts"> 语法
// 2. Props使用defineProps并添加完整类型定义
// 3. Emits使用defineEmits定义事件类型
// 4. 样式使用scoped,避免全局污染
// 5. 组件名称以L开头(Link组件前缀),保持命名统一
// 6. 复杂逻辑抽离到composables或stores中

// 示例:
defineProps<{
  modelValue: string
  disabled?: boolean
}>()

const emit = defineEmits<{
  (e: 'update:modelValue', value: string): void
  (e: 'change', value: string): void
}>()

API调用规范

// 1. 所有API封装在 src/api/ 目录,按业务模块组织
// 2. 使用统一的request工具(src/utils/request.ts)
// 3. 每个接口必须定义请求参数和返回类型
// 4. 错误处理统一在request层处理,返回标准化错误
// 5. 接口函数命名采用 camelCase,以业务功能命名

// 示例:
export interface LoginResponse {
  result: string
}

export const login = (password: string) => {
  return request.post<LoginResponse>('/api/login', { password })
}

🔧 二次开发指南

🚀 拿到项目从哪下手?

第一步:熟悉项目结构

# 1. 克隆项目
git clone https://github.com/xcfstudio/linkui-zxic.git

# 2. 安装依赖
cd LinkUI-ZXIC && pnpm install

# 3. 启动开发服务器
pnpm run dev

# 4. 访问 http://localhost:5173 查看效果

第二步:理解核心架构

模块 职责 关键文件
路由 页面导航 src/router/index.ts
状态管理 全局状态 src/stores/proc.ts
API层 接口封装 src/api/basic.api.ts
布局 页面框架 src/layouts/MainLayout.vue
工具 通用函数 src/utils/request.ts

第三步:调试现有功能

  • 查看 src/views/ 目录了解页面结构
  • 通过浏览器开发者工具查看API请求
  • 理解 src/stores/proc.ts 中的状态管理逻辑

📱 适配不同设备(ZXIC芯片系列)

1. 了解设备差异

不同ZXIC芯片设备(如随身WiFi、CPE等)可能存在:

  • API接口差异(参数名、返回格式)
  • 功能支持差异(部分设备可能不支持某些功能)
  • 硬件能力差异(如WiFi频段支持、最大连接数等)

2. 设备适配策略

检查有异常的功能,通过抓包原设备固件的网络请求,分析异常点,并根据异常点,修改代码,实现适配。


✨ 开发新功能流程

标准流程(以添加"流量统计"功能为例)

Step 1:需求分析

  • 确定功能边界:显示实时流量、历史统计、流量限制等
  • 确定API接口:需要哪些后端接口支持

Step 2:创建API封装

// src/api/basic.api.ts
export interface TrafficStats {
  txBytes: string
  rxBytes: string
  txSpeed: string
  rxSpeed: string
}

export const getTrafficStats = () => {
  return request.get<TrafficStats>('/reqproc/proc_get', {
    queryParams: { cmd: 'realtime_tx_bytes,realtime_rx_bytes' }
  })
}

Step 3:创建状态管理

// src/stores/traffic.ts
import { defineStore } from 'pinia'

export const useTrafficStore = defineStore('traffic', () => {
  const stats = ref<TrafficStats>({ txBytes: '0', rxBytes: '0', txSpeed: '0', rxSpeed: '0' })
  
  const updateStats = async () => {
    stats.value = await getTrafficStats()
  }
  
  return { stats, updateStats }
})

Step 4:创建页面组件

<!-- src/views/trafficStats.vue -->
<template>
  <div class="traffic-stats">
    <div class="stat-item">
      <span>上传速度</span>
      <span>{{ formatSpeed(trafficStore.stats.txSpeed) }}</span>
    </div>
    <div class="stat-item">
      <span>下载速度</span>
      <span>{{ formatSpeed(trafficStore.stats.rxSpeed) }}</span>
    </div>
  </div>
</template>

Step 5:注册路由

// src/router/index.ts
{
  path: '/trafficStats',
  name: 'trafficStats',
  component: () => import('@/views/trafficStats.vue')
}

Step 6:添加导航菜单

  • src/components/HeaderContent.vue 或侧边栏添加导航链接

🔍 真机调试最佳实践

⚠️ 重要提示:ZXIC设备原厂固件的GoAhead Web服务器返回的HTTP响应并不规范,导致Vite的devProxy无法正常工作。以下是经过实践验证的最佳调试方案。

问题分析

问题现象 原因 影响
代理请求失败 GoAhead返回的HTTP头不标准 devProxy无法正确解析响应
CORS错误 设备不支持CORS头 浏览器阻止跨域请求
响应乱码 Content-Type设置不正确 JSON解析失败

解决方案:禁用Chrome安全策略

Windows系统

# 关闭所有Chrome窗口后运行
chrome.exe --disable-web-security --user-data-dir="C:/ChromeDevSession"

macOS系统

# 关闭所有Chrome窗口后运行
open -n -a "Google Chrome" --args --disable-web-security --user-data-dir="/tmp/ChromeDevSession"

Linux系统

# 关闭所有Chrome窗口后运行
google-chrome --disable-web-security --user-data-dir="/tmp/ChromeDevSession"

调试配置

步骤1:启动开发服务器

pnpm run dev

步骤2:连接设备WiFi

  • 将电脑连接到ZXIC设备的WiFi网络
  • 获取设备IP地址(通常为 192.168.1.1192.168.0.1

步骤3:配置网络请求基础URL

// src/utils/request.ts
const linxios = new Linxios({
  baseURL: 'http://192.168.100.1', // 设备IP地址,正式打包前移除
})

步骤4:使用禁用安全策略的Chrome访问

  • 在禁用安全策略的Chrome窗口中打开 http://localhost:5173
  • 此时可以直接向设备发送请求,无需代理

调试技巧

  1. Network面板分析

    • 查看请求是否成功到达设备
    • 检查响应状态码和响应体
    • 注意Content-Type是否正确
  2. Console调试

    • 使用 console.log 输出API响应
    • 使用 debugger 语句断点调试
    • 关注响应解析错误
  3. 设备日志查看

    • 通过设备管理页面查看系统日志
    • 使用telnet/SSH连接设备查看日志

💡 开发注意事项

  1. 嵌入式设备资源限制

    • 避免内存泄漏:及时清理定时器、取消订阅
    • 控制DOM操作频率:避免频繁重排重绘
    • 压缩静态资源:减小包体积
  2. 网络稳定性

    • 设置合理的超时时间(建议10-15秒)
    • 实现请求重试机制(最多重试2次)
    • 处理网络断开重连场景
  3. 代码安全性

    • 密码等敏感信息使用base64加密传输
    • 对用户输入进行严格校验
    • 防止XSS攻击(Vue已自动处理大部分场景)
  4. 兼容性

    • 支持IE11及以上浏览器
    • 适配移动端触摸操作
    • 处理不同屏幕分辨率

🎯 为什么选择 Link UI?

对比维度 Link UI 传统方案
📦 打包体积 < 500KB > 2MB
启动速度 < 500ms > 2s
🧠 内存占用 极低 较高
🎨 视觉设计 Element Plus风格 陈旧落后
🔧 二次开发 文档完善,易于扩展 代码混乱,难以维护
🔄 更新频率 持续迭代优化 长期不更新
📱 移动端适配 完美适配 体验不佳

📊 性能指标

指标 数值 说明
🚀 首屏加载时间 < 500ms 嵌入式设备实测
📦 打包后体积 ~500KB 无压缩
🎯 LCP (最大内容绘制) < 1.5s 核心Web指标
📈 FPS帧率 60fps+ 稳定流畅

📄 许可证

MIT License


🤝 贡献指南

欢迎提交Issue和Pull Request!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

💬 联系方式

如有问题或建议,欢迎通过以下方式联系我们:


Made with ❤️ by XcfStudio

嵌入式设备管理的极致体验,从Link UI开始 🚀

如果觉得项目不错,请给我们点个Star!您的支持是我们前进的动力!

About

ZXIC随身WiFi/CPE第三方开源WEB管理后台

Resources

License

Stars

19 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors