|
@@ -1,79 +1,106 @@
|
|
|
<template>
|
|
|
<view class="page" :style="{'min-height':(h-th)+'px'}">
|
|
|
<u-navbar bgColor="transparent">
|
|
|
- <view class="u-nav-slot" slot="left" style="display: flex;" @tap="show=true">
|
|
|
+ <view class="u-nav-slot" slot="left" style="display: flex;" @tap="shShow=true">
|
|
|
<text>{{name}}</text>
|
|
|
<u-icon name="arrow-down" size="28" :bold="true" color="#fff"></u-icon>
|
|
|
</view>
|
|
|
</u-navbar>
|
|
|
<view class="bg" :style="{'padding-top':(mt+30)+'px'}">
|
|
|
<view class="b_money">
|
|
|
- <text>{{resData.orderMoney.toFixed(2)}}</text>
|
|
|
+ <text v-if="item">{{item.todayOrderAmount.toFixed(2)}}</text>
|
|
|
+ <text v-else>0.00</text>
|
|
|
<text>今日订单金额</text>
|
|
|
</view>
|
|
|
<view class="b_items">
|
|
|
<view @tap="toTurn">
|
|
|
- <text>{{resData.yrzNum}}</text>
|
|
|
+ <text>{{item.stayedInRooms||0}}</text>
|
|
|
<text>已入住</text>
|
|
|
</view>
|
|
|
<view @tap="toTurn">
|
|
|
- <text>{{resData.drzNum}}</text>
|
|
|
+ <text>{{item.toCheckinRooms||0}}</text>
|
|
|
<text>待入住</text>
|
|
|
</view>
|
|
|
<view>
|
|
|
- <text>{{resData.dqrNum}}</text>
|
|
|
+ <text>{{item.undeterminedOrders||0}}</text>
|
|
|
<text>待确认</text>
|
|
|
</view>
|
|
|
<view>
|
|
|
- <text>{{resData.dclNum}}</text>
|
|
|
+ <text>{{item.pendingOrders||0}}</text>
|
|
|
<text>待处理</text>
|
|
|
</view>
|
|
|
<view>
|
|
|
- <text>{{resData.zrddNum}}</text>
|
|
|
+ <text>{{item.yestOrders||0}}</text>
|
|
|
<text>昨日订单</text>
|
|
|
</view>
|
|
|
<view @tap="toTurn">
|
|
|
- <text>{{resData.zrscNum}}</text>
|
|
|
+ <text>{{item.yestSaleRooms||0}}</text>
|
|
|
<text>昨日售出</text>
|
|
|
</view>
|
|
|
<view @tap="toTurn">
|
|
|
- <text>{{resData.zrkfNum}}</text>
|
|
|
+ <text>{{item.yestVacantRooms||0}}</text>
|
|
|
<text>昨日空房</text>
|
|
|
</view>
|
|
|
<view>
|
|
|
- <text>{{resData.rzl}}</text>
|
|
|
+ <text>{{item.yestCheckinRatio||0}}%</text>
|
|
|
<text>入住率</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
<view class="title">
|
|
|
<text>今日新增</text>
|
|
|
- <view>
|
|
|
+ <view @tap="toAll">
|
|
|
<text>全部</text>
|
|
|
<u-icon name="arrow-right" color="#999999" size="28"></u-icon>
|
|
|
</view>
|
|
|
</view>
|
|
|
- <view class="card" v-for="(item,index) in list" :key="index">
|
|
|
- <view class="c_top">
|
|
|
- <text>订单号:{{item.no}}</text>
|
|
|
- <text :class="statusStyle[item.status]||'s_default'">{{statusCfg[item.status]}}</text>
|
|
|
- </view>
|
|
|
- <view class="c_middle">
|
|
|
- <image :src="item.img"></image>
|
|
|
- <view class="cm_info">
|
|
|
- <view class="cmi_title">{{item.name}}</view>
|
|
|
- <view class="cmi_pre">{{item.person}}</view>
|
|
|
- <view class="cmi_pre">{{item.phone}}</view>
|
|
|
- <view class="cmi_pre">{{item.date}}<span>{{item.nights}}</span></view>
|
|
|
+ <block v-if="list.length>0">
|
|
|
+ <view class="card" v-for="(item,index) in list" :key="index">
|
|
|
+ <view class="c_top">
|
|
|
+ <text>订单号:{{item.orderCode}}</text>
|
|
|
+ <text v-if='item.orderStatus==-1&&item.status==1' class="orange">待确认</text>
|
|
|
+ <text v-else-if='item.status==0&&item.orderStatus==-1' class="red">待支付</text>
|
|
|
+ <text v-else-if='item.orderStatus==1&&item.status==1' class="green">已预订</text>
|
|
|
+ <text v-else :class="statusClass[item.orderStatus]">{{status[item.orderStatus]}}</text>
|
|
|
+ </view>
|
|
|
+ <view class="c_middle">
|
|
|
+ <image :src="item.cover"></image>
|
|
|
+ <view class="cm_info">
|
|
|
+ <view class="cmi_title">{{item.houseBaseName}}</view>
|
|
|
+ <view class="cmi_pre">{{item.guestName}}</view>
|
|
|
+ <view class="cmi_pre">{{item.guestPhone}}</view>
|
|
|
+ <view class="cmi_pre">{{item.date}}<span>共{{item.num}}晚</span></view>
|
|
|
+ </view>
|
|
|
+ <view class="cm_price">¥{{item.orderAmount?item.orderAmount.toFixed(2):''}}</view>
|
|
|
+ </view>
|
|
|
+ <view class="c_bottom">
|
|
|
+ <view class="btn" v-if="item.orderStatus==-1" :class="item.orderStatus==-1?'btn_jj':''" @tap="cancle(item)">拒绝</view>
|
|
|
+ <view class="btn" v-if="item.orderStatus==-1" @tap="toConfrimOrder(item)">确认订单</view>
|
|
|
+ <view class="btn" v-if="item.orderStatus==1" @tap="checkIn(2,item)">办理入住</view>
|
|
|
+ <view class="btn" v-if="item.orderStatus==2" @tap="toBltf(item)">办理退房</view>
|
|
|
+ <view class="btn" v-if="item.orderStatus==3||item.orderStatus==4" :class="item.orderStatus==3||item.orderStatus==4?'btn_xq':''" @tap="handleDetail(item)">详情</view>
|
|
|
</view>
|
|
|
- <view class="cm_price">¥{{item.price.toFixed(2)}}</view>
|
|
|
</view>
|
|
|
- <view class="c_bottom">
|
|
|
- <view class="btn" :class="item.status==0||item.status==4?'btn_xq':''">{{btnTextCfg[item.status]}}</view>
|
|
|
+ </block>
|
|
|
+ <block v-else>
|
|
|
+ <view class="empty">
|
|
|
+ 暂无数据
|
|
|
</view>
|
|
|
- </view>
|
|
|
+ </block>
|
|
|
<Tabbar :tabbarIndex="0"></Tabbar>
|
|
|
- <u-picker :show="show" :columns="nameList" @close="show=false" @cancel="show=false" @confirm="confirm"></u-picker>
|
|
|
+ <u-picker :show="shShow" :columns="nameList" @close="shShow=false" @cancel="shShow=false" @confirm="confirm"></u-picker>
|
|
|
+ <!-- 取消订单 -->
|
|
|
+ <u-modal :show="show" @confirm="confirmCheck" :show-cancel-button="true" @cancel="show=false">
|
|
|
+ <view class="slot-content">
|
|
|
+ <input type="text" v-model="check.refundReason" placeholder="请输入原因" />
|
|
|
+ </view>
|
|
|
+ </u-modal>
|
|
|
+ <!-- 确认订单 -->
|
|
|
+ <u-modal :show="show2" content="确定该操作?" @confirm="confirmOrder" :show-cancel-button="true" @cancel="show2=false">
|
|
|
+ </u-modal>
|
|
|
+ <!-- 办理退房 -->
|
|
|
+ <u-modal :show="show3" content="确定该操作?" @confirm="checkoutRoom" :show-cancel-button="true" @cancel="show3=false">
|
|
|
+ </u-modal>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
@@ -81,101 +108,178 @@
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
- name:'一家民宿',
|
|
|
- nameList:[['一家民宿','我家民宿','他家民宿']],
|
|
|
- show:false,
|
|
|
+ name:'',
|
|
|
+ shList:[],
|
|
|
+ nameList:[],
|
|
|
+ shShow:false,
|
|
|
+ item:null,
|
|
|
list:[],
|
|
|
- resData:{
|
|
|
- orderMoney:66614,
|
|
|
- yrzNum:68,
|
|
|
- drzNum:0,
|
|
|
- dqrNum:12,
|
|
|
- dclNum:16,
|
|
|
- zrddNum:48,
|
|
|
- zrscNum:48,
|
|
|
- zrkfNum:20,
|
|
|
- rzl:'69.65%',
|
|
|
- list:[//status:0 待支付、1 待确认、2 已预订、3 已入住、4 已取消
|
|
|
- {
|
|
|
- no:'A20231213102359619119',
|
|
|
- status:2,
|
|
|
- img:'../../static/room1.png',
|
|
|
- name:'海景房-305',
|
|
|
- person:'李琳',
|
|
|
- phone:'13911924328',
|
|
|
- date:'03/11 - 03/12',
|
|
|
- price:1288,
|
|
|
- nights:'(共两晚)'
|
|
|
- },
|
|
|
- {
|
|
|
- no:'A20231213102359619119',
|
|
|
- status:3,
|
|
|
- img:'../../static/room2.png',
|
|
|
- name:'海景房-306',
|
|
|
- person:'郑一璇',
|
|
|
- phone:'15753988251',
|
|
|
- date:'03/11 - 03/12',
|
|
|
- price:1288,
|
|
|
- nights:'(共两晚)'
|
|
|
- },
|
|
|
- {
|
|
|
- no:'A20231213102359619119',
|
|
|
- status:4,
|
|
|
- img:'../../static/room3.png',
|
|
|
- name:'海景房-307',
|
|
|
- person:'钱萌',
|
|
|
- phone:'13710484614',
|
|
|
- date:'03/11 - 03/12',
|
|
|
- price:1288,
|
|
|
- nights:'(共两晚)'
|
|
|
- },
|
|
|
- {
|
|
|
- no:'A20231213102359619119',
|
|
|
- status:1,
|
|
|
- img:'../../static/room4.png',
|
|
|
- name:'海景房-308',
|
|
|
- person:'赵健民',
|
|
|
- phone:'15877425550',
|
|
|
- date:'03/11 - 03/12',
|
|
|
- price:1288,
|
|
|
- nights:'(共两晚)'
|
|
|
- },
|
|
|
- {
|
|
|
- no:'A20231213102359619119',
|
|
|
- status:0,
|
|
|
- img:'../../static/room5.png',
|
|
|
- name:'海景房-309',
|
|
|
- person:'李琳',
|
|
|
- phone:'13911924328',
|
|
|
- date:'03/11 - 03/12',
|
|
|
- price:1288,
|
|
|
- nights:'(共两晚)'
|
|
|
- }
|
|
|
- ]
|
|
|
+ statusClass: ['', 'green', 'blue', 'grey', 'grey'],
|
|
|
+ status: ['', '已预订', '已入住', '已退房', '已取消'],
|
|
|
+ page:1,
|
|
|
+ limit:10,
|
|
|
+ finished:false,
|
|
|
+
|
|
|
+ show: false,
|
|
|
+ show2: false,
|
|
|
+ show3: false,
|
|
|
+ check: {
|
|
|
+ initiator: 1,
|
|
|
+ refundReason: "",
|
|
|
+ status: -1,
|
|
|
+ orderCode: "",
|
|
|
},
|
|
|
- statusCfg:{0:'待支付',1:'待确认',2:'已预订',3:'已入住',4:'已取消'},
|
|
|
- statusStyle:{0:'s_dzf',1:'s_dqr',2:'s_yyd',3:'s_yrz',4:'s_yqx'},
|
|
|
- btnTextCfg:{0:'详情',1:'确认订单',2:'办理入住',3:'办理退房',4:'详情'}
|
|
|
+ orderId: '',
|
|
|
+ orderInfo: {}
|
|
|
}
|
|
|
},
|
|
|
- onLoad() {
|
|
|
+ mounted() {
|
|
|
+ this.getType();
|
|
|
+ this.getDetails();
|
|
|
this.getList();
|
|
|
},
|
|
|
onReachBottom() {
|
|
|
- console.log('触底啦~');
|
|
|
+ if(this.finished) return
|
|
|
+ this.getList();
|
|
|
},
|
|
|
methods: {
|
|
|
+ getType(){
|
|
|
+ this.$api.post('/merchant/register/getMerchantStoreList').then(res=>{
|
|
|
+ if(res.data.code===0){
|
|
|
+ this.shList = res.data.data;
|
|
|
+ let shs = [];
|
|
|
+ this.shList.forEach(d=>shs.push(d.merchantName));
|
|
|
+ this.nameList = [shs];
|
|
|
+ let t = this.shList.find(d=>d.merchantId==uni.getStorageSync('homestayId'));
|
|
|
+ this.name = t?t.merchantName:''
|
|
|
+ }else this.$showToast(res.data.msg);
|
|
|
+ })
|
|
|
+ },
|
|
|
confirm(e){
|
|
|
this.name = e.value[0];
|
|
|
- this.show = false;
|
|
|
+ this.shShow = false;
|
|
|
+ let t = this.shList.find(d=>d.merchantName==this.name);
|
|
|
+ if(t){
|
|
|
+ if(t.merchantType==2){//酒店民宿
|
|
|
+ uni.setStorageSync('homestayId',t.merchantId);
|
|
|
+ this.getDetails();
|
|
|
+ this.page = 1;
|
|
|
+ this.finished = false;
|
|
|
+ this.list = [];
|
|
|
+ this.getList();
|
|
|
+ } else{
|
|
|
+ this.item = null;
|
|
|
+ this.list = [];
|
|
|
+ uni.setStorageSync('merchantId',t.merchantId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getDetails(){
|
|
|
+ this.$api.get('/merchant/hotel/home/getHotelHomeInfo/'+uni.getStorageSync('homestayId')).then(res=>{
|
|
|
+ if(res.data.code===0){
|
|
|
+ this.item = res.data.data;
|
|
|
+ }else this.$showToast(res.data.msg);
|
|
|
+ })
|
|
|
},
|
|
|
getList(){
|
|
|
- this.list = this.resData.list;
|
|
|
+ this.$api.get('/merchant/hotel/order/getMerchantOrderPageList', {
|
|
|
+ homestayId: uni.getStorageSync('homestayId'),
|
|
|
+ limit: this.limit,
|
|
|
+ page: this.page,
|
|
|
+ orderStatus: '',
|
|
|
+ // orderTime:new Date().Format('yyyy-MM-dd')
|
|
|
+ }).then(res => {
|
|
|
+ if(res.data.code===0){
|
|
|
+ this.list = [...this.list,...res.data.data.list];
|
|
|
+ this.list.forEach(l=>{
|
|
|
+ l.date = new Date(l.arriveDate).Format('MM/dd')+" - "+new Date(l.leaveDate).Format('MM/dd');
|
|
|
+ })
|
|
|
+ if (res.data.data.list.length == 0) this.finished = true;
|
|
|
+ else this.page++;
|
|
|
+ }else this.$showToast(res.data.msg);
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handleDetail(item) {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: '/pages/house/orderInfo?orderId='+item.id
|
|
|
+ })
|
|
|
+ },
|
|
|
+ toAll(){
|
|
|
+ uni.navigateTo({
|
|
|
+ url:'/pagesMy/orderList/orderList'
|
|
|
+ })
|
|
|
},
|
|
|
toTurn(){
|
|
|
uni.navigateTo({
|
|
|
url:'/pages/home/condition'
|
|
|
})
|
|
|
+ },
|
|
|
+ cancle(item) {
|
|
|
+ this.show = true;
|
|
|
+ this.check.orderCode = item.orderCode;
|
|
|
+ },
|
|
|
+ //取消订单
|
|
|
+ confirmCheck() {
|
|
|
+ this.$api.post("/merchant/hotel/order/cancelOrder", this.check)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.data.code !== 0) {
|
|
|
+ return this.$showToast(res.data.msg);
|
|
|
+ }
|
|
|
+ this.show = false;
|
|
|
+ this.$showToast('操作成功');
|
|
|
+ setTimeout(() => {
|
|
|
+ this.init();
|
|
|
+ }, 1500)
|
|
|
+ });
|
|
|
+ },
|
|
|
+ toConfrimOrder(item){
|
|
|
+ this.orderInfo = item;
|
|
|
+ this.show2 = true;
|
|
|
+ },
|
|
|
+ // 确认订单
|
|
|
+ confirmOrder() {
|
|
|
+ this.$api.get(`/merchant/hotel/order/confirm/${this.orderInfo.id}`)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.data.code !== 0) {
|
|
|
+ return this.$showToast(res.data.msg);
|
|
|
+ }
|
|
|
+ this.show2 = false;
|
|
|
+ this.$showToast('操作成功');
|
|
|
+ setTimeout(() => {
|
|
|
+ this.init();
|
|
|
+ }, 1500)
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //办理入住
|
|
|
+ checkIn(orderStatus,item) {
|
|
|
+ this.orderInfo = item;
|
|
|
+ uni.redirectTo({
|
|
|
+ url: "/pages/house/createOrder?id=" + this.orderInfo.id + '&orderStatus=' + orderStatus
|
|
|
+ })
|
|
|
+ },
|
|
|
+ toBltf(item){
|
|
|
+ this.orderInfo = item;
|
|
|
+ this.show3 = true;
|
|
|
+ },
|
|
|
+ //办理退房
|
|
|
+ checkoutRoom() {
|
|
|
+ this.$api.get("/merchant/hotel/order/checkout/" + this.orderInfo.id)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.data.code !== 0) {
|
|
|
+ return this.$showToast(res.data.msg);
|
|
|
+ }
|
|
|
+ this.show3 = false;
|
|
|
+ this.$showToast('操作成功');
|
|
|
+ setTimeout(() => {
|
|
|
+ this.init();
|
|
|
+ }, 1500)
|
|
|
+ });
|
|
|
+ },
|
|
|
+ init(){
|
|
|
+ this.page = 1;
|
|
|
+ this.finished = false;
|
|
|
+ this.list = [];
|
|
|
+ this.getList();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -188,7 +292,7 @@
|
|
|
box-sizing: border-box;
|
|
|
.bg{
|
|
|
width: 100%;
|
|
|
- height: 660rpx;
|
|
|
+ height: 743rpx;
|
|
|
background: url(https://i.ringzle.com/file/20240107/8bc656fc64fd4386a6b336a7dc8c86d0.png) no-repeat;
|
|
|
background-size: 100% 100%;
|
|
|
box-sizing: border-box;
|
|
@@ -356,27 +460,47 @@
|
|
|
font-size: 24rpx;
|
|
|
color: #999999;
|
|
|
}
|
|
|
+ &.btn_jj{
|
|
|
+ background: #FFFFFF;
|
|
|
+ border: 1rpx solid #F9423A;
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #FA6760;
|
|
|
+ }
|
|
|
+ &:last-child{
|
|
|
+ margin-left: 20rpx;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- .s_dzf{
|
|
|
- color: #F9423A !important;
|
|
|
+
|
|
|
+ .empty{
|
|
|
+ width: 100%;
|
|
|
+ text-align: center;
|
|
|
+ padding-top: 100rpx;
|
|
|
+ font-size: 34rpx;
|
|
|
+ font-family: PingFang SC, PingFang SC;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #999999;
|
|
|
}
|
|
|
- .s_dqr{
|
|
|
- color: #FF9100 !important;
|
|
|
+
|
|
|
+ .red {
|
|
|
+ color: #F9423A !important;
|
|
|
}
|
|
|
- .s_yyd{
|
|
|
+
|
|
|
+ .green {
|
|
|
color: #39CE77 !important;
|
|
|
}
|
|
|
- .s_yrz{
|
|
|
+
|
|
|
+ .blue {
|
|
|
color: #1372FF !important;
|
|
|
}
|
|
|
- .s_yqx{
|
|
|
+
|
|
|
+ .grey {
|
|
|
color: #4C5F76 !important;
|
|
|
}
|
|
|
- .s_default{
|
|
|
- color: #111111 !important;
|
|
|
+
|
|
|
+ .orange {
|
|
|
+ color: #FF9100 !important;
|
|
|
}
|
|
|
}
|
|
|
|