hz-zhhq-app/pages/drugspush/drugsPush.vue

685 lines
17 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/yao1.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 v-if="currentTabIndex == 1 && showTab == true">
<uni-fab :content="content" :pattern="pattern" horizontal="right" vertical="bottom" direction="horizontal" @trigger="trigger">
</uni-fab>
</view>
<!-- 餐厅新品 -->
<view v-if="currentTabIndex == 0">
<view class="list-box" v-if="releaseDrugsList.length > 0">
<view class="list-item" v-for="(item, index) in releaseDrugsList" :key="item.id">
<view class="content">
<view class="image-box"><image mode="" :src="item.drugs_picture" /></view>
<view class="fr-content">
<view class="text">
<text>药品名称:</text>
{{ item.drugs_name }}
</view>
<!-- <view class="text">
<text>菜品类型:</text>
{{ item.kinds }}
</view> -->
<view class="text">
<text>推荐理由:</text>
{{ item.remark }}
</view>
<view class="text">
<text>推荐人:</text>
{{ item.real_name }}
</view>
</view>
</view>
<view class="bottom">
<view class="num-box">
点赞数:
<text class="num">{{ item.vote_no||0 }}</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>
<!-- 大众推荐 -->
<!-- picture,food_name,kinds,reason,vote_no-->
<view v-if="currentTabIndex == 1">
<view class="list-box" v-if="publicdrugsList.length > 0">
<checkbox-group @change="checkboxChange">
<view class="list-item" v-for="(item, index) in publicdrugsList" :key="item.id">
<label class="uni-list-cell uni-list-cell-pd">
<view v-if="isCheckBox == true"><checkbox :value="item.id" :checked="item.checked" /></view>
<!-- <view>{{item.publicList}}</view> -->
<view class="content">
<view class="image-box"><image mode="" :src="item.drugs_picture" /></view>
<view class="fr-content">
<view class="text">
<text>药品名称:</text>
{{ item.drugs_name }}
</view>
<!-- <view class="text">
<text>菜品类型:</text>
{{ item.kinds }}
</view> -->
<view class="text">
<text>推荐理由:</text>
{{ item.remark }}
</view>
</view>
</view>
<view class="bottom">
<view class="num-box">
点赞数:
<text class="num">{{ item.vote_no||0 }}</text>
</view>
<view class="vote-btn" v-if="item.is_vote ==0 || item.is_vote==null" @click="vote(index, item.id)"><image src="../../static/imgs/dz-before.png"/></view>
<view class="vote-btn" v-if="item.is_vote!=0&&item.is_vote!=null"><image src="../../static/imgs/dz-after.png"/></view>
</view>
</label>
</view>
</checkbox-group>
</view>
<content-none :padTop="30" v-else></content-none>
</view>
<!-- 个人推荐 -->
<view v-if="currentTabIndex == 2">
<view class="list-box" v-if="mydrugsList.length > 0">
<view class="list-item" v-for="item in mydrugsList" :key="item.id">
<view class="content">
<view class="image-box"><image mode="" :src="item.drugs_picture" /></view>
<view class="fr-content">
<view class="text">
<text>药品名称:</text>
{{ item.drugs_name }}
</view>
<!-- <view class="text">
<text>菜品类型:</text>
{{ item.kinds }}
</view> -->
<view class="text">
<text>推荐理由:</text>
{{ item.remark }}
</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>
<view v-if="currentTabIndex == 1 && isCheckBox == true">
<view class="footer-btn footer-btn-two">
<view class="btn btn-col" @click="cancel">取消</view>
<view class="btn btn-col1" @click="submitDrugsRelease">确认发布</view>
</view>
</view>
<load-more v-show="currentTabIndex == 0" :loadingType="loadingType0" :contentText="contentText"></load-more>
<load-more v-show="currentTabIndex == 1" :loadingType="loadingType1" :contentText="contentText"></load-more>
<load-more v-show="currentTabIndex == 2" :loadingType="loadingType2" :contentText="contentText"></load-more>
</view>
</template>
<script>
import { alertTip, callbackRequest, getStorage, convertImgToBase64 } from '@/common/util.js';
import { recommendFood, getMySubmitDrugsPush ,getPublicDrugsPush,drugsPushVote,submitDrugsRelease,getReleaseDrugsList} from '@/common/api.js';
import loadMore from '@/components/loadMore.vue';
import contentNone from '@/components/contentNone.vue';
import uniFab from '@/components/uni-fab/uni-fab.vue';
export default {
data() {
return {
showTab: true,
isCheckBox: false,
pattern:{buttonColor:'#307aff'},
currentTabIndex: 0,
chooseClassifyIndex: 0, //选中的菜单下标
page: 1,
pageSize: 10,
loadingType: 0, //0-loading前1-loading中2-没有更多了
page0: 1,
pageSize0: 10,
loadingType0: 0, //0-loading前1-loading中2-没有更多了
page1: 1,
pageSize1: 10,
loadingType1: 0, //0-loading前1-loading中2-没有更多了
page2: 1,
pageSize2: 10,
loadingType2: 0, //0-loading前1-loading中2-没有更多了
contentText: {
contentdown: '上拉加载更多',
contentrefresh: '正在加载...',
contentnomore: '没有更多数据了'
},
index: 0,
kinds: ['熟食', '凉菜', '热菜', '蔬菜', '主食', '水果'],
foodName: '', //菜品名称
reason: '', //推荐理由
materialName: '', //食材名称
imgs: [],
userId: getStorage('userInfo').id,
foodList: [], //推荐菜列表
title: 'checkbox 复选框',
//新品列表
newfoodList: [
],
// 大众推荐列表
dateInfo: null,
cindex: 1, // 1 餐厅管理员 进入 2 普通员工进入
content: [{ text: '发布', iconPath: '/static/icons/fb.png' },{ text: '推荐', iconPath: '/static/icons/fb.png' }],
mydrugsList:[],
publicdrugsList:[],
releaseDrugsList:[],
};
},
watch: {
currentTabIndex: function(newVal, oldVal) {
if (newVal == 0) {
this.page0 = 1;
this.loadingType0 = 0;
this.getReleaseDrugsList();
} else if (newVal == 1) {
this.cancel();
this.page1 = 1;
this.loadingType1 = 0;
this.getPublicDrugsPush();
}else if (newVal == 2) {
this.page2 = 1;
this.loadingType2 = 0;
this.getMySubmitDrugsPush();
}
}
},
components: {
loadMore,
contentNone,
uniFab
},
onLoad(option) {
this.currentTabIndex = option.currentTabIndex || 0;
if(this.currentTabIndex ==0){
this.page0 = 1;
this.loadingType0 = 0;
this.getReleaseDrugsList();
}else if(this.currentTabIndex ==1){
this.cancel();
this.page1 = 1;
this.loadingType1 = 0;
this.getPublicDrugsPush();
}else if(this.currentTabIndex ==2){
this.page2 = 1;
this.loadingType2 = 0;
this.getMySubmitDrugsPush();
}
// if (this.currentTabIndex == 0) {
// }
// if (this.cindex == 1) {
// this.content = [{ text: '发布', iconPath: '/static/icons/fb.png' },{ text: '推荐', iconPath: '/static/icons/fb.png' }];
// } else {
// this.content = [{ text: '推荐' }];
// }
// this.getDate();
},
methods: {
checkboxChange: function(d) {
var items = this.publicdrugsList,
values = d.detail.value;
for (var i = 0, lenI = items.length; i < lenI; ++i) {
const item = items[i];
if (values.includes(item.id)) {
this.$set(item, 'checked', true);
} else {
this.$set(item, 'checked', false);
}
}
},
// 取消发布
cancel(){
this.isCheckBox = false;
this.showTab = true;
},
// 点击fab中的按钮
trigger(e) {
if (e.index == 0) {
// 发布
if (this.cindex == 1){
this.isCheckBox = true;
this.showTab = false;
}
}else if(e.index == 1){
uni.navigateTo({
url: '/pages/drugspush/drugspush-add'
});
}
},
getMySubmitDrugsPush() {
let params = {
method: getMySubmitDrugsPush,
data: {
creator: this.userId,
pageNum:this.page2,
pageSize:this.pageSize2
}
};
callbackRequest(params).then(res => {
if (res.data.returnCode == 1) {
res = res.data;
if (this.page2 == 1) {
this.mydrugsList = res.returnData || [];
console.log(this.mydrugsList)
} else {
if (res.returnData.length > 0) {
this.mydrugsList = this.mydrugsList.concat(res.returnData);
this.loadingType2 = 0;
} else {
this.loadingType2 = 2;
}
}
}
});
},
getPublicDrugsPush(){
let params = {
method: getPublicDrugsPush,
data: {
creator: this.userId,
pageNum:this.page1,
pageSize:this.pageSize1
}
};
callbackRequest(params).then(res => {
if (res.data.returnCode == 1) {
res = res.data;
if (this.page1 == 1) {
this.publicdrugsList = res.returnData || [];
} else {
if (res.returnData.length > 0) {
this.publicdrugsList = this.publicdrugsList.concat(res.returnData);
this.loadingType1 = 0;
} else {
this.loadingType1 = 2;
}
}
}
});
},
getReleaseDrugsList(){
let params = {
method: getReleaseDrugsList,
data: {
creator: this.userId,
pageNum:this.page0,
pageSize:this.pageSize0
}
};
callbackRequest(params).then(res => {
if (res.data.returnCode == 1) {
res = res.data;
if (this.page0 == 1) {
this.releaseDrugsList = res.returnData || [];
} else {
if (res.returnData.length > 0) {
this.releaseDrugsList = this.releaseDrugsList.concat(res.returnData);
this.loadingType0 = 0;
} else {
this.loadingType0 = 2;
}
}
}
});
},
// 点赞
vote(index, id) {
let params = {
method: drugsPushVote,
data: {
voteUser: this.userId,
featureId: id
}
};
callbackRequest(params).then(res => {
if (res.data.returnCode == 1) {
this.publicdrugsList[index].vote_no++;
this.publicdrugsList[index].is_vote = 1;
} else {
alertTip(res.data.returnMsg);
}
});
},
submitDrugsRelease(){
var ids = "";
for(var i=0;i<this.publicdrugsList.length;i++){
if(i!=0){
ids+=",";
}
if(this.publicdrugsList[i].checked){
ids+=this.publicdrugsList[i].id;
}
}
let params = {
method: submitDrugsRelease,
data: {
creator: this.userId,
ids:ids
}
};
callbackRequest(params).then(res => {
res = res.data;
if (res.returnCode == 1) {
alertTip(res.returnMsg);
setTimeout(function() {
uni.navigateTo({
url:'/pages/drugspush/drugsPush?currentTabIndex=0'
})
}, 1500);
} else {
alertTip(res.returnMsg);
}
});
}
},
onReachBottom() {
if(this.currentTabIndex ==0){
if (this.loadingType0 !== 0 ) {
return;
}
this.loadingType0 = 1;
this.page0 = this.page0 + 1;
this.getReleaseDrugsList();
}else if(this.currentTabIndex ==1){
if (this.loadingType1 !== 0 ) {
return;
}
this.loadingType1 = 1;
this.page1 = this.page1 + 1;
this.getPublicDrugsPush();
}else if(this.currentTabIndex ==2){
if (this.loadingType2 !== 0 ) {
return;
}
this.loadingType2 = 1;
this.page2 = this.page2 + 1;
this.getMySubmitDrugsPush();
}
}
};
</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: 15upx 10upx;
.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;
text {
color: #5fbf3d;
padding-left: 4upx;
}
}
.vote-btn {
float: right;
width: 35upx;
height: 35upx;
image {
width: 100%;
height: 100%;
}
// background: #5fbf3d;
// font-size: 26upx;
// color: #fff;
// text-align: center;
// line-height: 60upx;
// border-radius: 4upx;
}
}
}
}
.uni-list-cell {
justify-content: flex-start;
}
</style>