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

2 years ago
<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>