This commit is contained in:
杨航
2025-12-02 13:56:17 +08:00
parent 82d54b23f6
commit dd46a8f88d
6 changed files with 175 additions and 134 deletions
+2 -2
View File
@@ -5,11 +5,11 @@ ENV = 'development'
# VITE_APP_BASE_API_Url = 'https://aits.jlbank.com.cn:7001'
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
# VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
# VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002'
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002'
# VITE_APP_BASE_API_Url = 'http://192.168.247.200'
+2 -2
View File
@@ -4,8 +4,8 @@ ENV = 'development.yh'
# VITE_APP_BASE_API_Url = 'http://25.18.122.65:7001'
# VITE_APP_BASE_H5_API_Url = 'http://25.18.122.91:9786'
VITE_APP_BASE_H5_API_Url = 'http://25.18.122.78:9786'
VITE_APP_BASE_H5_API_Url = 'http://25.18.122.91:9786'
# VITE_APP_BASE_H5_API_Url = 'http://25.18.122.78:9786'
# VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002'
# VITE_APP_BASE_H5_API_Url_TRAEXAM = 'http://25.64.32.154:9604'
# VITE_APP_BASE_H5_API_Url_TRAPRACTICE = 'http://25.64.32.156:9603'
@@ -6,7 +6,7 @@
<script>
import MarkdownIt from 'markdown-it';
import DOMPurify from 'dompurify'
// import DOMPurify from 'dompurify'
export default {
name:"markdown-preview",
props: {
@@ -32,8 +32,8 @@ import DOMPurify from 'dompurify'
},
computed:{
mdText(){
let _endtext = DOMPurify.sanitize(this.contentHtml)
return _endtext
// let _endtext = DOMPurify.sanitize(this.contentHtml)
return this.contentHtml
}
},
methods:{
+1
View File
@@ -10,6 +10,7 @@
</view>
<view class="talking-cont">
<MarkdownPreview :mdString="mdText" />
{{mdText}}
</view>
<view class="btns-cont" v-if="!dataInfo.isLoading">
<!-- <view class="replay-btn" @click="reAnswer" v-if="!props.dataInfo.isHistory">
+158 -127
View File
@@ -1,82 +1,85 @@
<template>
<view class="sparring-detail max_page">
<view class="sparring-detail-scroll">
<view class="top-box">
<view class="top-title">
<view class="back-icon" @click="common.navigateBack()"></view>
<!-- <uv-icon class="arrow-icon" name="arrow-left" @click="common.switchTab('/pages/index/index')" /> -->
陪练详情
</view>
<ImagePreview class="img-box" :src="detailInfo.ossAddr" :isCache="true" width="750" height="422"/>
</view>
<view class="sparring-detail-body">
<view class="body-top">
<view class="body-top-title">
{{ detailInfo.traName }}
<!-- <view class="sparring-detail-scroll"> -->
<view class="nav-bar" :style="'background-color:' + bgOpacity"></view>
<view class="top-box">
<view class="top-title">
<view class="back-icon" @click="common.navigateBack()"></view>
<!-- <uv-icon class="arrow-icon" name="arrow-left" @click="common.switchTab('/pages/index/index')" /> -->
<!-- 陪练详情 -->
</view>
<view class="body-top-item"> 已陪练次数{{ detailInfo.practiceTimes }} </view>
<view class="body-top-item"> 类型{{ detailInfo.traInterTypDesc }} </view>
<view class="body-top-item"> 截止时间{{detailInfo.limitTyp === '01' ? '不限制' : detailInfo.endTm}}</view>
<scroll-view class="body-top-tags" :scroll-x="true">
<view class="item-tag-view">
<view class="item-tag active-tag" v-for="item in detailInfo.traPartnerTagList || []">
{{ item.tagName }}
</view>
<ImagePreview class="img-box" :src="detailInfo.ossAddr" :isCache="true" width="750" height="422" />
</view>
<scroll-view :scroll-y="true" class="sparring-detail-scroll" @scroll="scroll_fun"
:show-scrollbar="false">
<view class="sparring-detail-body">
<view class="body-top">
<view class="body-top-title">
{{ detailInfo.traName }}
</view>
</scroll-view>
</view>
<view class="body-item">
<view class="body-item-title">
<image class="title-icon" src="@/static/images/sparring/detail-icon-1.png"></image>
陪练介绍
<view class="body-top-item"> 已陪练次数{{ detailInfo.practiceTimes }} </view>
<view class="body-top-item"> 类型{{ detailInfo.traInterTypDesc }} </view>
<view class="body-top-item"> 截止时间{{detailInfo.limitTyp === '01' ? '不限制' : detailInfo.endTm}}</view>
<scroll-view class="body-top-tags" :scroll-x="true">
<view class="item-tag-view">
<view class="item-tag active-tag" v-for="item in detailInfo.traPartnerTagList || []">
{{ item.tagName }}
</view>
</view>
</scroll-view>
</view>
<view class="body-item-detail">
{{ detailInfo.introduction }}
<view class="body-item">
<view class="body-item-title">
<image class="title-icon" src="@/static/images/sparring/detail-icon-1.png"></image>
陪练介绍
</view>
<view class="body-item-detail">
{{ detailInfo.introduction }}
</view>
</view>
</view>
<view class="body-item">
<view class="body-item-title">
<image class="title-icon" src="@/static/images/sparring/detail-icon-2.png"></image>
陪练目标
<view class="body-item">
<view class="body-item-title">
<image class="title-icon" src="@/static/images/sparring/detail-icon-2.png"></image>
陪练目标
</view>
<view class="body-item-detail">
{{ detailInfo.traTarget }}
</view>
</view>
<view class="body-item-detail">
{{ detailInfo.traTarget }}
<view class="body-item">
<view class="body-item-title">
<image class="title-icon" src="@/static/images/sparring/detail-icon-3.png"></image>
陪练预计时长
</view>
<view class="body-item-detail"> {{ detailInfo.traStartLimit + ' ~ ' + detailInfo.traEndLimit }} 分钟 </view>
</view>
</view>
<view class="body-item">
<view class="body-item-title">
<image class="title-icon" src="@/static/images/sparring/detail-icon-3.png"></image>
陪练预计时长
<view class="body-item" v-if="detailInfo.traPartnerDataVoList?.length > 0">
<view class="body-item-title">
<image class="title-icon" src="@/static/images/sparring/detail-icon-4.png"></image>
陪练参考资料
</view>
<view class="body-item-detail">
<view class="body-item-detail-file" v-for="item in detailInfo.traPartnerDataVoList || []"
@click="previewFile(item)"> {{ item.dataName }}.{{ item.dataSuffix }} </view>
</view>
</view>
<view class="body-item-detail"> {{ detailInfo.traStartLimit + ' ~ ' + detailInfo.traEndLimit }} 分钟 </view>
</view>
<view class="body-item" v-if="detailInfo.traPartnerDataVoList?.length > 0">
<view class="body-item-title">
<image class="title-icon" src="@/static/images/sparring/detail-icon-4.png"></image>
陪练参考资料
</view>
<view class="body-item-detail">
<view class="body-item-detail-file" v-for="item in detailInfo.traPartnerDataVoList || []"
@click="previewFile(item)"> {{ item.dataName }}.{{ item.dataSuffix }} </view>
</view>
</view>
<view class="body-bottom">
<!-- v-if="isPreview" -->
<!-- <view class="body-bottom-btn" @click="toChooseRole('preview')">预览陪练</view>
<view class="body-bottom">
<!-- v-if="isPreview" -->
<!-- <view class="body-bottom-btn" @click="toChooseRole('preview')">预览陪练</view>
</view>
<view class="body-bottom" v-else> -->
<view class="body-bottom-btn" @click="toChooseRole('01')">去练习</view>
<view class="body-bottom-btn" @click="toChooseRole('02')">去考试</view>
<view class="body-bottom-btn" @click="toChooseRole('01')">去练习</view>
<view class="body-bottom-btn" @click="toChooseRole('02')">去考试</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</template>
<script setup>
import {
ref,
computed,
onMounted
} from 'vue'
import {
@@ -121,9 +124,23 @@
})
}
const toChooseRole = type => {
common.navigateTo('/pages/sparring/chooseRole?traId=' + traId.value + '&type=' + type + '&isPreview=' + (isPreview.value ?'1':''))
common.navigateTo('/pages/sparring/chooseRole?traId=' + traId.value + '&type=' + type + '&isPreview=' + (isPreview
.value ? '1' : ''))
}
const isPreview = ref(false)
const scrollTop = ref(0)
const bgOpacity = computed(() => {
if (scrollTop.value <= 90) return `rgba(255,255,255,0)`;
const opacity = Math.min(1, (scrollTop.value - 90) / 90);
return `rgba(255,255,255,${opacity})`;
});
const scroll_fun = (e) => {
console.log(e.detail.scrollTop)
scrollTop.value = e.detail.scrollTop;
};
onLoad(params => {
traId.value = params.traId
isPreview.value = params.isPreview === '1'
@@ -138,94 +155,108 @@
</script>
<style lang="scss" scoped>
$body-top-height: 220rpx;
$body-top-height: 0rpx;
$top-height: calc(422rpx - $body-top-height - var(--status-bar-height));
.sparring-detail {
overflow-x: hidden;
overflow-y: hidden;
padding-top: $top-height;
position: relative;
.sparring-detail-scroll{
.sparring-detail-scroll {
height: calc(100vh - 422rpx + $top-height);
width: 100vw;
overflow-x: hidden;
overflow-y: auto;
bottom: 0;
position: absolute;
z-index: 4;
}
.top-box {
background-image: url(@/static/images/sparring/top-bg.png);
background-repeat: no-repeat;
background-size: cover;
height: 422rpx;
// clip-path: ellipse(650rpx 327rpx at 375rpx calc(var(--status-bar-height) + 109rpx));
width: 100%;
.nav-bar{
position: fixed;
padding-top: var(--status-bar-height);
width: 100vw;
top: 0;
left: 0;
z-index:3;
z-index: 10;
height: var(--status-bar-height);
overflow: hidden;
}
.top-box {
background-image: url(@/static/images/sparring/top-bg.png);
background-repeat: no-repeat;
background-size: cover;
height: 422rpx;
// clip-path: ellipse(650rpx 327rpx at 375rpx calc(var(--status-bar-height) + 109rpx));
width: 100%;
position: fixed;
padding-top: var(--status-bar-height);
top: 0;
left: 0;
z-index: 3;
.img-box {
width: 100%;
height: 100%;
margin: 0 auto;
// border-radius: 23rpx;
.img-box {
width: 100%;
height: 100%;
margin: 0 auto;
// border-radius: 23rpx;
position: absolute;
left: 0;
top: 0;
overflow: hidden;
z-index: 3;
}
.top-title {
height: 90rpx;
// background-color: red;
text-align: center;
font-size: 33rpx;
padding-top: 10rpx;
line-height: 46rpx;
box-sizing: border-box;
font-weight: 500;
color: #fff;
position: relative;
z-index: 10;
// margin-bottom: 23rpx;
.arrow-icon {
position: absolute;
left: 0;
top: 0;
overflow: hidden;
z-index: 3;
left: 36rpx;
top: 20rpx;
color: #fff !important;
}
.top-title {
height: 90rpx;
// background-color: red;
text-align: center;
font-size: 33rpx;
padding-top: 10rpx;
line-height: 46rpx;
box-sizing: border-box;
font-weight: 500;
color: #fff;
position: relative;
z-index: 10;
// margin-bottom: 23rpx;
.arrow-icon {
position: absolute;
left: 36rpx;
top: 20rpx;
color: #fff !important;
}
.back-icon {
position: absolute;
width: 40rpx;
height: 40rpx;
cursor: pointer;
left: 50rpx;
top: 33rpx;
transform: translateY(-50%);
}
.back-icon {
position: absolute;
width: 40rpx;
height: 40rpx;
cursor: pointer;
left: 50rpx;
top: 33rpx;
transform: translateY(-50%);
}
.back-icon::before,
.back-icon::after {
content: '';
position: absolute;
transition: all 0.3s ease;
}
.back-icon::before,
.back-icon::after {
content: '';
position: absolute;
transition: all 0.3s ease;
}
.back-icon::after {
top: 25%;
left: 25%;
width: 40%;
height: 40%;
border-top: 4rpx solid #ffffff;
border-left: 4rpx solid #ffffff;
transform: rotate(-45deg);
}
.back-icon::after {
top: 25%;
left: 25%;
width: 40%;
height: 40%;
border-top: 4rpx solid #ffffff;
border-left: 4rpx solid #ffffff;
transform: rotate(-45deg);
}
}
}
.sparring-detail-body {
position: absolute;
@@ -236,7 +267,7 @@
min-height: 100%;
width: 100%;
box-sizing: border-box;
background: linear-gradient(180deg, #ffffff00 0%, #ffffff00 calc($top-height - 20rpx), #f6f8ff calc($top-height - 20rpx), #f6f8ff 100% );
background: linear-gradient(180deg, #ffffff00 0%, #ffffff00 calc($top-height - 20rpx), #f6f8ff calc($top-height - 20rpx), #f6f8ff 100%);
z-index: 5;
padding: $top-height 23rpx 180rpx;
+9
View File
@@ -406,6 +406,15 @@
console.log('提问失败,系统异常!');
return;
}
if (commond === 'ASK-OVER') {
console.log(body );
console.log('陪练已结束,去结果页面!');
common.navigateTo('/pages/sparring/result?isOver=1&traId=' + traId.value
+ '&execId=' + execId.value
+ '&type=' + talkingType.value
+ '&isPreview=' + (isPreview.value ? '1' : ''))
return;
}
} else {
if (['0005', 'QQ0005'].includes(res.rtnCode)) {
goto_login_fun();