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.
 
 
 
 
 

278 lines
9.9 KiB

<template>
<view class="order-search">
<view class="os-bar">
<view>
<image mode="aspectFit" src="/static/images/icon/search.png"></image>
<input placeholder="你输入订单号" v-model="searchTxt" confirm-type="search" @confirm="iptConfirm" />
<image v-if="searchTxt!=''" mode="aspectFit" src="/static/images/icon/round_close.png" @click="clearSearch"></image>
</view>
</view>
<view class="os-none" v-if="orderList === null">
<image mode="aspectFit" src="/static/images/icon/no_order.png"></image>
<view>没有该订单数据</view>
</view>
<view class="os-content" v-else>
<view class="os-list">
<view class="ol-item" v-for="(e,i) in orderList" :key="i" >
<reservation-order :order-info="e" v-if="orderType == 3"></reservation-order>
<membership-order :order-info="e" v-if="orderType == 4"></membership-order>
<integral-order :order-info="e" v-if="orderType == 5"></integral-order>
<timing-order :order-info="e" v-if="orderType == 1"></timing-order>
<organize-order :order-info="e" v-if="orderType == 10"></organize-order>
<!-- 20210910 -->
<curriculum :order-info="e" v-if="orderType == 12"></curriculum>
<value-card :order-info="e" v-if="orderType == 18"></value-card>
<spectacular-monent :order-info="e" v-if="orderType == 15"></spectacular-monent>
<club-rental :order-info="e" v-if="orderType == 16"></club-rental>
<device :order-info="e" v-if="isDevice()&&!isNotDeviceTemp()" :order-type="orderType"></device>
<locker :order-info="e" v-if="orderType == 7"></locker>
<competition :order-info="e" v-if="orderType == 14"></competition>
<mall v-if="orderType == 2" :order-info="e"></mall>
<rent-and-sale v-if="orderType == 8" :order-info="e"></rent-and-sale>
</view>
</view>
</view>
</view>
</template>
<script>
import reservation_order from '../../components/reservation_order/reservation_order';
import integral_order from '../../components/integral_order/integral_order';
import membership_order from '../../components/membership_order/membership_order';
import timing_order from '../../components/timing_order/timing_order.vue'
import organize_order from '../../components/organize_order/organize_order.vue'
// 20210910 新增订单模块
import value_card from '../../components/order_list/value_card/value_card.vue';
import curriculum from '../../components/order_list/curriculum/curriculum.vue';
import spectacular_monent from '../../components/order_list/spectacular_monent/spectacular_monent.vue';
import club_rental from '../../components/order_list/club_rental/club_rental.vue';
import locker from '../../components/order_list/locker/locker.vue';
import rent_and_sale from '../../components/order_list/rent_and_sale/rent_and_sale.vue';
import mall from '../../components/order_list/mall/mall.vue';
import device from '../../components/order_list/device/device.vue'; // 售货柜/浴室/咖啡
import competition from '../../components/order_list/competition/competition.vue'; // 赛事
import { API } from '../../js/api';
import { servers } from '../../js/server';
import util from '../../utils/util';
import { mapState } from 'vuex';
export default {
components: {
'reservation-order': reservation_order,
'membership-order': membership_order,
'integral-order': integral_order,
'timing-order': timing_order,
'organize-order': organize_order,
// <!-- 20210910 -->
'spectacular-monent': spectacular_monent,
'value-card': value_card,
'curriculum': curriculum,
'club-rental': club_rental,
'locker': locker,
'rent-and-sale': rent_and_sale,
'mall': mall,
'device': device,
'competition': competition,
},
computed: {
...mapState(['brandInfo']),
},
data(){
return {
orderType: '',
searchTxt: '',
orderList: [],
page: 1,
}
},
onLoad(options){
this.orderType = options.type;
},
onReachBottom(){
let { orderType, searchTxt, page } = this;
this.getOrderList({
key: searchTxt,
orderType,
page: ++page
})
},
methods: {
refreshList(){
let { orderType, searchTxt } = this;
this.page = 1;
this.orderList = [];
this.getOrderList({
key: searchTxt,
orderType,
})
},
clearSearch(){
this.searchTxt = '';
},
iptConfirm(e){
let { value } = e.detail;
let { orderType } = this;
this.page = 1;
this.orderList = [];
this.getOrderList({
key: value,
orderType,
})
},
getApiUrl(type = this.orderType){
if(type == 3)return API.reservationOrder;
if(type == 4)return API.membershipOrder;
if(type == 5)return API.integralOrder;
if(type == 1)return API.timeOrder;
if(type == 10)return API.organizeOrderList;
// <!-- 20210910 -->
if(type == 12)return API.venueCourseOrderList; // 课程订单
if(type == 18)return API.userValueCardList; // 储值卡订单
if(type == 15)return API.momentOrderList; // 高光时刻
if(type in deviceTypeObj())return API.hardwareOrderList; // 硬件管理
if(type == 14)return API.appointmentOrderList; // 高光时刻
if(type == 2)return API.shop2OrderList; // 商城订单
},
// 是否为设备,统一接口
isDevice(){
let { orderType } = this;
return orderType in deviceTypeObj()
},
// 设备接口/不同模板
isNotDeviceTemp(){
let { orderType } = this;
return orderType == 7 || orderType == 16 || orderType == 8
},
getOrderList({
key = "",
page = 1,
page_size = 15,
orderType = this.orderType
}){
let { brandInfo } = this;
util.showLoad();
servers.get({
url: this.getApiUrl(orderType),
data: {
key,
begin: '',
end: '',
status: '',
brand_id: brandInfo.brand.id,
stadium_id: '',
page,
page_size,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
let { list } = res;
if(page == 1){
let _oL = (!list||list.length<=0) ? null : list; // null 判断是否显示 无订单页
return this.orderList = _oL;
}
let _list = list || [];
if(_list.length<=0)return util.showNone('没有更多!');
this.page = page;
this.orderList = [ ...this.orderList, ..._list ];
})
.catch(util.hideLoad)
},
}
}
// 设备类型
function deviceTypeObj(){
/*
VendingOrderType OrderType = "vending_order" 售货柜
WaterValveOrderType OrderType = "water_valve_order" 浴室
LockerOrderType OrderType = "locker_order" 储物柜
LeaseOrderType OrderType = "lease_order" 租售柜
CoffeeOrderType OrderType = "coffee_order" 咖啡机
RentBlllOrderType OrderType = "rent_ball_order" 租球机 16
*/
let _obj = {
16: 'rent_ball_order',
6: 'vending_order',
11: 'water_valve_order',
9: 'coffee_order',
7: 'locker_order',
8: 'lease_order',
}
return _obj
}
</script>
<style lang="scss" scoped>
@import "../../style/public.scss";
.order-search{
.os-bar{
margin-bottom: 24upx;
height: 144upx;
background-color: #fff;
@include centerFlex(center);
>view{
padding: 0 20upx;
height: 92upx;
width: 702upx;
border-radius: 10upx;
background-color: #f2f2f7;
@include centerFlex(center);
>image{
margin-right: 20upx;
flex-shrink: 0;
width: 40upx;
height: 40upx;
}
>input{
flex-grow: 1;
font-size: 32upx;
line-height: 44upx;
color: #1A1A1A;
&+image{
flex-shrink: 0;
margin-right: 0;
margin-left: 20upx;
width: 32upx;
height: 32upx;
}
}
}
}
.os-list{
padding: 0 24upx;
.ol-item{
margin-bottom: 24upx;
}
}
.os-none{
position: fixed;
left: 0;
bottom: 0;
right: 0;
top: 168upx;
top: calc(168upx + var(--window-top));
padding-top: 164upx;
background-color: #fff;
>image{
margin: 0 auto 12upx;
display: block;
width: 380upx;
height: 380upx;
}
>view{
font-size: 28upx;
line-height: 40upx;
text-align: center;
color: #9c9c9f;
}
}
}
</style>