215 lines
6.9 KiB
Vue
215 lines
6.9 KiB
Vue
<template>
|
||
<page-meta :page-style="$theme.pageStyle">
|
||
<!-- #ifndef H5 -->
|
||
<navigation-bar :front-color="$theme.navColor" :background-color="$theme.navBgColor" />
|
||
<!-- #endif -->
|
||
</page-meta>
|
||
<view class="user-set">
|
||
<navigator :url="`/packages/pages/user_data/user_data`">
|
||
<view class="item flex bg-white mt-[20rpx]">
|
||
<u-avatar :src="userInfo.avatar" shape="square" :size="100"></u-avatar>
|
||
<view class="ml-[20rpx] flex flex-1 justify-between items-center">
|
||
<view>
|
||
<view class="mb-[15rpx] text-xl font-medium">{{ userInfo.nickname }}</view>
|
||
<view class="text-content text-xs">账号:{{ userInfo.username }}</view>
|
||
</view>
|
||
<u-icon name="arrow-right" color="#666"></u-icon>
|
||
</view>
|
||
</view>
|
||
</navigator>
|
||
<view class="item bg-white mt-[20rpx] btn-border flex flex-1 justify-between" @click="handlePwd">
|
||
<view class="">登录密码</view>
|
||
<u-icon name="arrow-right" color="#666"></u-icon>
|
||
</view>
|
||
<!-- #ifdef MP-WEIXIN || H5 -->
|
||
<!-- <view v-if="isWeixin" class="item bg-white flex flex-1 justify-between" @click="bindWechatLock">
|
||
<view class="">绑定微信</view>
|
||
<view class="flex justify-between">
|
||
<view class="text-muted mr-[20rpx]">
|
||
{{ userInfo.isBindWechat ? '已绑定' : '未绑定' }}
|
||
</view>
|
||
<u-icon v-if="userInfo.isBindWechat == 0" name="arrow-right" color="#666"></u-icon>
|
||
</view>
|
||
</view> -->
|
||
<!-- #endif -->
|
||
<!-- <navigator :url="`/packages/pages/agreement/agreement?type=${AgreementEnum.PRIVACY}`">
|
||
<view class="item bg-white mt-[20rpx] btn-border flex flex-1 justify-between">
|
||
<view class="">隐私政策</view>
|
||
<u-icon name="arrow-right" color="#666"></u-icon>
|
||
</view>
|
||
</navigator>
|
||
<navigator :url="`/packages/pages/agreement/agreement?type=${AgreementEnum.SERVICE}`">
|
||
<view class="item bg-white btn-border flex flex-1 justify-between">
|
||
<view class="">服务协议</view>
|
||
<u-icon name="arrow-right" color="#666"></u-icon>
|
||
</view>
|
||
</navigator>
|
||
<navigator url="/packages/pages/as_us/as_us">
|
||
<view class="item bg-white flex flex-1 justify-between">
|
||
<view class="">关于我们</view>
|
||
<view class="flex justify-between">
|
||
<view class="text-muted mr-[20rpx]">
|
||
{{ appStore.config.version }}
|
||
</view>
|
||
<u-icon name="arrow-right" color="#666"></u-icon>
|
||
</view>
|
||
</view>
|
||
</navigator> -->
|
||
|
||
<!-- 注销账号 -->
|
||
<view v-if="userInfo?.isCancelled == 1"
|
||
class="text-nr flex justify-between mt-[10rpx] px-[30rpx] bg-white h-[100rpx] items-center"
|
||
@click="handlecancel">
|
||
<view class="label">注销账号</view>
|
||
<u-icon name="arrow-right" size="22" color="#666"></u-icon>
|
||
</view>
|
||
<view class="mt-[60rpx] mx-[26rpx]">
|
||
<u-button type="primary" shape="circle" @click="logoutHandle"> 退出登录 </u-button>
|
||
</view>
|
||
|
||
<u-action-sheet :list="list" v-model="show" @click="handleClick"
|
||
:safe-area-inset-bottom="true"></u-action-sheet>
|
||
<!-- #ifdef H5 -->
|
||
<!-- 悬浮菜单 -->
|
||
<floating-menu></floating-menu>
|
||
<!-- #endif -->
|
||
</view>
|
||
</template>
|
||
|
||
<script setup lang="ts">
|
||
import { mnpAuthBind, oaAuthBind } from '@/api/user'
|
||
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||
import { ref, computed } from 'vue'
|
||
import { useAppStore } from '@/stores/app'
|
||
import { useUserStore } from '@/stores/user'
|
||
import { AgreementEnum } from '@/enums/agreementEnums'
|
||
import { isWeixinClient, getClient } from '@/utils/client'
|
||
import { ClientEnum } from '@/enums/appEnums'
|
||
import { useLockFn } from '@/hooks/useLockFn'
|
||
import router from '@/router'
|
||
import cache from '@/utils/cache'
|
||
|
||
// #ifdef H5
|
||
import wechatOa, { UrlScene } from '@/utils/wechat'
|
||
// #endif
|
||
|
||
const appStore = useAppStore()
|
||
const userStore = useUserStore()
|
||
const userInfo = computed(() => userStore.userInfo)
|
||
const list = ref([
|
||
{
|
||
text: '修改密码'
|
||
},
|
||
{
|
||
text: '忘记密码'
|
||
}
|
||
])
|
||
|
||
const isWeixin = ref(true)
|
||
// #ifdef H5
|
||
isWeixin.value = isWeixinClient()
|
||
// #endif
|
||
|
||
const show = ref(false)
|
||
|
||
// 修改/忘记密码
|
||
const handleClick = (index: number) => {
|
||
switch (index) {
|
||
case 0:
|
||
router.navigateTo('/packages/pages/change_password/change_password')
|
||
break
|
||
case 1:
|
||
router.navigateTo('/packages/pages/forget_pwd/forget_pwd')
|
||
break
|
||
}
|
||
}
|
||
|
||
const handlePwd = () => {
|
||
if (!userInfo.value.hasPwd)
|
||
return router.navigateTo('/packages/pages/change_password/change_password?type=set')
|
||
show.value = true
|
||
}
|
||
|
||
//注销账号
|
||
const handlecancel = () => {
|
||
router.navigateTo('/packages/pages/cancelaccount/cancelaccount')
|
||
}
|
||
|
||
// 退出登录
|
||
const logoutHandle = () => {
|
||
uni.showModal({
|
||
content: '是否退出登录?',
|
||
confirmColor: '#4173FF',
|
||
success: ({ cancel }) => {
|
||
if (cancel) return
|
||
userStore.logout()
|
||
router.reLaunch('/pages/login/login')
|
||
}
|
||
})
|
||
}
|
||
|
||
const bindWechat = async () => {
|
||
if (userInfo.value.isBindWechat) return
|
||
uni.showLoading({
|
||
title: '请稍后...'
|
||
})
|
||
try {
|
||
if (getClient() == ClientEnum.MP_WEIXIN) {
|
||
const { code }: any = await uni.login({
|
||
provider: 'weixin'
|
||
})
|
||
await mnpAuthBind({
|
||
code: code
|
||
})
|
||
} else if (getClient() == ClientEnum.OA_WEIXIN) {
|
||
wechatOa.getUrl(UrlScene.BIND_WX)
|
||
}
|
||
await userStore.getUser()
|
||
uni.hideLoading()
|
||
} catch (error: any) {
|
||
uni.$u.toast(error)
|
||
} finally {
|
||
uni.hideLoading()
|
||
}
|
||
}
|
||
const { lockFn: bindWechatLock } = useLockFn(bindWechat)
|
||
|
||
onShow(() => {
|
||
userStore.getUser()
|
||
})
|
||
onLoad(async () => {
|
||
// #ifdef H5
|
||
const { code, scene } = wechatOa.getAuthData()
|
||
|
||
if (code.length && scene === UrlScene.BIND_WX) {
|
||
uni.showLoading({
|
||
title: '请稍后...'
|
||
})
|
||
cache.set('code', code)
|
||
//用于清空code
|
||
try {
|
||
await oaAuthBind({ code })
|
||
await userStore.getUser()
|
||
uni.hideLoading()
|
||
} catch (error: any) {
|
||
uni.hideLoading()
|
||
} finally {
|
||
wechatOa.setAuthData()
|
||
}
|
||
}
|
||
// #endif
|
||
})
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.user-set {
|
||
.item {
|
||
padding: 30rpx;
|
||
}
|
||
|
||
.btn-border {
|
||
border-bottom: 2rpx solid #f8f8f8;
|
||
}
|
||
}
|
||
</style>
|