瀏覽代碼

接口联调

htc 1 年之前
父節點
當前提交
28e4750d53
共有 3 個文件被更改,包括 290 次插入193 次删除
  1. 20 24
      pages/home/condition.vue
  2. 31 54
      pages/home/details.vue
  3. 239 115
      pages/home/index.vue

+ 20 - 24
pages/home/condition.vue

@@ -3,7 +3,8 @@
 		<c-nav-bar title="房情表"></c-nav-bar>
 		<view class="table">
 			<view class="t_th">
-				<view class="tt_year b_rb" @tap="show=true">
+				<!-- <view class="tt_year b_rb" @tap="show=true"> -->
+				<view class="tt_year b_rb">
 					<text>{{year}}年</text>
 					<u-icon name="arrow-down" size="24" color="#999999"></u-icon>
 				</view>
@@ -20,10 +21,10 @@
 					</view>
 					<u-icon name="arrow-right" size="24" color="#999999"></u-icon>
 				</view>
-				<view class="ti_num b_rb">{{item.num}}</view>
-				<view class="ti_num b_rb">{{item.ksNum}}</view>
-				<view class="ti_num b_rb">{{item.zyNum}}</view>
-				<view class="ti_num b_rb">{{item.bksNum}}</view>
+				<view class="ti_num b_rb">{{item.totalNums}}</view>
+				<view class="ti_num b_rb">{{item.saleNums}}</view>
+				<view class="ti_num b_rb">{{item.occupyNums}}</view>
+				<view class="ti_num b_rb">{{item.unSaleNums}}</view>
 			</view>
 		</view>
 		<u-calendar :show="show" :monthNum="24" mode="single" @confirm="confirm"></u-calendar>
@@ -38,8 +39,7 @@
 				weekCfg:{0:'周日',1:'周一',2:'周二',3:'周三',4:'周四',5:'周五',6:'周六'},
 				show:false,
 				startDate:new Date().Format('yyyy-MM-dd'),
-				list:[],
-				resData:[]
+				list:[]
 			}
 		},
 		onLoad() {
@@ -47,23 +47,19 @@
 		},
 		methods: {
 			getList(){
-				this.resData = [];
-				for(let i=0;i<7;i++){
-					this.resData.push({
-						date:new Date(new Date().setDate(new Date(this.startDate).getDate()+i)).Format('yyyy-MM-dd'),
-						num:10,
-						ksNum:10,
-						zyNum:10,
-						bksNum:10
-					})
-				}
-				this.list = this.resData;
-				let n = new Date().Format('yyyy-MM-dd');
-				this.list.forEach(l=>{
-					let w = new Date(l.date).getDay();
-					l.yr = new Date(l.date).Format('MM-dd');
-					l.week = n==l.date?'今天':this.weekCfg[w];
-					l.color = n==l.date?'c_today':([6,0].includes(w)?'c_week':'c_normal');
+				this.$api.get('/merchant/hotel/home/getRoomConditionList',{
+					homestayId:uni.getStorageSync('homestayId')
+				}).then(res=>{
+					if(res.data.code===0){
+						this.list = res.data.data;
+						let n = new Date().Format('yyyy-MM-dd');
+						this.list.forEach(l=>{
+							let w = new Date(l.dateDay).getDay();
+							l.yr = new Date(l.dateDay).Format('MM-dd');
+							l.week = n==l.dateDay?'今天':this.weekCfg[w];
+							l.color = n==l.dateDay?'c_today':([6,0].includes(w)?'c_week':'c_normal');
+						})
+					}else this.$showToast(res.data.msg)
 				})
 			},
 			confirm(e){

+ 31 - 54
pages/home/details.vue

@@ -10,11 +10,11 @@
 				<view class="b_grey b_rb">不可售</view>
 			</view>
 			<view v-if="list.length>0" class="t_item" v-for="(item,index) in list" :key="index">
-				<view class="b_grey b_rb">{{item.title}}</view>
-				<view class="b_rb" :class="(index==list.length-1||index==list.length-2)?'b_grey':''">{{item.num}}</view>
-				<view class="b_rb" :class="(index==list.length-1||index==list.length-2)?'b_grey':''">{{item.ksNum}}</view>
-				<view class="b_rb" :class="(index==list.length-1||index==list.length-2)?'b_grey':''">{{item.zyNum}}</view>
-				<view class="b_rb" :class="(index==list.length-1||index==list.length-2)?'b_grey':''">{{item.bksNum}}</view>
+				<view class="b_grey b_rb">{{item.houseBaseName}}</view>
+				<view class="b_rb" :class="(index==list.length-1||index==list.length-2)?'b_grey':''">{{item.totalNums}}</view>
+				<view class="b_rb" :class="(index==list.length-1||index==list.length-2)?'b_grey':''">{{item.saleNums}}</view>
+				<view class="b_rb" :class="(index==list.length-1||index==list.length-2)?'b_grey':''">{{item.occupyNums}}</view>
+				<view class="b_rb" :class="(index==list.length-1||index==list.length-2)?'b_grey':''">{{item.unSaleNums}}</view>
 			</view>
 		</view>
 	</view>
@@ -32,61 +32,38 @@
 		onLoad(option) {
 			if(option.item){
 				this.item = JSON.parse(decodeURIComponent(option.item));
-				this.title = this.item.yr+'房情表';
+				this.title = this.item.dateDay+'房情表';
 				this.getList();
 			} 
 		},
 		methods: {
 			getList(){
-				let resData = [
-					{
-						title:'大床房',
-						num:10,
-						ksNum:10,
-						zyNum:10,
-						bksNum:0,
-					},
-					{
-						title:'海景房',
-						num:10,
-						ksNum:10,
-						zyNum:10,
-						bksNum:0,
-					},
-					{
-						title:'标准间',
-						num:10,
-						ksNum:10,
-						zyNum:10,
-						bksNum:0,
-					},
-					{
-						title:'家庭房',
-						num:10,
-						ksNum:10,
-						zyNum:10,
-						bksNum:0,
-					}
-				];
-				let allNums = resData.reduce((cur,pre)=>cur+pre.num,0);
-				let ksNums = resData.reduce((cur,pre)=>cur+pre.ksNum,0);
-				let zyNums = resData.reduce((cur,pre)=>cur+pre.zyNum,0);
-				let bksNums = resData.reduce((cur,pre)=>cur+pre.bksNum,0);
-				resData.push({
-					title:'占房屋总数的比例',
-					num:'-',
-					ksNum:(ksNums/allNums*100).toFixed(2)+'%',
-					zyNum:(zyNums/allNums*100).toFixed(2)+'%',
-					bksNum:(bksNums/allNums*100).toFixed(2)+'%'
+				this.$api.get('/merchant/hotel/home/getRoomConditionList',{
+					homestayId:uni.getStorageSync('homestayId'),
+					dateDay:this.item.dateDay
+				}).then(res=>{
+					if(res.data.code===0){
+						this.list = res.data.data.splice(0,res.data.data.length-3);
+						let totalNums = this.list.reduce((cur,pre)=>cur+pre.totalNums,0);
+						let saleNums = this.list.reduce((cur,pre)=>cur+pre.saleNums,0);
+						let occupyNums = this.list.reduce((cur,pre)=>cur+pre.occupyNums,0);
+						let unSaleNums = this.list.reduce((cur,pre)=>cur+pre.unSaleNums,0);
+						this.list.push({
+							houseBaseName:'占房屋总数的比例',
+							totalNums:'-',
+							saleNums:(saleNums/totalNums*100).toFixed(2)+'%',
+							occupyNums:(occupyNums/totalNums*100).toFixed(2)+'%',
+							unSaleNums:(unSaleNums/totalNums*100).toFixed(2)+'%'
+						})
+						this.list.push({
+							houseBaseName:'总计',
+							totalNums:totalNums,
+							saleNums:saleNums,
+							occupyNums:occupyNums,
+							unSaleNums:unSaleNums
+						})
+					}else this.$showToast(res.data.msg)
 				})
-				resData.push({
-					title:'总计',
-					num:allNums,
-					ksNum:ksNums,
-					zyNum:zyNums,
-					bksNum:bksNums
-				})
-				this.list = resData;
 			}
 		}
 	}

+ 239 - 115
pages/home/index.vue

@@ -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();
 			}
 		}
 	}
@@ -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;
 		}
 	}