Compare commits

...

2 Commits

  1. 41
      src/components/organize_order/organize_order.vue
  2. 6
      src/pages.json
  3. 6
      src/pages/order_list/order_list.vue
  4. 12
      src/subpackage/device/pages/order_details/order_details.vue
  5. 3
      src/subpackage/order/js/api.js
  6. 531
      src/subpackage/order/pages/organize/detail/detail.vue

41
src/components/organize_order/organize_order.vue

@ -15,7 +15,10 @@
<view class="rs-line">
<view class="rl-view">约玩主题</view>
<view class="rl-view">
<view class="rv-view">{{orderInfo.theme || '-'}}</view>
<view class="rv-view">
<view class="rv-tag rv-green">个人</view>
<text>{{orderInfo.theme || '-'}}</text>
</view>
</view>
</view>
<view class="rs-line">
@ -82,11 +85,14 @@ export default {
methods:{
toOrderDetails(){
let { orderInfo } = this
let _query = {}
_query["stadium_id"] = orderInfo.stadium_id
_query["order_no"] = orderInfo.order_no
_query["order_type"] = 10
util.routeTo(`/subpackage/device/pages/order_details/order_details?query=${util.jsonStr(_query)}`,'nT');
// let _query = {}
// _query["stadium_id"] = orderInfo.stadium_id
// _query["order_no"] = orderInfo.order_no
// _query["order_type"] = 10
// util.routeTo(`/subpackage/device/pages/order_details/order_details?query=${util.jsonStr(_query)}`,'nT');
util.routeTo(`/subpackage/order/pages/organize/detail/detail?stadium_id=${orderInfo.stadium_id}&order_no=${orderInfo.order_no}`,'nT');
// this.$emit('orderDetailChange');
},
clickSendAmount(){
@ -158,8 +164,27 @@ export default {
.rl-view,.rv-view{
line-height: 40upx;
font-size: 24upx;
color: #9c9c9f;
color: #9C9C9F;
}
.rv-view{
color: #1A1A1A;
.rv-tag{
margin-right: 10upx;
display: inline-block;
width: 64upx;
height: 40upx;
line-height: 40upx;
text-align: center;
border-radius: 6upx;
font-size: 20upx;
color: #417DCD;
background-color: rgba($color: #417DCD, $alpha: .15);
&.rv-green{
color: #68E339;
background-color: rgba($color: #68E339, $alpha: .15);
}
}
}
.rl-view{
&:first-child{
flex-shrink: 0;
@ -167,7 +192,7 @@ export default {
&+.rl-view{
flex-grow: 1;
.rv-view{
@include textHide(1);
@include textHide(2);
}
}
}

6
src/pages.json

@ -450,6 +450,12 @@
"root": "subpackage/order",
"pages": [
{
"path": "pages/organize/detail/detail",
"style" : {
"navigationBarTitleText": "约玩订单详情"
}
},
{
"path": "pages/retail/detail/detail",
"style" : {
"navigationBarTitleText": "零售订单详情"

6
src/pages/order_list/order_list.vue

@ -237,7 +237,7 @@
page: ++page,
})
},
onLoad(options){
async onLoad(options){
let _type = options.order_type || '';
let _classifyArr = getClassifyList(+_type);
this.orderType = _type;
@ -248,7 +248,9 @@
this.periodInfo = this.getDefaultTimeLimit(_type);
await this.$store.dispatch('getBrandInfo');
this.$nextTick(()=>{
this.refreshList()
.then(this.getStoreList)

12
src/subpackage/device/pages/order_details/order_details.vue

@ -6,7 +6,7 @@
<reservation-people-detail :orderInfo="pageInfo" v-if="pageInfo.order_type == 1" @recoverBtn="peopleRecoverBtn" @okChange="okChange"></reservation-people-detail>
</block>
<timing-detail :orderInfo="pageInfo" @completeBtn="completeBtn" @refreshPage="refreshPage" v-if="optionsQuery.order_type==1"></timing-detail>
<organize-detail :orderInfo="pageInfo" v-if="optionsQuery.order_type==10"></organize-detail>
<!-- <organize-detail :orderInfo="pageInfo" v-if="optionsQuery.order_type==10"></organize-detail> -->
<!-- 次卡订场退款弹窗 -->
<view class="refund-mask" v-if="isOrderRefund" @click="isOrderRefund = false">
@ -54,7 +54,7 @@
if(optionsQuery.order_type == 3)return '预约订单详情'; //PM: 2021/4/19
if(optionsQuery.order_type == 4)return '储值卡订单详情';
if(optionsQuery.order_type == 5)return '积分商城订单详情';
if(optionsQuery.order_type == 10)return '约玩订单详情';
// if(optionsQuery.order_type == 10)return '';
return '订单详情'
},
...mapState(['brandInfo']),
@ -136,10 +136,10 @@
stadium_id,
order_no
}
if(orderType == 10){
// postData['stadium_id'] = "151"
// postData['order_no'] = "JS20210506171239462527"
}
// if(orderType == 10){
// // postData['stadium_id'] = "151"
// // postData['order_no'] = "JS20210506171239462527"
// }
deviceServer.get({
url: this.getApiUrl(orderType),
data: postData,

3
src/subpackage/order/js/api.js

@ -29,6 +29,9 @@ export const ORDER_API = {
ymCardInfoFaceSave:`${ORIGIN}/admin/userMonthlyCard/updateFace`, // 年月卡用户头像保存
ymCardUsage:`${ORIGIN}/admin/userMonthlyCard/usages`, // 用户年月卡使用记录-后台
// 20220519
organizeOrderDetail:`${ORIGIN}/assistant/gaPlayTogetherOrder/get`, //助手约玩订单详情
}
export default ORDER_API;

531
src/subpackage/order/pages/organize/detail/detail.vue

@ -0,0 +1,531 @@
<template>
<view class="organize-detail">
<!-- 地址&订单信息 -->
<view class="od-box od-order">
<view class="oo-stadium">
<image mode="aspectFit" :src="orderLabel.BrandAndStadiumLogo || ''"></image>
<view>{{ orderLabel.BrandAndStadiumName || '-' }}</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">订单编号</view>
<view class="ol-txt">
<view class="ot-txt">{{ orderInfo.order_no || '-' }}</view>
</view>
</view>
<view class="ol-status" :class="[originalOrder.pay_status == 0 ?'ol-active':'']">{{ orderStatus(originalOrder.pay_status) }}</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">创建时间</view>
<view class="ol-txt">
<view class="ot-txt">{{ orderInfo.created_at || '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">用户昵称</view>
<view class="ol-txt">
<view class="ot-txt">{{ orderInfo.user_nickname|| '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">约玩类型</view>
<view class="ol-txt">
<view class="ot-txt ot-green">{{ organizeType(orderInfo.type || '') }}</view>
</view>
</view>
</view>
</view>
<!-- 用户信息 -->
<view class="od-box">
<view class="ob-tit">用户信息</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">姓名</view>
<view class="ol-txt">
<view class="ot-txt">{{ orderInfo.actual_name || '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">身份证号码</view>
<view class="ol-txt">
<view class="ot-txt">{{ orderInfo.id_card || '-' }}</view>
</view>
</view>
</view>
</view>
<!-- 约玩信息 -->
<view class="od-box od-mes">
<view class="ob-tit">约玩信息</view>
<view class="om-theme">
<view>个人</view>
<text>{{ orderInfo.theme || '-' }}</text>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">约玩项目</view>
<view class="ol-txt">
<view class="ot-txt">{{ originalOrder.venue_type_name || '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">报名费用</view>
<view class="ol-txt">
<view class="ot-txt">¥{{orderInfo.price_per_person || 0}}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">约玩时间</view>
<view class="ol-txt">
<view class="ot-txt">{{ originalOrder.date || '-' }} {{ originalOrder.duration || '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">预定场次</view>
<view class="ol-txt">
<view class="ot-list">
<view class="ol-item" v-for="(e, i) in originalOrder.sessions" :key="i">
{{ e.venue_name || '-' }} {{ e.duration || '-' }}
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 约玩报名信息 -->
<view class="od-box od-sign-info" v-if="originalOrder.pay_status==2&&orderInfo.type=='Main'">
<view class="ob-tit">约玩报名信息</view>
<view class="ob-list">
<block v-for="(e, i) in orderInfo.sub_order_data" :key="i">
<view class="ob-item" v-if="isExpand || i < 10">
<image mode="aspectFit" :src="e.user_avatar_url || ''"></image>
<view>{{ e.user_nickname || '-' }}</view>
</view>
</block>
</view>
<view class="osi-expand" @click="isExpand = !isExpand" v-if="orderInfo.sub_order_data>=10">
<image :class="[isExpand?'active':'']" mode="aspectFit" src="/subpackage/order/static/images/down_arrow.png"></image>
</view>
</view>
<!-- 差价 -->
<view class="od-box od-spread">
<view class="os-line">
<view class="ol-txt">场地费50</view>
</view>
<view class="os-line">
<view class="ol-txt">报名人数4</view>
</view>
<view class="os-line">
<view class="ol-txt">每人AA费用12.5</view>
<view class="ol-tip">* 每人AA费用=场地费/报名人数</view>
</view>
<view class="os-line">
<view class="ol-txt">
差价退费12.5 <text>自动退费失败请手动差价退费</text>
</view>
<view class="ol-tip">* 差价退费=每人支付的费用-每人的aa费用</view>
</view>
<view class="os-btn">差价退费</view>
</view>
<!-- 折扣信息 -->
<view class="od-box od-pay-info" v-if="originalOrder.pay_status != 0">
<view class="opi-line">
<view>金额小计</view>
<view>¥{{ originalOrder.amount || 0 }}</view>
</view>
<view class="opi-line">
<view>积分抵扣</view>
<view>¥{{ originalOrder.deduction_amount || 0 }}</view>
</view>
<view class="opi-line">
<view>折扣金额</view>
<view>¥{{ originalOrder.discount_amount || 0 }}</view>
</view>
<view class="opi-line">
<view>优惠券优惠</view>
<view>¥{{ originalOrder.coupons_amount || 0 }}</view>
</view>
<view class="opi-total">合计支付<text>{{ originalOrder.pay_amount || 0 }}</text></view>
</view>
<!-- 支付信息 -->
<view class="od-box" v-if="originalOrder.pay_status == 1 || originalOrder.pay_status == 2">
<view class="ob-tit">支付信息</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">支付方式</view>
<view class="ol-txt">
<view class="ot-txt">{{ zh_pay_type(originalOrder.pay_type) || '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">支付时间</view>
<view class="ol-txt">
<view class="ot-txt">{{ originalOrder.pay_time || '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">微信交易号</view>
<view class="ol-txt">
<view class="ot-txt">{{ originalOrder.trade_no || '-' }}</view>
</view>
</view>
</view>
</view>
<!-- 退款信息 -->
<view class="od-box" v-if="originalOrder.pay_status == 4">
<view class="ob-tit">退款信息</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">退款时间</view>
<view class="ol-txt">
<view class="ot-txt">{{ originalOrder.refund_time || '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">退款编号</view>
<view class="ol-txt">
<view class="ot-txt">{{ originalOrder.refund_no || '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">退款金额</view>
<view class="ol-txt">
<view class="ot-txt">{{ originalOrder.refund_amount || '-' }}</view>
</view>
</view>
</view>
<view class="ob-line">
<view class="ol-left">
<view class="ol-name">退款说明</view>
<view class="ol-txt">
<view class="ot-txt">{{ originalOrder.refund_reason || '-' }}</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { ORDER_API } from '../../../js/api';
import server from '../../../js/server';
import util from '../../../../../utils/util';
export default {
computed: {
orderLabel(){
let { orderInfo } = this;
if(orderInfo&&orderInfo.label)return orderInfo.label || {};
return {}
},
originalOrder(){
let { orderInfo } = this;
if(orderInfo&&orderInfo.original_order)return orderInfo.original_order || {};
return {}
}
},
data(){
return {
isExpand: false,
orderInfo: {}
}
},
onLoad(options){
this.getOrderInfo({
order_no: options.order_no,
stadium_id: options.stadium_id,
})
},
methods: {
//
zh_pay_type: util.order_pay_type_txt,
organizeType(type = ''){
// type Main/Sub
const _obj = {
'Main': '发起的约玩',
'Sub': '参与的约玩',
}
return _obj[`${type}`] || '-'
},
orderStatus(status = ''){
const _obj = {/* */
'1': '已付款',
'2': '已完成',
'4': '已退款',
}
return _obj[`${status}`] || '-';
},
getOrderInfo({
order_no = '',
stadium_id = '',
}){
util.showLoad();
server.get({
url: ORDER_API.organizeOrderDetail,
data: {
order_no,
stadium_id,
},
failMsg: '加载订单失败!'
})
.then(res=>{
util.hideLoad();
this.orderInfo = res || {};
})
}
}
}
</script>
<style lang="scss">
@import '~style/public.scss';
.organize-detail{
padding: 24upx;
padding-bottom: calc( 24upx + constant(safe-area-inset-bottom)); /* 兼容 iOS < 11.2 */
padding-bottom: calc( 24upx + env(safe-area-inset-bottom)); /* 兼容 iOS >= 11.2 */
}
.od-box{
margin-bottom: 24upx;
padding: 30upx;
background-color: #fff;
border-radius: 10upx;
.ob-tit{
margin-bottom: 20upx;
line-height: 44upx;
font-weight: 500;
font-size: 32upx;
color: #333;
}
.ob-line{
@include centerFlex(space-between);
.ol-left{
flex-grow: 1;
display: flex;
.ol-name{
flex-shrink: 0;
flex-grow: 0;
font-size: 28upx;
line-height: 52upx;
color: #9a9a9d;
}
.ol-txt{
.ot-txt{
font-size: 28upx;
line-height: 52upx;
color: #333333;
@include textHide(1);
&.ot-green{
color: $themeColor;
}
}
.ot-list{
display: flex;
flex-wrap: wrap;
.ol-item{
min-width: 200upx;
margin-right: 10upx;
line-height: 52upx;
font-size: 28upx;
color: #333;
@include textHide(1);
}
}
}
}
.ol-status{
flex-shrink: 0;
flex-grow: 0;
margin-left: 12upx;
font-size: 28upx;
color: #9A9A9D;
&.ol-active{
color: $themeColor;
}
}
}
}
.od-order{
.oo-stadium{
margin-bottom: 26upx;
padding-bottom: 24upx;
border-bottom: 2upx solid #D8D8D8;
@include centerFlex(flex-start);
>image{
flex-shrink: 0;
flex-grow: 0;
margin-right: 14upx;
width: 40upx;
height: 40upx;
}
>view{
line-height: 40upx;
font-weight: 500;
font-weight: 28upx;
color: #1a1a1a;
@include textHide(1);
}
}
}
.od-mes{
.om-theme{
margin-bottom: 26upx;
line-height: 44upx;
font-size: 32upx;
font-weight: 500;
color: #333;
>view{
display: inline-block;
margin-right: 12upx;
width: 64upx;
height: 40upx;
line-height: 40upx;
text-align: center;
border-radius: 6upx;
font-size: 20upx;
color: #68E339;
background-color: rgba($color: #68E339, $alpha: .15);
}
}
}
.od-pay-info{
.opi-line{
@include centerFlex(space-between);
margin-bottom: 20upx;
>view{
flex-shrink: 0;
flex-grow: 0;
font-size: 28upx;
line-height: 40upx;
color: #333;
&+view{
font-size: 24upx;
@include textHide(1);
}
}
}
.opi-total{
text-align: right;
font-size: 28upx;
color: #333;
>text{
font-weight: 500;
color: #FF873D;
}
}
}
.od-spread{
.os-line{
margin-bottom: 20upx;
.ol-txt{
margin-bottom: 6upx;
font-size: 32upx;
line-height: 44upx;
color: #333;
>text{
margin-left: 20upx;
font-size: 24upx;
color: #EA5061;
}
}
.ol-tip{
font-size: 28upx;
line-height: 40upx;
color: #9A9A9D;
}
}
.os-btn{
margin: 0 auto;
width: 176upx;
height: 64upx;
line-height: 64upx;
line-height: 64upx;
text-align: center;
border-radius: 10upx;
font-size: 28upx;
font-weight: 500;
color: #fff;
background-color: #FF873D;
}
}
.od-sign-info{
padding: 30upx 10upx !important;
.ob-tit{
padding-left: 20upx;
}
.ob-list{
display: flex;
align-content: flex-start;
flex-wrap: wrap;
.ob-item{
margin-bottom: 26upx;
flex-grow: 0;
flex-shrink: 0;
width: 20%;
display: flex;
flex-wrap: wrap;
flex-direction: column;
align-items: center;
justify-content: center;
>image{
margin-bottom: 16upx;
flex-grow: 0;
flex-shrink: 0;
width: 100upx;
height: 100upx;
border-radius: 50%;
}
>view{
@include textHide(1);
max-width: 120upx;
font-size: 24upx;
line-height: 34upx;
text-align: center;
color: #9A9A9D;
}
}
}
.osi-expand{
@include centerFlex(center);
padding: 20upx 0;
>image{
width: 24upx;
height: 24upx;
}
.active{
transform: rotate(180deg);
}
}
}
</style>
Loading…
Cancel
Save