Files
uni-fans-score/pages/help/index.vue
T
2025-10-28 18:32:23 +08:00

185 lines
4.3 KiB
Vue

<template>
<view class="help-container">
<!-- 常见问题 -->
<view class="faq-list">
<view
class="faq-item"
v-for="(item, index) in faqList"
:key="index"
@click="toggleFaq(index)"
>
<view class="faq-header">
<text class="question">{{ item.question }}</text>
<view class="arrow" :class="{ open: item.isOpen }"></view>
</view>
<view class="answer" v-show="item.isOpen">
{{ item.answer }}
</view>
</view>
</view>
<!-- 联系客服 -->
<view class="contact-card">
<view class="contact-title">{{ HELP_CONTENT.CONTACT.TITLE }}</view>
<view class="contact-content">
<view class="contact-item">
<text class="label">{{ HELP_CONTENT.CONTACT.PHONE.LABEL }}</text>
<text class="value" @click="makePhoneCall">{{ customerPhone }}</text>
</view>
<view class="contact-item">
<text class="label">{{ HELP_CONTENT.CONTACT.SERVICE_TIME.LABEL }}</text>
<text class="value">{{ HELP_CONTENT.CONTACT.SERVICE_TIME.VALUE }}</text>
</view>
</view>
</view>
</view>
</template>
<script>
import { HELP_CONTENT } from '@/constants/help'
import { getCustomerPhone } from '@/util/index.js'
export default {
data() {
return {
HELP_CONTENT,
faqList: HELP_CONTENT.FAQ_LIST.map(item => ({
...item,
isOpen: false
})),
customerPhone: HELP_CONTENT.CONTACT.PHONE.VALUE // 默认客服电话
}
},
onLoad() {
// 从缓存读取客服电话
this.customerPhone = getCustomerPhone()
},
methods: {
toggleFaq(index) {
this.faqList[index].isOpen = !this.faqList[index].isOpen
},
makePhoneCall() {
uni.makePhoneCall({
phoneNumber: this.customerPhone
})
}
}
}
</script>
<style lang="scss" scoped>
.help-container {
min-height: 100vh;
background: #f8f8f8;
padding: 30rpx;
.faq-list {
background: #fff;
border-radius: 20rpx;
padding: 20rpx;
margin-bottom: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0,0,0,0.04);
.faq-item {
border-bottom: 1rpx solid #f5f5f5;
&:last-child {
border-bottom: none;
}
.faq-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx 20rpx;
.question {
font-size: 30rpx;
color: #333;
flex: 1;
padding-right: 20rpx;
}
.arrow {
width: 16rpx;
height: 16rpx;
border-right: 4rpx solid #999;
border-bottom: 4rpx solid #999;
transform: rotate(45deg);
transition: all 0.3s;
&.open {
transform: rotate(-135deg);
}
}
}
.answer {
font-size: 28rpx;
color: #666;
line-height: 1.6;
padding: 0 20rpx 30rpx;
background: #f9f9f9;
border-radius: 10rpx;
margin: 0 20rpx 20rpx;
}
}
}
.contact-card {
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
box-shadow: 0 4rpx 16rpx rgba(0,0,0,0.04);
.contact-title {
position: relative;
z-index: 4;
display: inline-block;
font-size: 32rpx;
color: #333;
font-weight: 500;
margin-bottom: 20rpx;
padding-bottom: 8rpx;
width:fit-content;
&::after {
z-index: -1;
content: '';
position: absolute;
left: 0;
bottom: 8rpx;
width: 88%;
height: 16rpx;
border-radius: 20rpx;
// background: transparent;
background: #07C160; // 底部高亮(微信绿)
}
}
.contact-content {
.contact-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
.label {
font-size: 28rpx;
color: #666;
}
.value {
font-size: 28rpx;
color: #333;
font-weight: 500;
&:active {
opacity: 0.7;
}
}
}
}
}
}
</style>