Browse Source

推荐页面开发

master
wanghongjun 2 years ago
parent
commit
6c57222227
  1. 16
      pages.json
  2. 430
      pages/recommend/index.vue
  3. BIN
      static/tabbar/recommend-cate.png

16
pages.json

@ -15,10 +15,10 @@
"selectedIconPath": "static/tabbar/cate-active.png", "selectedIconPath": "static/tabbar/cate-active.png",
"text": "分类" "text": "分类"
}, { }, {
"pagePath": "pages/order/index", "pagePath": "pages/recommend/index",
"iconPath": "static/tabbar/cart.png", "iconPath": "static/tabbar/cal.png",
"selectedIconPath": "static/tabbar/cart-active.png", "selectedIconPath": "static/tabbar/cal-active.png",
"text": "订单" "text": "推荐"
}, { }, {
"pagePath": "pages/user/index", "pagePath": "pages/user/index",
"iconPath": "static/tabbar/user.png", "iconPath": "static/tabbar/user.png",
@ -371,6 +371,14 @@
"navigationBarTitleText" : "订单结算", "navigationBarTitleText" : "订单结算",
"enablePullDownRefresh" : false "enablePullDownRefresh" : false
} }
},
{
"path": "pages/recommend/index",
"style": {
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#1c223b",
"enablePullDownRefresh": true
}
} }
], ],
"globalStyle": { "globalStyle": {

430
pages/recommend/index.vue

@ -0,0 +1,430 @@
<template>
<view class="container">
<!-- 搜索框 -->
<view class="search">
<view class="search-wrapper">
<view class="index-search">
<view class="index-cont-search t-c">
<text class="search-icon iconfont icon-search"></text>
<text class="search-text">
<input type="text" placeholder="请输入关键字" v-model="searchValue">
</text>
<button class="search-text-bu" @click="onSearch">搜索</button>
</view>
</view>
</view>
</view>
<view class="secondary">
<!-- 二级分类 20 -->
<view class="cate-content">
<!-- 左侧 一级分类 -->
<scroll-view class="cate-left" scroll-y="true">
<view class="type-nav" :class="{ selected: curIndex == index }" v-for="(item, index) in menus" :key="index"
@click="handleSelectNav(index)">
<image class="cate-left-image" :src="'./static/tabbar/recommend-cate.png'"></image>
<text class="cate-left-text">{{ item.name }}</text>
</view>
</scroll-view>
<!-- 右侧 二级分类 -->
<scroll-view class="cate-right" :scroll-top="scrollTop" :scroll-y="true"
:style="{ height: `${scrollHeight}px` }">
<!-- 有数据的时候 -->
<view v-if="list.length>0" class="cate-right-cont">
<view class="cate-two-box">
<view class="cate-cont-box">
<view class="flex-two" v-for="(item, idx) in list" :key="idx"
@click="onTargetGoods(item.goods_islicode)">
<view class="cate-img-padding">
<view v-if="item.rankingDetails.goodsImage" class="cate-img">
<image class="image" mode="scaleToFill" :src="item.rankingDetails.goodsImage"></image>
</view>
</view>
<view class="name">
<text>{{ item.goodsName }}</text>
<text class="name-price"> {{ item.rankingDetails.price }}</text>
<text class="name-type">交易类型{{ item.rankingDetails.goodsEntrust == 1 ? '转让' : '授权'}}</text>
</view>
</view>
</view>
</view>
</view>
<!-- 空白提示 -->
<view v-else class="cate-right-cont">
<view class="empty-content">
<view class="empty-icon">
<image class="image" src="/static/empty.png" mode="widthFix"></image>
</view>
<view class="tips">暂无数据</view>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</template>
<script>
import MescrollCompMixin from '@/components/mescroll-uni/mixins/mescroll-comp'
import {PageCategoryStyleEnum} from '@/common/enum/store/page/category'
import * as GoodsApi from '@/api/goods'
import Empty from '@/components/empty'
import Secondary from './components/secondary'
import {rpx2px, base64ToUint8Array} from '@/utils/util'
// ()
const menus = [
{id: 'all', name: '标的推荐', type: 0},
{id: 'rs', name: '销售排行', type: 1},
{id: 'rd', name: '店铺排行', type: 2},
]
//
let lastRefreshTime;
export default {
components: {
Empty,
Secondary,
},
mixins: [MescrollCompMixin],
data() {
return {
searchValue: '',
//
PageCategoryStyleEnum,
//
list: [],
//
setting: {},
//
isLoading: true,
//
curIndex: 0,
//
page: 1,
//
scrollHeight: 0,
//
scrollTop: 0,
//
menus,
}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad() {
//
this.onRefreshPage()
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
// 5
const curTime = new Date().getTime()
if ((curTime - lastRefreshTime) > 5 * 60 * 1000) {
this.onRefreshPage()
}
},
created() {
//
this.setListHeight()
},
methods: {
//
async onSearch() {
if (this.searchValue == '') {
this.$error('请输入搜索关键词');
} else {
}
},
//
setListHeight() {
const {windowHeight} = uni.getSystemInfoSync()
this.scrollHeight = windowHeight - rpx2px(96)
},
//
onRefreshPage() {
//
lastRefreshTime = new Date().getTime()
//
this.getCatList()
},
//
handleSelectNav(index) {
this.curIndex = index
this.scrollTop = 0
this.getCatList()
},
//
getCatList() {
let item = menus[this.curIndex]
let type = item.type
let param = {
goods_type: '', //1.,2.
lbdSet: 1, //1 2 () 3
pageIndex: this.page,
pageRows: 10,
typeStatus: 1,
}
if (type === 1) {
param.lbdSet = 2
} else if (type === 2) {
param.lbdSet = 3
}
this.bindData(param)
},
//
onTargetGoods(gislicode) {
// this.$toast(goodsId)
this.$navTo('pages/goods/detail', {gislicode})
},
//
async bindData(param) {
const app = this
GoodsApi.getRankingList(param).then(res=>{
app.list = res.data
});
},
},
}
</script>
<style lang="scss" scoped> //
.search {
position: fixed;
float: top;
top: var(--window-top);
left: var(--window-left);
right: var(--window-right);
z-index: 19;
.search-wrapper {
background: #1c223b;
padding: 0rpx 20rpx 20rpx 20rpx;
}
.index-search {
border-bottom: 0;
background: #fff;
border-radius: 50rpx;
overflow: hidden;
font-size: 28rpx;
color: #6d6d6d;
box-sizing: border-box;
height: 74rpx;
line-height: 74rpx;
.index-cont-search {
width: 100%;
font-size: 28rpx;
background: #f7f7f7;
display: flex;
justify-content: center;
align-items: center;
.search-icon {
font-size: 34rpx;
margin-left: 50rpx;
}
.search-text {
text-align: left;
float: left;
margin-left: 20rpx;
width: 100%;
input {
font-size: 20rpx;
}
}
.search-text-bu {
margin-right: 20rpx;
color: #ffffff;
background-color: #1c223b;
font-size: 20rpx;
width: 120rpx;
height: 50rpx;
text-align: center;
border-radius: 50rpx;
}
}
}
}
//
.secondary {
z-index: 19;
border-top: 1rpx solid #444;
height: 100vh;
}
//
.cate-content {
display: flex;
z-index: 1;
background: #fff;
padding-top: 96rpx;
height: 100%;
}
// + 20
.cate-left {
// height: 100%;
display: flex;
flex-direction: column;
flex: 0 0 26%;
background: #f8f8f8;
color: #444;
margin-right: 22rpx;
}
.cate-right {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
.cate-right-cont {
width: 100%;
display: flex;
flex-flow: row wrap;
align-content: flex-start;
padding-top: 15 rpx;
.cate-two-box {
width: 100%;
padding: 0 10px;
}
//
.empty-content {
box-sizing: border-box;
width: 100%;
padding: 140rpx 50rpx;
text-align: center;
.tips {
font-size: 28rpx;
color: gray;
margin: 50rpx 0;
}
.empty-icon .image {
width: 280rpx;
}
}
}
}
//
.type-nav {
position: relative;
height: 180rpx;
z-index: 10;
font-size: 26rpx;
display: flex;
justify-content: center;
align-items: center;
font-weight: bold;
&.selected {
background: #fff;
color: #cec7bf;
border-right: none;
font-size: 28rpx;
font-weight: bold;
}
.cate-left-image{
position: absolute;
width: 50rpx;
height: 50rpx;
border-radius: 10rpx;
margin-bottom: 20rpx;
}
.cate-left-text{
position: absolute;
margin-top: 80rpx;
}
}
//
.cate-cont-box {
margin-bottom: 30rpx;
padding-bottom: 10rpx;
background: #fff;
overflow: hidden;
.name {
width: 45%;
height: 200rpx;
float: left;
margin-left: 51%;
margin-top: -45%;
display: inline-block;
font-size: 26rpx;
font-weight: bold;
color: #444444;
.name-price{
color: #fe7730;
margin-top: 30rpx;
}
.name-type{
color: #cec7bf;
margin-top: 20rpx;
}
}
.flex-two {
float: left;
width: 100%;
background-color: #f7f7f7;
margin-bottom: 20rpx;
text {
display: inline-block;
}
.cate-img-padding {
width: 250rpx;
height: 250rpx;
padding: 16rpx 16rpx 4rpx 16rpx;
}
.cate-img {
position: relative;
width: 100%;
padding-top: 100%;
.image {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
}
}
}
</style>

BIN
static/tabbar/recommend-cate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Loading…
Cancel
Save