12451 b553c4e519 feat: API 统一 + 设备详情补全 + H5 导航优化
- API 路由统一: 移除 /api/h5/,统一 /api/pms/ 入口
- 二进制改名: api-server -> pms-api(与服务名一致)
- nginx: 合并 /api/ + /pms/api/ 为 /api/pms/
- 新增 docs/API.md 接口文档
- 后端: CabinetDetail 增加 rssi/pow_fail/address/soc 等字段
- Redis 管道批量读取仓体实时数据(SOC/电压/电流/功率)
- DB: 所有 TIMESTAMP 列改为 DATETIME(修复类型不匹配)
- 用户管理: 新增创建时间/修改时间列,状态改用 Switch
- 角色管理/用户管理: 操作按钮改为图标
- PC 设备详情: 基本信息补全 RSSI/ICCID/电源/地址
- PC 卡片: 通道统计改用 Lucide 图标,颜色统一
- PC 二维码: canvas 渲染,含编号文字,支持右键下载
- H5: 按 uni-app 规范修正导航(navigateTo 替代 reLaunch)
- H5: 详情页加返回导航条
- H5: 扫码支持摄像头(jsQR)+ ?id= 参数
- H5: 底部 tabBar 在所有页面常显
- H5: 首页统计改为 6 项(设备/通道/空闲/充电/充满/故障)
- H5: 下拉刷新 / 上拉加载
- 产品首页: 添加业务联系
- 文档: 清理过时文件,补充缺失规范章节
2026-07-04 04:03:02 +08:00

4.6 KiB

name, description
name description
Navigation Navigation, routing, and page navigation components

Navigation

navigator

Page navigation component.

<template>
  <!-- Basic navigation -->
  <navigator url="/pages/detail/detail" hover-class="navigator-hover">
    Go to Detail
  </navigator>

  <!-- Open in new page -->
  <navigator url="/pages/detail/detail" open-type="navigate">
    Navigate (default)
  </navigator>

  <!-- Redirect (no back button) -->
  <navigator url="/pages/login/login" open-type="redirect">
    Login (redirect)
  </navigator>

  <!-- Switch to tab page -->
  <navigator url="/pages/index/index" open-type="switchTab">
    Go to Home
  </navigator>

  <!-- Re-launch app -->
  <navigator url="/pages/start/start" open-type="reLaunch">
    Restart
  </navigator>

  <!-- Navigate back -->
  <navigator open-type="navigateBack" :delta="1">
    Go Back
  </navigator>

  <!-- Exit app (mini-program) -->
  <navigator open-type="exit" target="miniProgram">
    Exit
  </navigator>
</template>

Properties:

Property Type Default Description
url String Target page path
open-type String navigate navigate/redirect/switchTab/reLaunch/navigateBack/exit
delta Number 1 Back level when open-type is navigateBack
hover-class String navigator-hover Hover state class
hover-stop-propagation Boolean false Stop hover propagation
target String self self/miniProgram (mini-program only)

Programmatic Navigation

uni.navigateTo

Navigate to new page.

// Basic navigation
uni.navigateTo({
  url: '/pages/detail/detail'
})

// With query parameters
uni.navigateTo({
  url: '/pages/detail/detail?id=123&name=test'
})

// With events (Vue 2 only)
uni.navigateTo({
  url: '/pages/detail/detail',
  events: {
    acceptDataFromOpenedPage(data) {
      console.log(data)
    }
  },
  success(res) {
    res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
  }
})

uni.redirectTo

Redirect to new page (closes current page).

uni.redirectTo({
  url: '/pages/login/login'
})

uni.reLaunch

Re-launch application to specified page.

uni.reLaunch({
  url: '/pages/index/index'
})

uni.switchTab

Switch to tab bar page.

uni.switchTab({
  url: '/pages/home/home'
})

uni.navigateBack

Navigate back to previous page.

// Go back one page
uni.navigateBack()

// Go back multiple pages
uni.navigateBack({
  delta: 2
})

// With animation (App only)
uni.navigateBack({
  delta: 1,
  animationType: 'pop-out',
  animationDuration: 300
})

uni.preloadPage

Preload page for faster navigation (App only).

uni.preloadPage({
  url: '/pages/detail/detail'
})

Getting Page Information

getCurrentPages

Get current page stack.

const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
console.log(currentPage.route) // Current page path

getApp

Get app instance.

const app = getApp()
console.log(app.globalData)

Page Event Channel (Vue 2)

Communicate between pages using event channel.

// Page A: Open page B
uni.navigateTo({
  url: '/pages/pageB/pageB',
  success(res) {
    // Listen for events from page B
    res.eventChannel.on('acceptDataFromPageB', (data) => {
      console.log(data)
    })
    // Send data to page B
    res.eventChannel.emit('acceptDataFromPageA', { data: 'hello' })
  }
})

// Page B: Receive and send data
export default {
  onLoad() {
    const eventChannel = this.getOpenerEventChannel()
    // Listen for events from page A
    eventChannel.on('acceptDataFromPageA', (data) => {
      console.log(data)
    })
    // Send data back to page A
    eventChannel.emit('acceptDataFromPageB', { data: 'world' })
  }
}

Navigation Bar

Custom Navigation Bar

Configure in pages.json:

{
  "pages": [{
    "path": "pages/index/index",
    "style": {
      "navigationStyle": "custom"
    }
  }]
}

uni.setNavigationBarTitle

uni.setNavigationBarTitle({
  title: 'New Title'
})

uni.setNavigationBarColor

uni.setNavigationBarColor({
  frontColor: '#ffffff',
  backgroundColor: '#000000',
  animation: {
    duration: 400,
    timingFunc: 'easeIn'
  }
})

uni.showNavigationBarLoading

uni.showNavigationBarLoading()
// ...loading operation
uni.hideNavigationBarLoading()