704 lines
15 KiB
Vue
704 lines
15 KiB
Vue
<template>
|
||
<!-- https://ext.dcloud.net.cn/plugin?id=2630 -->
|
||
<view class="page">
|
||
<view class="head-info">
|
||
<!-- 搜索 -->
|
||
<view style="margin-top: 95rpx;" class="head-search">
|
||
<view @click="back()" class="icon-info" style="margin-left: 20rpx;">
|
||
<text class="cuIcon-back"></text>
|
||
</view>
|
||
<uni-search-bar v-model="searchValue"
|
||
style="opacity: 0.4; margin-top: -15rpx;width: 63%;margin-left: 30rpx;" radius="10"
|
||
placeholder="搜索一下,爱上这个世界" @confirm="search" cancelButton="none" bgColor="#fff" />
|
||
</view>
|
||
<!-- 分类列表 -->
|
||
<view class="classify-list">
|
||
<view class="list" v-for="(item, index) in classList" :class="{ action: classifyShow == index }"
|
||
@click="onClassify(item, index)" :key="index">
|
||
<text>{{ item.name }}</text>
|
||
<text class="line" v-show="classifyShow == index"></text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<!-- <mescroll-body ref="mescrollRef" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption" :top="0"> -->
|
||
<view class="main">
|
||
<!-- 轮播图 -->
|
||
<view class="banner">
|
||
<swiper class="screen-swiper square-dot" indicator-dots="true" circular="true" autoplay="true"
|
||
interval="3000" duration="500">
|
||
<swiper-item v-for="(item, index) in swiperList" :key="index">
|
||
<image :src="item.url" mode="aspectFill"></image>
|
||
</swiper-item>
|
||
</swiper>
|
||
</view>
|
||
|
||
<!-- 通知 -->
|
||
<view class="inform">
|
||
<view class="inform-info">
|
||
<view class="picture">
|
||
<image src="https://img.yidaima.cn/feast/gg_ico.png" mode=""></image>
|
||
</view>
|
||
<view class="info">
|
||
<swiper class="swiper" :circular="true" :vertical="true" :indicator-dots="false"
|
||
:autoplay="true" :interval="3000" :duration="1000">
|
||
<swiper-item v-for="(item,index) in exchangeList" :key="index">
|
||
<view class="swiper-item"><text class="one-omit">微信用户_{{item.recordsUserId}} 兑换了 {{item.goodsName}}</text>
|
||
</view>
|
||
</swiper-item>
|
||
</swiper>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 为你推荐 -->
|
||
<view class="recommend-info">
|
||
<view class="recommend-title">
|
||
<view class="title">
|
||
<image src="https://img.yidaima.cn/feast/wntj_title.png" mode=""></image>
|
||
</view>
|
||
</view>
|
||
<view class="goods-list">
|
||
<view class="list" v-for="(item, index) in goodsList" @click="onSkip(item)" :key="index">
|
||
<view class="pictrue">
|
||
<image :src="item.goodsImg"></image>
|
||
</view>
|
||
<view class="title-tag">
|
||
<view class="tag">
|
||
<text v-if="item.isHot === 0">火爆</text>
|
||
{{ item.goodsName }}
|
||
</view>
|
||
</view>
|
||
<view class="price-info">
|
||
<view class="user-price">
|
||
<text class="cuIcon-vip min"></text>
|
||
<text class="max">{{ item.goodsExchange }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<!-- 加载动图 -->
|
||
<view class="artileload" v-if="showTotal">
|
||
<image style="width: 100%;height: 100%;" src="https://img.yidaima.cn/feast/articleload.gif"
|
||
mode="aspectFit"></image>
|
||
</view>
|
||
<!-- 文章列表没有数据 -->
|
||
<view class="no-list-data" v-else>
|
||
--我的底线就到这里了--
|
||
</view>
|
||
<!-- </mescroll-body> -->
|
||
<!-- <ClassifyData v-show="classifyShow != 0"></ClassifyData> -->
|
||
<!-- tabbar -->
|
||
<!-- <TabBar :tabBarShow="0"></TabBar> -->
|
||
<u-toast ref="uToast"></u-toast>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import {
|
||
getConfigKey
|
||
} from "@/api/app/public.js"
|
||
import {
|
||
getDicts,
|
||
listExchange,
|
||
listGoods,
|
||
appGetUserById,
|
||
exchangeGoods
|
||
} from "@/api/app/index.js"
|
||
import config from '@/config'
|
||
export default {
|
||
components: {},
|
||
data() {
|
||
return {
|
||
baseUrl: config.baseUrl,
|
||
searchValue: "",
|
||
swiperList: [],
|
||
slideNum: 0,
|
||
|
||
classList: [{
|
||
id: 0,
|
||
name: '全部'
|
||
}],
|
||
goodsList: [],
|
||
classifyShow: 0,
|
||
// 页面高度
|
||
pageHeight: 500,
|
||
exchangeList: [],
|
||
queryParams: {
|
||
pageNum: 1,
|
||
pageSize: 6,
|
||
},
|
||
total: 0,
|
||
showTotal: false,
|
||
userId: null,
|
||
};
|
||
},
|
||
onLoad() {
|
||
var that = this;
|
||
this.userId = uni.getStorageSync("userInfo").userId
|
||
//获取轮播图
|
||
getConfigKey("miniapp.index.swiper").then(response => {
|
||
|
||
that.swiperList = []
|
||
var swiper = response.msg.split(",")
|
||
for (var i = 0; i < swiper.length; i++) {
|
||
var obj = {
|
||
id: i,
|
||
type: 'image',
|
||
url: swiper[i]
|
||
}
|
||
that.swiperList.push(obj)
|
||
}
|
||
})
|
||
//获取类型标签
|
||
getDicts("exchange_goods_type").then(response => {
|
||
this.classList = [{
|
||
id: 0,
|
||
name: '全部'
|
||
}]
|
||
for (var i = 0; i < response.data.length; i++) {
|
||
var type = {
|
||
id: response.data[i].dictValue,
|
||
name: response.data[i].dictLabel
|
||
}
|
||
this.classList.push(type)
|
||
}
|
||
})
|
||
//获取兑换记录列表
|
||
listExchange({
|
||
pageNum: 1,
|
||
pageSize: 5,
|
||
}).then(response => {
|
||
that.exchangeList = response.rows
|
||
})
|
||
//获取兑换商品列表
|
||
this.getListGoods()
|
||
},
|
||
// 上拉分页
|
||
onReachBottom() {
|
||
var that = this;
|
||
var allTotal = this.queryParams.pageNum * this.queryParams.pageSize
|
||
//this.page为加载次数,this.pageSize为每一次加载的数据条数
|
||
if (allTotal < this.total) {
|
||
//this.total为请求数据的总条数。只要现有条数小于总条数就执行一下代码
|
||
this.showTotal = true;
|
||
this.queryParams.pageNum++;
|
||
//加载次数递加
|
||
//请求更多数据列表
|
||
listGoods(this.queryParams).then(response => {
|
||
that.goodsList = that.goodsList.concat(response.rows)
|
||
var allTotal2 = this.queryParams.pageNum * this.queryParams.pageSize
|
||
if (allTotal2 < this.total) {
|
||
//this.total为请求数据的总条数。只要现有条数小于总条数就执行一下代码
|
||
this.showTotal = true;
|
||
} else {
|
||
this.showTotal = false;
|
||
}
|
||
|
||
})
|
||
} else {
|
||
this.showTotal = false;
|
||
}
|
||
},
|
||
|
||
methods: {
|
||
onSkip(e) {
|
||
console.log(e)
|
||
this.$tab.navigateTo('/pages/tool/exchangeinfo?goodsImg='+e.goodsImg+"&goodsName="+e.goodsName+"&goodsExchange="+e.goodsExchange+"&isHot="+e.isHot+"&isCami="+e.isCami+"&camiType="+e.camiType)
|
||
},
|
||
onSkip2(e) {
|
||
var that = this
|
||
if (!this.userId) {
|
||
that.$refs.uToast.show({
|
||
type: 'success',
|
||
title: '',
|
||
message: "请先授权登录",
|
||
icon: false
|
||
})
|
||
} else {
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '确认要消耗 ' + e.goodsExchange + " 积分兑换吗?",
|
||
success: function(res) {
|
||
if (res.confirm) {
|
||
// 执行确认后的操作
|
||
appGetUserById(that.userId).then(response => {
|
||
if (e.goodsExchange > response.user.integral) {
|
||
uni.showModal({
|
||
title: '积分不足',
|
||
content: '您的积分为 '+response.user.integral+' ,签到做任务可获得积分',
|
||
cancelText: "取消",
|
||
confirmText: "获取积分",
|
||
confirmColor:'#ff0000',
|
||
cancelColor:'#000000',
|
||
success: function(res) {
|
||
if (res.confirm) {
|
||
// 执行确认后的操作
|
||
uni.switchTab({
|
||
url: '/pages/mine/index'
|
||
});
|
||
}
|
||
else {
|
||
// 执行取消后的操作
|
||
}
|
||
}
|
||
})
|
||
} else {
|
||
console.log(e)
|
||
var data = {
|
||
goodsName: e.goodsName,
|
||
recordsUserId: that.userId,
|
||
recordsNumber: e.goodsExchange,
|
||
|
||
}
|
||
exchangeGoods(data).then(response => {
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '兑换成功,请到我的界面联系我们?',
|
||
success: function(res) {
|
||
if (res.confirm) {
|
||
// 执行确认后的操作
|
||
uni.switchTab({
|
||
url: '/pages/mine/index'
|
||
});
|
||
}
|
||
else {
|
||
// 执行取消后的操作
|
||
}
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
|
||
})
|
||
} else {
|
||
// 执行取消后的操作
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
},
|
||
// 搜索触发
|
||
search(e) {
|
||
var json = e.value;
|
||
this.queryParams.pageNum = 1
|
||
this.queryParams.goodsName = json
|
||
this.queryParams.goodsType = null
|
||
this.classifyShow = 0;
|
||
this.getListGoods()
|
||
},
|
||
getListGoods() {
|
||
listGoods(this.queryParams).then(response => {
|
||
this.goodsList = response.rows
|
||
var allTotal = this.queryParams.pageNum * this.queryParams.pageSize
|
||
this.total = response.total
|
||
if (allTotal < this.total) {
|
||
this.showTotal = true;
|
||
} else {
|
||
this.showTotal = false;
|
||
}
|
||
})
|
||
},
|
||
back() {
|
||
uni.navigateBack()
|
||
},
|
||
/*下拉刷新的回调, 有三种处理方式:*/
|
||
downCallback() {
|
||
this.mescroll.endSuccess();
|
||
},
|
||
/*上拉加载的回调*/
|
||
upCallback(page) {
|
||
setTimeout(() => {
|
||
this.mescroll.endByPage(10, 20);
|
||
}, 2000);
|
||
},
|
||
/**
|
||
* 菜单导航滚动
|
||
*/
|
||
ScrollMenu(e) {
|
||
let scrollLeft = e.target.scrollLeft;
|
||
const query = uni.createSelectorQuery().in(this);
|
||
query
|
||
.select('.nav')
|
||
.boundingClientRect(data => {
|
||
let wid = e.target.scrollWidth - data.width - (data.left * 2 + 5);
|
||
this.slideNum = ((scrollLeft / wid) * 300) / 2;
|
||
})
|
||
.exec();
|
||
},
|
||
|
||
|
||
/**
|
||
* 分类点击
|
||
* @param {Object} item
|
||
* @param {Number} index
|
||
*/
|
||
onClassify(item, index) {
|
||
if (item.id == 0) {
|
||
this.queryParams.goodsType = null
|
||
} else {
|
||
this.queryParams.goodsType = item.id
|
||
}
|
||
this.classifyShow = index;
|
||
this.queryParams.pageNum = 1
|
||
this.queryParams.goodsName = null
|
||
this.getListGoods()
|
||
},
|
||
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style scoped lang="scss">
|
||
$base: #fe3b0f; // 基础颜色
|
||
$assist-clor: #ff4e17; // 辅助颜色
|
||
$change-clor: #fc603a; // 渐变色
|
||
$floor-clor: #fafafa; // 底部颜色
|
||
$price-clor: #ff0000; // 价格颜色
|
||
|
||
/* 列表没有数据 */
|
||
.no-list-data {
|
||
text-align: center;
|
||
margin: 30rpx 0px;
|
||
color: #e6e6e6;
|
||
font-size: 24upx;
|
||
}
|
||
|
||
/* 加载动图 */
|
||
.artileload {
|
||
height: 80rpx;
|
||
width: 80rpx;
|
||
margin: 20rpx auto;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.page {
|
||
// position: absolute;
|
||
// left: 0;
|
||
// top: 0;
|
||
// width: 100%;
|
||
// height: 100%;
|
||
// overflow-x: hidden;
|
||
// overflow-y: auto;
|
||
padding-bottom: 100rpx;
|
||
background-color: #ffffff;
|
||
}
|
||
|
||
.head-info {
|
||
position: fixed;
|
||
left: 0;
|
||
top: 0;
|
||
z-index: 100;
|
||
width: 100%;
|
||
height: 285rpx;
|
||
background: url(https://img.yidaima.cn/feast/head_bg.png) no-repeat;
|
||
background-size: 100% 433rpx;
|
||
background-color: #ffffff;
|
||
overflow: hidden;
|
||
|
||
.head-search {
|
||
display: flex;
|
||
|
||
.icon-info {
|
||
display: flex;
|
||
align-items: center;
|
||
height: 100%;
|
||
|
||
text {
|
||
font-size: 50rpx;
|
||
color: #f6f6f6;
|
||
margin-top: 10rpx;
|
||
}
|
||
|
||
image {
|
||
width: 42rpx;
|
||
height: 43rpx;
|
||
}
|
||
}
|
||
|
||
.search {
|
||
display: flex;
|
||
width: 60%;
|
||
padding: 0 20rpx;
|
||
height: 65rpx;
|
||
background-color: rgba(255, 255, 255, 0.3);
|
||
border-radius: 10rpx;
|
||
margin-left: 50rpx;
|
||
|
||
.icon {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-right: 20rpx;
|
||
|
||
image {
|
||
width: 27rpx;
|
||
height: 29rpx;
|
||
}
|
||
}
|
||
|
||
.hint {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
.max {
|
||
font-size: 30rpx;
|
||
font-weight: bold;
|
||
color: #ffffff;
|
||
}
|
||
|
||
.min {
|
||
font-size: 24rpx;
|
||
color: #f6f6f6;
|
||
margin-left: 10rpx;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.classify-list {
|
||
white-space: nowrap;
|
||
width: 100%;
|
||
height: 100rpx;
|
||
overflow-x: auto;
|
||
overflow-y: hidden;
|
||
|
||
.list {
|
||
position: relative;
|
||
display: inline-block;
|
||
width: 20%;
|
||
height: 100%;
|
||
line-height: 100rpx;
|
||
text-align: center;
|
||
|
||
text {
|
||
font-size: 28rpx;
|
||
color: #ffffff;
|
||
opacity: 0.8;
|
||
}
|
||
|
||
.line {
|
||
position: absolute;
|
||
left: 50%;
|
||
bottom: 20rpx;
|
||
width: 90%;
|
||
height: 8rpx;
|
||
background: linear-gradient(to right, #f8f893, #fe9d00);
|
||
border-radius: 10rpx;
|
||
transform: translate(-50%, 0);
|
||
}
|
||
}
|
||
|
||
.action {
|
||
text {
|
||
font-size: 32rpx;
|
||
opacity: 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.main {
|
||
margin-top: 285rpx;
|
||
padding-top: 20rpx;
|
||
background-color: #ffffff;
|
||
}
|
||
|
||
/* banner */
|
||
.banner {
|
||
padding: 0 25rpx;
|
||
height: 260rpx;
|
||
margin-bottom: 30rpx;
|
||
// margin: -200rpx auto 20rpx;
|
||
border-radius: 10rpx;
|
||
overflow: hidden;
|
||
|
||
.screen-swiper {
|
||
height: 100%;
|
||
min-height: 100% !important;
|
||
|
||
image {
|
||
height: 260rpx;
|
||
border-radius: 10rpx;
|
||
}
|
||
}
|
||
}
|
||
|
||
/* 通知 */
|
||
.inform {
|
||
padding: 0 25rpx;
|
||
// height: 130rpx;
|
||
// margin: 30rpx auto;
|
||
border-bottom: 16rpx solid #f9f9f9;
|
||
|
||
.inform-info {
|
||
display: flex;
|
||
padding: 0 20rpx;
|
||
height: 70rpx;
|
||
background-color: #f7f7f7;
|
||
border-radius: 10rpx;
|
||
|
||
.picture {
|
||
width: 20%;
|
||
height: 100%;
|
||
|
||
image {
|
||
width: 93rpx;
|
||
height: 84rpx;
|
||
margin-top: -20rpx;
|
||
}
|
||
}
|
||
|
||
.info {
|
||
width: 80%;
|
||
height: 100%;
|
||
|
||
.swiper {
|
||
width: 100%;
|
||
height: 100%;
|
||
|
||
.swiper-item {
|
||
display: flex;
|
||
align-items: center;
|
||
width: 100%;
|
||
height: 100%;
|
||
|
||
text {
|
||
font-size: 28rpx;
|
||
color: #848281;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.one-omit {
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
/* 为你推荐 */
|
||
.recommend-info {
|
||
width: 100%;
|
||
background-color: #f2f2f2;
|
||
|
||
.recommend-title {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 100%;
|
||
height: 100rpx;
|
||
|
||
.title {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
image {
|
||
width: 416rpx;
|
||
height: 40rpx;
|
||
}
|
||
}
|
||
}
|
||
|
||
.goods-list {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
justify-content: space-between;
|
||
padding: 0 30rpx;
|
||
|
||
.list {
|
||
width: 49%;
|
||
height: 540rpx;
|
||
margin-bottom: 20rpx;
|
||
background-color: #ffffff;
|
||
border-radius: 10rpx;
|
||
overflow: hidden;
|
||
|
||
.pictrue {
|
||
display: flex;
|
||
justify-content: center;
|
||
|
||
image {
|
||
height: 350rpx;
|
||
width: 350rpx;
|
||
}
|
||
}
|
||
|
||
.title-tag {
|
||
// display: flex;
|
||
height: 100rpx;
|
||
padding: 20rpx;
|
||
|
||
.tag {
|
||
float: left;
|
||
margin-right: 10rpx;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
display: -webkit-box;
|
||
-webkit-line-clamp: 2;
|
||
-webkit-box-orient: vertical;
|
||
white-space: normal;
|
||
font-size: 26rpx;
|
||
line-height: 40rpx;
|
||
|
||
text {
|
||
font-size: 24rpx;
|
||
color: #ffffff;
|
||
padding: 4rpx 16rpx;
|
||
background: linear-gradient(to right, $base, $change-clor);
|
||
border-radius: 6rpx;
|
||
margin-right: 10rpx;
|
||
}
|
||
}
|
||
}
|
||
|
||
.price-info {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
padding: 0 20rpx;
|
||
height: 80rpx;
|
||
|
||
.user-price {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
text {
|
||
color: $price-clor;
|
||
}
|
||
|
||
.min {
|
||
font-size: 28rpx;
|
||
}
|
||
|
||
.max {
|
||
font-size: 32rpx;
|
||
margin-left: 10rpx;
|
||
}
|
||
}
|
||
|
||
.vip-price {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
image {
|
||
width: 26rpx;
|
||
height: 26rpx;
|
||
margin-right: 10rpx;
|
||
}
|
||
|
||
text {
|
||
color: #fcb735;
|
||
font-size: 24rpx;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style> |