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.

537 lines
12 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">
<!--nav bar-->
<view class="navbar">
<view class="navbar-fixed">
<!-- statusHeight 状态栏的高度 蓝色区块-->
<view class="statusHeight" :style="{ height: statusBarHeight + 'px' }"></view>
<!-- navcontent tabbar导航栏高度 绿色区块-->
<view class="navcontent" :style="{ height: navBarHeight + 'px' }">
<view class="iconfont icon-arrow-left-bold" @click="toback"></view>
<view class="input-view">
<input confirm-type="search" v-model="keyword" class="nav-bar-input" type="text"
placeholder="输入搜索关键词" @confirm="confirm">
</view>
</view>
</view>
<!-- 占位盒子 它的高度=状态栏高度+导航栏高度-->
<view class="placeholder" :style="{ height: navBarHeight + statusBarHeight + 'px', background: 'red' }">
</view>
<view class="termBox">
<!-- <view class="termOuter">
<view class="termCol cur">综合排序<text class="iconfont icon-arrowbottom"></text></view>
<view class="termCol">距离最近<text class="iconfont icon-arrowbottom"></text></view>
<view class="termCol">优质商户<text class="iconfont icon-arrowbottom"></text></view>
<view class="termCol">筛选<text class="iconfont icon-filter"></text></view>
</view> -->
</view>
<view class="shopContent">
<!--为您推荐-->
<u-empty v-if="dataList.length==0" marginTop="250"></u-empty>
<view class="introBox hasMenu" v-if="dataList.length>0">
<block v-for="(item,index) in dataList">
<view class="intro_column" @tap="gotoDetail" :data-id="item.id">
<view class="imgOuter">
<image :src="item.poster"></image>
<view class="i_intro">{{item.product_type.name}}</view>
</view>
<view class="columnInfo">
<view class="title">{{item.name}}</view>
<view class="discuss">
<view class="starBox">
<image mode="heightFix" src="../../static/icon_detail_star_pre@2x.png">
</image>
<image mode="heightFix" src="../../static/icon_detail_star_pre@2x.png">
</image>
<image mode="heightFix" src="../../static/icon_detail_star_pre@2x.png">
</image>
<image mode="heightFix" src="../../static/icon_detail_star_pre@2x.png">
</image>
<image mode="heightFix" src="../../static/icon_detail_star_pre@2x.png">
</image>
</view>
</view>
<view class="subInfo">{{item.merchant.address}}</view>
<view class='price'>
<text class="font_red" v-if="item.price > 0">¥{{item.price}}</text>
<text class="free" v-else>免费</text>
</view>
<view class="menu">
<text class="hui"></text>{{item.merchant.username}}
</view>
</view>
</view>
</block>
</view>
</view>
</view>
<!--nav end-->
</view>
</template>
<script>
import {
weixin
} from '../../../../utils/weixin.js';
export default {
data() {
return {
statusBarHeight: 20, //状态栏的高度系统默认20px
menuBarHeight: 32, //微信胶囊的高度
navBarHeight: 44, //uniapp 默认的高度是44这里默认高度也就是H5导航栏的高度 根据公式计算的高度不是固定值44
keyword: "",
dataList: [],
currentPage: 1,
product_type_id: 0,
isLoading: false
}
},
onShareAppMessage() {
var url = 'packages/packageBuy/pages/shopList/shopList?keyword='+this.keyword+'&product_type_id='+this.product_type_id;
console.log(url)
return {
title: "福利集合",
path: url
}
},
onShareTimeline() {
var url = 'packages/packageBuy/pages/shopList/shopList?keyword='+this.keyword+'&product_type_id='+this.product_type_id;
return {
title: "福利集合",
path: url,
}
},
onReachBottom: function(e) {
if (!this.isLoading) {
console.log("onReachBottom", this.currentPage + 1)
this.loadPage(this.currentPage + 1);
}
},
onPullDownRefresh: function(e) {
console.log("onPullDownRefresh", this.currentPage + 1)
if (!this.isLoading) {
this.loadPage(this.currentPage + 1);
}
},
onLoad(options) {
//获取系统信息 具体信息请转至 https://uniapp.dcloud.io/api/system/info
let res = uni.getSystemInfoSync();
console.log('状态栏的高度', res.statusBarHeight);
this.statusBarHeight = res.statusBarHeight;
// #ifdef MP-WEIXIN
//获取胶囊位置信息
let menuBottonInfo = uni.getMenuButtonBoundingClientRect();
//微信胶囊的高度
this.menuBarHeight = menuBottonInfo.height;
// 胶囊底部 - 状态栏 + 胶囊顶部 - 状态栏 = 导航栏的高度(胶囊距离顶部的距离+胶囊距离底部距离+胶囊自身的高度)
this.navBarHeight = menuBottonInfo.bottom - res.statusBarHeight + (menuBottonInfo.top - res.statusBarHeight);
// #endif
if (options.promotion_id) {
uni.setStorageSync("base_promotion_id", options.promotion_id)
}
if (options.product_type_id) {
this.product_type_id = options.product_type_id
}
if (options.keyword) {
this.keyword = options.keyword;
}
this.loadPage(1);
},
onShow() {},
methods: {
toback: function() {
let route = getCurrentPages();
console.log(route)
if (route.length > 1) {
uni.navigateBack({
delta: 1
})
} else {
uni.switchTab({
url: "../../../../pages/home/home"
})
}
},
confirm: function() {
this.loadPage(1);
},
gotoDetail: function(e) {
var id = e.currentTarget.dataset.id
uni.navigateTo({
url: "../shopDetail/shopDetail?id=" + id
})
},
loadPage: function(page) {
uni.hideKeyboard()
var that = this;
that.isLoading = true;
weixin.request({
bindThis: that,
api: '/api/member/get-products',
customLoading: false,
data: {
page: page,
page_size: 6,
keyword: that.keyword,
product_type_id: that.product_type_id,
sort_name:'sortnumber',
sort_type:"ASC"
},
utilSuccess: function(r) {
var res = r.data.data;
that.isLoading = false;
var hasNoMore = r.data.total < 6 && page > 1;
console.log("hasNoMore", hasNoMore)
if (hasNoMore || res.length == 0 && page > 1) {
uni.stopPullDownRefresh(); // 服务器总条数 < 每页条数, 会将第一页的条数重新返回
// 已加载到最后一页
uni.showToast({
title: '已加载到最后一页',
icon: 'none'
});
return;
}
var dataList = that.dataList;
for (var m of res) {
if (m.created_at.indexOf('T') > 0)
m.created_at = m.created_at.split("T")[0] + " " + m.created_at.split("T")[
1].split(".")[0];
m.poster = (weixin.isNull(m.poster) ? "../../static/rishang.png" : m
.poster_url)
}
if (page == 1) {
dataList = res;
} else {
dataList.push(...res);
}
that.currentPage = page;
that.dataList = dataList;
},
utilFail: function(res) {
if (page == 1) {
that.currentPage = page;
that.orders = [];
}
util.alert(res);
}
});
}
}
}
</script>
<style>
page {
display: flex
}
</style>
<style lang="scss" scoped>
.navbar {
display: flex;
flex-direction: column;
flex: 1;
overflow: hidden;
.navbar-fixed {
position: fixed;
top: 0;
left: 0;
z-index: 99;
width: 100%;
background-color: #fff;
.statusHeight {
background-color: #fff;
}
.navcontent {
background-color: #fff;
display: flex;
justify-content: flex-start;
align-items: center;
align-content: center;
.iconfont {
margin: 0 20rpx;
font-size: 40rpx;
color: #333;
}
}
}
.shopContent {
box-sizing: border-box;
height: 100%;
flex: 1;
overflow: hidden;
}
.scroll-y-item {
height: 100%;
}
}
.input-view {
line-height: 64rpx;
width: 450rpx;
height: 64rpx;
background: #EEEEEE;
border-radius: 32rpx;
font-size: 28rpx;
color: #333;
box-sizing: border-box;
position: relative;
.nav-bar-input {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
padding: 0 30rpx;
box-sizing: border-box;
}
}
.introBox {
width: 710rpx;
margin: 20rpx auto 0 auto;
border-radius: 16rpx;
background: #fff;
padding: 0 24rpx;
box-sizing: border-box;
}
.introBox .intro_column:last-child {
border-bottom: none;
}
.intro_column {
display: flex;
justify-content: flex-start;
padding: 20rpx 0;
border-bottom: 2rpx solid #EAEAEA;
.imgOuter {
width: 280rpx;
height: 200rpx;
position: relative;
image {
width: 280rpx;
height: 200rpx;
border-radius: 5rpx;
}
.i_intro {
position: absolute;
top: 0;
left: 0;
//width: 68rpx;
padding: 0rpx 10rpx;
height: 32rpx;
background: #FF578A;
border-radius: 5rpx 0px 18rpx 5rpx;
font-size: 22rpx;
font-weight: 400;
color: #FFFFFF;
line-height: 32rpx;
text-align: center;
}
}
.columnInfo {
width: 360rpx;
margin-left: 22rpx;
.discuss {
margin: 13rpx 0 !important;
}
.menu {
font-size: 24rpx;
color: #333;
margin-top: 10rpx;
.hui {
margin-right: 8rpx;
display: inline-block;
width: 30rpx;
height: 30rpx;
background: #FF753E;
border-radius: 2rpx;
font-size: 22rpx;
color: #FFFFFF;
text-align: center;
line-height: 30rpx;
}
}
.title {
width: 100%;
font-size: 30rpx;
font-weight: bold;
color: #333;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.tags text {
height: 28rpx;
background: rgba(255, 177, 62, 0.1);
border-radius: 4rpx;
line-height: 28rpx;
font-size: 20rpx;
padding: 0 10rpx;
margin-right: 10rpx;
color: #FF753E;
}
.subInfo {
width: 100%;
font-size: 24rpx;
color: #999;
font-weight: 400;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
padding-top: 5rpx;
.font_red {
margin-left: 10rpx;
}
}
.price {
display: flex;
justify-content: flex-start;
align-items: center;
align-content: center;
margin-top: 8rpx;
text {
margin-right: 10rpx;
}
.shareMoney {
height: 28rpx;
border: 2rpx solid #FF578A;
border-radius: 4rpx;
line-height: 28rpx;
font-size: 20rpx;
margin-right: 10rpx;
padding-right: 10rpx;
color: #FF578A;
display: flex;
flex-direction: flex-start;
text {
background: #FF578A;
color: #fff;
padding: 0 10rpx;
}
}
.free {
height: 28rpx;
background: #FF753E;
border-radius: 4rpx;
line-height: 28rpx;
font-size: 20rpx;
padding: 0 10rpx;
margin-right: 10rpx;
color: #fff;
}
}
}
}
.termBox {
width: 750rpx;
// height: 100rpx;
background: #fff;
.termOuter {
display: flex;
align-items: center;
align-content: center;
justify-content: flex-start;
.termCol {
width: 27%;
text-align: center;
font-size: 28rpx;
font-weight: 400;
color: #333333;
padding-top: 36rpx;
.iconfont {
font-size: 24rpx;
color: #666666;
line-height: 28rpx;
margin-left: 8rpx;
}
}
.termCol.cur {
color: #FF578A;
.iconfont {
color: #FF578A;
}
}
.termCol:last-child {
width: 19%;
}
}
}
.discuss {
display: flex;
justify-content: flex-start;
margin: 25rpx 0;
position: relative;
align-items: center;
align-content: center;
.dis_l {
font-size: 28rpx;
color: #333;
font-weight: 500;
padding-top: 5rpx;
margin-right: 32rpx;
}
.starBox {
display: flex;
justify-content: flex-start;
image {
display: block;
width: 26rpx;
height: 26rpx;
margin-right: 8rpx;
}
}
}
</style>