Skip to content

移动端项目简介

RuoYi-Plus-UniApp 移动端是一个基于 UniApp + Vue 3 + TypeScript 的企业级跨平台移动应用开发框架。项目深度整合 unibest 最佳实践,自研维护 WD UI 组件库(78个组件),为开发者提供开箱即用的移动端解决方案。

项目概述

项目定位

RuoYi-Plus-UniApp 移动端定位为企业级多端统一开发框架,具有以下核心定位:

  • 全栈协同 - 与 RuoYi-Plus 后端、plus-ui 前端形成完整的全栈技术体系
  • 多端统一 - 一套代码同时运行在小程序、H5、App 等多个平台
  • 开箱即用 - 内置认证授权、字典管理、主题系统等通用业务功能
  • 组件丰富 - 自研 WD UI 组件库提供 78 个高质量移动端组件

环境要求

环境最低版本
Node.js≥ 20.0.0
pnpm≥ 7.30.0

技术栈

核心技术

技术版本说明
UniApp3.0.0-4060620250520001跨平台应用框架
Vue3.4.21渐进式 JavaScript 框架
TypeScript5.7.2JavaScript 超集
Pinia2.0.36Vue 状态管理库
Vite6.3.5下一代前端构建工具

样式与UI

技术版本说明
UnoCSS65.4.2原子化 CSS 引擎
Sass1.77.8CSS 预处理器
WD UI重构后持续维护78 个移动端组件

工具链

技术版本说明
ESLint9.29.0代码检查工具
Iconify2.2.323图标解决方案
crypto-js4.2.0加密库
jsencrypt3.3.2RSA 加密库

开发辅助

插件说明
@uni-helper/vite-plugin-uni-pages页面路由自动生成
@uni-helper/vite-plugin-uni-layouts布局系统支持
@uni-helper/vite-plugin-uni-components组件自动导入
@uni-helper/vite-plugin-uni-manifestmanifest 配置管理
unplugin-auto-importAPI 自动导入

平台支持

小程序平台

平台支持状态说明
微信小程序✅ 完整支持主要目标平台,功能最完善
支付宝小程序✅ 完整支持已配置独立 appid
QQ 小程序✅ 完整支持已配置独立 appid
百度小程序✅ 完整支持已配置独立 appid
抖音小程序✅ 完整支持字节跳动小程序
快手小程序✅ 支持已配置基础设置
飞书小程序✅ 支持已配置基础设置
京东小程序✅ 支持已配置基础设置
小红书小程序✅ 支持已配置基础设置
鸿蒙小程序✅ 支持HarmonyOS 小程序

H5 平台

特性支持状态说明
History 路由✅ 支持默认使用 history 模式
HTTPS✅ 支持可配置 HTTPS 开发服务器
响应式布局✅ 支持完整的响应式设计方案
微信公众号✅ 支持支持微信公众号 H5 应用

App 平台

平台支持状态最低版本
Android✅ 支持minSdkVersion 30
iOS✅ 支持-
HarmonyOS✅ 支持App-Harmony

快应用平台

平台支持状态
快应用 WebView✅ 支持
华为快应用✅ 支持
联盟快应用✅ 支持

项目架构

目录结构

text
plus-uniapp/
├── src/                          # 源代码目录
│   ├── api/                      # API 接口层
│   │   ├── common/              # 通用接口
│   │   │   └── mall/            # 商城模块接口
│   │   │       └── order/       # 订单相关接口
│   │   └── system/              # 系统模块接口
│   │       ├── core/            # 核心接口(用户、角色、岗位)
│   │       └── dict/            # 字典接口
│   ├── components/               # 自定义业务组件
│   ├── composables/              # 组合式函数(14个)
│   │   ├── useAppInit.ts        # 应用初始化
│   │   ├── useAuth.ts           # 认证授权
│   │   ├── useDict.ts           # 字典管理
│   │   ├── useEventBus.ts       # 事件总线
│   │   ├── useHttp.ts           # HTTP 请求
│   │   ├── useI18n.ts           # 国际化
│   │   ├── usePayment.ts        # 支付处理
│   │   ├── useScroll.ts         # 滚动处理
│   │   ├── useShare.ts          # 分享功能
│   │   ├── useSubscribe.ts      # 订阅消息
│   │   ├── useTheme.ts          # 主题管理
│   │   ├── useToken.ts          # 令牌管理
│   │   ├── useWebSocket.ts      # WebSocket 通信
│   │   └── useWxShare.ts        # 微信分享
│   ├── layouts/                  # 布局组件
│   ├── locales/                  # 国际化语言包
│   ├── pages/                    # 主包页面
│   │   ├── auth/                # 认证相关页面
│   │   ├── index/               # 首页
│   │   └── my/                  # 个人中心
│   ├── pages-sub/                # 分包页面
│   │   └── admin/               # 管理员功能分包
│   ├── static/                   # 静态资源
│   ├── stores/                   # Pinia 状态管理
│   │   └── modules/             # 状态模块
│   │       ├── dict.ts          # 字典状态
│   │       ├── feature.ts       # 功能开关状态
│   │       └── user.ts          # 用户状态
│   ├── types/                    # TypeScript 类型定义
│   │   ├── global.d.ts          # 全局类型声明
│   │   └── http.d.ts            # HTTP 相关类型
│   ├── utils/                    # 工具函数(13个)
│   │   ├── boolean.ts           # 布尔值工具
│   │   ├── cache.ts             # 缓存工具
│   │   ├── crypto.ts            # 加密工具
│   │   ├── date.ts              # 日期工具
│   │   ├── function.ts          # 函数工具
│   │   ├── logger.ts            # 日志工具
│   │   ├── platform.ts          # 平台判断
│   │   ├── route.ts             # 路由工具
│   │   ├── rsa.ts               # RSA 加密
│   │   ├── string.ts            # 字符串工具
│   │   ├── tenant.ts            # 租户工具
│   │   ├── to.ts                # 异步处理
│   │   └── validators.ts        # 验证工具
│   ├── wd/                       # WD UI 组件库(78个组件)
│   │   ├── components/          # 组件实现
│   │   └── composables/         # 组件内部组合函数
│   ├── App.vue                   # 应用根组件
│   ├── main.ts                   # 应用入口
│   ├── manifest.json             # 应用配置
│   ├── pages.json                # 页面路由配置
│   ├── systemConfig.ts           # 系统配置
│   └── uni.scss                  # 全局样式变量
├── .env                          # 环境变量
├── .env.development              # 开发环境变量
├── .env.production               # 生产环境变量
├── package.json                  # 项目配置
├── vite.config.ts                # Vite 配置
├── tsconfig.json                 # TypeScript 配置
└── uno.config.ts                 # UnoCSS 配置

架构设计

text
┌─────────────────────────────────────────────────────────────┐
│                      应用层 (App Layer)                       │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐        │
│  │  Pages  │  │ Layouts │  │Components│  │  Stores │        │
│  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘        │
└───────┼────────────┼───────────┼────────────┼──────────────┘
        │            │           │            │
┌───────┴────────────┴───────────┴────────────┴──────────────┐
│                   组合层 (Composition Layer)                 │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐    │
│  │ useAuth  │  │ useHttp  │  │ useDict  │  │usePayment│    │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘    │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐    │
│  │useTheme  │  │ useI18n  │  │useScroll │  │useShare  │    │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘    │
└─────────────────────────────────────────────────────────────┘

┌───────┴─────────────────────────────────────────────────────┐
│                    UI层 (UI Layer)                           │
│  ┌───────────────────────────────────────────────────────┐  │
│  │              WD UI 组件库 (78个组件)                    │  │
│  │  基础(6) │ 布局(5) │ 导航(10) │ 表单(24) │ 展示(14)    │  │
│  │                    反馈(19)                            │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

┌───────┴─────────────────────────────────────────────────────┐
│                   工具层 (Utils Layer)                       │
│  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐    │
│  │boolean │ │ cache  │ │ crypto │ │  date  │ │function│    │
│  └────────┘ └────────┘ └────────┘ └────────┘ └────────┘    │
│  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐    │
│  │ logger │ │platform│ │ route  │ │  rsa   │ │ string │    │
│  └────────┘ └────────┘ └────────┘ └────────┘ └────────┘    │
└─────────────────────────────────────────────────────────────┘

┌───────┴─────────────────────────────────────────────────────┐
│                  平台层 (Platform Layer)                     │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐        │
│  │   H5    │  │   App   │  │微信小程序│  │其他小程序│        │
│  └─────────┘  └─────────┘  └─────────┘  └─────────┘        │
└─────────────────────────────────────────────────────────────┘

核心特性

🔐 认证与授权

项目提供完整的移动端认证授权方案:

多种登录方式

  • 微信小程序一键登录(手机号授权)
  • 微信公众号 OAuth 登录
  • 手机号 + 验证码登录
  • 账号密码登录
  • 第三方社交登录

账号体系

  • 支持 unionid 关联,实现跨平台账号统一
  • 自动注册机制,新用户无感注册
  • 多租户账号隔离

令牌管理

  • JWT Token 认证
  • 自动刷新机制
  • 安全存储方案

useAuth 组合函数

提供完整的权限检查功能:

typescript
import { useAuth } from '@/composables/useAuth'

const {
  // 状态
  isLoggedIn,      // 当前登录状态
  isSuperAdmin,    // 是否超级管理员
  isTenantAdmin,   // 是否租户管理员
  isAnyAdmin,      // 是否任意管理员

  // 权限检查
  hasPermission,   // 检查单个权限
  hasAllPermissions, // 检查所有权限
  hasTenantPermission, // 租户权限检查

  // 角色检查
  hasRole,         // 检查单个角色
  hasAllRoles,     // 检查所有角色

  // 路由控制
  canAccessRoute,  // 检查路由访问权限
  filterAuthorizedRoutes, // 过滤授权路由
} = useAuth()

// 检查特定权限
const canAddUser = hasPermission('system:user:add')

// 检查多个权限(满足任一)
const canManageUsers = hasPermission(['system:user:add', 'system:user:update'])

// 检查所有权限(满足全部)
const canFullManage = hasAllPermissions(['system:user:add', 'system:user:delete'])

// 检查角色
const isEditor = hasRole('editor')

// 租户权限检查
const canManageTenant = hasTenantPermission('tenant:manage')

🎨 WD UI 组件库

重构后持续维护的高质量移动端组件库,共计 78 个组件

分类组件数量主要组件
基础组件6Button、Icon、Text、Transition、Resize、ConfigProvider
布局组件5Row-Col、Grid、Gap、Divider、Sticky
导航组件10Navbar、Tabbar、Tabs、Segmented、Sidebar、IndexBar、Pagination、Paging、Backtop、Fab
表单组件24Input、Textarea、Checkbox、Radio、Switch、Picker、DatetimePicker、Calendar、Upload、Form 等
展示组件14Cell、Badge、Tag、Card、Collapse、Steps、Table、Img、Swiper、Skeleton 等
反馈组件19Popup、Toast、MessageBox、Loading、ActionSheet、Notify、NoticeBar 等

组件特性

  • 全部使用 Vue 3 + TypeScript 重构
  • 统一使用 rpx 单位适配移动端
  • 完整的 Props/Events/Slots 类型定义
  • 支持暗黑模式和主题定制
  • 按需引入,优化包体积

📱 图标系统

项目提供丰富的图标解决方案:

图标类型

  • Iconify 图标 - 基于 @iconify-json/carbon,提供 1000+ 图标
  • 字体图标 - 400+ 自定义图标,包含线条和实心两种风格
  • UnoCSS 图标 - 支持任意 Iconify 图标集

使用方式

vue
<!-- 字体图标 -->
<wd-icon name="home" />
<wd-icon name="home-fill" />

<!-- UnoCSS 图标 -->
<wd-icon name="i-carbon-home" />

<!-- 自定义大小和颜色 -->
<wd-icon name="home" size="48" color="#1890ff" />

🔧 组合式函数

项目提供 14 个核心组合式函数,覆盖常见业务场景:

useHttp - HTTP 请求

提供完整的 HTTP 请求封装,支持链式调用配置:

typescript
import { useHttp, http } from '@/composables/useHttp'

// 使用默认实例
const [err, users] = await http.get<User[]>('/api/users')
if (!err) {
  console.log(users)
}

// POST 请求
const [err, user] = await http.post<User>('/api/users', userData)

// 链式调用配置
const [err, token] = await http
  .noAuth()        // 禁用认证
  .encrypt()       // 启用加密
  .skipWait()      // 跳过初始化等待
  .timeout(20000)  // 设置超时
  .post<LoginResult>('/api/login', data)

// 上传文件
const [err, result] = await http.upload<UploadResult>({
  url: '/api/upload',
  filePath: tempFilePath,
  name: 'file',
  formData: { type: 'avatar' }
})

// 下载文件
const [err, result] = await http.download({
  url: '/api/download/file.pdf',
  filePath: `${uni.env.USER_DATA_PATH}/file.pdf`
})

链式配置方法

方法说明
noAuth()禁用认证,不携带 Token
encrypt()启用请求加密
noRepeatSubmit()禁用防重复提交检查
noTenant()禁用租户信息
skipWait()跳过应用初始化等待
noMsgError()禁用错误提示
timeout(ms)设置超时时间

useDict - 字典管理

提供字典数据的获取和缓存管理:

typescript
import { useDict, DictTypes } from '@/composables/useDict'

// 获取多个字典类型
const {
  sys_user_gender,
  sys_enable_status,
  dictLoading
} = useDict(DictTypes.sys_user_gender, DictTypes.sys_enable_status)

// 在模板中使用
// <wd-picker v-model="form.gender" :loading="dictLoading" :columns="sys_user_gender" />

预定义字典类型

类型说明
sys_audit_status审核状态
sys_boolean_flag逻辑标志
sys_display_setting显示设置
sys_enable_status启用状态
sys_file_type文件类型
sys_message_type消息类型
sys_notice_status通知状态
sys_notice_type通知类型
sys_oper_result操作结果
sys_oper_type业务操作类型
sys_payment_method支付方式
sys_platform_type平台类型
sys_user_gender用户性别
sys_data_scope数据权限类型

usePayment - 支付处理

提供多平台支付功能,自动适配不同支付环境:

typescript
import { usePayment } from '@/composables/usePayment'

const {
  // 状态
  loading,
  availableMethods,

  // 核心方法
  createOrderAndPay,  // 创建订单并支付
  payOrder,           // 支付已有订单

  // 查询方法
  queryOrderStatus,   // 单次查询订单状态
  pollOrderStatus,    // 轮询查询订单状态

  // 工具方法
  getTradeType,       // 获取交易类型
  fetchAvailableMethods, // 获取可用支付方式
  getPlatformInfo,    // 获取平台信息
} = usePayment()

// 创建订单并支付
const [err, result] = await createOrderAndPay({
  orderData: {
    productId: '123',
    quantity: 1,
    totalAmount: 99.00
  },
  paymentMethod: PaymentMethod.WECHAT,
  appId: 'wx123456',
  openId: 'user_openid'
})

if (!err) {
  console.log('支付成功', result)
}

// 获取平台支付信息
const platformInfo = getPlatformInfo()
console.log(platformInfo)
// {
//   platform: 'mp-weixin',
//   supportsWechatPay: true,
//   supportsAlipayPay: false,
//   supportsBalancePay: true,
//   isWechatEnvironment: true,
//   recommendedTradeTypes: { wechat: 'JSAPI', alipay: 'APP' }
// }

支持的支付方式

支付方式平台支持
微信支付微信小程序、微信公众号H5、App
支付宝支付支付宝小程序、支付宝H5、普通H5、App
余额支付所有平台

useWebSocket - 实时通信

提供 WebSocket 连接管理,支持自动重连和心跳检测:

typescript
import { useWebSocket, webSocket } from '@/composables/useWebSocket'

// 使用全局 WebSocket 管理器
webSocket.initialize()
webSocket.connect()

// 发送消息
webSocket.send({ type: 'chat', content: 'Hello' })

// 获取连接状态
console.log(webSocket.status)      // 'OPEN' | 'CLOSED' | 'CONNECTING' | 'CLOSING'
console.log(webSocket.isConnected) // true | false

// 自定义 WebSocket 实例
const { connect, disconnect, send, status, isConnected, data } = useWebSocket(
  'wss://example.com/ws',
  {
    maxRetries: 8,
    baseDelay: 3,
    heartbeatInterval: 30000,
    onMessage: (data) => console.log('收到消息:', data),
    onConnected: () => console.log('已连接'),
    onDisconnected: (code, reason) => console.log('已断开:', code, reason),
    onError: (error) => console.error('错误:', error)
  }
)

消息类型枚举

类型说明
SYSTEM_NOTICE系统通知
CHAT_MESSAGE聊天消息
DEV_LOG开发日志
HEARTBEAT心跳消息

useTheme - 主题管理

提供主题配置管理,支持全局和局部定制:

typescript
import { useTheme } from '@/composables/useTheme'

const {
  themeVars,        // 响应式主题配置
  setGlobalTheme,   // 设置全局主题
  resetGlobalTheme, // 重置全局主题
  getCurrentTheme,  // 获取当前主题
} = useTheme()

// 设置全局主题
setGlobalTheme({
  colorTheme: '#409EFF',
  colorSuccess: '#52C41A',
  colorWarning: '#FFBA00',
  colorDanger: '#F56C6C'
})

// 局部定制
const { themeVars } = useTheme({
  buttonPrimaryBgColor: '#ff4757',
  toastPadding: '8px 16px'
})

// 在模板中使用
// <wd-config-provider :theme-vars="themeVars">
//   <slot />
// </wd-config-provider>

useI18n - 国际化

提供增强的国际化功能,支持多种翻译模式:

typescript
import { useI18n } from '@/composables/useI18n'
import { LanguageCode } from '@/systemConfig'

const {
  // 翻译函数
  t,
  translate,
  translateRouteTitle,

  // 语言状态
  currentLanguage,
  currentLanguageName,
  languageOptions,
  isChinese,
  isEnglish,

  // 语言管理
  setLanguage,
} = useI18n()

// 简单用法
const text1 = t('userName', '用户名')
// 英文环境: "userName", 中文环境: "用户名"

// 使用字段信息
const text2 = t('', { field: 'UserName', comment: '用户名' })
// 英文环境: "UserName", 中文环境: "用户名"

// 使用语言特定翻译
const text3 = t('', {
  [LanguageCode.zh_CN]: '用户名',
  [LanguageCode.en_US]: 'UserName'
})

// 传统 i18n 键
const text4 = t('user.userName')

// 切换语言
setLanguage(LanguageCode.en_US)

useShare - 分享功能

提供多平台分享功能,支持页面级单例模式:

typescript
import { useShare } from '@/composables/useShare'

const {
  shareConfig,           // 当前分享配置
  pageConfig,            // 页面配置
  setShareData,          // 动态设置分享数据
  triggerShare,          // 主动触发分享
  resetShareConfig,      // 重置分享配置
  canShareToTimeline,    // 检查是否支持朋友圈分享
  handleShareAppMessage, // 处理分享到好友
  handleShareTimeline,   // 处理分享到朋友圈
} = useShare({
  title: '自定义标题',
  imageUrl: '/static/share.png',
  enableTimeline: true
})

// 动态设置分享数据(如根据商品信息)
setShareData({
  title: '精品商品推荐',
  imageUrl: product.coverImage,
  extraParams: { productId: product.id }
})

// 主动触发分享
triggerShare()

🛠️ 工具函数库

项目提供 13 个工具模块,复用前端工具函数设计:

cache - 缓存工具

基于 UniApp 存储 API 的优化缓存封装:

typescript
import { cache } from '@/utils/cache'

// 设置缓存(支持任意类型)
cache.set('theme', 'dark')                    // 字符串
cache.set('count', 42)                        // 数字
cache.set('isActive', true)                   // 布尔值
cache.set('userInfo', { id: 1, name: 'admin' }) // 对象
cache.set('tags', ['frontend', 'mobile'])     // 数组

// 设置过期时间(秒)
cache.set('token', 'abc123', 7 * 24 * 3600)   // 7天过期
cache.set('tempData', { temp: true }, 3600)   // 1小时过期

// 获取缓存(自动保持原始类型)
const theme = cache.get<string>('theme')      // "dark" (string)
const count = cache.get<number>('count')      // 42 (number)
const userInfo = cache.get<UserInfo>('userInfo') // { id: 1, name: 'admin' }

// 检查缓存是否存在
if (cache.has('userToken')) {
  // 用户已登录
}

// 移除缓存
cache.remove('userToken')

// 清除所有应用缓存
cache.clearAll()

// 手动清理过期缓存
cache.cleanup()

// 获取缓存统计信息
const stats = cache.getStats()
// { totalKeys: 100, appKeys: 50, currentSize: 1024, limitSize: 10485760, usagePercent: 10 }

platform - 平台判断

提供跨平台环境检测功能:

typescript
import PLATFORM from '@/utils/platform'

// 平台判断
PLATFORM.platform      // 当前平台标识
PLATFORM.isH5          // 普通浏览器 H5
PLATFORM.isApp         // App 环境
PLATFORM.isMp          // 小程序环境
PLATFORM.isMpWeixin    // 微信小程序
PLATFORM.isMpAlipay    // 支付宝小程序
PLATFORM.isMpToutiao   // 抖音小程序
PLATFORM.isWechatOfficialH5  // 微信公众号 H5
PLATFORM.isAlipayOfficialH5  // 支付宝 H5

// 环境检测函数
PLATFORM.isWechatEnvironment()  // 是否在微信环境
PLATFORM.isAlipayEnvironment()  // 是否在支付宝环境
PLATFORM.isInDevTools()         // 是否在开发者工具
PLATFORM.hasWeixinJSBridge()    // 是否有微信 JSBridge

// 检查支付授权目录(H5)
const { isValid, currentUrl, suggestion } = PLATFORM.checkPaymentUrl()

// 获取 URL 参数(H5)
const code = PLATFORM.safeGetUrlParams('code')

其他工具模块

模块说明主要功能
boolean布尔值工具布尔值转换、判断
crypto加密工具AES/MD5/SHA 加密解密
date日期工具日期格式化、计算
function函数工具防抖、节流、组合函数
logger日志工具调试日志、错误追踪
route路由工具页面跳转、参数处理
rsaRSA 加密RSA 加解密
string字符串工具字符串处理、格式化
tenant租户工具多租户标识管理
to异步处理Promise 错误处理
validators验证工具数据校验、正则验证

🌐 网络与安全

HTTP 请求封装

typescript
// 使用 useHttp 组合函数
const { request, get, post } = useHttp()

// GET 请求
const [err, data] = await get('/api/user/info')

// POST 请求
const [err, result] = await post('/api/user/update', { name: '张三' })

安全特性

  • API 请求加密解密(可配置开关)
  • RSA 公钥加密传输
  • 请求签名验证
  • 敏感数据脱敏
  • 自动添加请求 ID
  • 防重复提交保护

📦 分包策略

项目采用合理的分包策略优化小程序性能:

主包内容

  • 核心框架代码
  • 基础页面(首页、登录、个人中心)
  • 常用组件和工具

分包设计

  • pages-sub/admin - 管理员功能分包

分包优势

  • 减小主包体积,加快首屏加载
  • 按需加载,优化用户体验
  • 独立更新,降低维护成本

🎯 系统配置

项目提供统一的系统配置管理:

typescript
import { SystemConfig, LanguageCode } from '@/systemConfig'

// 应用基础配置
SystemConfig.app.id          // 应用标识
SystemConfig.app.title       // 应用名称
SystemConfig.app.env         // 运行环境 ('development' | 'production')
SystemConfig.app.publicPath  // 部署路径

// API 配置
SystemConfig.api.baseUrl     // API 基础地址

// 安全配置
SystemConfig.security.apiEncrypt    // API 加密开关
SystemConfig.security.rsaPublicKey  // RSA 公钥
SystemConfig.security.rsaPrivateKey // RSA 私钥

// 平台配置
SystemConfig.platforms.wechatMiniAppId      // 微信小程序 AppId
SystemConfig.platforms.wechatOfficialAppId  // 微信公众号 AppId
SystemConfig.platforms.alipayMiniAppId      // 支付宝小程序 AppId
SystemConfig.platforms.toutiaoMiniAppId     // 抖音小程序 AppId
SystemConfig.platforms.baiduMiniAppId       // 百度小程序 AppId
SystemConfig.platforms.qqMiniAppId          // QQ小程序 AppId
SystemConfig.platforms.mapKey               // 地图服务密钥
SystemConfig.platforms.serviceUrl           // 在线客服链接
SystemConfig.platforms.shareDomain          // 分享页面域名
SystemConfig.platforms.analyticsId          // 数据统计服务 ID

// 语言枚举
LanguageCode.zh_CN  // 'zh-CN'
LanguageCode.en_US  // 'en-US'

🌍 国际化支持

项目内置国际化解决方案:

支持语言

  • 中文简体 (zh-CN)
  • 英文 (en-US)

使用方式

typescript
import { useI18n } from '@/composables/useI18n'

const { t, locale, setLocale, isChinese, isEnglish } = useI18n()

// 获取翻译文案
const text = t('common.confirm')

// 切换语言
setLocale('en-US')

// 检查当前语言
if (isChinese.value) {
  // 中文环境处理
}

快速体验

环境准备

bash
# 安装 Node.js (>=18)
# 安装 pnpm
npm install -g pnpm

项目安装

bash
# 克隆项目
git clone https://gitee.com/dromara/RuoYi-Plus-uniapp.git

# 进入移动端目录
cd RuoYi-Plus-uniapp/plus-uniapp

# 安装依赖
pnpm install

开发运行

bash
# H5 开发
pnpm dev:h5

# 微信小程序开发
pnpm dev:mp-weixin

# 支付宝小程序开发
pnpm dev:mp-alipay

# App 开发
pnpm dev:app

项目构建

bash
# H5 构建
pnpm build:h5

# 微信小程序构建
pnpm build:mp-weixin

# App 构建
pnpm build:app

开发工具

工具用途
HBuilderXUniApp 官方 IDE,支持可视化开发
VS Code代码编辑器,搭配 Volar 插件
微信开发者工具微信小程序调试预览
支付宝小程序开发者工具支付宝小程序调试预览

开发优势

1. 完整的类型支持

  • 全部源码使用 TypeScript 编写
  • 组件 Props/Events/Slots 完整类型定义
  • API 接口类型自动推导
  • 智能提示和错误检查

2. 丰富的组件生态

  • 78 个高质量 UI 组件
  • 400+ 图标资源
  • 14 个业务组合函数
  • 13 个工具函数模块

3. 跨平台统一体验

  • 一套代码多端运行
  • 平台差异自动抹平
  • 条件编译精细控制
  • 统一的 API 调用方式

4. 优秀的开发体验

  • 热更新支持
  • 组件自动导入
  • API 自动导入
  • 路由自动生成

5. 企业级特性

  • 多租户支持
  • 权限控制
  • 数据加密
  • 日志追踪
  • WebSocket 实时通信
  • 多平台支付

适用场景

  • ✅ 企业移动办公应用
  • ✅ 电商小程序 / H5 商城
  • ✅ 多端统一的业务系统
  • ✅ 需要快速开发的小程序项目
  • ✅ 需要完整后台支撑的移动应用
  • ✅ 多租户 SaaS 移动端

最佳实践

1. 组合函数使用规范

typescript
// 推荐:在 setup 顶层调用
const { hasPermission, isLoggedIn } = useAuth()
const { get, post } = useHttp()

// 避免:在条件语句中调用
if (someCondition) {
  const { hasPermission } = useAuth() // ❌ 不推荐
}

2. 错误处理规范

typescript
// 使用 [err, data] 元组模式
const [err, users] = await http.get<User[]>('/api/users')
if (err) {
  console.error('获取用户列表失败:', err.message)
  return
}
// 使用 users 数据

3. 缓存使用规范

typescript
// 设置合理的过期时间
cache.set('userToken', token, 7 * 24 * 3600)  // 7天
cache.set('tempData', data, 5 * 60)           // 5分钟

// 使用泛型获取正确类型
const userInfo = cache.get<UserInfo>('userInfo')

4. 平台适配规范

typescript
// 使用条件编译处理平台差异
// #ifdef MP-WEIXIN
// 微信小程序特有逻辑
// #endif

// #ifdef H5
// H5 特有逻辑
// #endif

// 使用 PLATFORM 工具判断
if (PLATFORM.isMpWeixin) {
  // 微信小程序逻辑
}

常见问题

1. 如何配置多租户?

systemConfig.ts 中配置租户相关参数,使用 useAuthhasTenantPermission 方法进行租户权限检查。

2. 如何自定义主题?

使用 useTheme 组合函数设置全局主题,或在 wd-config-provider 组件上传入 themeVars 属性。

3. 如何处理支付回调?

使用 usePaymentpollOrderStatus 方法轮询订单状态,或在后端配置支付回调通知。

4. 如何实现国际化?

使用 useI18n 组合函数,在 locales 目录下配置语言包,通过 t 函数进行翻译。

5. 如何优化小程序包体积?

  • 使用分包策略拆分功能模块
  • 按需引入组件和工具
  • 压缩图片资源
  • 启用 Tree Shaking

生态系统

RuoYi-Plus-UniApp 是 RuoYi-Plus 全栈框架的移动端部分,与以下项目协同工作:

项目说明
RuoYi-PlusSpring Boot 3 后端框架
plus-uiVue 3 管理端前端
plus-uniappUniApp 移动端(本项目)

通过统一的 API 接口、类型定义和业务逻辑,三端形成完整的企业级全栈解决方案。