151 lines
3.6 KiB
Vue
151 lines
3.6 KiB
Vue
<template>
|
||
<view class="service-button-container">
|
||
<!-- 微信客服按钮 -->
|
||
<!-- #ifdef MP-WEIXIN -->
|
||
<button
|
||
v-if="useWechatService"
|
||
open-type="contact"
|
||
class="service-btn wechat-service"
|
||
:session-from="sessionFrom"
|
||
>
|
||
<text class="icon">💬</text>
|
||
<text class="text">联系客服</text>
|
||
</button>
|
||
<!-- #endif -->
|
||
|
||
<!-- 电话客服按钮 -->
|
||
<button
|
||
v-if="!useWechatService"
|
||
@click="callService"
|
||
class="service-btn phone-service"
|
||
>
|
||
<text class="icon">📞</text>
|
||
<text class="text">拨打客服</text>
|
||
</button>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
name: 'ServiceButton',
|
||
props: {
|
||
// 会话来源页面
|
||
sessionFrom: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
// 按钮类型:primary, default
|
||
type: {
|
||
type: String,
|
||
default: 'primary'
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
useWechatService: true,
|
||
servicePhone: ''
|
||
};
|
||
},
|
||
onLoad() {
|
||
this.loadConfig();
|
||
},
|
||
methods: {
|
||
// 加载配置
|
||
async loadConfig() {
|
||
try {
|
||
// 先从本地存储读取缓存
|
||
const cachedConfig = uni.getStorageSync('appConfig');
|
||
if (cachedConfig && cachedConfig.common) {
|
||
this.useWechatService = cachedConfig.common.useWechatService !== false;
|
||
this.servicePhone = cachedConfig.common.servicePhone || '';
|
||
}
|
||
|
||
// 从后端获取最新配置
|
||
const { API_BASE, API_ENDPOINTS } = await import('@/config/api.js');
|
||
const res = await uni.request({
|
||
url: `${API_BASE}${API_ENDPOINTS.config.getAppConfig}`,
|
||
method: 'GET',
|
||
header: {
|
||
'Content-Type': 'application/json'
|
||
// 不添加认证头,因为这是公开接口
|
||
}
|
||
});
|
||
|
||
// 兼容不同平台的返回格式:可能是 [error, res] 或直接是 res
|
||
const response = Array.isArray(res) ? res[1] : res;
|
||
if (response && response.data && response.data.success && response.data.data) {
|
||
const config = response.data.data;
|
||
// 保存到本地存储
|
||
uni.setStorageSync('appConfig', config);
|
||
|
||
// 更新组件数据
|
||
if (config.common) {
|
||
this.useWechatService = config.common.useWechatService !== false;
|
||
this.servicePhone = config.common.servicePhone || '';
|
||
}
|
||
}
|
||
} catch (error) {
|
||
console.error('加载配置失败:', error);
|
||
// 如果请求失败,使用缓存的配置
|
||
}
|
||
},
|
||
|
||
// 拨打客服电话
|
||
callService() {
|
||
uni.makePhoneCall({
|
||
phoneNumber: this.servicePhone,
|
||
success: () => {
|
||
console.log('拨打电话成功');
|
||
},
|
||
fail: (err) => {
|
||
console.error('拨打电话失败:', err);
|
||
uni.showToast({
|
||
title: '拨打失败',
|
||
icon: 'none'
|
||
});
|
||
}
|
||
});
|
||
}
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.service-button-container {
|
||
width: 100%;
|
||
}
|
||
|
||
.service-btn {
|
||
width: 100%;
|
||
height: 90upx;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border-radius: 45upx;
|
||
font-size: 30upx;
|
||
font-weight: 600;
|
||
border: none;
|
||
|
||
.icon {
|
||
font-size: 36upx;
|
||
margin-right: 10upx;
|
||
}
|
||
|
||
.text {
|
||
line-height: 1;
|
||
}
|
||
}
|
||
|
||
.wechat-service {
|
||
background: linear-gradient(135deg, #07C160 0%, #00D976 100%);
|
||
color: white;
|
||
box-shadow: 0 8upx 20upx rgba(7, 193, 96, 0.3);
|
||
}
|
||
|
||
.phone-service {
|
||
background: linear-gradient(135deg, #8B7355 0%, #6D8B8B 100%);
|
||
color: white;
|
||
box-shadow: 0 8upx 20upx rgba(139, 115, 85, 0.3);
|
||
}
|
||
</style>
|