2025-08-01 11:39:06 +08:00

435 lines
12 KiB
Vue
Raw 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="xilu">
<view class="page-foot bg-normal">
<view class="p30">
<view v-if="info.order_status == 1 || info.order_status == 2" @click="codeOpen()" class="xilu_foot_btn1">查看签到码</view>
<view v-if="info.order_status == 3 " @click="to_comment(info.id)" class="xilu_foot_btn1">去评价</view>
<view class="xilu_foot_btn2" v-if="info.order_status == 5 ">已过期</view>
<view class="xilu_foot_btn2" v-if="info.order_status == 6 ">课时已完成</view>
</view>
</view>
<view class="container">
<view class="pr">
<swiper class="xilu_swiper_info" @change="swiperTab" :current="current" :circular="true"
:autoplay="true" :interval="3000" :duration="1000">
<swiper-item v-for="(vo,index) in thumb_images">
<image :src="vo" mode="aspectFill"></image>
</swiper-item>
</swiper>
<view class="xilu_swiper_dot">{{ current + 1 }}/{{ thumb_images.length }}</view>
<image v-if="web_url" :src="web_url+'/uniapp_image/xilu_mask.png'" mode="aspectFill" class="xilu_mask"></image>
</view>
<view class="pr mt_132 z5 plr25 pb30">
<view class="flex-box">
<view class="col2 fs36 fw500 lh50 flex-grow-1" v-if="info">
{{info.course_camp.course.title || info.course_camp.camp.title}}
</view>
<view>
<image @click="returnTips()" src="@/static/images/xilu_icon18.png" mode="aspectFill"
class="ico24"></image>
<text @click="returnTips()" class="ml10 fs28 col2">退款须知</text>
</view>
</view>
<view class="pr mt30 xilu_lession_info">
<image v-if="web_url" :src="web_url + '/uniapp_image/xilu_bg_info_big.png'" mode="aspectFill" class="xilu_lession_info_bg">
</image>
<view class="xilu_lession_info_view p30">
<view class="flex-box">
<image src="@/static/images/xilu_icon_time.png" mode="aspectFill" class="ico28 mid"></image>
<view class="flex-grow-1 fs28 colf lh40 pl10">{{info.course_camp.class_time_txt || ''}}
{{info.course_camp.start_at || ''}}{{info.course_camp.end_at || ''}}
</view>
</view>
<view class="mt40 flex"
@tap="openLocation(info.course_camp.shop.lat,info.course_camp.shop.lng)">
<image src="@/static/images/xilu_icon_address_gray.png" mode="aspectFill" class="ico28 mt8">
</image>
<view class="flex-grow-1 plr10">
<view class="w460 fs28 colf lh40 m-ellipsis-l2">{{info.course_camp.shop.address || ''}}
</view>
</view>
<view class="tc">
<image src="@/static/images/xilu_guide.png" mode="aspectFill" class="ico30 mt5"></image>
<view class="col9 fs24 mt10 lh34">导航</view>
</view>
</view>
</view>
</view>
<view class="xilu_box flex-box" v-if="info">
<image :src="info.course_camp.coach.xilufitness_urls.coach_avatar" mode="aspectFill"
class="xilu_head_big"></image>
<view class="flex-grow-1 pl30">
<view class="fs40 fw500 lh56 colf">{{info.course_camp.coach.coach_name || ''}}</view>
<view class="mt30 fs28 col9 lh40" v-if="info.course_camp.coach.lable_list.length > 0">
{{info.course_camp.coach.lable_list.join('·')}}
</view>
</view>
</view>
<view class="xilu_box" style="padding-left: 28rpx;padding-right: 28rpx;"
v-if="sign_list.list && sign_list.list.length > 0">
<view class="colf fs36 fw500 lh50">本期报名({{sign_list.user_count || 0}}人)</view>
<view style="font-size: 0;">
<image :src="vo.user.xilufitness_urls.avatar || '../../static/images/avatar.png' "
mode="aspectFill" class="xilu_mini_head" v-for="(vo,index) in sign_list.list"></image>
</view>
</view>
<template v-if="info.order_type == 3">
<view class="xilu_box" v-if="info.course_camp.camp.content">
<view class="pb30 mb30 fs36 fw500 colf lh50 bb">课程介绍</view>
<view class="colf">
<mp-html :content="info.course_camp.camp.content"></mp-html>
</view>
</view>
<view class="xilu_box" v-if="info.course_camp.camp.tip_content">
<view class="pb30 mb30 fs36 fw500 colf lh50 bb">注意事项</view>
<view class="colf">
<mp-html :content="info.course_camp.camp.tip_content"></mp-html>
</view>
</view>
</template>
<template v-else>
<view class="xilu_box" v-if="info.course_camp.course.content">
<view class="pb30 mb30 fs36 fw500 colf lh50 bb">课程介绍</view>
<view class="colf">
<mp-html :content="info.course_camp.course.content"></mp-html>
</view>
</view>
<view class="xilu_box" v-if="info.course_camp.course.tip_content">
<view class="pb30 mb30 fs36 fw500 colf lh50 bb">注意事项</view>
<view class="colf">
<mp-html :content="info.course_camp.course.tip_content"></mp-html>
</view>
</view>
</template>
</view>
</view>
<u-popup :show="showCode" mode="center" bgColor="transparent" @open="codeOpen" @close="codeClose"
:safeAreaInsetBottom="false">
<view class="xilu_code_popup pr pt40">
<view class="tc fs34 col9 lh40">签到<text
class="col2">{{info.code_num || 0}}</text>/{{info.code_total_num || 1}}</view>
<image @click="codeClose()" src="@/static/images/xilu_close.png" mode="aspectFill" class="xilu_close">
</image>
<image :src="info.code_url" mode="aspectFill" class="xilu_code"></image>
<view class="tc fs34 colf lh40">出示二维码核销</view>
</view>
</u-popup>
<u-popup :show="showTips" mode="center" bgColor="transparent" @open="tipsOpen" @close="tipsClose"
:safeAreaInsetBottom="false">
<view class="xilu_code_popup pr pt40" style="width: 680rpx;">
<view class="tc fs34 col9 lh40">退款须知</view>
<image @tap="tipsClose()" src="@/static/images/xilu_close.png" mode="aspectFill" class="xilu_close">
</image>
<view class="plr20 fs28 colf lh40 mt40">
<mp-html :content="tips_content"></mp-html>
</view>
</view>
</u-popup>
<!-- <u-popup :show="showAttendance" mode="center" bgColor="transparent" @open="attendanceOpen"
@close="attendanceClose" :safeAreaInsetBottom="false">
<view class="xilu_code_popup pr pt40">
<view class="tc fs34 col9 lh40">已签到<text class="col2">2</text>/10</view>
<image src="@/static/images/xilu_close.png" mode="aspectFill" class="xilu_close"></image>
<image src="@/static/logo.png" mode="aspectFill" class="xilu_code"></image>
<view class="tc fs34 colf lh40">出示二维码核销</view>
</view>
</u-popup> -->
</view>
</template>
<script>
const app = getApp();
const webConfig = require("@/util/config");
export default {
data() {
return {
current: 0,
showCode: false,
showTips: false,
showAttendance: false,
info: '',
thumb_images: [],
sign_list: [],
codeList: [],
tips_content: '',
web_url:''
}
},
methods: {
swiperTab(e) {
this.current = Number(e.target.current)
console.log(this.current);
},
codeOpen() {
this.showCode = true
},
codeClose() {
this.showCode = false
},
tipsOpen() {
this.showTips = true
},
tipsClose() {
this.showTips = false
},
attendanceOpen() {
this.showAttendance = true
},
attendanceClose() {
this.showAttendance = false
},
//去评价
to_comment(id) {
let _this = this;
this.$api.navigate('../white_appraise/white_appraise?id=' + id,function(res){
res.eventChannel.on('reloadOrder',function(){
_this.getDetail(_this.info.id || 0);
});
});
},
//打开退款弹窗
returnTips() {
this.showTips = true;
},
//打开地图
openLocation(lat, lng) {
this.$api.openLocation(lat, lng);
},
//订单详情
getDetail(id) {
let _this = this;
this.$http({
url: '/addons/xilufitness/order/getDetail',
data: {
id: id
},
method: 'get'
}).then(res => {
if (res.code == 1) {
_this.info = res.data.info;
if (res.data.info.order_type == 3) {
_this.thumb_images = res.data.info.course_camp.camp.xilufitness_urls.thumb_images ||
[];
} else {
_this.thumb_images = res.data.info.course_camp.course.xilufitness_urls.thumb_images ||
[];
}
_this.sign_list = res.data.userList || [];
_this.codeList = res.data.codeList || [];
}
}).catch(error => {
console.log('orderDetailError', error);
})
},
//退款须知
getTips() {
let _this = this;
this.$http({
url: '/addons/xilufitness/cms/detail',
data: {
is_type: 4
},
method: 'get'
}).then(res => {
if(res.code == 1){
_this.tips_content = (res.data.info && res.data.info.content) ? res.data.info.content : '';
}
}).catch(error => {
console.log('cmsError', error);
});
}
},
onLoad(options) {
this.web_url = webConfig.base_url || '';
this.getDetail(options.id || 0);
this.getTips();
}
}
</script>
<style lang="scss" scoped>
.xilu {
&_swiper_info {
width: 100%;
height: 750rpx;
position: relative;
image {
width: 100%;
height: 100%;
display: block;
}
}
&_mask {
width: 100%;
height: 380rpx;
position: absolute;
bottom: 0;
z-index: 3;
left: 0;
}
&_swiper_dot {
display: inline-block;
height: 39rpx;
line-height: 39rpx;
background: rgba(0, 0, 0, 0.25);
border-radius: 20rpx;
position: absolute;
font-size: 24rpx;
font-weight: 400;
color: #FFFFFF;
right: 30rpx;
bottom: 194rpx;
padding-left: 15rpx;
padding-right: 15rpx;
z-index: 4;
}
&_lession_info {
width: 700rpx;
height: 220rpx;
z-index: 1;
&_bg {
width: 700rpx;
height: 220rpx;
position: relative;
z-index: 1;
}
&_view {
width: 700rpx;
height: 220rpx;
position: absolute;
z-index: 1;
left: 0;
top: 0;
}
}
&_box {
background: #292B2C;
border-radius: 20rpx;
width: 100%;
margin-top: 30rpx;
padding: 30rpx;
}
&_head_big {
width: 130rpx;
height: 130rpx;
border-radius: 50%;
}
&_mini_head {
width: 90rpx;
height: 90rpx;
border: 2rpx solid #FFFFFF;
position: relative;
margin-top: 30rpx;
margin-left: -12rpx;
display: inline-block;
vertical-align: top;
border-radius: 50%;
&:first-child,
&:nth-of-type(9n) {
margin-left: 0;
}
}
&_btn_more {
font-size: 22rpx;
font-weight: 400;
color: #999999;
width: 146rpx;
height: 55rpx;
line-height: calc(55rpx - 2px);
text-align: center;
border-radius: 28rpx;
border: 1px solid #979797;
}
&_pj_item {
border-top: 1px solid #434343;
padding-top: 20rpx;
padding-bottom: 20rpx;
&_head_img {
width: 75rpx;
height: 75rpx;
border-radius: 50%;
}
&_star {
width: 23rpx;
height: 21rpx;
}
}
&_code_popup {
width: 600rpx;
background: #404243;
border-radius: 20rpx;
border: 1px solid #454545;
padding: 40rpx 0 50rpx;
}
&_close {
width: 30rpx;
height: 30rpx;
position: absolute;
top: 45rpx;
right: 47rpx;
}
&_code {
width: 405rpx;
height: 400rpx;
display: block;
margin: 40rpx auto;
}
&_foot_btn1 {
width: 690rpx;
height: 90rpx;
line-height: 90rpx;
text-align: center;
font-size: 30rpx;
font-weight: 400;
color: #0E0E0F;
background: #FFCF00;
border-radius: 20rpx;
}
&_foot_btn2 {
width: 690rpx;
height: 90rpx;
line-height: 90rpx;
text-align: center;
font-size: 30rpx;
font-weight: 400;
color: #0E0E0F;
background: #999999;
border-radius: 20rpx;
}
}
.mt_132 {
margin-top: -132rpx;
}
.z5 {
z-index: 5;
}
.bb {
border-bottom: 1px solid #434343;
}
</style>