386 lines
9.2 KiB
Vue
386 lines
9.2 KiB
Vue
|
|
<template>
|
|||
|
|
<su-fixed bottom placeholder bg="bg-white">
|
|||
|
|
<view class="ui-tabbar-box">
|
|||
|
|
<view class="ui-tabbar ss-flex ss-col-center ss-row-between">
|
|||
|
|
<!-- <view
|
|||
|
|
v-if="collectIcon"
|
|||
|
|
class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
|
|||
|
|
@tap="onFavorite"
|
|||
|
|
>
|
|||
|
|
<block v-if="modelValue.favorite">
|
|||
|
|
<image
|
|||
|
|
class="item-icon"
|
|||
|
|
:src="sheep.$url.static('/assets/addons/shopro/uniapp/goods/collect_1.gif')"
|
|||
|
|
mode="aspectFit"
|
|||
|
|
></image>
|
|||
|
|
<view class="item-title">已收藏</view>
|
|||
|
|
</block>
|
|||
|
|
<block v-else>
|
|||
|
|
<image
|
|||
|
|
class="item-icon"
|
|||
|
|
:src="sheep.$url.static('/assets/addons/shopro/uniapp/goods/collect_0.png')"
|
|||
|
|
mode="aspectFit"
|
|||
|
|
></image>
|
|||
|
|
<view class="item-title">收藏</view>
|
|||
|
|
</block>
|
|||
|
|
</view> -->
|
|||
|
|
<view v-if="serviceIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
|
|||
|
|
style="margin-left: 12rpx;" @tap="backHome">
|
|||
|
|
<image class="item-icon" src="https://mall.jiangxiaoxian.hschool.com.cn/backHome.png" mode="aspectFit">
|
|||
|
|
</image>
|
|||
|
|
<view class="item-title">首页</view>
|
|||
|
|
</view>
|
|||
|
|
<!-- <view @click="backHome">
|
|||
|
|
<image class="btnIcon" src="https://mall.jiangxiaoxian.hschool.com.cn/backHome.png" mode=""></image>
|
|||
|
|
<view class="btnText" style="margin-top: 10rpx;">首页</view>
|
|||
|
|
</view> -->
|
|||
|
|
<view v-if="serviceIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
|
|||
|
|
@tap="onChat">
|
|||
|
|
<image class="item-icon" :src="sheep.$url.static('/assets/addons/shopro/uniapp/goods/message.png')"
|
|||
|
|
mode="aspectFit"></image>
|
|||
|
|
<view class="item-title">客服</view>
|
|||
|
|
</view>
|
|||
|
|
<view v-if="shareIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
|
|||
|
|
style="margin-right: 12rpx;" @tap="shareGoods()">
|
|||
|
|
<image class="item-icon" :src="sheep.$url.static('/assets/addons/shopro/uniapp/goods/share.png')"
|
|||
|
|
mode="aspectFit"></image>
|
|||
|
|
<view class="item-title">分享</view>
|
|||
|
|
</view>
|
|||
|
|
<slot></slot>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</su-fixed>
|
|||
|
|
|
|||
|
|
<su-popup :show="showLogin == true" type="center" round="10" @close="showLogin = false" @open="showLogin = true">
|
|||
|
|
<view class="popup">
|
|||
|
|
|
|||
|
|
<button class="texbut" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
|
|||
|
|
<!-- <image style="width: 100%;height: 136rpx;" src="https://mall.jiangxiaoxian.hschool.com.cn/loginBtnTwo.png"></image> -->
|
|||
|
|
<!-- 授权登录 -->
|
|||
|
|
</button>
|
|||
|
|
</view>
|
|||
|
|
<view style="margin: 0 auto;position: absolute;bottom: -90rpx;width: 100%;text-align: center;">
|
|||
|
|
<image style="width: 50rpx;height: 50rpx;" src="https://mall.jiangxiaoxian.hschool.com.cn/registerCancel.png"
|
|||
|
|
mode="aspectFill" @click="showLogin = false"></image>
|
|||
|
|
</view>
|
|||
|
|
</su-popup>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup>
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
* 底部导航
|
|||
|
|
*
|
|||
|
|
* @property {String} bg - 背景颜色Class
|
|||
|
|
* @property {String} ui - 自定义样式Class
|
|||
|
|
* @property {Boolean} noFixed - 是否定位
|
|||
|
|
* @property {Boolean} topRadius - 上圆角
|
|||
|
|
*
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
import {
|
|||
|
|
computed,
|
|||
|
|
ref,
|
|||
|
|
reactive
|
|||
|
|
} from 'vue';
|
|||
|
|
import sheep from '@/sheep';
|
|||
|
|
import {
|
|||
|
|
showShareModal
|
|||
|
|
} from '@/sheep/hooks/useModal';
|
|||
|
|
import third from '@/sheep/api/third';
|
|||
|
|
import userApi from '@/sheep/api/user';
|
|||
|
|
|
|||
|
|
const userInfo = computed(() => sheep.$store('user').userInfo);
|
|||
|
|
|
|||
|
|
// 数据
|
|||
|
|
const state = reactive({});
|
|||
|
|
|
|||
|
|
// 接收参数
|
|||
|
|
const props = defineProps({
|
|||
|
|
modelValue: {
|
|||
|
|
type: Object,
|
|||
|
|
default () {},
|
|||
|
|
},
|
|||
|
|
bg: {
|
|||
|
|
type: String,
|
|||
|
|
default: 'bg-white',
|
|||
|
|
},
|
|||
|
|
bgStyles: {
|
|||
|
|
type: Object,
|
|||
|
|
default () {},
|
|||
|
|
},
|
|||
|
|
ui: {
|
|||
|
|
type: String,
|
|||
|
|
default: '',
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
noFixed: {
|
|||
|
|
type: Boolean,
|
|||
|
|
default: false,
|
|||
|
|
},
|
|||
|
|
topRadius: {
|
|||
|
|
type: Number,
|
|||
|
|
default: 0,
|
|||
|
|
},
|
|||
|
|
collectIcon: {
|
|||
|
|
type: Boolean,
|
|||
|
|
default: true,
|
|||
|
|
},
|
|||
|
|
serviceIcon: {
|
|||
|
|
type: Boolean,
|
|||
|
|
default: true,
|
|||
|
|
},
|
|||
|
|
shareIcon: {
|
|||
|
|
type: Boolean,
|
|||
|
|
default: true,
|
|||
|
|
},
|
|||
|
|
});
|
|||
|
|
const elStyles = computed(() => {
|
|||
|
|
return {
|
|||
|
|
'border-top-left-radius': props.topRadius + 'rpx',
|
|||
|
|
'border-top-right-radius': props.topRadius + 'rpx',
|
|||
|
|
overflow: 'hidden',
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const tabbarheight = (e) => {
|
|||
|
|
uni.setStorageSync('tabbar', e);
|
|||
|
|
};
|
|||
|
|
async function onFavorite() {
|
|||
|
|
const {
|
|||
|
|
code
|
|||
|
|
} = await sheep.$api.user.favorite.do(props.modelValue.id);
|
|||
|
|
if (code === 1) {
|
|||
|
|
if (props.modelValue.favorite) {
|
|||
|
|
props.modelValue.favorite = 0;
|
|||
|
|
} else {
|
|||
|
|
props.modelValue.favorite = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const goodShare = ref(false)
|
|||
|
|
function shareGoods() {
|
|||
|
|
console.log('shareGoods');
|
|||
|
|
showShareModal();
|
|||
|
|
// if(isLogin.value == true) {
|
|||
|
|
// goodShare.value = false;
|
|||
|
|
// showShareModal();
|
|||
|
|
// }else {
|
|||
|
|
// goodShare.value = true;
|
|||
|
|
// toLogin();
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const isLogin = computed(() => sheep.$store('user').isLogin);
|
|||
|
|
const showLogin = ref(false);
|
|||
|
|
const iv = ref('');
|
|||
|
|
const wxCode = ref('');
|
|||
|
|
const encryptedData = ref('');
|
|||
|
|
|
|||
|
|
// 打开登录的弹框
|
|||
|
|
function toLogin() {
|
|||
|
|
console.log('toLogin——打开登录的弹框:', showLogin.value);
|
|||
|
|
showLogin.value = true;
|
|||
|
|
console.log('showLogin', showLogin.value);
|
|||
|
|
}
|
|||
|
|
// 关闭登录弹框
|
|||
|
|
function closeLogin() {
|
|||
|
|
console.log('closeLogin');
|
|||
|
|
showLogin.value = false;
|
|||
|
|
}
|
|||
|
|
// 打开登录的弹框
|
|||
|
|
function openLogin() {
|
|||
|
|
console.log('openLogin');
|
|||
|
|
showLogin.value = true;
|
|||
|
|
}
|
|||
|
|
// 使用微信手机号
|
|||
|
|
async function getPhoneNumber(e) {
|
|||
|
|
console.log('获取手机号', e, e.detail.errMsg);
|
|||
|
|
if (e.detail.errMsg !== 'getPhoneNumber:ok') {} else {
|
|||
|
|
encryptedData.value = e.detail.encryptedData // 用于解密
|
|||
|
|
iv.value = e.detail.iv // 用于解密
|
|||
|
|
getCode()
|
|||
|
|
// let result = await sheep.$platform.useProvider().bindUserPhoneNumber(e.detail);
|
|||
|
|
// console.log('result', result);
|
|||
|
|
// if (result) {
|
|||
|
|
// sheep.$store('user').getInfo();
|
|||
|
|
// // closeAuthModal();
|
|||
|
|
// closeLogin();
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 获取code和sessionId
|
|||
|
|
function getCode() {
|
|||
|
|
uni.login({
|
|||
|
|
provider: 'weixin',
|
|||
|
|
success: (res) => {
|
|||
|
|
wxCode.value = res.code
|
|||
|
|
// loginResult.value = res
|
|||
|
|
// getSessionId();
|
|||
|
|
Login();
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
// 登录接口
|
|||
|
|
function Login() {
|
|||
|
|
const session_id = uni.getStorageSync('sessionId')
|
|||
|
|
console.log('session_id', session_id);
|
|||
|
|
return new Promise(async (resolve, reject) => {
|
|||
|
|
const {
|
|||
|
|
code
|
|||
|
|
} = await third.wechat.wxLogin({
|
|||
|
|
platform: 'miniProgram',
|
|||
|
|
payload: encodeURIComponent(
|
|||
|
|
JSON.stringify({
|
|||
|
|
sessionId: session_id,
|
|||
|
|
iv: iv.value,
|
|||
|
|
encryptedData: encryptedData.value,
|
|||
|
|
code: wxCode.code,
|
|||
|
|
}),
|
|||
|
|
),
|
|||
|
|
});
|
|||
|
|
if (code === 1) {
|
|||
|
|
resolve(true);
|
|||
|
|
showLogin.value = false;
|
|||
|
|
if(goodShare.value == true) {
|
|||
|
|
shareGoods();
|
|||
|
|
}
|
|||
|
|
if(chatPhone.value == true) {
|
|||
|
|
getInfoUser();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
resolve(false);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// const onChat = () => {
|
|||
|
|
// sheep.$router.go('/pages/chat/index', {
|
|||
|
|
// id: props.modelValue.id,
|
|||
|
|
// });
|
|||
|
|
// };
|
|||
|
|
|
|||
|
|
//获取平台客服电话
|
|||
|
|
function getInfoUser() {
|
|||
|
|
userApi.profile().then(res=> {
|
|||
|
|
if (res.code == 1){
|
|||
|
|
console.log('获取个人信息:',res.data);
|
|||
|
|
userInfo.value = res.data;
|
|||
|
|
console.log('联系平台客服', userInfo.value.platform_contact_number);
|
|||
|
|
onChat();
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//联系平台客服
|
|||
|
|
const chatPhone = ref(false);
|
|||
|
|
function onChat() {
|
|||
|
|
if(isLogin.value == true) {
|
|||
|
|
chatPhone.value = false;
|
|||
|
|
console.log('联系平台客服', userInfo.value.platform_contact_number);
|
|||
|
|
wx.makePhoneCall({
|
|||
|
|
phoneNumber: userInfo.value.platform_contact_number,
|
|||
|
|
success: function() {
|
|||
|
|
console.log("拨打电话成功")
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
fail: function(err) {
|
|||
|
|
console.log("拨打电话失败", err)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}else {
|
|||
|
|
chatPhone.value = true;
|
|||
|
|
toLogin();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//返回首页
|
|||
|
|
function backHome() {
|
|||
|
|
uni.switchTab({
|
|||
|
|
// url: '/pages/index/index'
|
|||
|
|
url: '/pages/index/category'
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.ui-tabbar-box {
|
|||
|
|
box-shadow: 0px -6px 10px 0px rgba(51, 51, 51, 0.2);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.ui-tabbar {
|
|||
|
|
display: flex;
|
|||
|
|
height: 50px;
|
|||
|
|
background: #fff;
|
|||
|
|
|
|||
|
|
.detail-tabbar-item {
|
|||
|
|
width: 90rpx;
|
|||
|
|
|
|||
|
|
.item-icon {
|
|||
|
|
width: 40rpx;
|
|||
|
|
height: 40rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.item-title {
|
|||
|
|
font-size: 20rpx;
|
|||
|
|
font-weight: 500;
|
|||
|
|
line-height: 20rpx;
|
|||
|
|
margin-top: 12rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.popup {
|
|||
|
|
background-image: url('https://mall.jiangxiaoxian.hschool.com.cn/loginBack.png');
|
|||
|
|
background-size: 100%;
|
|||
|
|
width: 540rpx;
|
|||
|
|
height: 640rpx;
|
|||
|
|
display: flex;
|
|||
|
|
padding-bottom: 44rpx;
|
|||
|
|
flex-direction: column;
|
|||
|
|
align-items: baseline;
|
|||
|
|
justify-content: flex-end;
|
|||
|
|
padding-left: 73rpx;
|
|||
|
|
padding-right: 73rpx;
|
|||
|
|
|
|||
|
|
.img_shouquan {
|
|||
|
|
position: absolute;
|
|||
|
|
width: 680rpx;
|
|||
|
|
height: 857rpx;
|
|||
|
|
left: -25rpx;
|
|||
|
|
top: -390rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
#txt2 {
|
|||
|
|
text-align: center;
|
|||
|
|
margin-top: 200rpx;
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
color: #525252;
|
|||
|
|
margin-bottom: 60rpx;
|
|||
|
|
position: relative;
|
|||
|
|
font-weight: 500;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.texbut {
|
|||
|
|
width: 507rpx;
|
|||
|
|
height: 93rpx;
|
|||
|
|
border-radius: 16rpx;
|
|||
|
|
// background: #ffbd25;
|
|||
|
|
background-image: url('https://mall.jiangxiaoxian.hschool.com.cn/loginBtnTwo.png');
|
|||
|
|
background-size: 100%;
|
|||
|
|
font-size: 34rpx;
|
|||
|
|
color: #3d3d3d;
|
|||
|
|
font-weight: bold;
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: center;
|
|||
|
|
align-items: center;
|
|||
|
|
margin-top: 30rpx;
|
|||
|
|
// margin: 0 auto;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
</style>
|