更新记录

1.0.0(2025-11-16) 下载此版本

新增

  • 初始版本发布
  • 支持用户信息展示
  • 支持统计数据展示
  • 支持菜单列表配置
  • 支持三种主题风格
  • 支持退出登录功能
  • 支持多种图标类型
  • 支持动态更新数据

平台兼容性

uni-app(3.6.14)

Vue2 Vue2插件版本 Vue3 Vue2插件版本 Chrome Chrome插件版本 Safari Safari插件版本 app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 5.0 1.0.0 12 1.0.0 1.0.0
微信小程序 微信小程序插件版本 支付宝小程序 支付宝小程序插件版本 抖音小程序 抖音小程序插件版本 百度小程序 百度小程序插件版本 快手小程序 快手小程序插件版本 京东小程序 京东小程序插件版本 鸿蒙元服务 鸿蒙元服务插件版本 QQ小程序 QQ小程序插件版本 飞书小程序 飞书小程序插件版本 快应用-华为 快应用-华为插件版本 快应用-联盟 快应用-联盟插件版本
1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 1.0.0

uni-app x(3.6.14)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

其他

多语言 暗黑模式 宽屏模式

hy-my-profile

一个简单易用的 uniapp 个人中心页面模板插件,开箱即用,高度可配置。

✨ 特性

  • 🚀 开箱即用:简单配置即可快速集成
  • 🎨 多种主题:支持默认、暗黑、渐变三种主题风格
  • 📱 完美适配:支持 H5、小程序、APP 等多端
  • uni-app x 支持:提供 .uvue 文件,完美支持 uni-app x
  • 🔧 灵活配置:支持头像形状、主题色、菜单项等自定义配置
  • 🎯 事件丰富:提供完整的事件监听机制
  • 💪 TypeScript/UTS:提供完整的类型定义
  • 🔄 响应式:支持动态更新用户信息和统计数据

🚀 快速开始

基础使用

<template>
  <view>
    <hy-my-profile
      :userInfo="userInfo"
      :menus="menus"
      @menu-click="onMenuClick"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      userInfo: {
        avatar: 'https://your-avatar-url.jpg',
        nickname: '用户昵称',
        desc: 'VIP会员'
      },
      menus: [
        { icon: 'order', title: '我的订单', path: '/pages/order/list' },
        { icon: 'wallet', title: '我的钱包', path: '/pages/wallet/index' },
        { icon: 'setting', title: '设置', path: '/pages/setting/index' }
      ]
    }
  },
  methods: {
    onMenuClick(menu) {
      console.log('菜单点击:', menu)
    }
  }
}
</script>

📖 API 文档

Props 属性

属性 类型 默认值 说明
theme String 'default' 主题:default / dark / gradient
primaryColor String '#667eea' 主题色
avatarShape String 'circle' 头像形状:circle / square / rounded
userInfo Object - 用户信息对象
stats Array [] 统计数据数组
menus Array [] 菜单列表数组
showStats Boolean true 是否显示统计信息
showLogout Boolean false 是否显示退出登录按钮
logoutText String '退出登录' 退出登录按钮文字
loginPath String '/pages/login/index' 登录页面路径
profilePath String '/pages/profile/detail' 个人详情页路径

userInfo 对象结构

{
  avatar: 'https://xxx.jpg',  // 头像地址
  nickname: '用户昵称',        // 用户昵称
  desc: '个人简介'             // 个人简介
}

stats 数组结构

[
  {
    label: '收藏',    // 标签名称
    value: 123,      // 统计值
    key: 'favorite'  // 唯一标识
  }
]

menus 数组结构

[
  {
    icon: 'order',           // 图标(emoji类型时使用内置图标名)
    iconType: 'emoji',       // 图标类型:emoji / image / iconfont
    title: '我的订单',       // 菜单标题
    badge: 5,                // 徽章数字,0或不传则不显示
    path: '/pages/order/list' // 跳转路径(可选)
  }
]

图标类型说明

1. emoji 类型(默认)

{ icon: 'order', iconType: 'emoji' }
// 内置图标:order(📦)、wallet(💰)、coupon(🎫)、address(📍)、service(👨‍💼)、setting(⚙️)

2. image 类型

{ icon: '/static/icon/order.png', iconType: 'image' }

3. iconfont 类型

{ icon: 'iconfont icon-order', iconType: 'iconfont' }

Events 事件

事件名 说明 回调参数
user-click 用户卡片点击 userInfo
login-click 需要登录时触发 -
profile-click 已登录时用户卡片点击 userInfo
stat-click 统计项点击 stat
menu-click 菜单项点击 menu
logout-click 退出登录点击 -

Methods 方法

通过 ref 调用组件方法:

// 获取组件实例
const profile = this.$refs.profile

// 更新用户信息
profile.updateUserInfo({
  nickname: '新昵称',
  desc: '新简介'
})

// 更新统计数据
profile.updateStats([
  { label: '收藏', value: 100, key: 'favorite' }
])

// 更新单个菜单徽章
profile.updateMenuBadge(0, 5) // 第一个菜单徽章设为5

// 批量更新菜单徽章
profile.updateMenuBadges([
  { index: 0, badge: 5 },
  { index: 2, badge: 3 }
])

🎨 使用示例

示例1:基础配置

<template>
  <hy-my-profile
    :userInfo="userInfo"
    :menus="menus"
  />
</template>

<script>
export default {
  data() {
    return {
      userInfo: {
        avatar: 'https://xxx.jpg',
        nickname: '张三',
        desc: 'VIP会员'
      },
      menus: [
        { icon: 'order', title: '我的订单', path: '/pages/order/list' },
        { icon: 'setting', title: '设置', path: '/pages/setting/index' }
      ]
    }
  }
}
</script>

示例2:完整配置

<template>
  <hy-my-profile
    theme="gradient"
    primaryColor="#ff6b6b"
    avatarShape="rounded"
    :userInfo="userInfo"
    :stats="stats"
    :menus="menus"
    :showStats="true"
    :showLogout="true"
    logoutText="安全退出"
    loginPath="/pages/login/index"
    profilePath="/pages/user/info"
    @user-click="onUserClick"
    @login-click="onLoginClick"
    @stat-click="onStatClick"
    @menu-click="onMenuClick"
    @logout-click="onLogoutClick"
    ref="profile"
  />
</template>

<script>
export default {
  data() {
    return {
      userInfo: {
        avatar: 'https://xxx.jpg',
        nickname: '李四',
        desc: '超级VIP会员 | 积分:9999'
      },
      stats: [
        { label: '收藏', value: 23, key: 'favorite' },
        { label: '关注', value: 56, key: 'follow' },
        { label: '粉丝', value: 128, key: 'fans' },
        { label: '积分', value: 3560, key: 'points' }
      ],
      menus: [
        { 
          icon: 'order', 
          title: '我的订单', 
          badge: 3, 
          path: '/pages/order/list',
          iconType: 'emoji'
        },
        { 
          icon: '/static/icon/wallet.png', 
          title: '我的钱包', 
          path: '/pages/wallet/index',
          iconType: 'image'
        },
        { 
          icon: 'iconfont icon-coupon', 
          title: '优惠券', 
          badge: 5,
          path: '/pages/coupon/list',
          iconType: 'iconfont'
        }
      ]
    }
  },
  methods: {
    onUserClick(userInfo) {
      console.log('用户卡片点击', userInfo)
    },
    onLoginClick() {
      uni.navigateTo({ url: '/pages/login/index' })
    },
    onStatClick(stat) {
      console.log('统计项点击', stat)
    },
    onMenuClick(menu) {
      console.log('菜单点击', menu)
    },
    onLogoutClick() {
      uni.showModal({
        title: '提示',
        content: '确定要退出登录吗?',
        success: (res) => {
          if (res.confirm) {
            // 执行退出登录逻辑
          }
        }
      })
    }
  }
}
</script>

示例3:动态更新数据

<template>
  <hy-my-profile
    :userInfo="userInfo"
    :stats="stats"
    :menus="menus"
    ref="profile"
  />
</template>

<script>
export default {
  data() {
    return {
      userInfo: {},
      stats: [],
      menus: []
    }
  },
  onLoad() {
    this.loadUserData()
  },
  methods: {
    async loadUserData() {
      // 从接口获取用户信息
      const res = await uni.request({ url: '/api/user/info' })
      this.userInfo = res.data.userInfo
      this.stats = res.data.stats

      // 或者使用组件方法更新
      this.$refs.profile.updateUserInfo(res.data.userInfo)
      this.$refs.profile.updateStats(res.data.stats)
    }
  }
}
</script>

示例4:自定义主题

<template>
  <view>
    <!-- 默认主题 -->
    <hy-my-profile theme="default" :userInfo="userInfo" />

    <!-- 暗黑主题 -->
    <hy-my-profile theme="dark" :userInfo="userInfo" />

    <!-- 渐变主题 -->
    <hy-my-profile 
      theme="gradient" 
      primaryColor="#ff6b6b"
      :userInfo="userInfo" 
    />
  </view>
</template>

🎯 常见问题

1. 如何自定义菜单图标?

支持三种图标类型:

  • emoji:使用内置图标名(order、wallet等)
  • image:传入图片路径
  • iconfont:传入iconfont类名

2. 如何处理未登录状态?

组件会自动判断,当用户信息为默认值或昵称为"点击登录"时,点击用户卡片会触发 login-click 事件或跳转到 loginPath

3. 如何自定义页面跳转?

设置 loginPathprofilePath 为空字符串,然后监听对应事件自行处理:

<hy-my-profile
  loginPath=""
  profilePath=""
  @login-click="handleLogin"
  @profile-click="handleProfile"
/>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。