ai-clone/frontend-ai/components/ServiceButton.vue
2026-03-05 14:29:21 +08:00

151 lines
3.6 KiB
Vue
Raw Permalink 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="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>