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.
high-mini/pages/tabBar/category/category.vue

399 lines
8.1 KiB

<template>
<view>
<!-- 状态栏 -->
<view class="status" :style="{position:headerPosition}"></view>
<view class="header" :style="{position:headerPosition}">
<view class="addr">
<view class="icon location"></view>{{city}}
</view>
<view class="input-box">
<input placeholder="默认关键字" placeholder-style="color:#c0c0c0;" @tap="toSearch()" />
<view class="icon search"></view>
</view>
<view class="icon-btn">
<view class="icon tongzhi" @tap="toMsg"></view>
</view>
</view>
<!-- 占位 -->
<view class="place"></view>
<view class="category-list">
<!-- 左侧分类导航 -->
<scroll-view scroll-y="true" class="left">
<view class="row" :class="[0==showCategoryIndex?'on':'']">
<view class="text">
<view class="block"></view>
卡券
</view>
</view>
</scroll-view>
<!-- 右侧子导航 -->
<scroll-view scroll-y="true" class="right">
<view class="category" v-show="0==showCategoryIndex">
<view class="banner">
<image src="/static/img/banner2.png"></image>
</view>
<view class="list">
<view class="box" v-for="(box,i) in categoryList" :key="i" @tap="toCategory(box.id)">
<image :src="imageUrl+box.couponImg"></image>
<view class="text">{{box.couponName}}</view>
</view>
</view>
</view>
<view class="loading-text" @click="getCouponList">{{ loadingText }}</view>
</scroll-view>
</view>
<authorize></authorize>
</view>
</template>
<script>
import {
getCouponList
} from "../../../Utils/Api.js";
import authorize from '../../../components/Authorize';
let app = getApp();
export default {
components: {
authorize
},
data() {
return {
showCategoryIndex: 0,
headerPosition: "fixed",
city: "",
imageUrl: app.globalData.imgUrl,
//分类列表
categoryList: [],
pageNum: 1,
pageSize: 10,
isNoMoreData: false,
loadingText: '点击加载更多'
}
},
onPageScroll(e) {
//兼容iOS端下拉时顶部漂移
if (e.scrollTop >= 0) {
this.headerPosition = "fixed";
} else {
this.headerPosition = "absolute";
}
},
onLoad() {
this.postionIng();
},
methods: {
postionIng() {
uni.showLoading({
})
let that = this;
uni.getLocation({
type: 'wgs84',
success: function(res) {
uni.request({
url: 'https://apis.map.qq.com/ws/geocoder/v1/?location=' + res.latitude +
',' + res.longitude + '&key=YQDBZ-T54K4-5J6U7-DO3BA-CNZJO-PTFMU',
data: {},
success: function(res) {
that.city = res.data.result.address_component.city.replace(/市/g,
'');
let a = res.data.result.ad_info.adcode.substring(5, '');
app.globalData.cityId = '500100';
that.getCouponList();
uni.hideLoading()
}
})
}
})
},
//卡券列表
getCouponList() {
uni.showLoading({
title: '加载中...'
})
if (this.isNoMoreData) {
uni.hideLoading()
this.loadingText = '到底了';
return false;
}
let pagenum = this.pageNum;
let params = {
regionId: app.globalData.cityId,
pageNum: pagenum,
pageSize: this.pageSize
}
getCouponList(params).then(res => {
if (res.return_code == '000000') {
uni.hideLoading();
this.isNoMoreData = res.return_data.list.length == this.pageSize ? false : true;
this.pageNum = res.return_data.list.length == this.pageSize ? ++pagenum : pagenum;
this.categoryList = this.categoryList.concat(res.return_data.list);
} else {
uni.hideLoading()
}
})
},
toMsg() {
// uni.navigateTo({
// url:'../../msg/msg'
// })
uni.showToast({
title: '暂未开通',
icon: 'none'
});
},
//分类切换显示
showCategory(index) {
this.showCategoryIndex = index;
},
toCategory(e) {
// uni.setStorageSync('catName',e.name);
// uni.navigateTo({
// url: '../../goods/goods-list/goods-list?cid='+e.id+'&name='+e.name
// });
// uni.navigateTo({
// url:'../../goods/store-list/store-list?id='+e
// })
uni.navigateTo({
url: '../../goods/goods?id=' + e
});
},
//搜索跳转
toSearch() {
uni.navigateTo({
url: '../../goods/HM-search/HM-search'
})
// uni.showToast({title: "建议跳转到新页面做搜索功能"});
}
}
}
</script>
<style lang="scss">
.status {
width: 100%;
height: 0;
position: fixed;
z-index: 10;
background-color: #fff;
top: 0;
/* #ifdef APP-PLUS */
height: var(--status-bar-height); //覆盖样式
/* #endif */
}
.loading-text {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
height: 60upx;
color: #979797;
font-size: 24upx;
}
.header {
width: 92%;
padding: 0 4%;
height: 100upx;
display: flex;
align-items: center;
position: fixed;
top: 0;
z-index: 10;
background-color: #fff;
/* #ifdef APP-PLUS */
top: var(--status-bar-height);
/* #endif */
.addr {
width: 120upx;
height: 60upx;
flex-shrink: 0;
display: flex;
align-items: center;
font-size: 28upx;
.icon {
height: 60upx;
margin-right: 5upx;
display: flex;
align-items: center;
font-size: 42upx;
color: #ffc50a;
}
}
.input-box {
width: 100%;
height: 60upx;
background-color: #f5f5f5;
border-radius: 30upx;
position: relative;
display: flex;
align-items: center;
.icon {
display: flex;
align-items: center;
position: absolute;
top: 0;
right: 0;
width: 60upx;
height: 60upx;
font-size: 34upx;
color: #c0c0c0;
}
input {
padding-left: 28upx;
height: 28upx;
font-size: 28upx;
}
}
.icon-btn {
width: 60upx;
height: 60upx;
flex-shrink: 0;
display: flex;
.icon {
width: 60upx;
height: 60upx;
display: flex;
justify-content: flex-end;
align-items: center;
font-size: 42upx;
}
}
}
.place {
background-color: #ffffff;
height: 100upx;
/* #ifdef APP-PLUS */
margin-top: var(--status-bar-height);
/* #endif */
}
.category-list {
width: 100%;
background-color: #fff;
display: flex;
.left,
.right {
position: absolute;
top: 100upx;
/* #ifdef APP-PLUS */
top: calc(100upx + var(--status-bar-height));
/* #endif */
bottom: 0upx;
}
.left {
width: 24%;
left: 0upx;
background-color: #f2f2f2;
.row {
width: 100%;
height: 90upx;
display: flex;
align-items: center;
.text {
width: 100%;
position: relative;
font-size: 28upx;
display: flex;
justify-content: center;
color: #3c3c3c;
.block {
position: absolute;
width: 0upx;
left: 0;
}
}
&.on {
height: 100upx;
background-color: #fff;
.text {
font-size: 30upx;
font-weight: 600;
color: #2d2d2d;
.block {
width: 10upx;
height: 80%;
top: 10%;
background-color: #f06c7a;
}
}
}
}
}
.right {
width: 76%;
left: 24%;
.category {
width: 94%;
padding: 20upx 3%;
.banner {
width: 100%;
height: 24.262vw;
border-radius: 10upx;
overflow: hidden;
box-shadow: 0upx 5upx 20upx rgba(0, 0, 0, 0.3);
image {
width: 100%;
height: 24.262vw;
}
}
.list {
margin-top: 40upx;
width: 100%;
display: flex;
flex-wrap: wrap;
.box {
width: calc(71.44vw / 2);
margin-bottom: 30upx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
image {
width: 60%;
height: calc(71.44vw / 2 * 0.6);
}
.text {
margin-top: 5upx;
width: 100%;
display: flex;
justify-content: center;
font-size: 26upx;
}
}
}
}
}
}
</style>