286 lines
7.4 KiB
Vue
286 lines
7.4 KiB
Vue
<template>
|
|
<view class="container">
|
|
<!-- 顶部标题 -->
|
|
<!-- <view class="header">
|
|
<text class="title">我的</text>
|
|
</view> -->
|
|
|
|
<!-- 用户信息区域 -->
|
|
<view class="user-info">
|
|
<view class="avatar-wrapper">
|
|
<image class="avatar" @click="avatarClick()" :src="userInfo.avatar" mode="aspectFill" @error="avatarError"></image>
|
|
</view>
|
|
<view class="user-detail">
|
|
<text class="username">{{userInfo.nickName}}</text>
|
|
</view>
|
|
<view class="star-icon">
|
|
<uni-icons type="star" size="24" color="#ff9900"></uni-icons>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 我的服务区域 -->
|
|
<view class="services">
|
|
<text class="services-title">我的服务</text>
|
|
<view class="grid-container">
|
|
<!-- 个人信息 -->
|
|
<view class="grid-item" @click="navigateTo('/pages/mine/me/index')">
|
|
|
|
<view class="icon-wrapper">
|
|
<!-- <uni-icons type="person" size="24" color="#666"></uni-icons>-->
|
|
<image style="width: 28px;height: 28px;" src="/static/images/my/notice.png"></image>
|
|
</view>
|
|
<text class="icon-text">个人信息</text>
|
|
</view>
|
|
|
|
<!-- 通知公告 -->
|
|
<view class="grid-item" @click="navigateTo('/pages/mine/announcement/index')">
|
|
<view class="icon-wrapper">
|
|
<!-- <uni-icons type="notification" size="24" color="#666"></uni-icons>-->
|
|
<image style="width: 28px;height: 28px;" src="/static/images/my/notice.png"></image>
|
|
</view>
|
|
<text class="icon-text">通知公告</text>
|
|
</view>
|
|
|
|
<!-- 投诉建议 -->
|
|
<view class="grid-item" @click="navigateTo('/pages/feedback/index')">
|
|
<view class="icon-wrapper">
|
|
<!-- <uni-icons type="chat" size="24" color="#666"></uni-icons>-->
|
|
<image style="width: 28px;height: 28px;" src="/static/images/my/complaints.png"></image>
|
|
</view>
|
|
<text class="icon-text">投诉建议</text>
|
|
</view>
|
|
|
|
<!-- 食堂评价 -->
|
|
<view class="grid-item" @click="navigateTo('/pages/review/index')">
|
|
<view class="icon-wrapper">
|
|
<!-- <uni-icons type="star" size="24" color="#666"></uni-icons>-->
|
|
<image style="width: 28px;height: 28px;" src="/static/images/my/evaluation.png"></image>
|
|
</view>
|
|
<text class="icon-text">食堂评价</text>
|
|
</view>
|
|
|
|
<!-- 体检报告 -->
|
|
<view class="grid-item" @click="navigateTo('/pages/survey/index')">
|
|
<view class="icon-wrapper">
|
|
<!-- <uni-icons type="help" size="24" color="#666"></uni-icons>-->
|
|
<image style="width: 28px;height: 28px;" src="/static/images/my/report.png"></image>
|
|
</view>
|
|
<text class="icon-text">体检报告</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<u-action-sheet :actions="list" :show="avatarShow" safeAreaInsetBottom closeOnClickOverlay cancelText="取消"
|
|
round="10" @close="avatarShow = false" @select="avatarSelect"></u-action-sheet>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
getUserProfile,
|
|
uploadAvatar
|
|
} from "@/api/system/user"
|
|
import config from '@/config'
|
|
import { getToken } from '@/utils/auth'
|
|
import { showConfirm } from '@/utils/common'
|
|
export default {
|
|
data() {
|
|
return {
|
|
userInfo: {},
|
|
defaultImg: '/static/images/my/face.png',
|
|
avatarShow: false,
|
|
list: [{
|
|
name: '上传头像',
|
|
val: 1
|
|
}, {
|
|
name: '查看头像',
|
|
val: 2
|
|
}]
|
|
}
|
|
},
|
|
onLoad() {
|
|
this.userInfo = uni.getStorageSync('userInfo') ? uni.getStorageSync('userInfo') : {}
|
|
this.getUserInfo()
|
|
},
|
|
methods: {
|
|
avatarClick() {
|
|
this.avatarShow = true
|
|
},
|
|
|
|
avatarSelect(e) {
|
|
if (e.val == 1) {
|
|
uni.chooseImage({
|
|
count: 1,
|
|
success: chooseImageRes => {
|
|
uni.showLoading({
|
|
title: '上传中...'
|
|
})
|
|
uni.uploadFile({
|
|
url: config.baseUrl + '/system/user/profile/avatar',
|
|
filePath: chooseImageRes.tempFilePaths[0],
|
|
name: 'avatarfile',
|
|
header: {
|
|
'Authorization': 'Bearer ' + getToken()
|
|
},
|
|
success: (uploadFileRes) => {
|
|
console.log(uploadFileRes);
|
|
if(uploadFileRes.statusCode == 200) {
|
|
let reslut = JSON.parse(uploadFileRes.data)
|
|
console.log('reslut',reslut)
|
|
if(reslut.code == 200) {
|
|
uni.showToast({ title: reslut.msg,icon: 'none' });
|
|
this.getUserInfo()
|
|
}else{
|
|
uni.showToast({ title: reslut.msg,icon: 'none' });
|
|
}
|
|
}else if(uploadFileRes.statusCode == 401) {
|
|
showConfirm("登录状态已过期,您可以继续留在该页面,或者重新登录?").then(res => {
|
|
if (res.confirm) {
|
|
uni.reLaunch({ url: '/pages/login/login' })
|
|
}
|
|
})
|
|
}else{
|
|
uni.showToast({ title: uploadFileRes.errMsg,icon: 'none' });
|
|
}
|
|
uni.hideLoading()
|
|
},
|
|
fail: (uploadFileErr) => {
|
|
let { message } = uploadFileErr
|
|
if (message == 'Network Error') {
|
|
message = '后端接口连接异常'
|
|
} else if (message.includes('timeout')) {
|
|
message = '系统接口请求超时'
|
|
} else if (message.includes('Request failed with status code')) {
|
|
message = '系统接口' + message.substr(message.length - 3) + '异常'
|
|
}
|
|
uni.showToast({ title: message,icon: 'none' });
|
|
uni.hideLoading()
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}else if(e.val == 2) {
|
|
uni.previewImage({
|
|
urls: [this.userInfo.avatar]
|
|
});
|
|
}
|
|
},
|
|
|
|
getUserInfo() {
|
|
getUserProfile().then(res => {
|
|
this.userInfo = res.user
|
|
if(!this.userInfo.avatar) {
|
|
this.userInfo.avatar = this.defaultImg
|
|
}
|
|
console.log('this.userInfo',this.userInfo)
|
|
uni.setStorageSync('userInfo', this.userInfo)
|
|
})
|
|
},
|
|
|
|
avatarError(e) {
|
|
console.log(e)
|
|
if (e.type == 'error') {
|
|
this.userInfo.avatar = this.defaultImg
|
|
}
|
|
},
|
|
|
|
navigateTo(url) {
|
|
uni.navigateTo({
|
|
url
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.container {
|
|
min-height: 10vh;
|
|
background-color: #F9FBFF;
|
|
}
|
|
|
|
.header {
|
|
padding: 14px 16px 16px;
|
|
background: #F9FBFF;
|
|
|
|
.title {
|
|
font-size: 18px;
|
|
font-weight: 500;
|
|
color: #333;
|
|
}
|
|
}
|
|
|
|
.user-info {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 16px;
|
|
background: #fff;
|
|
margin-bottom: 10px;
|
|
|
|
.avatar-wrapper {
|
|
margin-right: 12px;
|
|
|
|
.avatar {
|
|
width: 60px;
|
|
height: 60px;
|
|
border-radius: 30px;
|
|
}
|
|
}
|
|
|
|
.user-detail {
|
|
flex: 1;
|
|
|
|
.username {
|
|
margin-left: 12px;
|
|
font-size: 18px;
|
|
font-weight: 500;
|
|
color: #333;
|
|
}
|
|
}
|
|
|
|
.star-icon {
|
|
padding: 8px;
|
|
}
|
|
}
|
|
|
|
.services {
|
|
background: #fff;
|
|
padding: 16px;
|
|
|
|
.services-title {
|
|
font-size: 16px;
|
|
color: #333;
|
|
margin-bottom: 26px;
|
|
|
|
font-weight: 400;
|
|
}
|
|
|
|
.grid-container {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 20px;
|
|
|
|
.grid-item {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
|
|
.icon-wrapper {
|
|
width: 48px;
|
|
height: 48px;
|
|
//border-radius: 24px;
|
|
//background: #f5f5f5;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-bottom: 3px;
|
|
}
|
|
|
|
.icon-text {
|
|
font-size: 14px;
|
|
color: #666;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style> |