UniappDay04

1.登录模块-小程序快捷登录

  1. 定义接口,封装

    import { http } from '@/utils/http'

    type loginParams = {
    code: string
    encryptedData: string
    iv: string
    }
    export const postLoginWxMinAPI = (data: loginParams) => {
    return http({
    method: 'POST',
    url: '/login/wxMin',
    data,
    })
    }

  2. 获取登录凭证和手机号并登录

    // 获取code登录凭证
    let code = ''
    onLoad(async () => {
    const res = await wx.login()
    code = res.code
    })
    // 获取用户手机号码
    const onGetphonenumber: UniHelper.ButtonOnGetphonenumber = async (ev) => {
    const encryptedData = ev.detail!.encryptedData!
    const iv = ev.detail!.iv!
    const res = await postLoginWxMinAPI({
    code,
    encryptedData,
    iv,
    })
    }

    复制代码
       <button class="button phone" @getphonenumber="onGetphonenumber">
         <text class="icon icon-phone"></text>
         手机号快捷登录
       </button>

注意:获取手机号功能针对非个人开发者,且完成认证 的小程序开放

2.模拟快捷登录

  1. 封装模拟手机号,小程序内测版

    // 小程序内测版
    export const postLoginWxMinSimpleAPI = (phoneNumber: string) => {
    return http({
    method: 'POST',
    url: '/login/wxMin/simple',
    data: {
    phoneNumber,
    },
    })
    }

  2. 模拟手机号快捷登录

    // 模拟手机号快捷登录
    const postLoginWxMinSimple = async () => {
    const res = await postLoginWxMinSimpleAPI('13815869691')
    uni.showToast({
    icon: 'none',
    title: '登录成功',
    })
    }

3.保存登录信息

  1. 类型声明

    /** 小程序登录 登录用户信息 /
    export type LoginResult = {
    /
    * 用户ID /
    id: number
    /
    * 头像 /
    avatar: string
    /
    * 账户名 /
    account: string
    /
    * 昵称 /
    nickname?: string
    /
    * 手机号 /
    mobile: string
    /
    * 登录凭证 */
    token: string
    }

  2. 状态管理

    // 定义 Store
    export const useMemberStore = defineStore(
    'member',
    () => {
    // 会员信息
    const profile = ref<LoginResult>()

    复制代码
     // 保存会员信息,登录时使用
     const setProfile = (val: LoginResult) => {
       profile.value = val
     }

    )

  3. 成功提示

  4. 页面跳转

    // 获取用户手机号码
    const onGetphonenumber: UniHelper.ButtonOnGetphonenumber = async (ev) => {
    const encryptedData = ev.detail!.encryptedData!
    const iv = ev.detail!.iv!
    const res = await postLoginWxMinAPI({
    code,
    encryptedData,
    iv,
    })
    loginSuccess(res.result)
    }
    // 模拟手机号快捷登录
    const postLoginWxMinSimple = async () => {
    const res = await postLoginWxMinSimpleAPI('13815869691')
    loginSuccess(res.result)
    }

    const loginSuccess = (profile: LoginResult) => {
    // 保存会员信息
    const memberStore = useMemberStore()
    memberStore.setProfile(profile)
    // 成功提示
    uni.showToast({
    icon: 'success',
    title: '登录成功',
    })
    setTimeout(() => {
    // 页面跳转
    //小程序开发页面可以分为tabbar页面和普通页面,普通页面可以用navigateTo,tabbar页面要用switchtab
    uni.switchTab({ url: '/pages/my/my' })
    }, 500)
    }

小程序开发页面可以分为tabbar页面和普通页面,普通页面可以用navigateTo,tabbar页面要用switchtab

4.会员信息展示

  1. 静态结构

  2. 自定义导航

    复制代码
     {
     		"path": "pages/my/my",
     		"style": {
         "navigationStyle": "custom",
         "navigationBarTextStyle": "white",
     			"navigationBarTitleText": "我的"
     		}
     	},
  3. 渲染会员信息

    const memberStore = useMemberStore()

    复制代码
       <view class="overview" v-if="memberStore.profile">
         <navigator url="/pagesMember/profile/profile" hover-class="none">
           <image class="avatar" mode="aspectFill" :src="memberStore.profile.avatar"></image>
         </navigator>
         <view class="meta">
           <view class="nickname">
             {{ memberStore.profile.nickname || memberStore.profile.account  }}
           </view>
           <navigator class="extra" url="/pagesMember/profile/profile" hover-class="none">
             <text class="update">更新头像昵称</text>
           </navigator>
         </view>
       </view>
相关推荐
未来龙皇小蓝2 小时前
RBAC前端架构-02:集成Vue Router、Vuex和Axios实现基本认证实现
前端·vue.js·架构
晓得迷路了2 小时前
栗子前端技术周刊第 116 期 - 2025 JS 状态调查结果、Babel 7.29.0、Vue Router 5...
前端·javascript·vue.js
淡忘_cx2 小时前
使用Jenkins自动化部署vue项目(2.528.2版本)
vue.js·自动化·jenkins
大尚来也3 小时前
小程序怎么开发自己的小程序
微信小程序
iDao技术魔方3 小时前
深入Vue 3响应式系统:为什么嵌套对象修改后界面不更新?
javascript·vue.js·ecmascript
码云数智-园园3 小时前
小程序开发平台有哪些?小程序第三方开发平台评测对比
微信小程序
念念不忘 必有回响3 小时前
viepress:vue组件展示和源码功能
前端·javascript·vue.js
万物得其道者成13 小时前
UniApp 多端滑块验证码插件 zxj-slide-verify 实用指南
uni-app
吹牛不交税13 小时前
admin.net-v2 框架使用笔记-netcore8.0/10.0版
vue.js·.netcore
MZ_ZXD00114 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php