uni-app 136修改用户个人资料(二)

简介: uni-app 136修改用户个人资料(二)


/pages/my/userinfo/userinfo.vue

<template>
  <view class="page">
    <!-- 导航栏 -->
    <free-nav-bar title="个人资料" showBack :showRight="false"></free-nav-bar>
    <free-list-item title="头像" showRight :showLeftIcon="false" @click="update('avatar')">
      <free-avatar slot="right" :src="user.avatar"></free-avatar>
    </free-list-item>
    <free-list-item title="昵称" showRight :showLeftIcon="false" @click="update('nickname')">
      <text slot="right" class="font text-muted">{{user.nickname}}</text>
    </free-list-item>
    <free-list-item title="账号" showRight :showLeftIcon="false"  >
      <text slot="right" class="font text-muted">{{user.username}}</text>
    </free-list-item>
    <free-list-item title="二维码名片" showRight :showLeftIcon="false" @click='openCode'>
      <text slot="right" class="iconfont font-md">&#xe647;</text>
    </free-list-item>
    
    <free-confirm :title="confirmTitle" ref="confirm">
      <input type="text" class="border-bottom font-md" :placeholder="placeholder" v-model="confirmText"/>
    </free-confirm>
  </view>
</template>
<script>
  import freeNavBar from '@/components/free-ui/free-nav-bar.vue';
  import freeAvatar from '@/components/free-ui/free-avatar.vue';
  import freeListItem from '@/components/free-ui/free-list-item.vue';
  import freeConfirm from '@/components/free-ui/free-confirm.vue';
  import { mapState } from 'vuex';
  import $H from '@/common/free-lib/request.js';
  export default {
    components:{
      freeNavBar,
      freeAvatar,
      freeListItem,
      freeConfirm
    },
    data() {
      return {
        avatar:'/static/images/demo/demo6.jpg',
        confirmText:'',
        confirmType:'',
        inputtext:''
      }
    },
    computed:{
      ...mapState({
        user:state=>state.user.user
      }),
      confirmTitle(){
        return this.confirmType=='username' ? '修改账号' : '修改昵称';
      },
      placeholder(){
        return this.confirmType=='username' ? '输入账号' : '输入昵称';
      }
    },
    methods: {
      update(key){
        switch(key){
          case 'avatar':
            uni.chooseImage({
              count:1,
              sizeType:['compressed'],
              success:(res)=>{
                // 上传
                $H.upload('/upload',{
                  filePath:res.tempFilePaths[0]
                }).then(url=>{
                  $H.post('/user/update',{
                    avatar:url,
                    nickname: this.user.nickname.length == 0 ? ' ' : this.user.nickname
                  }).then(res=>{
                    uni.showToast({
                      title:'修改头像成功',
                      icon:'none'
                    });
                    this.$store.commit('updateUser',{k:'avatar',v:url})
                  })
                })
                
              }
            })
          break;
          default:
          this.confirmType = key;
          // this.confirmText = this.user[key];
          if(key === 'nickname'){
            this.confirmText = this.nickname;
          }else{
            this.confirmText = this.username;
          }
          this.$refs.confirm.show((close)=>{
            if(this.confirmText===''){
              return uni.showToast({
                title:'不能为空',
                icon:'none'
              })
            }
            $H.post('/user/update',{avatar:this.user.avatar,nickname:this.confirmText}).then(res=>{
              this.$store.commit('updateUser',{k:'nickname',v:this.confirmText});
              uni.showToast({
                title:'修改成功',
                icon:'none'
              });
            })
              
            
            close();
          });
          break;
        }
      },
      // 二维码名片
        openCode(){
        uni.navigateTo({
          url:'../code/code?params='+encodeURIComponent(JSON.stringify({
            id:this.user.id,
            name:this.user.nickname || this.user.username,
            avatar:this.user.avatar
          }))+'&type=user',
        })
      }
    }
  }
</script>
<style>
</style>

/store/modules/user.js

import $U from '@/common/free-lib/util.js';
import $H from '@/common/free-lib/request.js';
import Chat from '@/common/free-lib/chat.js';
import $C from '@/common/free-lib/config.js';
export default {
  state: {
    user: false,
    apply: {
      rows: [],
      count: 0,
    },
    mailList: [],
    chat: null,
    // 会话列表
    chatList: [],
    // 总未读数
    totalNoreadnum: 0
  },
  mutations:{
    updateUser(state,{k,v}){
      if(state.user){
        state.user[k] = v;
        $U.setStorage('user',JSON.stringify(state.user));
      }
    }
  },
  actions: {
    // 登录后处理
    login({
      state,
      dispatch
    }, user) {
      // 存到状态种
      state.user = user;
      // 存储到本地存储中
      $U.setStorage('token', user.token);
      $U.setStorage('user', JSON.stringify(user));
      $U.setStorage('user_id', user.id);
      // 获取好友申请列表
      dispatch('getApply');
      // 更新角标提示
      dispatch('updateMailBadge');
      // 连接socket
      state.chat = new Chat({
        url: $C.socketUrl
      })
      // 获取会话列表
      dispatch('getChatList');
      // 初始化总未读数角标
      dispatch('updateBadge');
    },
    // 退出登录
    logout({
      state
    }) {
      // 清除登录状态
      state.user = false;
      // 清除本地存储数据
      $U.removeStorage('token');
      $U.removeStorage('user');
      $U.removeStorage('user_id');
      // 关闭socket连接
      state.chat.close();
      state.chat = null;
      // 跳转到登录页
      uni.reLaunch({
        url: '/pages/common/login/login'
      })
      // 注销监听事件
      uni.$off('onUpdateChatList')
      uni.$off('momentNotice')
      uni.$off('totalNoreadnum')
    },
    // 初始化登录状态
    initLogin({
      state,
      dispatch
    }) {
      // 拿到存储的数据
      let user = $U.getStorage('user');
      if (user) {
        // 初始化登录状态
        state.user = JSON.parse(user);
        // 连接socket
        state.chat = new Chat({
          url: $C.socketUrl
        })
        // 获取会话列表
        dispatch('getChatList');
        // 获取离线信息
        // 获取好友申请列表
        dispatch('getApply');
        // 初始化总未读数角标
        dispatch('updateBadge');
      }
    },
    // 获取好友申请列表
    getApply({
      state,
      dispatch
    }, page = 1) {
      $H.get('/apply/' + page).then(res => {
        if (page === 1) {
          state.apply = res
        } else {
          // 下拉刷新
          state.apply.rows = [...state.apply.rows, ...res.rows]
          state.apply.count = res.count
        }
        // 更新通讯录角标提示
        dispatch('updateMailBadge');
      });
    },
    // 更新通讯录角标提示
    updateMailBadge({
      state
    }) {
      let count = state.apply.count > 99 ? '99+' : state.apply.count.toString();
      console.log(state.apply.count);
      if (state.apply.count > 0) {
        return uni.setTabBarBadge({
          index: 1,
          text: count
        })
      }
      uni.removeTabBarBadge({
        index: 1
      })
    },
    // 获取通讯录列表
    getMailList({
      state
    }) {
      $H.get('/friend/list').then(res => {
        state.mailList = res.rows.newList ? res.rows.newList : [];
      })
    },
    // 获取会话列表
    getChatList({ state }){
          state.chatList = state.chat.getChatList()
          // 监听会话列表变化
          uni.$on('onUpdateChatList',(list)=>{
            state.chatList = list
          })
    },
    // 初始化总未读数角标
    // 更新未读数
    async updateBadge(list = false) {
      // 获取所有会话列表
      list = list ? list : this.getChatList()
      // 统计所有未读数
      let total = 0
      list.forEach(item => {
        total += item.noreadnum
      })
      // 设置底部导航栏角标
      if (total > 0) {
        uni.setTabBarBadge({
          index: 0,
          text: total <= 99 ? total.toString() : '99+'
        })
      } else {
        uni.removeTabBarBadge({
          index: 0
        })
      }
      uni.$emit('totalNoreadnum', total)
    },
    // 初始化总未读数角标
    updateBadge({
      state
    }){
      
      // 开启监听总未读数变化
      uni.$on('totalNoreadnum', (num) => {
        console.log('totalNoreadnum:',num);
        state.totalNoreadnum = num
      })
      state.chat.updateBadge()
    },
  },
}

如下是我测试的截图

感谢大家观看,我们下次见

目录
相关文章
|
3月前
|
人工智能 文字识别 小程序
旅游社用什么工具收报名 + 资料?不开发 App 也能自动收集信息
本文探讨了旅游行业中报名信息收集的常见痛点及解决方案,重点介绍了二维码表单工具在提升信息收集效率、简化操作流程方面的优势。通过对比多种工具,分析其适用场景与实际应用逻辑,为一线旅游从业者提供高效、低成本的执行参考。
|
7月前
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
392 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
8月前
|
安全 网络安全 Android开发
APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
480 11
APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
|
7月前
|
小程序 搜索推荐 Android开发
Axure原型模板与元件库APP交互设计素材(附资料)
Axure是一款强大的原型设计工具,广泛应用于APP和小程序的设计与开发。本文详细介绍Axure的常用界面组件元件库、交互设计素材,涵盖电商、社区服务、娱乐休闲、农业农村、教育等领域的多套交互案例。通过手机模型、矢量图标、通用组件等资源,设计师可高效构建原型并模拟用户操作,评估界面效果。Axure支持导出和分享,助力团队协作,推动更多优秀应用的诞生。
763 6
|
运维 网络安全 开发工具
【应用服务 App Service】App Service 新手资料包
【应用服务 App Service】App Service 新手资料包
139 0
|
存储 视频直播 API
娱乐直播游戏软件APP成品源码搭建必须要资料及重要性
在目前高速发展的娱乐游戏直播行业中,开发一款出色的直播App需要用到相关必需的资料及资源。下面我们就讲述东莞梦幻网络科技所提供的“娱乐直播游戏成品源码”为基础,解读搭建必须要资料及重要性。
|
小程序 数据可视化 智能硬件
好看的设计------App小程序设计资料,AppUI设计相关资源,up主
好看的设计------App小程序设计资料,AppUI设计相关资源,up主
uni-app 83获取当前会话详细资料
uni-app 83获取当前会话详细资料
56 1
uni-app 18个人资料设置开发
uni-app 18个人资料设置开发
136 0
uni-app 18个人资料设置开发
uni-app 135修改用户个人资料(一)
uni-app 135修改用户个人资料(一)
147 0

热门文章

最新文章