This commit is contained in:
王鹏
2025-08-14 15:04:24 +08:00
commit a47c6dd47a
399 changed files with 66761 additions and 0 deletions

704
pages/tool/exchange.vue Normal file
View File

@@ -0,0 +1,704 @@
<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>