200 lines
4.3 KiB
Vue
200 lines
4.3 KiB
Vue
|
<template>
|
||
|
<view>
|
||
|
<view class="mineInfo">
|
||
|
<view class="userInfo flex" style="justify-content: space-between;">
|
||
|
<view class="flex-column">
|
||
|
<image v-if="state.userInfo.avatar" class="avatar " :src="env.baseUrl + state.userInfo.avatar" />
|
||
|
<view v-else class="avatar "> {{ state.userInfo.RealName?.slice(0, 1) }} </view>
|
||
|
</view>
|
||
|
|
||
|
<view class="flex flex-column" style="width: calc(100% - 150rpx);">
|
||
|
<view class="userInfo-name"> {{ state.userInfo.Account }} </view>
|
||
|
<view style="display: flex; align-items: flex-end;">
|
||
|
{{ state.userInfo.RealName }}
|
||
|
<up-tag class="mg-l-20" size="mini" color="#fff" border-color="#fff" plain text="标签" />
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
<view class="pd-lr-20" style="margin-top: -80rpx;">
|
||
|
<view class="mg-t-20">
|
||
|
<blockquote class="grid grid-icon pd-t-20">
|
||
|
<up-grid :border="false" col="4">
|
||
|
<up-grid-item v-for="(item,index) in state.gridList" :key="index">
|
||
|
<up-icon :customStyle="{color: 'white',paddingLeft:'20rpx'}" :name="item.name" :size="20" />
|
||
|
<text class="grid-text">{{ item.title }}</text>
|
||
|
</up-grid-item>
|
||
|
</up-grid>
|
||
|
</blockquote>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
<view style="background-color: #FFF; margin-top: 30rpx;">
|
||
|
<up-cell-group :border="false">
|
||
|
<up-cell icon="lock-opened-fill" title="修改密码" :isLink="true" url="/pages/password/password" />
|
||
|
<up-cell icon="file-text-fill" title="关于我们" :isLink="true" url="/pages/about/about" />
|
||
|
<up-cell icon="edit-pen-fill" title="意见反馈" :isLink="true" url="/pages/feedback/feedback" />
|
||
|
<up-cell icon="integral-fill" title="当前版本" value="v1.0.0" />
|
||
|
<up-cell icon="pushpin-fill" title="退出登录" @click="logout" />
|
||
|
</up-cell-group>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
<TabBar :current-page="1" />
|
||
|
|
||
|
</template>
|
||
|
|
||
|
<script lang="ts" setup>
|
||
|
import { onMounted, reactive } from 'vue';
|
||
|
import { env } from '@/utils/.env';
|
||
|
import TabBar from '@/pages/component/tabbar.vue'
|
||
|
import { logoutApi } from '@/api/auth.js'
|
||
|
import { accessTokenKey, decryptJWT } from '@/utils/request.js';
|
||
|
|
||
|
const state = reactive({
|
||
|
theme: uni.getStorageSync('theme'),
|
||
|
userInfo: {} as any,
|
||
|
gridList: [
|
||
|
{
|
||
|
name: 'red-packet-fill',
|
||
|
title: '功能1'
|
||
|
},
|
||
|
{
|
||
|
name: 'zhifubao-circle-fill',
|
||
|
title: '功能2'
|
||
|
},
|
||
|
{
|
||
|
name: 'apple-fill',
|
||
|
title: '功能3'
|
||
|
},
|
||
|
{
|
||
|
name: 'twitter-circle-fill',
|
||
|
title: '功能4'
|
||
|
}
|
||
|
],
|
||
|
})
|
||
|
|
||
|
// 页面初始化
|
||
|
onMounted(() => {
|
||
|
state.userInfo = decryptJWT(uni.getStorageSync(accessTokenKey))
|
||
|
console.log(state.userInfo)
|
||
|
|
||
|
if (state.userInfo == '') {
|
||
|
state.userInfo = {
|
||
|
'account': 'Admin.NET',
|
||
|
'phone': '18012345678'
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// 退出系统
|
||
|
const logout = () => {
|
||
|
uni.showModal({
|
||
|
title: '提示',
|
||
|
content: '是否退出系统?',
|
||
|
success: (e) => {
|
||
|
if (!e.confirm) return;
|
||
|
|
||
|
logoutApi().then((res : any) => {
|
||
|
if (res.code == 200) {
|
||
|
uni.showToast({ title: '退出系统', icon: 'none' })
|
||
|
uni.clearStorageSync();
|
||
|
setTimeout(() => {
|
||
|
uni.reLaunch({ url: '/pages/login/login' })
|
||
|
}, 1000)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss" scoped>
|
||
|
.flex {
|
||
|
display: flex;
|
||
|
flex-wrap: wrap;
|
||
|
}
|
||
|
|
||
|
.flex-column {
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
justify-content: space-around;
|
||
|
}
|
||
|
|
||
|
.mg-l-20 {
|
||
|
margin-left: 20rpx;
|
||
|
}
|
||
|
|
||
|
.pd-lr-20 {
|
||
|
padding: 0 20rpx;
|
||
|
}
|
||
|
|
||
|
.mineInfo {
|
||
|
width: 100vw;
|
||
|
padding: 20rpx 0 100rpx;
|
||
|
background: $uni-color-primary;
|
||
|
|
||
|
.userInfo {
|
||
|
width: 90%;
|
||
|
height: 120rpx;
|
||
|
padding: 40rpx 0;
|
||
|
margin: auto;
|
||
|
color: white;
|
||
|
|
||
|
.avatar {
|
||
|
color: #1661AB;
|
||
|
background: #FFF;
|
||
|
text-align: center;
|
||
|
border-radius: 50%;
|
||
|
flex: none;
|
||
|
width: 120rpx;
|
||
|
height: 120rpx;
|
||
|
font-size: 50rpx;
|
||
|
line-height: 120rpx;
|
||
|
|
||
|
image {
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&-name {
|
||
|
font-size: 40rpx;
|
||
|
font-weight: bold;
|
||
|
// letter-spacing: 1px;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.grid {
|
||
|
padding-top: 30rpx;
|
||
|
background: #fff;
|
||
|
border-radius: 15rpx;
|
||
|
box-sizing: border-box;
|
||
|
}
|
||
|
|
||
|
.grid-icon {
|
||
|
::v-deep.u-icon__icon {
|
||
|
color: white;
|
||
|
width: 80rpx;
|
||
|
height: 80rpx;
|
||
|
border-radius: 50%;
|
||
|
box-sizing: border-box;
|
||
|
background: $uni-color-primary ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.grid-text {
|
||
|
font-size: 14px;
|
||
|
padding: 10rpx 0 30rpx 0rpx;
|
||
|
}
|
||
|
|
||
|
|
||
|
.flex-column {
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
justify-content: c;
|
||
|
height: 100%;
|
||
|
}
|
||
|
</style>
|