jyy-smart-canteen-h5/pages/advanceOrder/stopperSelection.vue

211 lines
5.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<page-meta :page-font-size="fontValue+'px'" :root-font-size="fontValue+'px'"></page-meta>
<view class="page-container">
<view class="merchant-list">
<scroll-view style="width: 100%;height: 90vh;" scroll-y="true" @scrolltolower="onScrollTolower" scroll-with-animation="true">
<view class="merchant-box" v-for="(item, index) in merchantList" :key="index">
<view class="merchant-item" @click="goToMenu(item)">
<view class="merchant-info">
<image :src="item.stallImgUrl" class="merchant-avatar" mode="aspectFill" ></image>
<view class="merchant-detail">
<view class="merchant-name">档口名称 {{ item.stallName }}</view>
<!-- <view class="merchant-name">菜谱名称 {{ item.recipeName }}</view> -->
<view class="merchant-stats">
<text>月销 {{ item.monthlySales }}</text>
<text class="business-hours">营业时间 {{ item.startBusinessTime }} - {{item.endBusinessTime}}</text>
</view>
</view>
</view>
<view class="status-box" :class="{ 'status-open': item.businessState==2 }">
{{ item.businessState==2 ? '营业中' : '休息中' }}
</view>
</view>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
import { getAdvanceOrderStallApi } from '@/api/advanceOrder/index.js'
export default {
data() {
return {
fontValue:uni.getStorageSync('fontSize') || 8,
orderDate:"",
areaId:"",
canteenId:"",
pageNum: 1,
pageSize: 10,
total: 0,
merchantList: []
}
},
onLoad() {
// options = JSON.parse(options.params)
// console.log(options)
// this.areaId = options.areaId
// this.canteenId = options.canteenId
this.getAdvanceOrderStallList()
},
methods: {
// 翻页
onScrollTolower(){
// console.log(this.messageList.length)
// if(this.total>this.messageList.length){
// this.pageNum++
// this.getNoticeList()
// }
},
async getAdvanceOrderStallList() {
try {
let param = {
// pageNum: this.pageNum,
// pageSize: this.pageSize,
// areaId: this.areaId,
// canteenId: this.canteenId,
// key: 7,
// applyDate: '2025-04-18'
// "applyDate":"2024-11-11"
}
const res = await getAdvanceOrderStallApi()
// this.total = res.total;
// if(this.pageNum==1){
// this.merchantList = res.rows
// }else{
// this.merchantList.push(...res.rows)
// }
// console.log('?? ~ getList ~ res:', res)
this.merchantList = res.rows[0].stallList;
this.canteenId = res.rows[0].canteenId
this.canteenName = res.rows[0].canteenName
// this.updateMerchantStatus()
} catch (error) {
console.log(error)
}
},
updateMerchantStatus() {
this.merchantList.forEach(merchant => {
merchant.isOpen = this.checkIfOpen(merchant.startBusinessTime,merchant.endBusinessTime);
});
},
checkIfOpen(start,end) {
// console.log(start)
// console.log(end)
// 这是一个简单的判断逻辑
// const [start, end] = businessHours.split('-');
const now = new Date();
const currentTime = now.getHours() * 60 + now.getMinutes();
const [startHour, startMinute, startSecond] = start.split(':').map(Number);
const [endHour, endMinute, endSecond] = end.split(':').map(Number);
const startTime = startHour * 60 + startMinute;
const endTime = endHour * 60 + endMinute;
return currentTime >= startTime && currentTime <= endTime;
},
goToMenu(item) {
if(item.recipeId){
item.canteenId = this.canteenId
item.canteenName = this.canteenName
uni.navigateTo({
url: `/pages/advanceOrder/index?params=${JSON.stringify(item)}`
})
}else{
uni.showToast({
title: '未配置菜谱',
icon: 'none'
})
}
}
},
mounted() {
// this.updateMerchantStatus();
// 可以设置一个定时器,定期更新营业状态
// setInterval(this.updateMerchantStatus(), 5000); // 每分钟更新一次
}
}
</script>
<style lang="scss" scoped>
.page-container {
min-height: 100vh;
background-color: #f5f5f5;
padding: 40rpx;
}
.merchant-list {
.merchant-box {
margin-bottom: 20rpx;
&:last-child {
margin-bottom: 0;
}
}
.merchant-item {
background-color: #ffffff;
border-radius: 12rpx;
padding: 24rpx;
display: flex;
justify-content: space-between;
align-items: flex-start;
position: relative;
}
.merchant-info {
display: flex;
align-items: center;
flex: 1;
margin-right: 20rpx;
.merchant-avatar {
width: 88rpx;
height: 88rpx;
border-radius: 8rpx;
margin-right: 20rpx;
}
.merchant-detail {
flex: 1;
.merchant-name {
font-size: 30rpx;
color: #333333;
margin-bottom: 16rpx;
font-weight: 500;
}
.merchant-stats {
display: flex;
font-size: 24rpx;
color: #999999;
flex-direction: column;
align-items: flex-start;
.business-hours {
//margin-left: 24rpx;
}
}
}
}
.status-box {
width: 30rpx;
font-size: 24rpx;
color: #999999;
padding: 4rpx 4rpx;
background-color: #f5f5f5;
border-radius: 4rpx;
position: absolute;
top: 36rpx;
right: 24rpx;
&.status-open {
color: #ff6633;
background-color: #fff2ef;
}
}
}
</style>