Dining_Hall/pages/advanceOrder/stopperSelection/index.vue

178 lines
4.3 KiB
Vue
Raw Normal View History

<template>
<view class="page-container">
<view class="merchant-list">
<view
class="merchant-box"
v-for="(item, index) in merchantList"
:key="index"
>
<view class="merchant-item" @click="goToMenu(item)">
<view class="merchant-info">
<image
2025-02-19 09:34:34 +08:00
:src="item.stallImgUrl"
class="merchant-avatar"
mode="aspectFill"
></image>
<view class="merchant-detail">
2025-02-19 09:34:34 +08:00
<view class="merchant-name">{{ item.stallName }}</view>
<view class="merchant-stats">
<text>月销 {{ item.monthlySales }}</text>
2025-02-19 09:34:34 +08:00
<text class="business-hours">营业时间 {{ item.startBusinessTime }} - {{item.endBusinessTime}}</text>
</view>
</view>
</view>
<view class="status-box" :class="{ 'status-open': item.isOpen }">
{{ item.isOpen ? '营业中' : '休息中' }}
</view>
</view>
</view>
</view>
</view>
</template>
<script>
2025-02-21 10:05:11 +08:00
import { getAdvanceOrderStallApi,getlistReserveDateAPI } from '@/api/advanceOrder/index.js'
export default {
data() {
return {
2025-02-21 10:05:11 +08:00
orderDate:"",
2025-02-19 09:34:34 +08:00
canteenId:"",
canteenName:"",
merchantList: [
]
}
},
2025-02-21 10:05:11 +08:00
onLoad() {
this.getAdvanceOrderStallList()
2025-02-19 09:34:34 +08:00
},
2025-02-21 10:05:11 +08:00
methods: {
2025-02-19 09:34:34 +08:00
async getAdvanceOrderStallList() {
try {
let param = {
"custId":uni.getStorageSync('custId'),
2025-02-21 10:05:11 +08:00
"applyDate":"2024-11-11"
2025-02-19 09:34:34 +08:00
}
const res = await getAdvanceOrderStallApi(param)
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 => {
2025-02-19 09:34:34 +08:00
merchant.isOpen = this.checkIfOpen(merchant.startBusinessTime,merchant.endBusinessTime);
});
},
2025-02-19 09:34:34 +08:00
checkIfOpen(start,end) {
// console.log(start)
// console.log(end)
// 这是一个简单的判断逻辑
2025-02-19 09:34:34 +08:00
// const [start, end] = businessHours.split('-');
const now = new Date();
const currentTime = now.getHours() * 60 + now.getMinutes();
2025-02-19 09:34:34 +08:00
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) {
2025-02-19 09:34:34 +08:00
uni.navigateTo({
url: `/pages/advanceOrder/index?params=${JSON.stringify(item)}&canteenId=${this.canteenId}&canteenName=${this.canteenName}`
})
}
},
mounted() {
2025-02-19 09:34:34 +08:00
// this.updateMerchantStatus();
// 可以设置一个定时器,定期更新营业状态
2025-02-19 09:34:34 +08:00
// 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: 28rpx;
color: #333333;
margin-bottom: 16rpx;
font-weight: 500;
}
.merchant-stats {
display: flex;
font-size: 12px;
color: #999999;
flex-direction: column;
align-items: flex-start;
.business-hours {
//margin-left: 24rpx;
}
}
}
}
.status-box {
font-size: 24rpx;
color: #999999;
padding: 4rpx 12rpx;
background-color: #f5f5f5;
border-radius: 4rpx;
position: absolute;
top: 24rpx;
right: 24rpx;
&.status-open {
color: #ff6633;
background-color: #fff2ef;
}
}
}
</style>