当前位置: 首页 > news >正文

【Uniapp-Vue3】开发userStore用户所需的相关操作

在项目根路径下创建的stores文件夹中创建user.js文件 

并将以下内容复制到user.js中

import {ref} from "vue"
import { defineStore } from 'pinia';
const uniIdCo = uniCloud.importObject("uni-id-co")
const db = uniCloud.database();
const usersTable = db.collection('uni-id-users')export const useUserStore = defineStore("user",()=>{let hostUserInfo = uni.getStorageSync('uni-id-pages-userInfo')||{}const userInfo = ref(hostUserInfo);const hasLogin= ref(Object.keys(hostUserInfo).length != 0);// data不为空,表示传递要更新的值(注意不是覆盖是合并),什么也不传时,直接查库获取更新async function updateUserInfo(data = false) {if (data) {usersTable.where('_id==$env.uid').update(data).then(e => {// console.log(e);if (e.result.updated) {uni.showToast({title: "更新成功",icon: 'none',duration: 3000});setUserInfo(data)} else {uni.showToast({title: "没有改变",icon: 'none',duration: 3000});}})} else {const uniIdCo = uniCloud.importObject("uni-id-co", {customUI: true})try {let res = await usersTable.where("'_id' == $cloudEnv_uid").field('mobile,nickname,username,email,avatar_file').get()const realNameRes = await uniIdCo.getRealNameInfo()// console.log('fromDbData',res.result.data);setUserInfo({...res.result.data[0],realNameAuth: realNameRes})} catch (e) {setUserInfo({},{cover:true})console.error(e.message, e.errCode);}}}async function setUserInfo(data, {cover}={cover:false}) {// console.log('set-userInfo', data);let _userInfo = cover?data:Object.assign(userInfo.value,data)userInfo.value = Object.assign({},_userInfo)hasLogin.value = Object.keys(userInfo.value).length != 0// console.log('store.userInfo', store.userInfo);uni.setStorageSync('uni-id-pages-userInfo', userInfo.value)return data}async function logout() {// 1. 已经过期就不需要调用服务端的注销接口	2.即使调用注销接口失败,不能阻塞客户端if(uniCloud.getCurrentUserInfo().tokenExpired > Date.now()){try{await uniIdCo.logout()}catch(e){console.error(e);}}uni.removeStorageSync('uni_id_token');uni.setStorageSync('uni_id_token_expired', 0)		uni.$emit('uni-id-pages-logout')setUserInfo({},{cover:true})}//登录后的操作function loginSuccess(e = {}){const {showToast = true, toastText = '登录成功', autoBack = true, uniIdRedirectUrl = '', passwordConfirmed} = e// console.log({toastText,autoBack});if (showToast) {uni.showToast({title: toastText,icon: 'none',duration: 3000});}updateUserInfo()	uni.$emit('uni-id-pages-login-success')	}return {userInfo,hasLogin,loginSuccess,updateUserInfo}
})

在updateUserInfo函数中修改需要的字段

具体字段可以在database文件下的uni-id-users.schema数据表中查看

我们在获取的时候可以通过如下方式对字段取别名:

字段 as 别名

http://www.lryc.cn/news/543497.html

相关文章:

  • DeepSeek开源周首日:发布大模型加速核心技术可变长度高效FlashMLA 加持H800算力解码性能狂飙升至3000GB/s
  • 易语言模拟真人鼠标轨迹算法 - 防止游戏检测
  • DeepSeek 提示词:基础结构
  • 文件系统
  • 力扣LeetCode:1472 设计浏览器历史记录
  • 【FL0091】基于SSM和微信小程序的社区二手物品交易小程序
  • 【笔记ing】每天50个英语词汇
  • 联想 SR590 服务器 530-8i RAID 控制器更换损坏的硬盘
  • Java基础关键_012_包装类
  • 【react】TypeScript在react中的使用
  • vllm的使用方式,入门教程
  • IDEA 使用codeGPT+deepseek
  • vue3中测试:单元测试、组件测试、端到端测试
  • 机器学习介绍与数据集
  • React 源码揭秘 | 更新队列
  • 关于网络端口探测:TCP端口和UDP端口探测区别
  • Vue.js 中使用 JSX 自定义语法封装组件
  • 设计模式教程:备忘录模式(Memento Pattern)
  • 使用 C# 以api的形式调用 DeepSeek
  • CS5366AN:高集成Type-C转HDMI 4K60Hz芯片的国产突破
  • 瑞芯微RK安卓Android主板GPIO按键配置方法,触觉智能嵌入式开发
  • Dify自定义工作流集成指南:对接阿里云百炼文生图API的实现方案
  • 前端项目配置 Nginx 全攻略
  • 基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
  • 电子电气架构 --- 主机厂电子电气架构演进
  • 物联网通信应用案例之《智慧农业》
  • Java注解的原理
  • AI知识架构之神经网络
  • OpenGL 04--GLSL、数据类型、Uniform、着色器类
  • 学习笔记06——JVM调优