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.

259 lines
6.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<import src="../common/prompt.wxml"></import>
<template>
<view>
<u-navbar :is-back="true" title="菜单" :border-bottom="false"></u-navbar>
<view class="container">
<view class="canteen-select" @tap="isShow=true">
<u-input :border="border" type="select" :select-open="selectShow" v-model="canteen" placeholder="请选择食堂" @click="selectShow = true"></u-input>
<u-select mode="single-column" :list="selectList" v-model="selectShow" @confirm="selectConfirm"></u-select>
</view>
<view class="weui-flex topbar">
<view class="middle-left-rili">
<image class="middle-left-rili-image" src="/static/ico_date.png"></image>
</view>
<view @tap="onTapTag(index)" class="weui-flex__item" v-for="(item, index) in mealTypeList" :key="index">
<view :class="index==activeIndex?'topbar-item active':'topbar-item'">{{item.dictLabel}}</view>
</view>
</view>
<view class="main_middle align-center">
<view class="middle-left">
<view @tap="onTapWeekTag(index)" :class="index == weekActiveIndex?'middle-left-item active':'middle-left-item'" v-for="(val, index) in weekStrArr" :key="weeks[index]">
<text>{{weeks[index]}}</text>
</view>
</view>
<!--列表-->
<swiper class="swiper-box" :current="swiperCurrent" @animationfinish="animationfinish">
<swiper-item v-for="(v, index) in mealTypeList" :key="index">
<prompt type="Object" :prompt="{hidden:checkMenu[v.dictValue].length}" v-if="checkMenu[v.dictValue]"></prompt>
<scroll-view scroll-y style="height:100%;width: 100%;" v-if="checkMenu[v.dictValue]">
<view class="u-card-wrap">
<u-card padding="20" :title="'经营时间:'+canteenTime[v.dictValue].startTime+'~'+canteenTime[v.dictValue].stopTime" :sub-title="checkMenu.date">
<view class="" slot="body">
<view class="u-body-item u-flex u-row-between u-p-b-0" v-for="(item,index) in checkMenu[v.dictValue]">
<image :src="item.menuImg" @click="openImg(item.menuImg)" mode="aspectFill"></image>
<view class="u-body-item-title u-line-2">
{{item.menuName}} <text class="">¥{{item.canteenPrice}}</text>
</view>
</view>
</view>
</u-card>
</view>
</scroll-view>
</swiper-item>
</swiper>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
activeIndex: 0,
weekActiveIndex: 0,
swiperCurrent: 0, // swiper组件的current值表示当前那个swiper-item是活动的
selectShow: false,
//
canteenTime: {},
//食堂对象
canteenObj: {},
canteens: {},
//选中食堂名称
canteen: '',
//选中食堂ID
canteenId: '',
//本周食堂菜单
canteenWeekMenu: {},
//食堂列表key,value
selectList: [],
//当前餐类型
mealType: '',
//餐类型
mealTypeList: [],
weeks: [ "一", "二", "三", "四", "五", "六", "日" ],
weekStrArr: [ "mon", "tues", "wed", "thur", "fri", "sat", "sun" ],
currentDate: '',
checkMenu: {},
}
},
onLoad() {
//获取当前日期
this.currentDate = this.$u.timeFormat(new Date(), 'yyyy-mm-dd');
//获取食堂对象
this.canteens = uni.getStorageSync("canteens");
//食堂list《key,value》
this.canteenObj= uni.getStorageSync('canteenObj');
for(var key in this.canteenObj){
this.selectList.push({"value":key,"label":this.canteenObj[key]});
}
//默认选中第一个食堂
this.selectConfirm([this.selectList[0]]);
//餐类型
this.mealTypeList = uni.getStorageSync("mealTypeList");
//计算当前时间属于那个类型
this.canteenTime = this.canteens[this.canteenId].canteenTime;
let currentTime = this.$u.timeFormat(new Date(), 'hh');
//判断当前餐类
this.mealTypeList.map((v,index) => {
if(currentTime > this.canteenTime[v.dictValue].stopTime.split(" ")[0]){
this.mealType = v.dictValue
this.activeIndex = index;
return;
}
})
},
methods: {
animationfinish(e) {
let current = e.detail.current;
this.swiperCurrent = current;
this.activeIndex= current;
},
selectConfirm(e) {
this.canteen = '';
e.map((val, index) => {
this.canteenId= val.value;
this.canteen += this.canteen == '' ? val.label : '-' + val.label;
})
this.getMenuObj();
},
openImg(url) {
uni.previewImage({urls:[url]});
},
//获取菜单
getMenuObj() {
this.$u.api.getMenuWeekData({"canteenId":this.canteenId}).then(({data}) => {
this.canteenWeekMenu= data;
console.log("菜单对象",this.canteenWeekMenu);
//判断当前日期
this.weekStrArr.map((v,index) => {
if(this.currentDate == data[v].date){
this.weekActiveIndex = index;
}
})
this.getCheckMenu();
})
},
getCheckMenu() {
this.checkMenu= this.canteenWeekMenu[this.weekStrArr[this.weekActiveIndex]];
console.log("选中的菜单",this.checkMenu);
},
//
onTapTag(index) {
this.activeIndex= index;
this.swiperCurrent = index;
this.mealType = this.mealTypeList[index].dictValue;
this.getCheckMenu();
},
//
onTapWeekTag(index) {
this.activeIndex= 0;
this.swiperCurrent = 0;
this.weekActiveIndex =index;
this.getCheckMenu();
}
}
}
</script>
<style lang="scss" scoped>
.container {
display: inline-block;
background-color: white;
width: 750rpx;
font-size: 30rpx;
font-family: STHeiti;
overflow: hidden;
min-height: 99.5%;
}
.canteen-select u-input {
width: 206rpx;
}
.middle-left-rili {
width: 102rpx;
height: 79rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #F2f2f2;
padding-bottom: 3px;
border-bottom: 1px solid #ddd;
}
.middle-left-rili-image {
width: 45rpx;
height: 45rpx;
background-size: 45rpx 45rpx;
}
.topbar-item {
color: #333;
height: 81rpx;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
}
.topbar-item.active {
color: #F46837;
border-bottom: 4rpx solid #F46837;
}
.main_middle {
display: flex;
flex-direction: row;
border-bottom: 1rpx solid #F2f2f2;
}
.middle-left {
flex-direction: column;
display: flex;
background-color: #F2f2f2;
}
.middle-left-item {
width: 102rpx;
height: 145rpx;
flex-shrink: 1;
display: flex;
align-items: center;
justify-content: center;
}
.middle-left-item.active {
color: #F46837;
height: 109rpx;
background-color: #fff;
}
.swiper-box {
height: 900rpx;
width: 100%;
}
.u-card-wrap {
/* background-color: $u-bg-color;
*/ padding: 1px;
}
.u-body-item {
font-size: 32rpx;
color: #333;
padding: 20rpx 10rpx;
}
.u-body-item image {
width: 120rpx;
flex: 0 0 120rpx;
height: 120rpx;
border-radius: 8rpx;
margin-left: 12rpx;
}
</style>