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天前
uni-app 135修改用户个人资料(一)
uni-app 135修改用户个人资料(一)
34 0
|
3天前
uni-app 106群资料设置功能
uni-app 106群资料设置功能
17 0
|
3天前
uni-app 83获取当前会话详细资料
uni-app 83获取当前会话详细资料
19 1
|
3天前
uni-app 18个人资料设置开发
uni-app 18个人资料设置开发
26 0
uni-app 18个人资料设置开发
|
10月前
|
存储 视频直播 API
娱乐直播游戏软件APP成品源码搭建必须要资料及重要性
在目前高速发展的娱乐游戏直播行业中,开发一款出色的直播App需要用到相关必需的资料及资源。下面我们就讲述东莞梦幻网络科技所提供的“娱乐直播游戏成品源码”为基础,解读搭建必须要资料及重要性。
|
物联网 Android开发 开发者
Android App上架应用市场所需资料说明
Android App上架应用市场所需资料说明
431 0
Android App上架应用市场所需资料说明
|
数据库 定位技术 监控
超百家中国网贷App泄漏逾百万用户资料
针对近些年来网贷现象严重,发表一些自己的看法,虽然和板块联系不是很大,但这影响到我们每个人,近年来随着网贷的流行,用户只需使用手机App便可以轻松地借到钱因而也广受好评。不过近期有研究人员发现有大量网贷App泄漏了个人信息,或将对百万计用户造成影响。
|
新零售 Web App开发 移动开发
Html5与本地App资料整理分析
最近开发了一个小的手机网站,重新了解了本地应用,html5,混合应用,webApp等概念,整理下相关的资料,略带自己的思考 用户固有的使用习惯 在《2012年度 HTML5状况及发展形势报告.pdf》中有这样的观点:文档可以评论本文索要。
1124 0
|
移动开发 开发框架 HTML5
混合APP开发框架资料汇总
Ionic(ionicframework)一款接近原生的Html5移动App开发框架 会html css js就可以开发app,Ionic基于angualrjs框架是一个专注于开发移动wap以及app的技术,基于HTML5创建类似于手机平台原生应用的一个开发框架。
1077 0