微信小程序141~150

发布于:2025-07-17 ⋅ 阅读:(14) ⋅ 点赞:(0)
1.将token存储到Store
import { observable, action } from 'mobx-miniprogram'
import { getStorage } from '../miniprogram/utils/storage'

// store对象
export const userStore = observable({
// 定义响应式数据
token: getStorage('token') || '',

  // action用来修改状态
  setToken: action(function (token) {
    this.token = token
  }),

})
2.用户信息存储到Store

调用接口获取用户信息,获取数据以后要存储用户信息数据到本地,为了方便用户信息的获取和使用,将其存储到store

import { observable, action } from 'mobx-miniprogram'
import { getStorage } from '../utils/storage'

// store对象
export const userStore = observable({
  // 定义响应式数据
  token: getStorage('token') || '',
  userInfo: getStorage('uesrInfo') || {},
  // action用来修改状态
  setToken: action(function (token) {
    this.token = token
  }),
  setUserInfo: action(function (userInfo) {
    this.userInfo = userInfo
  })
})
3.使用数据渲染用户信息

将用户信息数据从store取出,并渲染到页面上。

import { ComponentWithStore } from 'mobx-miniprogram-bindings'
import { userStore, userstore } from '../../stores/userstore'
// pages/info/info.js
ComponentWithStore({
  // 页面的初始数据
  data: {
    // 初始化第二个面板数据
    initpanel: [
      {
        url: '/pages/order/list/list',
        title: '商品订单',
        iconfont: 'icon-dingdan'
      },
      {
        url: '/pages/order/list/list',
        title: '礼品卡订单',
        iconfont: 'icon-lipinka'
      },
      {
        url: '/pages/order/list/list',
        title: '退款/售后',
        iconfont: 'icon-tuikuan'
      }
    ]
  },
  storeBindings: {
    store: userStore,
    fields: ['token', 'userInfo']
  },

  // 跳转到登录页面
  toLoginPage() {
    wx.navigateTo({
      url: '/pages/login/login'
    })
  }
})
4.配置分包以及预下载

在app.json中

分包
"subPackages": [
        {
            "root": "modules/settingModule",
            "name": "settingModule",
            "pages": [
                "pages/address/add/index",
                "pages/address/list/index",
                "pages/profile/profile"
            ]
        }
    ]
预下载
"preloadRule": {
        "pages/settings/settings": {
            "network": "all",
            "packages": ["settingModule"]
        }
    }
5.渲染用户信息
import { BehaviorWithStore } from 'mobx-miniprogram-bindings'
import { userStore } from '../../../../stores/userstore'
export const userBehavior = BehaviorWithStore({
  storeBindings: {
    store: 'userStore',
    fields: ['userInfo']
  }
})


import { userBehavior } from './behavior'
Page({
  // 注册behavior
  behavior: [userBehavior]
  })
6.更新用户头像
1.获取头像临时路径

在这里插入图片描述

// 更新用户头像
  chooseAvatar(event) {
      // 获取临时路径有时效时间,需要将其上传到公司服务器,获取永久路径,在用永久路径更新headimageurl,用户保存
    const { avatarUrl } = event.detail
    this.setData({
      'userInfo.headimageurl': avatarUrl
    })
  },
2.头像临时路径上传到服务器

在这里插入图片描述

第一种方式
wx.uploadFile({
      filePath: 'avatarUrl',
      name: 'file',
      url: 'https://gmall-prod.atguigu.cn/mall-api/fileUpload', // 开发者服务器地址
      header: {
        token: getStorage('token')
      },
      success: (res) => {
        const uploadRes = JSON.parse(res.data)
        this.setData({
          'userInfo.headimageurl': uploadRes.data
        })
      }
    })
    第二种方式
     await reqUploadFile(avatarUrl, 'file')
    this.setData({
      'userInfo.headimage': resizeBy.data
    })
3.完成头像更新

在这里插入图片描述

 // 更新用户信息
  async updateUserInfo() {
    const res = await reqUpdataUserInfo(this.data.userInfo)

    if (res.code === 200) {
      // 存储到本地
      setStorage('userInfo', this.data.userInfo)
      // 同步到store
      this.setUserInfo(this.data.userInfo)
      // 给用户提示
      toast({ title: '用户信息更新成功' })
    }
  },
7.更新用户昵称

需要给input输入框type属性设置为nickname,键盘上方才会显示微信昵称
给input输入框添加name属性,form组件才会自动收集有name属性的表单元素的值
给按钮添加form-type属性,如果值是reset就是重置表单
给按钮添加form-type属性,如果值是submit就是提交按钮

 // 获取用户昵称
  getNickname(event) {
    // 结构最新的用户昵称
    const { nickname } = event.detail.value
    this.setData({
      'userInfo.nickname': nickname,
      isShowPopup: false
    })
  },


  // 显示修改昵称弹框
  onUpdateNickName() {
    this.setData({
      isShowPopup: true,
      'userInfo.nickname': this.data.userInfo.nickname
    })
  },
8.定义新参数以及封装接口API
import { http } from '../utils/http'
export const reqAddAddress = (data) => {
  return http.post('/userAddress/save, data')
}

export const reqAddressList = () => {
  return http.get('/userAddress/findUserAddress')
}

export const reqAddressInfo = (id) => {
  return http.get('/userAddress/{id}')
}

export const reqUpdateAddress = (data) => {
  return http.post('/userAddress/update')
}

export const reqDelAddress = (id) => {
  return http.get('/userAddress/delete/{id}')
}
9. 收集省市级数据

picker从底部弹起滚动选择器
mode的属性是region弹起的就是省市区选择器
value:要求是一个数组,选中的省市区

       <!-- 省市区 -->
            <view class="row">
                <text class="title">所在地区</text>

                <!-- picker从底部弹起滚动选择器 -->
                <!-- mode的属性是region弹起的就是省市区选择器 -->
                <!-- value:要求是一个数组,选中的省市区 -->
                <picker mode="region" value="{{ [provinceName,cityName, districtName] }}" bindchange="onAddressChange">
                    <view class="region" wx:if="provinceName">{{ provinceName + '' + cityName + '' + districtName }}</view>
                    <view class="placeholder" wx:else> 请选择收货人所在地区</view>
                </picker>


  // 省市区选择
  onAddressChange(event) {
    const [provinceName, cityName, districtName] = event.detail.value
    const [provinceCode, cityCode, districtCode] = event.detail.code

    this.setData({
      provinceCode,
      cityCode,
      districtCode,
      provinceName,
      cityName,
      districtName
    })
  }
})
10.收集新增地址及其他请求参数

第一种方式:
给input加name、value和按钮加submit属性才能做出一个能提交的表单。
第二种方式:
简易双向数据绑定

// wxml
model:value="{{ name }}

// js
  // 保存收货地址
  saveAddrssForm(event) {
    // 组织参数(完整地址,是否设置为默认值)
    const { provinceName, cityName, districtName, address, isDefault } = this.data

    //最终要发送的请求参数
    const params = {
      ...this.data,
      fullAddress: provinceName + cityName + districtName + address,
      isDefault: isDefault ? 1 : 0
    }
  },


网站公告

今日签到

点亮在社区的每一天
去签到