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
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> |