Browse Source

问题详情页面

zhaowenkang/feature-20251028181547-行情页面
maziyang 4 weeks ago
parent
commit
67560daf56
  1. 8
      api/customerServicePlatform/customerServicePlatform.js
  2. 9
      pages.json
  3. 80
      pages/customerServicePlatform/csPlatformIndex.vue
  4. 36
      pages/customerServicePlatform/historyRecord.vue
  5. 325
      pages/customerServicePlatform/questionDetail.vue
  6. BIN
      static/customer-service-platform/robot-head.png

8
api/customerServicePlatform/customerServicePlatform.js

@ -2,6 +2,14 @@ import { http } from '@/utils/http.js'
const baseFeedbackURL = "http://39.101.133.168:8828/link" const baseFeedbackURL = "http://39.101.133.168:8828/link"
export const getQuestion = (data) => {
return http({
method: 'POST',
url: 'http://pbb6edde.natappfree.cc' +'/api/customer/getQuestion',
data
})
}
//反馈添加 //反馈添加
export const addFeedbackRecord = (data) => { export const addFeedbackRecord = (data) => {

9
pages.json

@ -335,6 +335,15 @@
"titleNView": false, "titleNView": false,
"bounce": false "bounce": false
} }
},
{
"path": "pages/customerServicePlatform/questionDetail",
"style": {
"navigationStyle": "custom",
"disableSwipeBack": true,
"titleNView": false,
"bounce": false
}
} }
], ],

80
pages/customerServicePlatform/csPlatformIndex.vue

@ -36,16 +36,12 @@
</view> </view>
<view class="card-line"></view> <view class="card-line"></view>
<view class="suggest-list"> <view class="suggest-list">
<view class="suggest-item" v-for="(q, idx) in showQuestions" :key="q.id"
<view class="suggest-item" v-for="(q, idx) in showQuestions" :key="idx"
@click="onQuestionClick(q)"> @click="onQuestionClick(q)">
<view class="left"> <view class="left">
<view :class="['num', 'num-' + ((idx % 5) + 1)]">{{ idx + 1 }}</view> <view :class="['num', 'num-' + ((idx % 5) + 1)]">{{ idx + 1 }}</view>
<text class="q-text">{{ q }}</text>
</view> </view>
<view class="mid">
<text class="q-text">{{ q.text }}</text>
</view>
<view class="right"> <view class="right">
<text class="arrow"></text> <text class="arrow"></text>
</view> </view>
@ -72,12 +68,12 @@
<image :src="img" mode="scaleToFill" class="slot-img" /> <image :src="img" mode="scaleToFill" class="slot-img" />
<button v-if="img" class="remove" @click="removeImage(index)">×</button> <button v-if="img" class="remove" @click="removeImage(index)">×</button>
</view> </view>
<view class="img-slot" v-if="images.length < 9">
<view class="img-slot" v-if="images.length < 3">
<view class="slot-empty" @click="chooseImage()"> <view class="slot-empty" @click="chooseImage()">
<image src="/static/customer-service-platform/camera.png" class="camera-icon" /> <image src="/static/customer-service-platform/camera.png" class="camera-icon" />
</view> </view>
</view> </view>
<text class="tip-text" v-if="images.length === 0">最多添加9张图片</text>
<text class="tip-text" v-if="images.length === 0">最多添加3张图片</text>
</view> </view>
<button class="feedback-btn" @click="onSumbitFeedback()">提交</button> <button class="feedback-btn" @click="onSumbitFeedback()">提交</button>
@ -94,6 +90,8 @@
</template> </template>
<script> <script>
import { getQuestion} from "../../api/customerServicePlatform/customerServicePlatform";
import FeedbackModal from '@/components/FeedbackModal.vue' import FeedbackModal from '@/components/FeedbackModal.vue'
export default { export default {
components: { FeedbackModal }, components: { FeedbackModal },
@ -101,39 +99,18 @@
return { return {
headerTitle: '智能客服中台', headerTitle: '智能客服中台',
iSMT: 0, iSMT: 0,
questions: [{
id: 1,
text: '如何注册账号?'
},
{
id: 2,
text: '为什么无法注册账户?'
},
{
id: 3,
text: 'DeepChart的主要功能有哪些?'
},
{
id: 4,
text: '什么是机构行为?'
},
{
id: 5,
text: '为什么机构行为很重要?'
},
{
id: 6,
text: '如何绑定银行卡?'
},
{
id: 7,
text: '忘记密码怎么办?'
}
questions: [
"DeepChart 有免费功能和付费功能的区分吗?具体有哪些?",
"如何参与平台的用户反馈活动?反馈的问题会被采纳吗?",
"我的自选股最多能添加多少只?能否按市场分类管理?",
"注册时必须提供手机号 / 邮箱吗?能否匿名使用?",
"忘记登录密码了,如何找回?",
'如何注册账号?',
'为什么无法注册账户?'
], ],
showQuestions: [], showQuestions: [],
feedbackText: '', feedbackText: '',
images: [], images: [],
capacity: 2
} }
}, },
mounted() { mounted() {
@ -168,6 +145,13 @@
onBack() { onBack() {
if (typeof uni !== 'undefined') uni.navigateBack(); if (typeof uni !== 'undefined') uni.navigateBack();
}, },
async getQuestionList(){
const res = await getQuestion()
if(res.code == 200){
this.showQuestions =res.data
}
},
shuffleQuestions() { shuffleQuestions() {
// 45 // 45
const arr = this.questions.slice(); const arr = this.questions.slice();
@ -179,16 +163,16 @@
}, },
onQuestionClick(q) { onQuestionClick(q) {
// //
this.feedbackText = q.text;
this.feedbackText = q;
}, },
chooseImage() { chooseImage() {
const that = this; const that = this;
if (typeof uni === 'undefined' || !uni.chooseImage) return; if (typeof uni === 'undefined' || !uni.chooseImage) return;
const remain = 9 - (that.images ? that.images.length : 0);
const remain = 3 - (that.images ? that.images.length : 0);
if (remain <= 0) { if (remain <= 0) {
if (typeof uni !== 'undefined') uni.showToast({ if (typeof uni !== 'undefined') uni.showToast({
title: '最多只能上传9张',
title: '最多只能上传3张',
icon: 'none' icon: 'none'
}); });
return; return;
@ -203,7 +187,7 @@
const paths = res.tempFilePaths || (res.tempFiles && res.tempFiles.map(f => f.path)) || []; const paths = res.tempFilePaths || (res.tempFiles && res.tempFiles.map(f => f.path)) || [];
// imagesVue2 push // imagesVue2 push
for (let p of paths) { for (let p of paths) {
if (that.images.length < 9) {
if (that.images.length < 3) {
that.images.push(p); that.images.push(p);
} }
} }
@ -253,7 +237,7 @@
viewHistory() { viewHistory() {
// //
if (typeof uni !== 'undefined') uni.navigateTo({ if (typeof uni !== 'undefined') uni.navigateTo({
url: '/pages/customerServicePlatform/historyRecord'
url: '/pages/customerServicePlatform/questionDetail'
}); });
} }
} }
@ -437,11 +421,9 @@
} }
.left { .left {
width: 72rpx;
width: 90%;
display: flex; display: flex;
justify-content: center;
align-items: center; align-items: center;
padding-right: 12rpx;
} }
.num { .num {
@ -471,12 +453,8 @@
color: #9296a0; color: #9296a0;
} }
.mid {
flex: 1 1 auto;
min-width: 0;
}
.q-text { .q-text {
padding-left: 14rpx;
display: block; display: block;
color: #333; color: #333;
font-size: 28rpx; font-size: 28rpx;
@ -649,7 +627,7 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-size: 16px;
font-size: 32rpx;
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
line-height: normal; line-height: normal;

36
pages/customerServicePlatform/historyRecord.vue

@ -25,9 +25,9 @@
<view class="dot-inner"></view> <view class="dot-inner"></view>
</view> </view>
<text class="feedback-time">{{ item.time }}</text>
<text class="feedback-time">{{ item.createdAt }}</text>
<text class="feedback-status"> <text class="feedback-status">
{{ item.statusText }}
{{ statusText }}
<image class="smile-icon" src="/static/customer-service-platform/smile-icon.png"></image> <image class="smile-icon" src="/static/customer-service-platform/smile-icon.png"></image>
</text> </text>
</view> </view>
@ -56,25 +56,25 @@
</template> </template>
<script> <script>
import { getFeedbackRecords, addFeedbackRecord} from "../../api/customerServicePlatform/customerServicePlatform";
import {
getFeedbackRecords,
addFeedbackRecord
} from "../../api/customerServicePlatform/customerServicePlatform";
export default { export default {
data() { data() {
return { return {
iSMT: 0, iSMT: 0,
// historyList: [], // historyList: [],
statusText: '反馈成功',
historyList: [{ historyList: [{
id: 1, id: 1,
time: '2025/10/16 11:46',
status: '成功', // //
statusText: '反馈成功',
createdAt: '2025/10/16 11:46',
content: '你是不是总是看着股票回调时心里发慌,不知道什么时候进场才是最安全的?追高买错被套牢,亏得眼泪直流aaa,回调时又不敢进,错过了反弹的机会?今天,我将带你掌握一套精准确认底部的三步法——通过超卖信号、关键K线和强势启动点,帮助你轻松识别市场底部,稳健进场,避开高位追涨,赚取大波利润!我们今天会结合特斯拉(TSLA)和阿里巴巴(BABA)的经aaa典案例,帮助你更好地理解这些技巧,赶快拿起纸笔,开始学', content: '你是不是总是看着股票回调时心里发慌,不知道什么时候进场才是最安全的?追高买错被套牢,亏得眼泪直流aaa,回调时又不敢进,错过了反弹的机会?今天,我将带你掌握一套精准确认底部的三步法——通过超卖信号、关键K线和强势启动点,帮助你轻松识别市场底部,稳健进场,避开高位追涨,赚取大波利润!我们今天会结合特斯拉(TSLA)和阿里巴巴(BABA)的经aaa典案例,帮助你更好地理解这些技巧,赶快拿起纸笔,开始学',
images: [] images: []
}, },
{ {
id: 2, id: 2,
time: '2025/10/16 11:46',
status: '成功',
statusText: '反馈成功',
createdAt: '2025/10/16 11:46',
content: '请描述您想反馈的内容\n第二条示例文本,长度可以不一样,测试多行显示和字数统计功能。这里补充一些文字以便测试外观和换行效果。', content: '请描述您想反馈的内容\n第二条示例文本,长度可以不一样,测试多行显示和字数统计功能。这里补充一些文字以便测试外观和换行效果。',
images: [] images: []
} }
@ -93,14 +93,22 @@
window.history.back(); window.history.back();
} }
}, },
async loadHistoryList(){
console.log("????")
async loadHistoryList() {
const res = await getFeedbackRecords({ const res = await getFeedbackRecords({
token:'dccec0b65a94f498b8183a17589ab16e'
token: 'dccec0b65a94f498b8183a17589ab16e'
}) })
console.log(res) console.log(res)
if(res.code == 200){
if (res.code == 200) {
this.historyList = res.data.map(item => {
const images = [item.image1, item.image2, item.image3].filter(img => !!img)
return {
id: item.id,
createdAt: item.createdAt,
content: item.content,
images,
dccode: item.dccode
}
})
} }
}, },
previewImage(list, index) { previewImage(list, index) {

325
pages/customerServicePlatform/questionDetail.vue

@ -0,0 +1,325 @@
<template>
<view class="main">
<view class="top" :style="{ height: iSMT + 'px' }"></view>
<!-- 头部导航 -->
<view class="header">
<view class="back-icon">
<image @click="onBack" src="/static/customer-service-platform/cs-platform-back.png"
class="header-icon-image"></image>
</view>
<view class="title">{{ headerTitle }}</view>
<view class="notification-icon">
<image src="/static/customer-service-platform/message.png" class="header-icon-image"></image>
</view>
</view>
<scroll-view scroll-y class="content-container">
<view class="content-header">
<view class="content-header-area">
<view class="logo">
<image mode="aspectFit" src="/static/customer-service-platform/ellipse-dc-img.png"></image>
</view>
<view class="greeting">
<text class="greet-title">我能为你做点什么</text>
<text class="greet-sub">DeepChart随时为您提供服务</text>
</view>
</view>
</view>
<!-- 卡片部分 -->
<view class="card">
<!-- 问题头部-->
<view class="question-header">
<view class="question-row">
<image class="question-avatar" src="/static/customer-service-platform/robot-head.png"
mode="aspectFill"></image>
<view class="question-title">{{ questionTitle }}?</view>
</view>
</view>
<!-- 卡片内容区-->
<view class="card-body">
<image class="card-logo" src="/static/customer-service-platform/ellipse-dc-img.png"
mode="aspectFit"></image>
<view class="card-text">
<text class="card-paragraph">
DeepChart 提供了多种注册方式具体流程如下
</text>
<view class="bullet-list">
<view class="bullet-item">
<view class="bullet-dot"></view>
<text class="bullet-text">邮箱 /
手机号注册进入注册页面后输入邮箱地址或手机号勾选接受用户协议和隐私政策点击注册即可若未勾选协议点击注册时会弹窗提示请阅读并同意服务协议和隐私权限同意后可进入下一步</text>
</view>
<view class="bullet-item">
<view class="bullet-dot"></view>
<text class="bullet-text">第三方账号注册支持通过 Apple 账号或 Google
邮箱直接注册点击对应平台按钮按提示完成授权即可</text>
</view>
<view class="bullet-item">
<view class="bullet-dot"></view>
<text class="bullet-text">若遇到问题请通过页面底部的联系客服按钮联系我们</text>
</view>
</view>
</view>
</view>
</view>
<view class="login-row">
<button class="login-btn">登录</button>
<button class="register-btn">注册</button>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
headerTitle: '智能客服中台',
iSMT: 0,
questionTitle: '如何注册账号'
};
},
mounted() {
this.iSMT = uni.getSystemInfoSync().statusBarHeight || 0;
},
methods: {
onBack() {
if (typeof uni !== 'undefined') uni.navigateBack();
}
}
};
</script>
<style scoped>
.main {
display: flex;
flex-direction: column;
height: 100vh;
background-color: #ffffff;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 30rpx;
background-color: #ffffff;
}
.title {
color: #000000;
text-align: center;
font-size: 32rpx;
font-weight: 400;
}
.back-icon,
.notification-icon {
width: 40rpx;
display: flex;
align-items: center;
justify-content: center;
}
.header-icon-image {
width: 40rpx;
height: 40rpx;
object-fit: contain;
}
.content-container {
padding: 20rpx;
width: 100%;
box-sizing: border-box;
overflow-x: hidden;
}
.content-header {
display: flex;
align-items: center;
justify-content: center;
gap: 24rpx;
padding: 0 60rpx;
width: 100%;
box-sizing: border-box;
height: 188rpx;
}
.content-header-area {
display: flex;
gap: 20rpx;
}
.logo {
width: 120rpx;
height: 120rpx;
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 112rpx;
}
.greeting {
display: flex;
flex-direction: column;
justify-content: center;
flex: 1 1 auto;
}
.greet-title {
color: #000;
font-size: 40rpx;
font-style: normal;
font-weight: 500;
line-height: normal;
margin: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.greet-sub {
color: #838383;
font-size: 28rpx;
font-style: normal;
font-weight: 400;
line-height: normal;
margin-top: 12rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.card {
width: 90%;
margin: 0 auto 20rpx;
padding: 28rpx;
box-sizing: border-box;
border-radius: 16rpx;
border: 4rpx solid #FF7C99;
background: #fff;
}
/* 问题头部 */
.question-header {
width: 100%;
margin-bottom: 48rpx;
}
.question-row {
display: flex;
align-items: center;
}
.question-avatar {
width: 52rpx;
height: 52rpx;
border-radius: 999rpx;
margin-right: 32rpx;
}
.question-title {
font-size: 34rpx;
color: #222;
font-weight: 600;
}
/* 卡片内部布局 */
.card-body {
display: flex;
gap: 20rpx;
align-items: flex-start;
}
.card-logo {
width: 52rpx;
height: 52rpx;
flex: 0 0 52rpx;
border-radius: 8rpx;
}
.card-text {
flex: 1 1 auto;
}
.card-paragraph {
display: block;
color: #333;
font-size: 28rpx;
margin-bottom: 14rpx;
}
.bullet-list {
display: flex;
flex-direction: column;
gap: 12rpx;
}
.bullet-item {
display: flex;
align-items: flex-start;
}
.bullet-dot {
width: 8rpx;
height: 8rpx;
background: #FF7C99;
border-radius: 999rpx;
margin-top: 10rpx;
flex: 0 0 8rpx;
}
.bullet-text {
margin-left: 12rpx;
color: #666;
font-size: 28rpx;
line-height: 40rpx;
/* 提高可读性 */
}
.login-row{
display: flex;
justify-content: center;
width:100%;
margin-top: 100rpx;
}
.login-btn{
width: 300rpx;
height: 100rpx;
border-radius: 50rpx;
background: #F3F3F3;
color: #000000;
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
font-style: normal;
font-weight: 400;
line-height: normal;
}
.register-btn{
width: 300rpx;
height: 100rpx;
border-radius: 60rpx;
background: #000;
color: #ffffff;
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
font-style: normal;
font-weight: 400;
line-height: normal;
}
</style>

BIN
static/customer-service-platform/robot-head.png

After

Width: 21  |  Height: 19  |  Size: 1.2 KiB

Loading…
Cancel
Save