2021-11-10 11:57:11 +08:00

410 lines
8.3 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 :style="colorStyle">
<view class="points-swiper">
<image class="bag" src="../../static/images/jf-head.png" mode=""></image>
<view class="swiper">
<swiper indicator-dots="true" :autoplay="autoplay" :circular="circular" :interval="interval"
:duration="duration" indicator-color="rgba(255,255,255,0.6)" indicator-active-color="#fff">
<block v-for="(item, index) in imgUrls" :key="index">
<swiper-item>
<image :src="item.img" class="slide-image" @click="goPages(item)"></image>
</swiper-item>
</block>
</swiper>
</view>
</view>
<view class="model">
<view class="model-list" v-for="(model,index) in modelList" :key="index" @click="jump(model.url)">
<image class="img" :src="model.imgUrl" mode=""></image>
<text>{{model.title}}</text>
</view>
</view>
<view class="body">
<view class="body-title">
<text class="title">大家都在换</text>
<text class="jump-trip" @click="jumpMore">查看更多
<text class="iconfont icon-xiangyou"></text></text>
</view>
<view class="product-list" v-if="goodList.length">
<view class="product-item" v-for="(item, index) in goodList" @click="goGoodsDetail(item)">
<image :src="item.image"></image>
<view class="info">
<view class="title line1">{{ item.title }}</view>
<view class="price-box">
{{ item.price }}积分
</view>
<view class="sales">{{item.sales}}人兑换</view>
</view>
</view>
</view>
<view v-else class="no-goods">
<image src="../../static/images/no-thing.png" mode=""></image>
<view class="fontimg">暂无商品去看点别的吧</view>
</view>
<view class="footer">
<view class="body-title">
<text class="title">轻松赚积分</text>
<text></text>
</view>
<view class="footer-list">
<view class="list-left">
<image class="icon-sty" src="../../static/images/go-shoping.png" mode=""></image>
<view class="list-left-right">
<view class="title">
购买商品
</view>
<view class="trip">
购买商品可获得积分奖励
</view>
</view>
</view>
<navigator url="/pages/index/index" open-type="switchTab" class="right-box">
<text class="go-jump">
去完成
</text>
</navigator>
</view>
<view class="footer-list">
<view class="list-left">
<image class="icon-sty" src="../../static/images/everyday.png" mode=""></image>
<view class="list-left-right">
<view class="title">
每日签到活动
</view>
<view class="trip">
每日签到可获得积分奖励
</view>
</view>
</view>
<navigator url="/pages/users/user_sgin/index" class="right-box">
<text class="go-jump">
去完成
</text>
</navigator>
</view>
<view class="footer-list">
<view class="list-left">
<image class="icon-sty" src="../../static/images/luck-draw.png" mode=""></image>
<view class="list-left-right">
<view class="title">
九宫格抽奖活动
</view>
<view class="trip">
幸运抽奖可获得积分奖励
</view>
</view>
</view>
<navigator url="/pages/activity/lottery/grids/index?type=1" class="right-box">
<text class="go-jump">
去完成
</text>
</navigator>
</view>
</view>
</view>
</view>
</template>
<script>
// import swipers from './components/swiper.vue';
import {
mapGetters
} from 'vuex';
import {
getStoreIntegral
} from '@/api/points_mall.js'
import {
goShopDetail
} from '@/libs/order.js';
import colors from "@/mixins/color";
export default {
components: {
// swipers
},
mixins: [colors],
data() {
return {
autoplay: true,
circular: true,
interval: 3000,
duration: 500,
imgUrls: [],
goodList: [],
modelList: [{
title: '我的积分',
imgUrl: '../../static/images/my-point.png',
url: "/pages/users/user_integral/index"
},
{
title: '每日签到',
imgUrl: '../../static/images/sign-in.png',
url: '/pages/users/user_sgin/index'
}, {
title: '积分抽奖',
imgUrl: '../../static/images/points-lottery.png',
url: '/pages/activity/lottery/grids/index?type=1'
}, {
title: '兑换记录',
imgUrl: '../../static/images/exchange.png',
url: "/pages/points_mall/exchange_record"
},
]
}
},
computed: mapGetters(['isLogin']),
onLoad() {
this.getStoreIntegral()
},
watch: {
isLogin: {
handler: function(newV, oldV) {
if (newV == true) {
this.getStoreIntegral();
}
},
deep: true
},
},
methods: {
getStoreIntegral() {
getStoreIntegral().then(res => {
this.imgUrls = res.data.banner
this.goodList = res.data.list
})
},
// 去商品详情
goGoodsDetail(item) {
goShopDetail(item).then(res => {
uni.navigateTo({
url: `/pages/points_mall/integral_goods_details?id=${item.id}`
});
});
},
jumpMore() {
uni.navigateTo({
url: '/pages/points_mall/integral_goods_list'
})
},
goPages(item) {
let url = item.link;
if (url.indexOf("http") != -1) {
// #ifdef H5
location.href = url
// #endif
} else {
if (['/pages/goods_cate/goods_cate', '/pages/order_addcart/order_addcart', '/pages/user/index',
'/pages/index/index'
]
.indexOf(url) == -1) {
uni.navigateTo({
url: url
})
} else {
uni.switchTab({
url: url
})
}
}
},
jump(url) {
uni.navigateTo({
url
})
}
}
}
</script>
<style lang="scss" scoped>
.swiper,
swiper,
swiper-item,
.slide-image {
width: 100%;
height: 280rpx;
}
/deep/ .uni-swiper-wrapper {
border-radius: 10rpx;
}
.swiper {
padding: 20rpx;
}
.points-swiper {
position: relative;
width: 100%;
background-color: #fff;
.bag {
position: absolute;
width: 100%;
height: 285rpx;
}
.points-swiper-sty {
padding: 20rpx 26rpx;
}
}
.model {
display: flex;
justify-content: space-between;
padding: 56rpx 42rpx;
background-color: #fff;
}
.model-list {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 26rpx;
color: #333;
margin-top: 27rpx;
font-weight: 500;
.img {
width: 84rpx;
height: 84rpx;
margin-bottom: 19rpx;
}
}
.body {
background-color: #fff;
padding: 0 30rpx;
margin-top: 20rpx;
.body-title {
display: flex;
justify-content: space-between;
padding: 30rpx 0 10rpx 0;
.title {
font-size: 32rpx;
font-family: PingFang SC;
font-weight: bold;
}
.jump-trip,
.icon-xiangyou {
font-size: 24rpx;
color: #999999;
}
}
.product-list {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-top: 30rpx;
.product-item {
position: relative;
width: 334rpx;
background: #fff;
border-radius: 10rpx;
margin-bottom: 20rpx;
box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.06);
image {
width: 100%;
height: 344rpx;
border-radius: 10rpx 10rpx 0 0;
}
.info {
padding: 14rpx 16rpx;
.title {
font-size: 28rpx;
}
.price-box {
font-size: 26rpx;
font-weight: 700;
margin-top: 8px;
color: var(--view-theme);
}
.sales {
font-size: 22rpx;
color: #999999;
}
}
}
}
}
.footer {
margin-top: 20rpx;
.footer-list {
display: flex;
justify-content: space-between;
padding: 26rpx 0;
.list-left {
display: flex;
align-items: center;
.icon-sty {
width: 80rpx;
height: 80rpx;
margin-right: 18rpx;
}
.list-left-right {
.title {
font-size: 28rpx;
font-weight: bold;
color: #333333;
}
.trip {
font-size: 22rpx;
color: #999999;
}
}
}
.right-box {
display: flex;
align-items: center;
}
.go-jump {
display: flex;
align-items: center;
background-color: #E93323;
border-radius: 26rpx;
color: #fff;
font-size: 28rpx;
height: 48rpx;
line-height: 48rpx;
padding: 6rpx 24rpx;
}
}
}
.no-goods {
display: flex;
flex-direction: column;
height: 472rpx;
image {
width: 100%;
display: block;
margin: 0 auto;
}
.fontimg {
text-align: center;
color: #bebebe;
}
}
</style>