Files
yusheng-h5/pages/feedback/help.vue

305 lines
7.0 KiB
Vue
Raw Normal View History

2025-08-11 11:06:07 +08:00
<template>
2025-08-13 10:39:47 +08:00
<view class="view-page" :style="{backgroundImage : `url('${ThemeData?.app_bg ?? 'https://vespa.qxmier.com/image/bg.png'}')`}">
2025-08-11 11:06:07 +08:00
<!-- <headerHeight /> -->
<navBar :style="{marginTop: `${statusBarHeight}${uni.getSystemInfoSync().platform === 'ios' ? 'px': 'dp'}`}" :navTitle="'帮助与反馈'" :emitBack="true" @backEvent="back">
</navBar>
<view class="content">
<view class="top-tip flex-line flex-spaceB">
<view class="">
<view class="tip">
Hi有什么可以帮你
</view>
<view class="color-6 font-24 font-w400">
尽全力帮助你
</view>
</view>
<view class="kefu-icon">
<img src="@/static/image/help/kefu.png" alt="" />
</view>
</view>
<view class="problem-view">
<view class="problem-box" v-for="(item,index) in problemList" :key="index">
<view class="box-title color-0 font-w500 font-32">
{{!item.id ? item.title : `${typeData?.type_name}相关问题`}}
</view>
<view class="box-content" v-if="item.list && item.list.length !== 0">
<template v-if="item.id">
<view class="flex-line box-line box-lines" v-for="(ele,eleIndex) in item.list"
@click="jumpPage(ele)">
<view class="title">
<template v-if="item.id">
{{ele.title}}
</template>
</view>
<view class="">
<uni-icons v-if="item.id" type="right" size="14"
color="rgb(153, 153, 153)"></uni-icons>
</view>
</view>
</template>
<uni-data-select class="box-line" v-else v-model="typeId" :clear="false" :localdata="item.list"
@change="changeType"></uni-data-select>
</view>
<view v-else class="">
<uni-load-more status="noMore"></uni-load-more>
</view>
</view>
</view>
</view>
<view class="footer flex-line">
<view class="footer-button flex-line" @click="operate(index)" v-for="(item,index) in footerList"
:key="index">
<view class="icon">
<img :src="item.icon" alt="" />
</view>
<view class="title ml-6 color-3 font-28 font-w400">
{{item.title}}
</view>
</view>
</view>
</view>
</template>
<script>
import headerHeight from '@/component/headerHeight.vue';
import navBar from '@/component/nav.vue';
import http from '@/until/http.js';
import keFuImg from '@/static/image/help/Headphone.png';
import fkImg from '@/static/image/help/fankui.png';
export default {
components: {
headerHeight,
navBar
},
data() {
return {
statusBarHeight:0,
problemList: [{
title: '问题分类',
id: 0,
list: [{
title: '全部问题'
}]
},
{
title: '常见问题',
id: 1,
list: []
}
],
footerList: [{
title: '在线客服',
icon: keFuImg
},
{
title: '意见反馈',
icon: fkImg
}
],
page: 1,
limit: 10,
typeData: null,
typeId: null,
2025-08-13 10:39:47 +08:00
ThemeData:null
2025-08-11 11:06:07 +08:00
}
},
onLoad(options) {
const {
id,h
} = options
uni.setStorageSync('token', id)
if (uni.getStorageSync('token')) this.getHelpList()
this.statusBarHeight = h
uni.setStorageSync('BarHeight', h)
2025-08-13 10:39:47 +08:00
if(uni.getStorageSync('Theme_Data')) {
this.ThemeData = JSON.parse(uni.getStorageSync('Theme_Data'))
}
2025-08-11 11:06:07 +08:00
},
methods: {
async getHelpList() {
http.get('/api/Help/help_type', {
token: uni.getStorageSync('token') ?? ''
}).then(response => {
const {
data,
code
} = response
if (code) {
this.problemList[0].list = data.map(ele => {
return {
...ele,
text: `${ele.type_name}的相关问题`,
value: ele.id
}
})
this.typeId = data.length ? data[0].id : null
this.typeData = data.length ? data[0] : null
}
this.$nextTick(() => {
this.getProblemList(this.typeId)
})
this.errorPage = false
}).catch(error => {
this.errorPage = true
});
},
async getProblemList(id) {
http.get('/api/Help/help_list', {
token: uni.getStorageSync('token') ?? '',
type: id,
page: this.page,
page_limit: this.limit
}).then(response => {
const {
data,
code
} = response
if (code) {
this.problemList[1].list = data
}
})
},
changeType(ele) {
// console.log(ele)
this.typeId = ele
this.typeData = this.problemList[0].list.filter(ele => {return this.typeId === ele.id})[0]
this.getProblemList(this.typeId)
this.problemList[1].list = []
},
jumpPage(data) {
uni.navigateTo({
url: `/pages/feedback/problemDetail?id=${data.id}`
});
},
operate(index) {
if (index) {
// 意见反馈
uni.navigateTo({
url: `/pages/feedback/feedback?id=${uni.getStorageSync('token')}`
});
} else {
// 在线客服
const platform = uni.getSystemInfoSync().platform;
// console.log(platform, '打印设备参数')
if (platform === 'ios') {
console.log('调用iOS原生方法')
// 通过 messageHandlers 调用 iOS 原生方法
window.webkit.messageHandlers.nativeHandler.postMessage({
'action': 'customerService'
});
} else if (platform === 'android') {
console.log('调用Android原生方法')
// 调用 Android 原生方法
window.Android.customerService();
}
}
},
back() {
this.closeWeb()
},
closeWeb() {
// 关闭页面
const platform = uni.getSystemInfoSync().platform;
if (platform === 'ios') {
window.webkit.messageHandlers.nativeHandler.postMessage({
'action': 'closeWeb'
});
} else if (platform === 'android') {
window.Android.closeWeb();
}
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .uni-select {
border: 0 !important;
padding: 0;
}
.view-page {
// padding: 32rpx;
width: 100vw;
height: 100vh;
background-repeat: no-repeat;
background-size: 100% 100%;
.top-tip {
font-family: Source Han Sans CN, Source Han Sans CN;
margin: 36rpx 0;
padding: 32rpx;
width: calc(100% - 64rpx);
.tip {
font-weight: 500;
font-size: 36rpx;
color: #333333;
}
.kefu-icon {
width: 218rpx;
height: 218rpx;
}
}
.problem-view {
padding: 0 24rpx;
.problem-box {
font-family: Source Han Sans CN, Source Han Sans CN;
.box-title {
padding: 24rpx 0;
}
.box-content {
.box-line,
.box-lines {
// width: calc(100% - 48rpx);
width: 100%;
padding: 18rpx 24rpx;
background-color: #fff;
border-radius: 14rpx;
margin-bottom: 24rpx;
justify-content: space-between;
.title {
color: #3a3a3a;
font-size: 24rpx;
}
}
.box-lines {
width: calc(100% - 48rpx);
}
}
}
}
.footer {
width: 100%;
height: 98rpx;
background: #FFFFFF;
box-shadow: 0rpx -6rpx 8rpx 0rpx rgba(222, 222, 222, 0.25);
position: fixed;
left: 0;
right: 0;
bottom: 0;
width: 100%;
justify-content: space-around;
.footer-button {
.icon {
width: 48rpx;
height: 48rpx;
}
}
}
}
</style>