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>
相关推荐
前端小巷子1 小时前
Vue3的渲染秘密:从同步批处理到异步微任务
前端·vue.js·面试
每天学习一丢丢2 小时前
SpringBoot + Vue实现批量导入导出功能的标准方案
vue.js·spring boot·后端
小码编匠2 小时前
物联网数据大屏开发效率翻倍:Vue + DataV + ECharts 的标准化模板库
前端·vue.js·echarts
GHOME3 小时前
Vue2知识点详细回顾(以及自己的一些思考和解答)-2
前端·vue.js·面试
复苏季风3 小时前
2025 年了,Vite+Vue3 微前端该用啥方案?3 大主流方案实战对比
前端·vue.js
明月与玄武7 小时前
Vue 3 高性能实践 全面提速剖析!
前端·javascript·vue.js
童先生12 小时前
Nginx + Vue/React 前端 + API:防止路径混淆漏洞与跨域问题实战分享
前端·vue.js·nginx
Stringzhua14 小时前
Vue数据的变更操作与表单数据的收集【6】
前端·javascript·vue.js
乐~~~15 小时前
el-date-picker type=daterange 日期范围限制
javascript·vue.js·elementui
初遇你时动了情15 小时前
uniapp vue3 ts自定义底部 tabbar菜单
前端·javascript·uni-app