hz-zhhq-app/pages/feature/feature2.vue

616 lines
16 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>
<view class="container">
<view class="banner-box">
<image src="/static/imgs/new-food-banner.png" mode=""></image>
</view>
<view class="main">
<view class="tab-box">
<view class="tab-item" :class="currentTabIndex == 0 ? 'active_tab' : ''" @click="currentTabIndex = 0">餐厅新品</view>
<view class="tab-item" :class="currentTabIndex == 1 ? 'active_tab' : ''" @click="currentTabIndex = 1">大众推荐</view>
<view class="tab-item" :class="currentTabIndex == 2 ? 'active_tab' : ''" @click="currentTabIndex = 2">个人推荐</view>
</view>
<view v-if="dateInfo">
<view class="time" v-if="currentTabIndex == 0">推荐时间: {{dateInfo.start_time1}} ~ {{dateInfo.end_time1}}</view>
<view class="time" v-else>投票时间: {{dateInfo.start_time2}} ~ {{dateInfo.end_time2}}</view>
</view>
<!-- 推荐菜品表单填写 -->
<view class="form-box" v-if="currentTabIndex == 0">
<view class="form-item">
<view class="label">菜品名称:</view>
<view class="ipt-box">
<input type="text" placeholder="请输入菜品名称" v-model="foodName">
</view>
</view>
<view class="form-item">
<view class="label">菜品类型:</view>
<view class="picker-box">
<image class="arrow" src="/static/icons/right-arrow.png" mode=""></image>
<picker class="picker" :range="kinds" @change="change(0,$event)">
<view>{{kinds[index]}}</view>
</picker>
</view>
</view>
<view class="form-item">
<view class="label">食材:</view>
<view class="ipt-box">
<input type="text" placeholder="请输入食材名称" v-model="materialName">
</view>
</view>
<view class="img-list">
<view class="title">菜品图片</view>
<view class="img-box">
<view class="img-item" v-for="(item,index) in imgs" :key="index">
<image class="remove-btn" @click="removeImg(index)" src="/static/icons/delete-icon.png" mode=""></image>
<image class="img" :src="item" mode=""></image>
</view>
<view class="img-item upload-btn" @click="chooseImg()" v-if="imgs.length < 1">
<image class="img" src="/static/imgs/tianjia-img.png" mode=""></image>
</view>
</view>
</view>
<view class="text-box">
<view class="title">推荐理由</view>
<view class="textarea-box">
<textarea value="" placeholder="请输入推荐理由" v-model="reason" />
</view>
</view>
<view class="btn">
<view class="sure-btn" @click="submit">提交</view>
</view>
</view>
<!-- 大众推荐 --><!-- picture,food_name,kinds,reason,vote_no-->
<view v-if="currentTabIndex == 1">
<view class="list-box" v-if="publicList.length > 0">
<view class="list-item" v-for="(item, index) in publicList" :key="item.id">
<view class="content">
<view class="image-box" >
<image mode="" :src="item.picture" />
</view>
<view class="fr-content">
<view class="text"><text>菜品名称:</text> {{item.food_name}}</view>
<view class="text"><text>菜品类型:</text> {{item.kinds}}</view>
<view class="text"><text>推荐理由:</text> {{item.reason}}</view>
</view>
</view>
<view class="bottom">
<view class="num-box">点赞数: <text class="num">{{item.vote_no}}</text></view>
<view class="vote-btn" v-if="item.is_vote == 0" @click="vote(index,item.id)">我想吃</view>
<view class="vote-btn" v-else-if="item.is_vote == 1">已点赞</view>
<view class="vote-btn bg-ccc" v-else>我想吃</view>
</view>
</view>
</view>
<content-none :padTop="30" v-else></content-none>
</view>
<!-- 个人推荐 -->
<view v-if="currentTabIndex == 2">
<view class="list-box" v-if="parsonFoodList.length > 0">
<view class="list-item" v-for="(item, index) in parsonFoodList" :key="item.id">
<view class="content">
<view class="image-box" >
<image mode="" :src="item.picture" />
</view>
<view class="fr-content">
<view class="text"><text>菜品名称:</text> {{item.food_name}}</view>
<view class="text"><text>菜品类型:</text> {{item.kinds}}</view>
<view class="text"><text>推荐理由:</text> {{item.reason}}</view>
</view>
</view>
<view class="bottom">
<view class="num-box">票数: <text class="num">{{item.vote_no}}</text></view>
<view class="vote-btn" v-if="item.is_vote == 0" @click="vote(index,item.id)">投票</view>
<view class="vote-btn" v-else-if="item.is_vote == 1">已投票</view>
<view class="vote-btn bg-ccc" v-else>投票</view>
</view>
</view>
</view>
<content-none :padTop="30" v-else></content-none>
</view>
</view>
<load-more v-show="currentTabIndex == 2" :loadingType="loadingType" :contentText="contentText"></load-more>
</view>
</template>
<script>
import {alertTip,callbackRequest,getStorage,convertImgToBase64} from '@/common/util.js';
import {recommendFood,getRecommendFoodList,recommendFoodVote,getQueryDate} from '@/common/api.js';
import loadMore from '@/components/loadMore.vue';
import contentNone from '@/components/contentNone.vue';
export default {
data() {
return {
currentTabIndex:0,
page:1,
pageSize:10,
loadingType:0,//0-loading前1-loading中2-没有更多了
contentText: {
contentdown: "上拉加载更多",
contentrefresh: "正在加载...",
contentnomore: "没有更多数据了"
},
index : 0,
kinds:['熟食','凉菜','热菜','蔬菜','主食','水果'],
foodName:'',//菜品名称
reason:'',//推荐理由
materialName:'',//食材名称
imgs:[],
userId:getStorage('userInfo').id,
foodList : [], //推荐菜列表
parsonFoodList:[{picture:"http://47.99.190.179:80/appImageDir/a68b13fe0bcf4ee1992ee32623055639.jpg",food_name:"猪蹄",kinds:"熟食",reason:"好吃的很",vote_no:"10",is_vote:"0"},
{picture:"http://47.99.190.179:80/appImageDir/42d0a21e68804c398ca3abb4bdc20314.jpg",food_name:"鱿鱼圈",kinds:"熟食",reason:"好吃的很",vote_no:"10"},
{picture:"http://47.99.190.179:80/appImageDir/e24e76afe4504821891c38aab8793e17.jpg",food_name:"熟食排骨",kinds:"熟食",reason:"好吃的很",vote_no:"10"},
{picture:"http://47.99.190.179:80/appImageDir/c88ee591bb5c4a228873a4a30020ae6d.jpg",food_name:"卤大肠",kinds:"熟食",reason:"好吃的很",vote_no:"10"},
{picture:"http://47.99.190.179:80/appImageDir/42d0a21e68804c398ca3abb4bdc20314.jpg",food_name:"鱿鱼圈",kinds:"熟食",reason:"好吃的很",vote_no:"10"}
],
publicList:[{picture:"/static/test/paojiaofz.jpg",food_name:"泡椒凤爪",kinds:"熟食",reason:"爱吃泡椒凤爪需要理由吗?嗯不需要!太好吃啦,推荐一波66666!",vote_no:"10",is_vote:"0"},
{picture:"/static/test/hongshaor.jpg",food_name:"红烧肉",kinds:"熟食",reason:"肥而不腻,我把肥肉都吃干净啦",vote_no:"10"},
{picture:"/static/test/xiaocaor.jpg",food_name:"小炒肉",kinds:"熟食",reason:"够辣,够味,很下饭很喜欢!",vote_no:"10"},
{picture:"/static/test/shizt.jpg",food_name:"狮子头",kinds:"熟食",reason:"肉很嫩,特好吃",vote_no:"10"},
{picture:"/static/test/dack.jpg",food_name:"烤鸭",kinds:"熟食",reason:"正宗北京烤鸭,皮很脆",vote_no:"10"}],
dateInfo:null,
}
},
watch:{
currentTabIndex:function(newVal,oldVal){
if(newVal == 1 && this.foodList.length == 0){
// this.page = 1;
// this.loadingType = 0;
// this.foodList = [];
this.initData();
}
}
},
components:{
loadMore,
contentNone
},
onLoad(){
this.getDate();
},
methods: {
//获取推荐菜列表
initData(){
let params = {
"method":getRecommendFoodList,
data:{
pageSize:this.pageSize,
pageNum:this.page,
userId:this.userId
}
}
callbackRequest(params)
.then(res => {
if(res.data.returnCode == 1){
if(this.page == 1){
this.foodList = res.data.returnData;
}else {
if(res.data.returnData.length > 0){
this.foodList = this.foodList.concat(res.data.returnData);
this.loadingType = 0;
}else {
this.loadingType = 2;
}
}
}
})
},
getDate(){
let params = {
"method":getQueryDate,
data:{
userId:this.userId
}
}
callbackRequest(params)
.then(res =>{
if(res.data.returnCode == 1){
this.dateInfo = res.data.returnData;
}
})
},
//选择菜品类型
change(type,e){
this.index = e.detail.value;
},
//上传图片
// chooseImg(){
// let _this = this;
// uni.chooseImage({
// count:3,
// success:res => {
// let param = "";
// let imgArr = res.tempFilePaths
// for (var i = 0; i < imgArr.length; i++) {
// param = imgArr[i];
// convertImgToBase64(param, function(base64) {
// console.log(base64);
// _this.imgs.push(base64)
// })
// }
// }
// })
// },
chooseImg() {
let _this = this;
uni.chooseImage({
count: 3,
success: res => {
let param = '';
let imgArr = res.tempFilePaths;
for (var i = 0; i < imgArr.length; i++) {
param = imgArr[i];
uni.compressImage({
src: param,
quality: 80,
success: res1 => {
plus.io.resolveLocalFileSystemURL( res1.tempFilePath,
function(entry){
var reader = null;
entry.file( function ( file ) {
reader = new plus.io.FileReader();
reader.onloadend = function ( e ) {
_this.imgs.push(e.target.result);
};
reader.readAsDataURL( file );
}, function ( e ) {
alert( e.message );
} )
},
function(e){
console.log(e)
}
);
}
})
}
}
});
},
//删除图片
removeImg(index){
this.imgs.splice(index,1);
},
//推荐菜提交
submit(){
if(!this.foodName){
alertTip('请输入菜品名称');
return false;
}else if(!this.materialName){
alertTip('请输入食材名称');
return false;
}else if(this.imgs.length == 0){
alertTip('请上传菜品图片');
return false;
}else if(!this.reason){
alertTip('请输入推荐理由');
return false;
}
let imgArr = [].concat(this.imgs);
let params = {
"method":recommendFood,
data:{
kinds:this.kinds[this.index],
foodName:this.foodName,
picture:imgArr.join('~'),
material:this.materialName,
reason:this.reason,
creator:this.userId
}
}
callbackRequest(params)
.then(res => {
if(res.data.returnCode == 1){
alertTip('提交成功','success',1500);
setTimeout(_ => {
this.imgs = [];
this.foodName = '';
this.reason = '';
this.materialName = '';
this.page = 1;
this.loadingType = 0;
this.foodList = [];
this.currentTabIndex = 1;
},1500)
}else {
alertTip(res.data.returnMsg);
}
})
},
// 投票操作
vote(index,id){
let params = {
"method":recommendFoodVote,
data:{
voteUser:this.userId,
featureId:id
}
}
uni.showModal({
content:'确认投票?',
success:res => {
if(res.confirm){
callbackRequest(params)
.then(res => {
if(res.data.returnCode == 1){
this.foodList.forEach((v,i) => {
if(i == index){
this.foodList[index].vote_no++;
this.foodList[index].is_vote = 1;
}else{
this.foodList[i].is_vote = 2;
}
})
alertTip('投票成功','success',2000);
}else {
alertTip(res.data.returnMsg)
}
})
}
}
})
}
},
onReachBottom() {
if (this.loadingType !== 0 || this.currentTabIndex == 0) {
return;
}
this.loadingType = 1;
this.page = this.page+1;
this.initData();
}
}
</script>
<style lang="scss">
@import '@/static/css/common.scss';
.container{
min-height:100vh;
background: #f8f8f8;
overflow: hidden;
position: relative;
.banner-box {
width: 100%;
height: 240upx;
position: absolute;
top: 0;
left: 0;
image {
width: 100%;
height: 100%;
}
}
.time{
font-size:28rpx;
color:#555;
height:90rpx;
line-height:90rpx;
text-align:center;
}
.main {
margin: 172upx 40upx 0;
position: relative;
z-index: 10;
.tab-box {
overflow: hidden;
border-radius: 10upx 10upx 0 0;
background: rgba(132, 149, 167, 0.8);
height: 70upx;
.tab-item {
float: left;
height: 70upx;
width: 33.3%;
font-size: 30upx;
color: #e5f6ff;
text-align: center;
line-height: 70upx;
}
.active_tab {
background: #fff;
color: #333;
border-radius: 10upx 10upx 0 0;
font-weight: bold;
}
}
}
.form-box{
// margin: 20upx;
.form-item{
overflow:hidden;
padding:22upx 30upx 22upx 20upx;
background: #fff;
border-bottom:1px solid #f8f8f8;
.label{
float:left;
width:160upx;
font-size:30upx;
color:#333;
font-weight:bold;
line-height:50upx;
text-align:right;
}
.ipt-box{
margin-left:170upx;
input{
width:100%;
height:50upx;
font-size:28upx;
color:#666;
line-height:50upx;
}
}
.picker-box{
margin-left:170upx;
overflow:hidden;
.arrow{
float:right;
width:16upx;
height:29upx;
margin-top:10upx;
}
.picker{
margin-right:40upx;
font-size:28upx;
line-height:50upx;
color:#666;
}
}
}
.img-list{
padding:0 0 14upx;
background: #fff;
margin-bottom:10upx;
.title{
font-size:28upx;
color:#333;
font-weight:bold;
line-height:40upx;
padding:25upx 30upx 0;
}
.img-box{
overflow:hidden;
padding-top:25upx;
.img-item{
float:left;
width:190upx;
height:190upx;
border:1px solid #ddd;
margin:0 0 20upx 26upx;
position:relative;
box-sizing: border-box;
.img{
display:block;
width:100%;
height:100%;
}
.remove-btn{
position:absolute;
top:-18upx;
right:-18upx;
width:44upx;
height:44upx;
z-index:2;
}
}
.upload-btn{
.img{
width:60upx;
height:60upx;
margin:60upx auto 0;
}
}
}
}
.text-box{
padding:0 0 30upx;
background: #fff;
margin-bottom:10upx;
.title{
font-size:28upx;
color:#333;
font-weight:bold;
line-height:40upx;
padding:25upx 30upx 0;
}
.textarea-box{
border:1px solid #f8f8f8;
padding:10upx;
margin:25upx 30upx 0;
textarea{
font-size:28upx;
color:#666;
line-height:34upx;
width:100%;
resize: none;
height:200upx;
}
}
}
.btn {
padding:0 0 30upx;
background: #fff;
margin-top: -10upx;
.sure-btn{
width:90%;
height:80upx;
font-size:28upx;
color:#fff;
text-align:center;
line-height:80upx;
border-radius:8upx;
background: #0066CC;
background:linear-gradient(to right, #ffc200,#ff9000);/*设置按钮为渐变颜色*/
margin-left: 5%;
}
}
}
}
.list-box{
background: #fff;
.list-item{
border-bottom:10upx solid #f8f8f8;
padding:30upx 20upx;
.content{
overflow:hidden;
.image-box{
float:left;
width:200upx;
height:200upx;
image{
display:block;
width:100%;
height:100%;
}
}
.fr-content{
margin-left:220upx;
.text{
font-size:26upx;
color:#666;
line-height:40upx;
margin-bottom:10upx;
text{
float:left;
color:#333;
padding-right:10upx;
}
}
}
}
.bottom{
overflow:hidden;
padding:10upx 0upx 0;
.num-box{
float:left;
font-size:28upx;
color:#333;
line-height:40upx;
padding-top:20upx;
text{
color:#5fbf3d;
padding-left:4upx;
}
}
.vote-btn{
float:right;
width:160upx;
height:60upx;
background: #5fbf3d;
font-size:26upx;
color:#fff;
text-align:center;
line-height:60upx;
border-radius:4upx;
}
}
}
}
</style>