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 小时前
Web Worker基础概念 & 图片滤镜处理实际应用 -- Vue3
javascript·vue.js
半花2 小时前
【vue】v-自定义指令
前端·vue.js
武昌库里写JAVA2 小时前
【MySQL】MySQL数据库如何改名
java·vue.js·spring boot·sql·学习
飞翔的佩奇4 小时前
Java项目:基于SSM框架实现的社区团购管理系统【ssm+B/S架构+源码+数据库+毕业论文+答辩PPT+远程部署】
java·数据库·vue.js·毕业设计·mybatis·答辩ppt·社区团购
_未完待续4 小时前
框架实战指南-错误处理
前端·vue.js
_未完待续4 小时前
框架实战指南-组件参考
前端·vue.js
半花4 小时前
【Vue】通信组件
前端·vue.js
前端 贾公子4 小时前
vue如何在data里使用this
前端·javascript·vue.js
_未完待续5 小时前
框架实战指南-元素参考
前端·vue.js
海上生明月丿6 小时前
Vue 工程化
前端·javascript·vue.js