<template> <view :style="viewColor"> <view class="product-window" :class="{'on':isShow}"> <view class="iconfont icon-guanbi" @click="closeAttr"></view> <view class="mp-data"> <image :src="routine_logo" mode=""></image> <text class="mp-name">{{site_name}} 申请</text> </view> <view class="trip-msg"> <view class="title"> 获取您的昵称、头像 </view> <view class="trip"> 提供具有辨识度的用户中心界面 </view> </view> <form @submit="formSubmit"> <view class="edit"> <view class="avatar edit-box"> <view class="left"> <view class="head">头像</view> <!-- <image :src="userInfo.avatar || defaultAvatar" mode=""></image> --> <view class="avatar-box" v-if="!mp_is_new" @click.stop='uploadpic'> <image :src="userInfo.avatar || defHead"></image> </view> <button v-else class="avatar-box" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"> <image :src="userInfo.avatar || defHead"></image> </button> </view> </view> <view class="nickname edit-box"> <view class="left"> <view class="head">昵称</view> <view class='input'><input type='nickname' placeholder-class="pl-sty" placeholder="请输入昵称" name='nickname' :maxlength="16" :value='userInfo.nickname'></input> </view> </view> </view> </view> <view class="bottom"> <button class="save" formType="submit" :class="{'open': userInfo.avatar}"> 保存 </button> </view> </form> </view> <canvas canvas-id="canvas" v-if="canvasStatus" :style="{width: canvasWidth + 'px', height: canvasHeight + 'px',position: 'absolute',left:'-100000px',top:'-100000px'}"></canvas> <view class="mask" @touchmove.prevent v-if="isShow" @click="closeAttr"></view> </view> </uni-popup> </template> <script> import { mapGetters } from "vuex"; import { configMap } from '@/utils'; import Cache from '@/utils/cache'; import { editAvatar } from '@/api/user.js'; export default { props: { isShow: { type: Number, value: 0 } }, data() { return { defHead: require('@/static/images/def_avatar.png'), mp_is_new: this.$Cache.get('MP_VERSION_ISNEW') || false, userInfo: { avatar: '', nickname: '', }, canvasStatus: false, }; }, computed: configMap({routine_logo: '',site_name: ''} ,mapGetters(['viewColor','keyColor'])), mounted() { }, methods: { /** * 上传文件 * */ uploadpic: function() { let that = this; this.canvasStatus = true that.$util.uploadImageChange('upload/image', (res) => { let userInfo = that.userInfo; if (userInfo !== undefined) { that.userInfo.avatar = res.data.url; } this.canvasStatus = false }, (res) => { this.canvasStatus = false }, (res) => { this.canvasWidth = res.w this.canvasHeight = res.h }); }, // 微信头像获取 onChooseAvatar(e) { const {avatarUrl} = e.detail this.$util.uploadImgs('upload/image', avatarUrl, (res) => { this.userInfo.avatar = res.data.path }, (err) => { // console.log(err) }) }, closeAttr: function() { this.$emit('closeEdit'); }, /** * 提交修改 */ formSubmit(e) { let that = this if (!this.userInfo.avatar) return that.$util.Tips({ title: '请上传头像' }); if (!e.detail.value.nickname) return that.$util.Tips({ title: '请输入昵称' }); this.userInfo.nickname = e.detail.value.nickname editAvatar(this.userInfo).then(res => { this.$emit('editSuccess') return that.$util.Tips({ title: res.message, icon: 'success' }, { tab: 3 }); }).catch(msg => { return that.$util.Tips({ title: msg || '保存失败' }, { tab: 3, url: 1 }); }); } } } </script> <style> .pl-sty { color: #999999; font-size: 30rpx; } </style> <style scoped lang="scss"> .product-window.on { transform: translate3d(0, 0, 0); } .mask { z-index: 99; } .product-window { position: fixed; bottom: 0; width: 100%; left: 0; background-color: #fff; z-index: 1000; border-radius: 20rpx 20rpx 0 0; transform: translate3d(0, 100%, 0); transition: all .3s cubic-bezier(.25, .5, .5, .9); padding: 38rpx 40rpx; .icon-guanbi { position: absolute; top: 40rpx; right: 40rpx; font-size: 24rpx; font-weight: bold; color: #999; } .mp-data { display: flex; align-items: center; margin-bottom: 30rpx; .mp-name { font-size: 28rpx; font-weight: bold; color: #000000; } image { width: 48rpx; height: 48rpx; border-radius: 50%; margin-right: 16rpx; } } .trip-msg { padding-bottom: 32rpx; border-bottom: 1px solid #F5F5F5; .title { font-size: 30rpx; font-weight: bold; color: #000; margin-bottom: 6rpx; } .trip { font-size: 26rpx; color: #777777; } } .edit { border-bottom: 1px solid #F5F5F5; .avatar { border-bottom: 1px solid #F5F5F5; } .nickname { .input { width: 100%; } input { height: 80rpx; } } .edit-box { display: flex; justify-content: space-between; align-items: center; font-size: 30rpx; padding: 22rpx 0; .left { display: flex; align-items: center; flex: 1; .head { color: rgba(0, 0, 0, 0.9); white-space: nowrap; margin-right: 60rpx; } button { flex: 1; display: flex; align-items: center; } } image { width: 80rpx; height: 80rpx; border-radius: 6rpx; } } .icon-xiangyou { color: #cfcfcf; } } .bottom { display: flex; align-items: center; justify-content: center; .save { border: 1px solid #F5F5F5; display: flex; align-items: center; justify-content: center; width: 368rpx; height: 80rpx; border-radius: 12rpx; margin-top: 52rpx; background-color: #F5F5F5; color: #ccc; font-size: 30rpx; font-weight: bold; } .save.open { border: 1px solid #fff; background-color: #07C160; color: #fff; } } } </style>