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.0 KiB

name, description
name description
uni-promises Promise wrappers for uni-app APIs - convert callback-based APIs to Promise-based

uni-promises

Promise wrappers for uni-app's callback-based APIs. Convert uni-app APIs to return Promises for better async/await support.

Installation

npm i @uni-helper/uni-promises

Usage

Instead of using callbacks:

// Original callback style
uni.request({
  url: 'https://api.example.com',
  success: (res) => {
    console.log(res.data)
  },
  fail: (err) => {
    console.error(err)
  },
})

Use Promises:

import { request } from '@uni-helper/uni-promises'

// Promise style
const res = await request({
  url: 'https://api.example.com',
})
console.log(res.data)

Available APIs

Most uni-app APIs are wrapped:

Network

  • request - HTTP request
  • uploadFile - File upload
  • downloadFile - File download
  • connectSocket - WebSocket

Storage

  • setStorage - Set storage
  • getStorage - Get storage
  • removeStorage - Remove storage
  • clearStorage - Clear all storage
  • getStorageInfo - Storage info

Media

  • chooseImage - Select images
  • chooseVideo - Select video
  • chooseMedia - Select media
  • previewImage - Preview images
  • saveImageToPhotosAlbum - Save image
  • compressImage - Compress image

File

  • saveFile - Save file
  • getFileInfo - File info
  • getSavedFileList - Saved files list
  • removeSavedFile - Remove saved file
  • openDocument - Open document

Location

  • getLocation - Get location
  • chooseLocation - Choose location
  • openLocation - Open location

Device

  • getSystemInfo - System info
  • getNetworkType - Network type
  • scanCode - QR/barcode scan
  • setClipboardData - Copy to clipboard
  • getClipboardData - Get clipboard

UI

  • showToast - Show toast
  • showModal - Show modal
  • showActionSheet - Show action sheet
  • showLoading - Show loading
  • hideLoading - Hide loading
  • showNavigationBarLoading - Nav loading
  • hideNavigationBarLoading - Hide nav loading
  • setNavigationBarTitle - Set nav title
  • setNavigationBarColor - Set nav color
  • pageScrollTo - Scroll to position

Navigation

  • navigateTo - Navigate to page
  • redirectTo - Redirect to page
  • reLaunch - Re-launch app
  • switchTab - Switch tab
  • navigateBack - Go back

Login

  • login - User login
  • checkSession - Check session
  • getUserProfile - Get user profile
  • getUserInfo - Get user info

Payment

  • requestPayment - Request payment

Example Usage

import {
  showModal,
  showToast,
  getStorage,
  navigateTo,
  getSystemInfo,
  chooseImage,
  uploadFile,
} from '@uni-helper/uni-promises'

async function handleUserAction() {
  // Show confirmation
  const { confirm } = await showModal({
    title: 'Confirm',
    content: 'Are you sure?',
  })

  if (!confirm) return

  try {
    // Get cached data
    const { data: token } = await getStorage({ key: 'token' })

    // Get system info
    const systemInfo = await getSystemInfo()
    console.log('Platform:', systemInfo.platform)

    // Select image
    const { tempFilePaths } = await chooseImage({
      count: 1,
      sizeType: ['compressed'],
    })

    // Upload file
    const uploadRes = await uploadFile({
      url: 'https://api.example.com/upload',
      filePath: tempFilePaths[0],
      name: 'file',
    })

    await showToast({
      title: 'Success!',
      icon: 'success',
    })

    // Navigate
    await navigateTo({
      url: '/pages/success/index',
    })
  } catch (error) {
    await showToast({
      title: error.message || 'Failed',
      icon: 'error',
    })
  }
}

Error Handling

All wrapped APIs reject with standard Error objects:

import { request } from '@uni-helper/uni-promises'

try {
  const res = await request({ url: 'https://api.example.com' })
} catch (error) {
  // error.message contains the fail callback message
  console.error('Request failed:', error.message)
}