货无忧安装平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

318 lines
6.4 KiB

<template>
<!-- 背景图 -->
<image class="userbg" src="../../static/userbg.png" mode=""></image>
<view class="main_user">
<!-- 页面标题 -->
<view class="title">个人中心</view>
<!-- 用户信息 -->
<view class="userInfo align-center">
<view class="headPortrait">
<image src="@/static/appIcon/favicon.png" mode=""></image>
</view>
<view class="title">
<view class=" text-start" style="font-size: 1.25rem;">
{{details.userInfo.name}}
</view>
<view class="mt20 text-start line" @click="handleChangeRole" style="font-size: 0.8rem;">
{{details.userInfo.role_name}}
</view>
</view>
</view>
<!-- 控件 -->
<scroll-view class="controlCenter" :style="{height: details.scrollheight}" @scrolltolower="()=>{}" scroll-y="true"
@touchmove.stop>
<block v-for="(item, index) in details.controlList" :key="item.label">
<view class="flex-c-sb controlCenter_row" @click="item.clickFn()">
<view class="flex-c-c">
<image :src="item.icon" mode=""></image>
<text class="fwb">{{item.label}}</text>
</view>
<u-icon name="arrow-right" color="#afb5be" size="36"></u-icon>
</view>
</block>
<view class="button flex-c-c" @click="handleLoginOut">
退出登录
</view>
</scroll-view>
</view>
<!-- 提示组件 -->
<tiplist ref="tiplists"></tiplist>
<tips ref="tip"></tips>
<MyDrawer ref="drawerByLogin">
<template #content>
<picker-view v-if="details.visible" :indicator-style="details.indicatorStyle" :immediate-change="true"
:value="details.value" @change="(e)=> details.value = e.detail.value" class="picker-view">
<picker-view-column>
<view class="item" v-for="(item, index) in details.roleChooseList" :key="index">
{{ item.label }}
</view>
</picker-view-column>
</picker-view>
</template>
</MyDrawer>
</template>
<script lang="ts" setup>
import { reactive, ref, toRefs, nextTick } from "vue";
import {
onShow,
onLoad,
onHide,
onPullDownRefresh
} from '@dcloudio/uni-app'
import utils from '@/utils/utils.js'
import { useStore } from 'vuex';
const tiplists = ref(null)
const tip = ref(null)
// 选择角色
const drawerByLogin = ref()
const $store = useStore()
let details = reactive({
/** 滚动区页面高度 */
scrollheight: '40vh',
/** 控件列表 */
controlList: [
// 任务中心
{
label: '任务中心',
icon: '../../static/renwu.png',
isShow: true,
clickFn() {
uni.navigateTo({
url: '/pagesUser/pages/InstallTaskList/InstallTaskList'
})
}
},
// 售后服务
{
label: '售后服务',
icon: '../../static/shouhou.png',
isShow: true,
clickFn() {
uni.navigateTo({
url: '/pagesUser/pages/InstallAfterSalesTaskList/InstallAfterSalesTaskList'
})
}
},
// 待审核
{
label: '待审核',
icon: '../../static/shenhe.png',
isShow: true,
clickFn() {
uni.navigateTo({
url: '/pagesUser/pages/ToBeReviewed/ToBeReviewed'
})
}
},
// 设置
{
label: '设置',
icon: '../../static/shezhi.png',
isShow: true,
clickFn() { }
},
// 修改密码
{
label: '修改密码',
icon: '../../static/xiugai.png',
isShow: true,
clickFn() {
uni.navigateTo({
url: '/pagesUser/pages/changePassword/changePassword'
})
}
},
],
// 角色选择list
roleChooseList: [],
// 默认选择第一个
value: [0],
visible: false,
/** picker行高度 */
indicatorStyle: `height: 40px;`,
userInfo: uni.getStorageSync('userInfo') || {}
})
onShow(async () => {
await nextTick()
details.scrollheight = await utils.getViewDistanceFormTop('.controlCenter')
})
// 下拉刷新
onPullDownRefresh(() => {
const timer = setTimeout(() => {
// 关闭刷新动画
uni.stopPullDownRefresh()
clearTimeout(timer)
}, 500)
})
/** 退出登录 */
const handleLoginOut = () => {
$store.commit('HANDLE_CLEAR_INFO')
uni.reLaunch({
url: '/pages/login/login'
})
}
/** 关闭弹窗 */
const hidePopUp = (node) => {
details.visible = false
node.value.details.showPopUp = false
}
/** 切换角色 */
const handleChangeRole = () => {
const userInfo = details.userInfo
console.log('userInfo :>> ', userInfo);
console.log('$store :>> ', $store);
const { role } = details.userInfo
const _roleArr = $store.state.roleList
details.roleChooseList = []
for (let i = 0; i < role.length; i++) {
const value = role[i]
for (let i = 0; i < _roleArr.length; i++) {
const item = _roleArr[i]
if (item.value !== (value + '')) continue
details.roleChooseList.push(item)
break
}
}
details.visible = true
drawerByLogin.value.setDetails({
showPopUp: true,
height: '50vh',
success() {
const _value = details.roleChooseList[details.value[0]]
console.log('_value :>> ', _value);
details.userInfo.role_code = _value.value
details.userInfo.role_name = _value.label
$store.commit('HANDLE_UPDATA_USERINFO', details.userInfo)
$store.commit('HANDLE_UPDATE_ISLOGIN', true)
hidePopUp(drawerByLogin)
},
close() {
hidePopUp(drawerByLogin)
}
})
}
</script>
<style lang="scss">
@import url("@/utils/style/common.scss");
// 背景
.userbg {
width: 100vw;
position: absolute;
top: 0;
left: 0;
}
// 页面主容器
.main_user {
position: relative;
z-index: 10;
// 页面标题
.title {
text-align: center;
color: #fff;
padding: 60upx 0;
font-weight: bold;
.line {
padding-bottom: 10upx;
border-bottom: 1upx solid #fff;
}
}
// 用户信息
.userInfo {
padding: 0 20upx;
$imgWidth: 150upx;
// 头像
.headPortrait {
background: #fff;
width: $imgWidth;
height: $imgWidth;
border-radius: 50%;
overflow: hidden;
margin-right: 40upx;
image {
width: $imgWidth;
height: $imgWidth;
}
}
}
// 控件中心
.controlCenter {
margin-top: 60upx;
padding: 40upx 20upx 0;
background-color: #fff;
min-height: 50vh;
border-top-right-radius: 40upx;
border-top-left-radius: 40upx;
width: 100vw;
box-sizing: border-box;
.controlCenter_row {
border-bottom: 2upx solid #eee;
padding: 24upx 0;
image {
width: 48upx;
height: 48upx;
margin-right: 40upx;
}
}
}
// 退出按钮
.button {
height: 80upx;
width: 80vw;
color: #fff;
background-color: var(--subjectColor);
margin: 40upx auto 0;
border-radius: 40upx;
}
}
</style>