uniapp-app/pages_app/wechatContact/wechatContact.vue
2025-10-14 17:46:23 +08:00

203 lines
4.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="wechat-contact-page">
<!-- 顶部导航栏 -->
<uni-nav-bar
left-icon="left"
title="微信关联"
@clickLeft="goBack"
fixed
color="#8B2316"
height="180rpx"
:border="false"
backgroundColor="#eeeeee"
></uni-nav-bar>
<!-- 微信卡片 -->
<view class="card" v-if="isBoundWechat">
<view class="wx-left">
<up-image :src="wxIcon" width="120rpx" height="120rpx" mode="aspectFill"></up-image>
</view>
<view class="wx-center">
<view class="wx-title">微信</view>
<view class="wx-sub">{{ nickname }}</view>
</view>
<view class="wx-right">
<button class="bind-btn" @click="onUnBind">解绑</button>
</view>
</view>
<view class="card" v-else>
<view class="wx-left">
<up-image :src="wxIcon" width="120rpx" height="120rpx" mode="aspectFill"></up-image>
</view>
<view class="wx-center">
<view class="wx-title">微信</view>
<view class="wx-sub">未绑定微信</view>
</view>
<view class="wx-right">
<button class="bind-btn" @click="onBind">绑定</button>
</view>
</view>
<!-- 操作说明 -->
<view class="tips">
<view class="tips-title">操作说明:</view>
<view class="tips-line">1. 肝胆相照注册账号与微信绑定肝胆相照相关直播视频无忧随心看</view>
<view class="tips-line">2. 仅需操作一次后续通过微信观看直播视频无需额外操作立即进入</view>
<view class="tips-line">
若您有任何疑问或需要我们协助请与您的小助手联系或直接微信联系
<text class="highlight">igandan1000</text>
</view>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue';
import {onShow} from "@dcloudio/uni-app";
import wxIcon from '@/static/wechat.png';
import my_api from '@/api/my_api.js'
const isBoundWechat = ref(false)
const unionid = ref('')
const openid = ref('')
const nickname = ref('')
const goBack = () => {
uni.navigateBack();
};
const onBind = () => {
uni.login({
provider: 'weixin',
success: function (loginRes) {
// 登录成功
uni.getUserInfo({
provider: 'weixin',
success: function(info) {
// 获取用户信息成功, info.authResult保存用户信息
console.log(info.userInfo)
my_api.bindWechat({openid:info.userInfo.openId,unionid:info.userInfo.unionId,nickname:info.userInfo.nickName}).then(res=>{
console.log("111: ",res)
if (res.code === 200 || res.code === '200') {
uni.showToast({
title: '绑定成功',
icon: 'success'
})
isBoundWechat.value = true
unionid.value = info.userInfo.unionId
openid.value = info.userInfo.openId
nickname.value = info.userInfo.nickName
}else{
uni.showToast({
title: res.msg || '绑定失败',
icon: 'none'
})
}
}).catch(err=>{
console.log(err)
uni.showToast({
title: '绑定失败',
icon: 'none'
})
})
}
})
},
fail: function (err) {
// 登录授权失败
// err.code是错误码
console.log(err)
}
});
}
const getIsBoundWechat = async () => {
const res = await my_api.isBoundWechat()
console.log(res)
if (res.code === 200 || res.code === '200') {
isBoundWechat.value = res.isBound == 1
unionid.value = res.unionid
openid.value = res.openid
nickname.value = res.nickname
}
}
const onUnBind = async () => {
uni.showModal({
title: '解绑微信',
content: '确定要解绑微信吗?',
success: (res) => {
if (res.confirm) {
my_api.unBindWechat({"unionid":unionid.value}).then(res=>{
console.log(res)
if (res.code === 200 || res.code === '200') {
uni.showToast({
title: '解绑成功',
icon: 'success'
})
isBoundWechat.value = false
}
else{
uni.showToast({
title: res.msg || '解绑失败',
icon: 'none'
})
}
getIsBoundWechat()
})
}
}
});
}
onShow(() => {
getIsBoundWechat()
})
</script>
<style lang="scss" scoped>
.wechat-contact-page {
min-height: 100vh;
background: #f7f7f7;
}
.card {
display: flex;
align-items: center;
background: #ffffff;
padding: 30rpx;
border-bottom: 2rpx solid #f0f0f0;
.wx-left { margin-right: 24rpx; }
.wx-center {
flex: 1;
.wx-title { font-size: 34rpx; color: #222222; }
.wx-sub { margin-top: 10rpx; font-size: 26rpx; color: #9e9e9e; }
}
.wx-right {
.bind-btn {
min-width: 140rpx;
height: 64rpx;
background: #2ecc71;
color: #ffffff;
border: none;
display: flex;
justify-content: center;
align-items: center;
border-radius: 12rpx;
font-size: 28rpx;
padding: 0 24rpx;
}
}
}
.tips {
padding: 30rpx;
background: #f7f7f7;
.tips-title { font-size: 30rpx; color: #222222; margin-bottom: 16rpx; }
.tips-line { font-size: 28rpx; color: #666666; line-height: 1.8; margin-bottom: 10rpx; }
.highlight { color: #e53935; }
}
</style>