You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

306 lines
11 KiB

<template>
<view class="curriculum-info">
<view class="ci-box ci-user">
<view class="cu-stadium">
<view>{{ orderInfo.source || '-' }}</view>
<view>{{ orderInfo.order_status_text || '-' }}</view>
</view>
<view class="cu-line">手机号码{{ orderInfo.student_phone || '-' }}</view>
<view class="cu-line">用户昵称{{ orderInfo.user_info&&orderInfo.user_info.user_nickname || '-' }}</view>
<view class="cu-line">学员信息{{ orderInfo.student_name || '-' }}{{ orderInfo.student_gender || '-' }}</view>
</view>
<view class="ci-box ci-info">
<view class="ci-tit">课程信息</view>
<view class="ci-course-name">课程名称{{ orderInfo.course_name || '-' }}</view>
<a-line :value="orderInfo.course_kind || '-'">
<block slot="name">课程类型</block>
</a-line>
<a-line :value="'¥' + orderInfo.price || '-'">
<block slot="name">课程价格</block>
</a-line>
<a-line :value="orderInfo.course_period_nums || '-'">
<block slot="name">总课时</block>
</a-line>
<a-line :value="orderInfo.number || '-'">
<block slot="name">购买课时</block>
</a-line>
<a-line :value="course_period_nums_give">
<block slot="name">
{{ orderInfo.course_period_nums_give >= 0 ? '赠送课时:':'扣减课时:'}}
</block>
</a-line>
<a-line :value="orderInfo.end_time || '-'">
<block slot="name">有效期至</block>
</a-line>
<a-line :value="orderInfo.course_period">
<block slot="name">课时时长</block>
</a-line>
<a-line :value="orderInfo.course_coach_type_text || '-'">
<block slot="name">上课教练</block>
</a-line>
<a-line :value="orderInfo.course_content || '-'">
<block slot="name">课程内容</block>
</a-line>
<a-line :value="orderInfo.is_include_venue_price?'是(不含场地费用)':'否'">
<block slot="name">上课是否需要场地</block>
</a-line>
</view>
<view class="ci-box pay-info">
<view class="pi-line">
<view class="pl-key">金额小计</view><view class="pl-value">¥{{ orderInfo.amount || 0 }}</view>
</view>
<view class="pi-line">
<view class="pl-key">积分抵扣</view><view class="pl-value">¥{{ orderInfo.deduction_amount || 0 }}</view>
</view>
<view class="pi-line">
<view class="pl-key">折扣金额</view><view class="pl-value">¥{{ orderInfo.discount_amount || 0 }}</view>
</view>
<view class="pi-line">
<view class="pl-key">优惠券优惠</view><view class="pl-value">¥{{ orderInfo.coupons_amount || 0 }}</view>
</view>
<view class="pi-total">
<text>合计支付</text>{{ orderInfo.pay_amount || 0 }}
</view>
</view>
<view class="ci-box payment-info">
<view class="ci-tit">支付信息</view>
<a-line :value="orderInfo.created_at || '-'">
<block slot="name">下单时间</block>
</a-line>
<a-line :value="orderInfo.order_no || '-'">
<block slot="name">订单编号</block>
</a-line>
<a-line :value="orderInfo.pay_time || '-'">
<block slot="name">支付时间</block>
</a-line>
<a-line :value="getPayType(orderInfo.pay_type)">
<block slot="name">支付方式</block>
</a-line>
<a-line :value="orderInfo.trade_no || '-'">
<block slot="name">交易流水</block>
</a-line>
</view>
<!-- 退款列表 -->
<view v-for="(e, i) in refundList" :key="i" style="padding: 0 0 24rpx;">
<order-refund-info
:refund_price="e.amount || 0"
:refund_no="e.refund_no || '-'"
:refund_time="e.refund_time || '-'"
:refund_reason="e.reason || '-'"
:nameKey="i + 1"
></order-refund-info>
</view>
<!-- 课程订单只支持一次退款,refund_times 写死为1间接 -->
<order-refund-fixed
:pay_amount="orderInfo.pay_amount || 0"
:refund_amount="orderInfo.refund_amount || 0"
:refund_times="refundTimes"
@click:button="refunndBtn"
></order-refund-fixed>
<order-refund-modal
ref="orderRefundModal"
></order-refund-modal>
</view>
</template>
<script>
import a_line from '../../../../../components/order_list/a_line/a_line.vue';
import util from '../../../../../utils/util';
import { ORDER_API } from '../../../js/api';
import server from '../../../js/server';
import orderRefundFixed from '@/components/order_refund/fixed.vue'
import orderRefundModal from '@/components/order_refund/modal.vue';
import orderRefundInfo from '@/components/order_refund/info.vue';
export default {
computed: {
course_period_nums_give(){
let { orderInfo } = this;
let _num = orderInfo.course_period_nums_give || 0;
return (_num + '').replace('-', '')
},
refundTimes(){
// 课程订单只支持一次退款,refund_times + 1 间接实现
let _num = this.refundList?.length || 0;
return _num + 1;
}
},
// ('订单状态 0-待付款 1-进行中 2-已结束 3-已退款 4-已取消')
components: {
'a-line': a_line,
'order-refund-fixed': orderRefundFixed,
'order-refund-modal': orderRefundModal,
'order-refund-info': orderRefundInfo
},
data(){
return {
orderInfo: {
user_info: {}
},
refundList: [], // 退款列表
}
},
onLoad(options){
this.getInfo(options.order_no);
this.getRefundTimes(options.order_no);
},
methods: {
refunndBtn(){
let { orderInfo, refundTimes } = this;
this.$refs.orderRefundModal.show({
stadium_name: orderInfo?.extension?.stadium_name ?? '',
order_no: orderInfo?.order_no ?? '',
mobile: orderInfo?.student_phone ?? '',
refundable_amount: orderInfo?.extension?.refundable_amount ?? 0,
refundable_integral: orderInfo?.extension?.refundable_integral ?? 0,
refund_times: refundTimes,
confirm: e => {
this.venueCourseOrderRefund({
order_no: orderInfo?.order_no ?? '',
amount: e.refund_amount || 0,
integral: e.refund_integral || 0
})
}
});
},
venueCourseOrderRefund({ order_no = '', amount = 0, integral = 0}){
util.showLoad();
server.get({
url: ORDER_API.venueCourseOrderRefund,
data: { order_no, amount, integral },
isDefaultGet: false
})
.then(res=>{
util.hideLoad();
if(res.data.code == 0){
util.showNone(res.data.message || '操作成功!');
}else{
util.showNone(res.data.message || '操作失败!');
}
})
.catch(util.hideLoad)
.finally(_=>setTimeout(_=>{
this.getInfo(order_no);
this.getRefundTimes(order_no);
}, 1200));
},
async getRefundTimes(order_no){
try{
let _refundRes = await this.$store.dispatch('getOrderRefundList', order_no);
let _refundLs = _refundRes?.data?.data?.list || [];
this.refundList = _refundLs;
}catch(err){
console.warn('getRefundTimes err', err);
}
},
getInfo(order_no){
util.showLoad();
server.get({
url: ORDER_API.venueCourse_orderInfo,
data: { order_no },
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
this.orderInfo = res || {};
})
.catch(util.hideLoad)
},
getPayType: util.order_pay_type_txt,
}
}
</script>
<style lang="scss">
@import '~style/public.scss';
.curriculum-info{
padding: 24upx;
.ci-box{
margin-bottom: 24upx;
padding: 30upx;
border-radius: 10upx;
background-color: #fff;
}
.ci-user{
.cu-stadium{
margin-bottom: 24upx;
@include centerFlex(space-between);
>view{
&:first-child{
line-height: 44upx;
font-size: 32upx;
color: #1A1A1A;
@include textHide(1);
}
&+view{
flex-shrink: 0;
font-size: 28upx;
line-height: 40upx;
color: $themeColor;
}
}
}
.cu-line{
line-height: 48upx;
font-size: 28upx;
color: #1A1A1A;
@include textHide(1);
}
}
.ci-tit{
margin-bottom: 20upx;
line-height: 40upx;
font-size: 28upx;
color: #9c9c9f;
}
.ci-info{
.ci-course-name{
line-height: 52upx;
font-weight: 500;
font-size: 28upx;
color: #1a1a1a;
@include textHide(1);
}
}
}
.pay-info{
.pi-line{
margin-bottom: 24upx;
@include centerFlex(space-between);
.pl-key{
flex-shrink: 0;
line-height: 40upx;
font-size: 28upx;
color: #1a1a1a;
}
.pl-value{
font-size: 24upx;
line-height: 34upx;
color: #1a1a1a;
@include textHide(1);
}
}
.pi-total{
text-align: right;
font-size: 32upx;
font-weight: 500;
color: #1a1a1a;
@include textHide(1);
>text{
font-size: 28upx;
font-weight: 400;
color: #9a9a9d;
}
}
}
</style>