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.

347 lines
9.7 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.

<template>
<view class="content">
<u-navbar :is-back="false" title="云食堂" :border-bottom="false">
<view class="u-flex u-row-right" style="width: 100%;">
<view class="camera u-flex u-row-center">
<!-- <u-icon name="camera-fill" color="#000000" size="48"></u-icon> -->
</view>
</view>
</u-navbar>
<u-grid :col="3" :border="false">
<u-grid-item @click="onPay">
<image src="/static/booking.png" class="img-icon"></image>
<view class="grid-text">预定</view>
</u-grid-item>
<u-grid-item @click="onStore">
<image src="/static/shoping.png" class="img-icon"></image>
<view class="grid-text">消费</view>
</u-grid-item>
<u-grid-item @click="onMenu">
<image src="/static/menu.png" class="img-icon"></image>
<!-- <u-icon name="hourglass" :size="46"></u-icon> -->
<view class="grid-text">菜单</view>
</u-grid-item>
</u-grid>
<!-- <view class="text-area">
<text class="title">
云食堂 ~ 每天都有新滋味
</text>
</view> -->
<view v-show="jcTitle" class="u-text-left " style="color:#F36835;height:30px;text-align: left;">
<text>{{jcTitle}}</text>
</view>
<view class="meal-qrcode-panel">
<view class="codeLine">
<view class="prompt-container" v-if="prompt.hidden==5">
<view class="prompt-message">
<image class="prompt-icon" src="/static/bg1.jpg" style="width:205px;height:205px;margin-bottom:40rpx;"></image>
<view class="prompt-title" style="color:#F6835B;font-size:19px;">明天见!</view>
</view>
</view>
<view class="prompt-container" v-if="prompt.hidden==1">
<view class="prompt-message">
<image class="prompt-icon" src="/static/bg0.jpg" style="width:205px;height:205px;margin-bottom:40rpx;"></image>
<view class="prompt-title" style="color:#F6835B;font-size:14px;">未找到当前食堂的合适订单</view>
<view class="prompt-title" style="color:#F6835B;font-size:19px;">请预定!</view>
</view>
</view>
<view class="prompt-container" v-if="prompt.hidden==2">
<view class="prompt-message">
<image class="prompt-icon" src="/static/bg3.jpg" style="width:205px;height:205px;margin-bottom:40rpx;"></image>
<view class="prompt-title" style="color:#F6835B;font-size:14px;">当前已有订单</view>
<view class="prompt-title" style="color:#F6835B;font-size:19px;">请等待就餐!</view>
</view>
</view>
<view class="prompt-container" v-if="prompt.hidden==3">
<view class="prompt-message">
<image class="prompt-icon" src="/static/bg2.jpg" style="width:205px;height:205px;margin-bottom:40rpx;"></image>
<view class="prompt-title" style="color:#F6835B;font-size:14px;">未找到当前食堂的合适订单</view>
<view class="prompt-title" style="color:#F6835B;font-size:19px;">请下单!</view>
</view>
</view>
<view class="img-box" v-if="prompt.hidden==4">
<tki-qrcode cid="qrcode1" ref="qrcode" :val="val" :size="size" :unit="unit" :onval="onval" :loadMake="loadMake" :usingComponents="true" @result="qrR" />
<view class="weui-cell__ft meal-hd" v-if="codeHide==1">
<span class="meal-title">{{number}}份</span>
<span class="meal-money">¥ {{money}}</span>
</view>
<view style="text-align:center;box-sizing:border-box;padding-top:100rpx" v-if="codeHide==2">
<view>
<icon size="150" type="success"></icon>
</view>
<view style="margin-top:20rpx;">消费成功</view>
</view>
</view>
</view>
</view>
<view class="canteen-select">
<view class="u-text-left u-margin-left-10" style="width: 200rpx;" @click="isShow=true">
<u-icon name="arrow-down-fill" color="#2979ff" size="28"></u-icon>
<text class="u-tips-color">{{selCanteen?selCanteen.label:'请选择食堂'}}</text>
</view>
<!-- <button 买</button> -->
<u-button type="primary" @click="getVesValue" :custom-style="payOnLine" :disabled="payOnLineHide"></u-button>
<text class="u-tips-color">当前余额<text style="color:orange;font-weight:700;">{{balance}}</text></text>
<u-select v-model="isShow" :list="canteenOptions" @confirm="confirm" :default-value="defVal"></u-select>
</view>
</view>
</template>
<script>
import tkiQrcode from "@/components/tki-qrcode/tki-qrcode.vue"
export default {
components: {tkiQrcode},
data() {
return {
isShow: false,
//食堂列表
canteenList:[],
//食堂选项
canteenOptions: [],
//选中食堂
selCanteen: {},
balance: 0,
//默认选择
defVal:[],
//餐类型
mealTypeObj:{},
//左上角标题
jcTitle:"",
//买按钮
payOnLineHide:true,
payOnLine: {
height: '130rpx',
width:'130rpx',
color: '#fff',
borderRadius: '50% 50%',
fontSize: '52rpx'
},
prompt: {
hidden: 5
},
codeHide: 1,
number: 1,
money: 20,
val: '二维码', // 要生成的二维码值
size: 200, // 二维码大小
unit: 'px', // 单位
onval: true, // val值变化时自动重新生成二维码
loadMake: true, // 组件加载完成后自动生成二维码
src: '' // 二维码生成后的图片地址或base64
}
},
onShow() {
this.$u.api.getCanteenList().then(({data}) => {
this.canteenList = data;
this.canteenOptions = data.map((item,index) => {
let {canteen} = item;
return {value:index,label:canteen.canteenName}
})
this.defVal=[0];
this.selCanteen = this.canteenOptions[0];
this.getMealType();
this.ifMelType();
//处理食堂信息,存入缓存
let canteenObj = {};
let canteens = {};
data.map((item) => {
canteenObj[item.canteen.id] = item.canteen.canteenName;
canteens[[item.canteen.id]] =item;
})
uni.setStorageSync('canteenObj', canteenObj);
uni.setStorageSync('canteens',canteens);
})
this.$u.api.getBalance().then(({data}) => {
this.balance = data;
})
},
onLoad() {
let _this = this
uni.getSystemInfo({
success: function (res) {
_this.size = res.windowWidth / (680 / 580);
//获取屏幕宽度
console.log(_this.size);
}
});
},
methods: {
confirm(e){
this.selCanteen = e[0];
//获取食堂所属的餐类型
this.getMealType();
//经营时间判断
this.ifMelType();
console.log(">>>",this.selCanteen);
},
onStore(){
this.$u.route('/pages/store/store');
},
onMenu(){
this.$u.route('/pages/menu/index');
},
onLogin(){
this.$u.route('/pages/login');
},
onPay() {
this.$u.route('/pages/pay/pay');
},
//获取餐类型,重置数据结构
getMealType(){
this.$u.api.getMealType({"canteenId":this.canteenList[this.selCanteen.value].canteen.id}).then(({data}) => {
//this.mealTypeObj
//{"zao":"早餐","zhone":"中餐","xia":"下午茶","wan":"晚餐"}
data.map(item => {
this.mealTypeObj[item.dictValue] = item.dictLabel;
})
//存入缓存
uni.setStorageSync('mealTypeList', data);
})
},
//计算当前时间为哪个餐类型的时间
ifMelType(){
//重设标题
this.jcTitle ="";
this.payOnLineHide =true;
//当前时间
let currentTime = new Date();
let currenthM = this.$u.timeFormat(currentTime, 'hh:MM').split(":");
let canteenTime = this.canteenList[this.selCanteen.value].canteenTime;
for(const key in canteenTime){
let timeObj = canteenTime[key];
let a = timeObj.startTime.split(":");
let b = timeObj.stopTime.split(":");
//console.log(a+","+b);
//console.log("开始时分",currentTime.setHours(currenthM[0],currenthM[1])<currentTime.setHours(a[0],a[1]));
//console.log("结束时分",currentTime.setHours(currenthM[0],currenthM[1])<currentTime.setHours(b[0],b[1]));
if(currentTime.setHours(currenthM[0],currenthM[1])>currentTime.setHours(a[0],a[1]) && currentTime.setHours(currenthM[0],currenthM[1])<currentTime.setHours(b[0],b[1])){
console.log("判断进入");
this.jcTitle = this.mealTypeObj[key];
this.payOnLineHide=false;
break;
}
}
},
//买
getVesValue(){
this.payOnLineHide = true;
this.prompt.hidden=4;
setTimeout(() => {
this.$refs.qrcode._makeCode();
}, 100);
},
qrR(res) {
this.src = res
},
}
}
</script>
<style lang="scss" scoped>
.img-icon {
width: 60rpx;
height: 60rpx;
// position: absolute;
// top: 14rpx;
// right: 40rpx;
// width: 30rpx;
// height: 30rpx;
}
.grid-text {
font-size: 28rpx;
margin-top: 4rpx;
color: $u-type-info;
}
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 19rpx;
}
.text-area {
margin-top: 100rpx;
display: flex;
justify-content: center;
}
.title {
font-size: 28rpx;
color: $u-content-color;
}
.meal-qrcode-panel {
height: 750rpx;
}
.prompt-container {
display: flex;
height: 100%;
width: 100%;
align-items: center;
justify-content: center;
color: #939393;
}
.prompt-message {
margin-top: 0;
text-align: center;
}
.canteen-select {
height: 70rpx;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 25rpx;
}
.canteen-select text {
width: 244rpx;
}
.weui-cell__currenMealTime {
text-align: left;
margin-left: 15rpx;
font-size: 19px;
font-weight: bold;
position: relative;
}
.codeLine {
border: 0px solid #ddd;
margin: 20rpx 40rpx;
margin-bottom: 0rpx;
border-radius: 6px;
height: 94%;
position: relative;
}
.meal-title {
font-size: 30rpx;
color: #020202;
font-weight: 500;
}
.meal-hd {
width: 100%;
text-align: center;
padding: 10rpx 0;
}
.meal-hd .meal-money {
margin: 0 25rpx 0 24rpx;
}
.meal-money {
font-size: 32rpx;
color: #F46837;
}
</style>