福利屋

This commit is contained in:
18631081161 2025-03-30 18:14:51 +08:00
parent 7972cb88d3
commit a1397f0aa1
9 changed files with 1362 additions and 516 deletions

View File

@ -94,7 +94,7 @@
<view class="center" style="width: 100%; margin-top: 30rpx;">
<view class="tab">
<view class="tab-item1 center" @click="$refs.rulePop.getRule(15, '购买说明')">
<view class="tab-item1 center" @click="$refs.rulePop.getRule(15, '规则说明')">
<text>规则说明</text>
</view>
<view class="tab-item2 center" :class="[tabCur == 1 ? 'act' : 'unact']" @click="tabChange(1)">

View File

@ -5,9 +5,13 @@
-->
<template>
<view class="content">
<uni-nav-bar title="签到任务" color="#fff" left-icon="left" backgroundColor="transparent" :border="false"
<uni-nav-bar title="签到任务" color="#000000" left-icon="left" backgroundColor="transparent" :border="false"
:statusBar="true" :fixed="true" @clickLeft="$c.back()"></uni-nav-bar>
<view class="" style="width: 686rpx; height: 328rpx; background-color: #D8D8D8; border-radius: 16rpx; margin: 56rpx auto 0;">
</view>
<view class="page-hd">
<view class="title">签到任务</view>
@ -77,232 +81,232 @@
</template>
<script>
export default {
data() {
return {
signData: [],
sucData: '',
is_sign: 0
}
},
onLoad(options) {
this.getData()
},
methods: {
doSign() {
this.req({
url: 'sign_add',
data: {},
success: res => {
if (res.status == 1) {
this.sucData = res.data
this.$refs.sucPop.open()
this.getData()
}
}
})
export default {
data() {
return {
signData: [],
sucData: '',
is_sign: 0
}
},
getData() {
this.req({
url: 'sign',
data: {},
success: res => {
if (res.status == 1) {
this.signData = res.data.sign
this.is_sign = res.data.sign.is_sign
onLoad(options) {
this.getData()
},
methods: {
doSign() {
this.req({
url: 'sign_add',
data: {},
success: res => {
if (res.status == 1) {
this.sucData = res.data
this.$refs.sucPop.open()
this.getData()
}
}
}
})
})
},
getData() {
this.req({
url: 'sign',
data: {},
success: res => {
if (res.status == 1) {
this.signData = res.data.sign
this.is_sign = res.data.sign.is_sign
}
}
})
}
}
}
}
</script>
<style lang="scss">
.content {
min-height: 100vh;
box-sizing: border-box;
padding: 1rpx 0 40rpx;
.page-hd {
padding: 20rpx 30rpx 0;
display: flex;
justify-content: space-between;
align-items: center;
.title {
font-size: 60rpx;
font-family: YouSheBiaoTiHei;
font-weight: 400;
color: #ffffff;
text-shadow: 0rpx 0rpx 12rpx rgba(255, 135, 58, 0.8);
}
.icon {
width: 40rpx;
height: 40rpx;
}
}
.sign-box {
width: 710rpx;
.content {
min-height: 100vh;
box-sizing: border-box;
padding: 30rpx 40rpx 40rpx;
margin: 30rpx auto 0;
display: flex;
flex-flow: row wrap;
justify-content: space-between;
padding: 1rpx 0 40rpx;
.sign-item {
width: 150rpx;
height: 165rpx;
background: #ff873a;
border-radius: 20rpx;
.page-hd {
padding: 20rpx 30rpx 0;
display: flex;
flex-flow: column nowrap;
justify-content: space-evenly;
justify-content: space-between;
align-items: center;
margin-top: 10rpx;
border: 2rpx solid #FFFFFF;
.day {
font-size: 24rpx;
font-family: Source Han Sans CN;
.title {
font-size: 60rpx;
font-family: YouSheBiaoTiHei;
font-weight: 400;
color: #dddddd;
color: #ffffff;
text-shadow: 0rpx 0rpx 12rpx rgba(255, 135, 58, 0.8);
}
.icon {
width: 50rpx;
height: 50rpx;
width: 40rpx;
height: 40rpx;
}
}
.num {
font-size: 20rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #FFFFFF;
}
.sign-box {
width: 710rpx;
box-sizing: border-box;
padding: 30rpx 40rpx 40rpx;
margin: 30rpx auto 0;
display: flex;
flex-flow: row wrap;
justify-content: space-between;
&.act {
position: relative;
&::after {
content: '已签';
position: absolute;
width: 100%;
height: 100%;
font-family: Alimama ShuHeiTi;
font-weight: 700;
font-size: 28rpx;
color: #FFFFFF;
background: rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: center;
}
}
&.large {
width: 310rpx;
.sign-item {
width: 150rpx;
height: 165rpx;
flex-flow: row nowrap;
justify-content: space-around;
background: #ff873a;
border-radius: 20rpx;
display: flex;
flex-flow: column nowrap;
justify-content: space-evenly;
align-items: center;
margin-top: 10rpx;
border: 2rpx solid #FFFFFF;
.item-l {
height: 120rpx;
display: flex;
flex-flow: column nowrap;
align-items: center;
.num {
margin-top: 20rpx;
}
.day {
font-size: 24rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #dddddd;
}
.icon {
width: 120rpx;
height: 100rpx;
width: 50rpx;
height: 50rpx;
}
>image:nth-child(1) {
width: 34rpx;
height: 34rpx;
.num {
font-size: 20rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #FFFFFF;
}
&.act {
position: relative;
&::after {
content: '已签';
position: absolute;
left: 10rpx;
bottom: 10rpx;
transform: rotate(-28deg);
width: 100%;
height: 100%;
font-family: Alimama ShuHeiTi;
font-weight: 700;
font-size: 28rpx;
color: #FFFFFF;
background: rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: center;
}
}
&.large {
width: 310rpx;
height: 165rpx;
flex-flow: row nowrap;
justify-content: space-around;
align-items: center;
.item-l {
height: 120rpx;
display: flex;
flex-flow: column nowrap;
align-items: center;
.num {
margin-top: 20rpx;
}
}
>image:nth-child(2) {
width: 72rpx;
height: 72rpx;
position: absolute;
top: 10rpx;
right: 10rpx;
.icon {
width: 120rpx;
height: 100rpx;
>image:nth-child(1) {
width: 34rpx;
height: 34rpx;
position: absolute;
left: 10rpx;
bottom: 10rpx;
transform: rotate(-28deg);
}
>image:nth-child(2) {
width: 72rpx;
height: 72rpx;
position: absolute;
top: 10rpx;
right: 10rpx;
}
}
}
}
}
}
.sign-btn {
margin: 40rpx auto 0;
width: 400rpx;
height: 122rpx;
border-radius: 40rpx;
display: flex;
justify-content: center;
align-items: center;
font-size: 32rpx;
font-family: Source Han Sans CN;
font-weight: 400;
background: url($imgurl+'common/jixuchou.png') no-repeat 0 0 / 100% 100%;
}
.signYes {
color: #FFFFFF;
}
.signNo {
color: #FFFFFF;
filter: grayscale(100%);
}
.suc-pop {
width: 100vw;
height: 642rpx;
position: relative;
display: flex;
flex-flow: column nowrap;
justify-content: space-between;
align-items: center;
.coin-img {
width: 345rpx;
height: 345rpx;
}
.coin-num {
.sign-btn {
margin: 40rpx auto 0;
width: 400rpx;
height: 122rpx;
border-radius: 40rpx;
display: flex;
justify-content: center;
align-items: center;
font-size: 32rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
background: url($imgurl+'common/jixuchou.png') no-repeat 0 0 / 100% 100%;
}
.close {
width: 378rpx;
height: 80rpx;
position: absolute;
left: 50%;
bottom: 40rpx;
transform: translate(-50%, 200%);
.signYes {
color: #FFFFFF;
}
.signNo {
color: #FFFFFF;
filter: grayscale(100%);
}
.suc-pop {
width: 100vw;
height: 642rpx;
position: relative;
display: flex;
flex-flow: column nowrap;
justify-content: space-between;
align-items: center;
.coin-img {
width: 345rpx;
height: 345rpx;
}
.coin-num {
font-size: 32rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
}
.close {
width: 378rpx;
height: 80rpx;
position: absolute;
left: 50%;
bottom: 40rpx;
transform: translate(-50%, 200%);
}
}
}
}
</style>

View File

@ -435,6 +435,34 @@
"style": {
"navigationStyle": "custom"
}
},
{
"path" : "pages/infinite/daily_check_in",
"style" :
{
"navigationStyle": "custom"
}
},
{
"path" : "pages/infinite/bonus_house",
"style" :
{
"navigationStyle": "custom"
}
},
{
"path" : "pages/infinite/bonus_house_details",
"style" :
{
"navigationStyle": "custom"
}
},
{
"path" : "pages/infinite/VIP_perks",
"style" :
{
"navigationStyle": "custom"
}
}
],
"subPackages": [{

View File

@ -0,0 +1,60 @@
<template>
<view class="content">
<view class="navLeft align-center" :style="{top:$sys().statusBarHeight+'px'}" @tap="$c.back(1)">
<uni-icons type="left" color="#000000"></uni-icons>
</view>
<view class="title1">VIP福利</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style lang="scss">
.content {
width: 100vw;
min-height: 100vh;
box-sizing: border-box;
background: #F7F7F7;
}
.navLeft {
position: fixed;
left: 30rpx;
height: 44px;
z-index: 100;
>view {
font-weight: 400;
font-size: 50rpx;
color: #FFFFFF;
}
}
.title1 {
width: 100%;
top: 108rpx;
position: absolute;
display: flex;
align-items: center;
font-size: 34rpx;
justify-content: center;
color: black;
z-index: 50;
}
</style>

View File

@ -2,6 +2,11 @@
<template>
<view class="content">
<view class="navLeft align-center" :style="{top:$sys().statusBarHeight+'px'}" @tap="$c.back(1)">
<uni-icons type="left" color="#000000"></uni-icons>
<!-- <view class="">{{$c.detailPageTitle((pageData && pageData.goods) || '')}}</view> -->
</view>
<view class="title1">福利</view>
<image :src="$img1('index/jifen.png')" style="width: 100%; margin-top: 60rpx;" mode=""></image>
<view class="list relative">
@ -75,13 +80,13 @@
}
},
onShow() {
this.current = 0
const curPages = getCurrentPages()[0]; //
if (typeof curPages.getTabBar === 'function' && curPages.getTabBar()) {
this.$mp.page.getTabBar().setData({
selected: 1
});
}
// this.current = 0
// const curPages = getCurrentPages()[0]; //
// if (typeof curPages.getTabBar === 'function' && curPages.getTabBar()) {
// this.$mp.page.getTabBar().setData({
// selected: 1
// });
// }
},
onLoad() {
let that = this
@ -114,6 +119,18 @@
</script>
<style lang="scss">
.navLeft {
position: fixed;
left: 30rpx;
height: 44px;
z-index: 100;
>view {
font-weight: 400;
font-size: 50rpx;
color: #FFFFFF;
}
}
.title1 {
width: 100%;
top: 108rpx;
@ -123,7 +140,7 @@
font-size: 34rpx;
justify-content: center;
color: black;
z-index: 100;
z-index: 50;
}
.activeImg {

View File

@ -0,0 +1,325 @@
<template>
<view class="content">
<view class="navLeft align-center" :style="{top:$sys().statusBarHeight+'px'}" @tap="$c.back(1)">
<uni-icons type="left" color="#000000"></uni-icons>
<!-- <view class="">{{$c.detailPageTitle((pageData && pageData.goods) || '')}}</view> -->
</view>
<view class="title1">福利屋</view>
<view class="" style="height: 232rpx;"></view>
<view class=""
style="width: 686rpx; height: 328rpx; background-color: #D8D8D8; border-radius: 16rpx; margin: 0 auto 0;">
</view>
<view class="center" style="width: 100%; margin-top: 30rpx;">
<view class="tab">
<view class="tab-item1 center" @click="$refs.rulePop.getRule(15, '规则说明')">
<text>规则说明</text>
</view>
<view class="tab-item2 center" :class="[tabCur == 1 ? 'act' : 'unact']" @click="tabChange(1)">
<text>进行中</text>
</view>
<view class="tab-item3 center" :class="[tabCur == 2 ? 'act' : 'unact']" @click="tabChange(2)">
<text>已结束</text>
</view>
</view>
</view>
<!-- 进行中 -->
<view v-if="tabCur == 1" class=""
style="width: 672rpx; height: 760rpx; margin: 40rpx auto 0; overflow: hidden;">
<scroll-view scroll-y="true" style=" height: 760rpx;">
<view class="relative" v-for="(item,index) in benefitsData" @click="$c.to({url: '/pages/infinite/bonus_house_details'})"
style="width: 100%; height: 274rpx; background-color: #F8F8F8; margin-bottom: 36rpx; border-radius: 16rpx;">
<text
style="position: absolute; left: 24rpx; top: 28rpx; color: #333333;font-size: 24rpx;">{{item.title}}</text>
<text
style="position: absolute; left: 24rpx; top: 62rpx; color: #FF862D; font-size: 18rpx;">{{item.tips}}</text>
<view class="center"
style="width: 128rpx; height: 60rpx; background-color: #D8FD24; border-radius: 16rpx; position: absolute; top: 20rpx; right: 24rpx;">
<text style="font-size: 20rpx; color: #333333; font-weight: 600;">马上参与</text>
</view>
<scroll-view scroll-x="true"
style="height: 80rpx; white-space: nowrap; position: absolute; left: 24rpx; top: 112rpx;">
<view v-for="(item1,index) in item.GoodsList" class="relative" :key="index1"
style="width: 80rpx; height: 80rpx; display: inline-block; margin-right: 36rpx;">
<image src="https://mh.shhuanmeng.com/static/web/static/checkin/gem.png"
style="width: 100%; height: 100%; position: absolute;"></image>
<!-- src="https://mh.shhuanmeng.com/static/web/static/checkin/gem.png":src="$img1('checkin/Fire.png')" -->
<view class="center"
style="width: 44rpx; height: 20rpx; background-color: rgba(172, 172, 172, 0.60); position: absolute; border-radius: 10rpx; bottom: 4rpx; left: 50%; transform: translateX(-50%);">
<text style="font-size: 18rpx; color: #fff;">x{{item1.num}}</text>
</view>
</view>
</scroll-view>
<view class=""
style="width: 624rpx; height: 2.01rpx; background-color: #F3F3F3; position: absolute; left: 24rpx; bottom: 54rpx;">
</view>
<view class="center" style="position: absolute; left: 24rpx; bottom: 16rpx;">
<image style="width: 18rpx; height: 20rpx;" :src="$img1('checkin/Fire.png')" mode=""></image>
<text style="font-size: 16rpx; color: #999999; margin-left: 8rpx;">{{item.Popularity}}</text>
</view>
<text
style="font-size: 16rpx; color: #999999; position: absolute; right: 24rpx; bottom: 18rpx;">{{item.Time}}</text>
</view>
</scroll-view>
</view>
<!-- 已结束 -->
<view v-else class="" style="width: 672rpx; height: 760rpx; margin: 40rpx auto 0; overflow: hidden;">
<scroll-view scroll-y="true" style=" height: 760rpx;">
<view class="relative" v-for="(item,index) in benefitsData"
style="width: 100%; height: 274rpx; background-color: #F8F8F8; margin-bottom: 36rpx; border-radius: 16rpx;">
<text
style="position: absolute; left: 24rpx; top: 28rpx; color: #333333;font-size: 24rpx;">{{item.title}}</text>
<text
style="position: absolute; left: 24rpx; top: 62rpx; color: #FF862D; font-size: 18rpx;">{{item.tips}}</text>
<view class="center"
style="width: 128rpx; height: 60rpx; background-color: #333333; border-radius: 16rpx; position: absolute; top: 20rpx; right: 24rpx;">
<text style="font-size: 20rpx; color: #D8FD24; font-weight: 600;">已结束</text>
</view>
<scroll-view scroll-x="true"
style="height: 80rpx; white-space: nowrap; position: absolute; left: 24rpx; top: 112rpx;">
<view v-for="(item1,index1) in item.GoodsList" class="relative" :key="index1"
style="width: 80rpx; height: 80rpx; display: inline-block; margin-right: 36rpx;">
<image src="https://mh.shhuanmeng.com/static/web/static/checkin/gem.png"
style="width: 100%; height: 100%; position: absolute;"></image>
<!-- src="https://mh.shhuanmeng.com/static/web/static/checkin/gem.png":src="$img1('checkin/Fire.png')" -->
<view class="center"
style="width: 44rpx; height: 20rpx; background-color: rgba(172, 172, 172, 0.60); position: absolute; border-radius: 10rpx; bottom: 4rpx; left: 50%; transform: translateX(-50%);">
<text style="font-size: 18rpx; color: #fff;">x{{item1.num}}</text>
</view>
</view>
</scroll-view>
<view class=""
style="width: 624rpx; height: 2.01rpx; background-color: #F3F3F3; position: absolute; left: 24rpx; bottom: 54rpx;">
</view>
<view class="center" style="position: absolute; left: 24rpx; bottom: 16rpx;">
<image style="width: 18rpx; height: 20rpx;" :src="$img1('checkin/Fire.png')" mode=""></image>
<text style="font-size: 16rpx; color: #999999; margin-left: 8rpx;">{{item.Popularity}}</text>
</view>
<text
style="font-size: 16rpx; color: #999999; position: absolute; right: 24rpx; bottom: 18rpx;">{{item.Time}}</text>
</view>
</scroll-view>
</view>
<view class="row center" style="margin-top: 20rpx;">
<view class="center" style="width: 220rpx; height: 72rpx; background-color: #333333; border-radius: 16rpx;">
<text style="font-size: 24rpx; color: #D8FD24;">我的卡券</text>
</view>
<view class="center" style="width: 220rpx; height: 72rpx; background-color: #D8FD24; border-radius: 16rpx; margin-left: 38rpx;">
<text style="font-size: 24rpx; color: #333333;">赏品记录</text>
</view>
</view>
<rule-pop ref="rulePop"></rule-pop>
</view>
</template>
<script>
export default {
data() {
return {
tabCur: 1,
benefitsData: [{
title: "新人消费满5元福利屋",
tips: "消费返利(所有参与者有机会获得奖励",
isOngoing: true, //
Popularity: 52, //
Time: "2025-03-10 14:00—2025-03-10 14:00",
GoodsList: [{
imgUrl: "", //
num: 1, //
}, {
imgUrl: "",
num: 1,
}, {
imgUrl: "",
num: 1,
}, {
imgUrl: "",
num: 1,
}, {
imgUrl: "",
num: 1,
}, {
imgUrl: "",
num: 1,
}, {
imgUrl: "",
num: 1,
}, {
imgUrl: "",
num: 1,
}, ],
}, {
title: "新人消费满10元福利屋",
tips: "消费返利(所有参与者有机会获得奖励",
isOngoing: true, //
Popularity: 52, //
Time: "2025-03-10 14:00—2025-03-10 14:00",
GoodsList: [{
imgUrl: "", //
num: 1, //
}, {
imgUrl: "",
num: 1,
}, ]
}, {
title: "新人消费满15元福利屋",
tips: "消费返利(所有参与者有机会获得奖励",
isOngoing: true, //
Popularity: 52, //
Time: "2025-03-10 14:00—2025-03-10 14:00",
GoodsList: [{
imgUrl: "", //
num: 1, //
}, {
imgUrl: "",
num: 1,
}, ]
}, ],
}
},
methods: {
tabChange(i) {
this.tabCur = i
switch (Number(i)) {
case 1:
this.getData()
break
case 2:
this.getData()
this.subTabChange(this.subTabCur)
break
}
},
}
}
</script>
<style lang="scss">
.content {
width: 100vw;
min-height: 100vh;
box-sizing: border-box;
background: #FFFFFF;
}
.navLeft {
position: fixed;
left: 30rpx;
height: 44px;
z-index: 100;
>view {
font-weight: 400;
font-size: 50rpx;
color: #FFFFFF;
}
}
.title1 {
width: 100%;
top: 108rpx;
position: absolute;
display: flex;
align-items: center;
font-size: 34rpx;
justify-content: center;
color: black;
z-index: 50;
}
.tab {
display: flex;
align-items: center;
.tab-item1 {
width: 160rpx;
height: 92rpx;
font-weight: 400;
margin-right: 30rpx;
background: url($imgurl + "index/uncheckTab1.png") no-repeat 0 0 / 100% 100%;
>text {
font-weight: 600;
font-size: 24rpx;
color: #333333;
}
}
.tab-item2 {
width: 160rpx;
height: 92rpx;
font-weight: 400;
margin-right: 30rpx;
&.act {
background: url($imgurl + "index/checkTab2.png") no-repeat 0 0 / 100% 100%;
>text {
font-weight: 600;
font-size: 24rpx;
color: #333333;
}
}
&.unact {
background: url($imgurl + "index/uncheckTab2.png") no-repeat 0 0 / 100% 100%;
>text {
font-weight: 600;
font-size: 24rpx;
color: #333333;
}
}
}
.tab-item3 {
width: 160rpx;
height: 92rpx;
font-weight: 400;
&.act {
background: url($imgurl + "index/checkTab3.png") no-repeat 0 0 / 100% 100%;
>text {
font-weight: 600;
font-size: 24rpx;
color: #333333;
}
}
&.unact {
background: url($imgurl + "index/uncheckTab3.png") no-repeat 0 0 / 100% 100%;
>text {
font-weight: 600;
font-size: 24rpx;
color: #333333;
}
}
}
}
</style>

View File

@ -0,0 +1,345 @@
<template>
<view class="content">
<view class="navLeft align-center" :style="{top:$sys().statusBarHeight+'px'}" @tap="$c.back(1)">
<uni-icons type="left" color="#000000"></uni-icons>
<!-- <view class="">{{$c.detailPageTitle((pageData && pageData.goods) || '')}}</view> -->
</view>
<view class="title1">福利屋详情</view>
<view style="height: 232rpx;">
</view>
<view class="relative"
style="width: 686rpx; height: 152rpx; background-color: #FFFFFF; border-radius: 16rpx; margin: 0 auto;">
<image style="width: 108rpx; height: 108rpx;position: absolute; left: 24rpx; top: 22rpx;"
:src="$img1('checkin/logo2.png')"></image>
<text
style="font-size: 24rpx; color: #333333; position: absolute; left: 146rpx; top: 34rpx;">{{bonusDetailsData.Title}}</text>
<text
style="font-size: 18rpx; color: #FF862D; position: absolute; left: 146rpx; top: 68rpx;">{{bonusDetailsData.Tips}}</text>
<text
style="font-size: 16rpx; color: #999999; position: absolute; left: 146rpx; top: 102rpx;">{{bonusDetailsData.Time}}</text>
<view class="row center" style="position: absolute; left: 470rpx; top: 68rpx;">
<image style="width: 18rpx; height: 20rpx;" :src="$img1('checkin/Fire.png')" mode=""></image>
<text
style="font-size: 16rpx; color: #999999; margin-left: 8rpx;">{{bonusDetailsData.Popularity}}</text>
</view>
<image style="width: 50rpx; height: 50rpx; position: absolute; top: 50rpx; right: 24rpx;"
:src="$img1('checkin/ic_share.png')" mode=""></image>
</view>
<view class=""
style="width: 686rpx; height: 1010rpx; background-color: #FFFFFF; border-radius: 16rpx; margin: 24rpx auto 0;">
<view class="tab">
<view class="tab-item center relative" v-for="(item, i) in tabList" :key="i"
:class="tabCur == i?'act':'unact'" @click="tabChange(i)">
<text>{{item}}</text>
</view>
</view>
<!-- 赏品预览 -->
<scroll-view v-if="tabCur==0" scroll-y="true" class="" style="width: 100%; height: 900rpx;">
<view style="height: 60rpx;"></view>
<view class="" style="width: 544rpx; height: 500rpx; background-color: #999999; margin: 0 auto 0;">
</view>
<view class="grid-container">
<view class="grid-item column align-center" v-for="(item,index) in bonusDetailsData.GoodsList"
style="">
<image style="width: 112rpx; height: 112rpx;background-color: #D8D8D8; border-radius: 16rpx;"
:src="$img1('checkin/gem2.png')" mode=""></image>
<text style="color: #999999; font-size: 16rpx; margin-top: 16rpx;">{{item.Price}}</text>
</view>
</view>
</scroll-view>
<scroll-view v-if="tabCur==1" scroll-y="true" style="width: 100%; height: 890rpx; padding: 24rpx;">
<view class="row align-center" v-for="(item,index) in bonusDetailsData.PlayerList" :key="index"
style="height: 76rpx; margin-bottom: 24rpx;">
<view class="center" style="width: 30rpx;">
<text style="color: #999999; font-size: 20rpx;">{{index+1}}</text>
</view>
<image :src="item.Avatar"
style="width: 76rpx; height: 76rpx; background-color: #D8D8D8; border-radius: 50%; margin-left: 24rpx;"
mode=""></image>
<view class="column" style="margin-left: 16rpx;">
<text style="color: #333333; font-size: 20rpx;">{{item.name}}</text>
<text style="color: #999999; font-size: 16rpx; margin-top: 12rpx;">{{item.time}}</text>
</view>
</view>
</scroll-view>
<scroll-view v-if="tabCur==2" scroll-y="true" style="width: 100%; height: 890rpx; padding: 24rpx;">
<view class="row align-center relative" v-for="(item,index) in bonusDetailsData.PlayerList" :key="index"
style="height: 76rpx; margin-bottom: 24rpx;">
<view class="center" style="width: 30rpx;">
<text style="color: #999999; font-size: 20rpx;">{{index+1}}</text>
</view>
<image :src="item.Avatar"
style="width: 76rpx; height: 76rpx; background-color: #D8D8D8; border-radius: 50%; margin-left: 24rpx;"
mode=""></image>
<view class="column" style="margin-left: 16rpx;">
<text style="color: #333333; font-size: 20rpx;">{{item.name}}</text>
<text style="color: #999999; font-size: 16rpx; margin-top: 12rpx;">{{item.time}}</text>
</view>
<view class="row center" style="position: absolute; right: 56rpx;">
<image v-if="index==0" :src="$img1('checkin/Jackpot.png')" style="width: 46rpx; height: 26rpx;"
mode=""></image>
<text style="color: #999999; font-size: 20rpx; margin-left: 16rpx;">晶体*1500</text>
</view>
</view>
</scroll-view>
</view>
<view class="column align-center"
style="width: 100%; height: 198rpx; background-color: #fff; margin-top: 8rpx;">
<view class="center"
style="width: 340rpx; height: 84rpx; background-color: #D8FD24; border-radius: 16rpx; margin-top: 32rpx;">
<text style="color: #333333; font-size: 32rpx; font-weight: 600;">马上参与</text>
</view>
<text
style="color: #8A8A8A; font-size: 20rpx; font-weight: 400; margin-top: 12rpx;">距离开奖时间0天062919</text>
</view>
</view>
</template>
<script>
export default {
data() {
return {
tabCur: 0,
bonusDetailsData: {
Title: "新人消费满5元福利屋",
Tips: "消费返利(所有参与者有机会获得奖励",
Time: "2025-03-10 14:00",
Popularity: 52, //
GoodsList: [{
imgUrl: "",
Price: "1000钻石",
}, {
imgUrl: "",
Price: "1000钻石",
}, {
imgUrl: "",
Price: "1000钻石",
}, {
imgUrl: "",
Price: "1000钻石",
}, {
imgUrl: "",
Price: "1000钻石",
}, {
imgUrl: "",
Price: "1000钻石",
}, {
imgUrl: "",
Price: "1000钻石",
}, {
imgUrl: "",
Price: "1000钻石",
}, {
imgUrl: "",
Price: "1000钻石",
}, ],
PlayerList: [{
Avatar: "", //
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, {
Avatar: "",
name: "微信名",
time: "2025-03-10 14:00"
}, ]
},
tabList: [
"赏品预览", "参与人数", "赏品记录"
]
}
},
methods: {
tabChange(i) {
this.tabCur = i
switch (i) {
case 0:
this.subTabChange(this.subTabCur)
break
default:
this.listData = []
this.mescroll.resetUpScroll()
this.mescroll.scrollTo(0, 0)
break
}
},
}
}
</script>
<style lang="scss">
.content {
width: 100vw;
min-height: 100vh;
box-sizing: border-box;
background: #F7F7F7;
}
.navLeft {
position: fixed;
left: 30rpx;
height: 44px;
z-index: 100;
>view {
font-weight: 400;
font-size: 50rpx;
color: #FFFFFF;
}
}
.title1 {
width: 100%;
top: 108rpx;
position: absolute;
display: flex;
align-items: center;
font-size: 34rpx;
justify-content: center;
color: black;
z-index: 50;
}
.tab {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10rpx 60rpx;
.tab-item {
width: 155rpx;
height: 68rpx;
position: relative;
margin-right: 25rpx;
&.act {
font-weight: 400;
font-size: 28rpx;
color: #333333;
&::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 48rpx;
height: 4rpx;
background: #333333;
}
}
&.unact {
font-weight: 400;
font-size: 28rpx;
color: #CCCCCC;
}
}
}
.grid-container {
display: grid;
grid-template-columns: repeat(4, 134rpx);
gap: 24rpx;
width: 580rpx;
margin: 28rpx auto 0;
padding-bottom: 20rpx;
}
.grid-item {
width: 112rpx;
height: 150rpx;
}
</style>

View File

@ -0,0 +1,300 @@
<!-- 每日签到 -->
<template>
<view class="content">
<view class="navLeft align-center" :style="{top:$sys().statusBarHeight+'px'}" @tap="$c.back(1)">
<uni-icons type="left" color="#000000"></uni-icons>
<!-- <view class="">{{$c.detailPageTitle((pageData && pageData.goods) || '')}}</view> -->
</view>
<view class="title1">签到</view>
<view class="" style="height: 232rpx;"></view>
<view class=""
style="width: 686rpx; height: 328rpx; background-color: #D8D8D8; border-radius: 16rpx; margin: 0 auto 0;">
</view>
<view class=""
style="width: 686rpx; height: 838rpx; background-color: #fff; margin: 40rpx auto 0; border-radius: 16rpx;">
<view class="center" style="padding-top: 24rpx;">
<text style="color: #8A8A8A; font-size: 28rpx;">累计签到<text
style="color: #96B050;">{{checkinData.TotalCheckins}}</text></text>
</view>
<!-- 累计签到 -->
<view style="width: 100%; overflow: hidden;">
<scroll-view class="relative" scroll-x="true"
style="white-space: nowrap; margin-left: 58rpx; margin-top: 24rpx;">
<view class=""
style="width: 100%; height: 4rpx; background-color: #F3F3F3;position: absolute; top: 42rpx; left: 10rpx;">
</view>
<view class="relative"
style="width: 71.7rpx; height: 102rpx;display: inline-block; margin-right: 94rpx;"
v-for="(item,index) in checkinData.TotalCheckinList" :key="index">
<image :src="$img('/static/checkin/Claim.png')"
style="width: 71.7rpx; height: 72rpx; position: absolute;" mode=""></image>
<image v-if="item.isClaim" :src="$img('/static/checkin/Claimed.png')"
style="width: 71.7rpx; height: 72rpx; position: absolute;" mode=""></image>
<text
style="width: 100%; text-align: center; position: absolute; bottom: 0rpx; color: #8A8A8A; font-size: 18rpx;">
累计
<text style="color: #96B050;">{{item.Days}}</text>
</text>
</view>
</scroll-view>
</view>
<!-- 签到列表 -->
<view class="justify-center" style="margin-top: 24rpx;">
<scroll-view scroll-y="true" style="width: 632rpx; height: 600rpx;">
<view class="grid-container">
<view class="grid-item" v-for="(item,index) in checkinData.CheckinList" style="">
<image :src="$img('/static/checkin/Claim2.png')">
</image>
<image v-if="item.isExpired && !item.isClaim" style="z-index: 10;"
:src="$img('/static/checkin/Expired.png')" mode=""></image>
<image v-if="item.isExpired && item.isClaim" style="z-index: 10;"
:src="$img('/static/checkin/Claimed2.png')" mode=""></image>
<image v-if="item.isToday" :src="$img('/static/checkin/ClaimBorder.png')" mode="">
</image>
<text class="day">{{item.Day}}</text>
<text class="reward">{{item.Reward}}</text>
</view>
</view>
</scroll-view>
</view>
</view>
<!-- 签到按钮 -->
<view class="justify-center" style="width: 100%; height: 198rpx; background-color: #fff; margin-top: -10rpx;">
<view class="align-center column">
<view class="center"
style="width: 340rpx; height: 84rpx; background-color: #D8FD24; margin-top: 32rpx;">
<text style="color: #333333; font-size: 32rpx; font-weight: 600;">每日签到</text>
</view>
<text
style="color: #8A8A8A; font-size: 20rpx; margin-top: 12rpx;">签到条件{{checkinData.Requirement}}</text>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
checkinData: {
TotalCheckins: 10, //
Requirement: "任意消费100钻石",
TotalCheckinList: [{ //
isClaim: true, //
Days: 3, //
}, {
isClaim: false,
Days: 7,
}, {
isClaim: false,
Days: 10,
}, {
isClaim: false,
Days: 15,
}, {
isClaim: false,
Days: 31,
}],
CheckinList: [ //
{
isExpired: true, //
isClaim: false, //
isToday: false, //
Day: 1, //
Reward: "100钻石", //
},
{
isExpired: true,
isClaim: true,
isToday: false,
Day: 2,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: true,
Day: 3,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 4,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 5,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 6,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 6,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 6,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 6,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 6,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 6,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 6,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 6,
Reward: "100钻石",
}, {
isExpired: false,
isClaim: false,
isToday: false,
Day: 6,
Reward: "100钻石",
},
],
}
}
},
methods: {
}
}
</script>
<style lang="scss">
.content {
width: 100vw;
box-sizing: border-box;
background: #F7F7F7;
}
.navLeft {
position: fixed;
left: 30rpx;
height: 44px;
z-index: 100;
>view {
font-weight: 400;
font-size: 50rpx;
color: #FFFFFF;
}
}
.title1 {
width: 100%;
top: 108rpx;
position: absolute;
display: flex;
align-items: center;
font-size: 34rpx;
justify-content: center;
color: black;
z-index: 50;
}
.grid-container {
display: grid;
grid-template-columns: repeat(4, 140rpx);
gap: 26rpx;
}
.grid-item {
width: 140rpx;
height: 172rpx;
position: relative;
>image {
width: 100%;
height: 100%;
position: absolute;
}
.day {
position: absolute;
font-size: 18rpx;
color: #96B152;
top: 12rpx;
left: 50%;
transform: translateX(-50%);
}
.reward {
position: absolute;
font-size: 20rpx;
color: #96B050;
white-space: nowrap;
bottom: 10rpx;
left: 50%;
transform: translateX(-50%);
}
}
</style>

View File

@ -4,7 +4,13 @@
<view class="content">
<view class="title1">福利</view>
<image :src="$img1('index/jifen.png')" style="width: 100%; margin-top: 60rpx;" mode=""></image>
<view class="grid-container" style="width: 100%; padding: 0 32rpx; margin-top: 40rpx;">
<view class="grid-item" v-for="(item,index) in list" @click="toPage(item.id)"
style=" height: 184rpx; background-color: #D8D8D8;">
<text>{{item.name}}</text>
</view>
</view>
</view>
</template>
@ -13,10 +19,69 @@
export default {
data() {
return {
list: [{
id: 1,
name: "每日签到"
},
{
id: 2,
name: "福利屋"
},
{
id: 3,
name: "VIP福利"
},
{
id: 4,
name: "口令红包"
},
{
id: 5,
name: "消费补贴"
},
{
id: 6,
name: "周卡月卡"
},
{
id: 6,
name: "积分赏池"
},
]
}
},
methods: {},
methods: {
//
toPage(id) {
switch (id) {
case 1:
this.$c.to({
url: '/pages/infinite/daily_check_in'
})
break;
case 2:
this.$c.to({
url: '/pages/infinite/bonus_house'
})
break;
case 3:
this.$c.to({
url: '/pages/infinite/VIP_perks'
})
break;
case 6:
this.$c.to({
url: '/pages/infinite/benefit'
})
break;
}
}
},
onShow() {
this.current = 0
const curPages = getCurrentPages()[0]; //
@ -31,6 +96,15 @@
</script>
<style lang="scss">
.content {
width: 100vw;
min-height: 100vh;
/* padding-top: 1rpx; */
padding-bottom: 100px;
box-sizing: border-box;
background: #FFFFFF;
}
.title1 {
width: 100%;
top: 108rpx;
@ -43,324 +117,17 @@
z-index: 100;
}
.activeImg {
position: absolute;
width: 32rpx !important;
height: 16rpx !important;
bottom: -20rpx;
left: 0;
right: 0;
margin: 0 auto;
.grid-container {
display: grid;
grid-template-columns: repeat(2, 324rpx);
/* 三列,每列宽度相等 */
gap: 40rpx 42rpx;
/* 网格之间的间隔 */
}
.pop {
width: 607rpx;
// height: 904rpx;
padding-top: 70rpx;
box-sizing: border-box;
position: relative;
.pop_title {
font-size: 36rpx;
font-family: zihun152hao-jijiachaojihei;
font-weight: 400;
color: #ffffff;
text-align: center;
}
.pop_con {
padding: 30rpx 40rpx 50rpx;
box-sizing: border-box;
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #ffffff;
line-height: 42rpx;
}
.close {
position: absolute;
left: 50%;
bottom: 0;
transform: translate(-50%, 100%);
width: 50rpx;
height: 50rpx;
}
}
.status_bar {
height: var(--status-bar-height);
width: 100%;
}
.fixed {
width: 750rpx;
padding: 30rpx;
box-sizing: border-box;
position: fixed;
top: 0rpx;
z-index: 15;
}
.header-left-title {
width: 104rpx;
height: 33rpx;
}
.image1 {
width: 117rpx;
height: 46rpx;
background: url('https://baoku.languowangluo.cn/newindex/new.png') no-repeat;
background-size: 100% 100%;
position: absolute;
top: 23rpx;
left: 18rpx;
}
.gb_title {
width: 118rpx;
height: 46rpx;
position: absolute;
top: 18rpx;
right: 18rpx;
background: url('https://baoku.languowangluo.cn/newindex/infinite_goods_shang_bao.png');
background-size: 100% 100%;
background-repeat: no-repeat;
}
.qiehuan_left {
display: flex;
font-family: 'YouSheBiaoTiHei';
/* border-top: 2rpx solid #333333; */
margin-left: 30rpx;
/* text-shadow: 0px 0px 12rpx rgba(150, 255, 254, 0.7); */
/* font-family: 'zcq'; */
}
.wzs {
font-size: 32rpx;
font-family: zihun152hao-jijiachaojihei;
font-weight: 400;
color: #9c9c9c;
}
.xzs {
font-size: 32rpx;
font-family: zihun152hao-jijiachaojihei;
font-weight: 400;
color: #ffffff;
text-shadow: 0 0 10rpx #ba39ff;
}
.qiehuan_left>view {
margin-right: 70rpx;
position: relative;
}
.dibuzhe {
background: rgba(0, 0, 0, 0.8);
// background: #f00;
display: flex;
justify-content: space-between;
/* padding-top:5rpx; */
position: absolute;
width: calc(100% - 16rpx - 16rpx);
left: 16rpx;
bottom: 16rpx;
height: 74rpx;
align-items: center;
border-radius: 0 0 20rpx 20rpx;
box-sizing: border-box !important;
}
.left {
width: 400rpx;
font-size: 28rpx;
font-weight: 400;
color: #ffffff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-left: 22rpx;
/* font-family: 'zcq';
text-shadow: 0px 0px 14rpx rgba(237, 87, 255, 0.7); */
}
.gb {
color: #ffffff;
/* font-family: 'zcq';
text-shadow: 0px 0px 14rpx red; */
}
.right {
font-size: 28rpx;
font-family: zihun152hao-jijiachaojihei;
font-weight: 400;
color: #ffffff;
text-shadow: 0 0 10rpx #22aeff;
padding-right: 20rpx;
}
.items {
width: 714rpx;
height: 504rpx;
padding: 16rpx;
margin: 30rpx auto 0;
position: relative;
box-sizing: border-box;
}
/deep/ .u-tab-item {
color: #222222 !important;
}
.baibei {
width: 720rpx;
height: 78rpx;
/* background: #FFFFFF; */
display: flex;
justify-content: space-between;
align-items: center;
/* font-family: 'zcq'; */
}
.content {
width: 100vw;
min-height: 100vh;
/* padding-top: 1rpx; */
padding-bottom: 100px;
box-sizing: border-box;
background: #FFFFFF;
}
.item_image {
width: 100%;
height: 472rpx;
// margin: 17rpx auto 0;
position: relative;
border-radius: 20rpx;
overflow: hidden;
}
.item_image image {
width: 100%;
height: 100%;
}
.page-hd {
width: 100%;
height: 430rpx;
z-index: 1;
}
.list {
margin-top: 20rpx;
padding: 1rpx 30rpx 30rpx;
display: flex;
flex-flow: row wrap;
justify-content: space-between;
z-index: 10;
.list-item {
width: 330rpx;
height: 487rpx;
background-color: #F8F8F8;
border-radius: 16rpx;
// background: url($imgurl+'common/goodsBg.png') no-repeat 0 0 / 100% 100%;
margin-top: 30rpx;
.pic {
width: 100%;
height: 332rpx;
background-color: #E4E4E4;
position: relative;
border-radius: 16rpx 16rpx 0rpx 0rpx;
.pic-img {
// width: 290rpx;
// height: 290rpx;
width: 100%;
height: 100%;
}
.pic-type {
padding: 0 21rpx 0 32rpx;
height: 44rpx;
position: absolute;
top: 10rpx;
right: 10rpx;
>text {
font-size: 28rpx;
font-weight: 400;
color: #111111;
text-shadow: 2rpx 2rpx #FFFFFF;
}
}
.pic-new {
width: 80rpx;
position: absolute;
z-index: 10;
top: -10rpx;
left: 10rpx;
}
}
.title {
padding: 24rpx 26rpx 0;
font-size: 20rpx;
font-weight: 400;
color: #333333;
}
.hang1 {}
.hot-num {
padding: 10rpx 20rpx 0;
font-size: 24rpx;
font-weight: 400;
color: #cccccc;
}
.price-box {
padding: 60rpx 20rpx 10rpx;
display: flex;
justify-content: space-between;
align-items: center;
.price {
font-weight: 500;
font-size: 18rpx;
color: #333333;
text {
font-size: 18rpx;
}
}
.num-box {
display: flex;
align-items: center;
.num {
font-size: 18rpx;
font-weight: 400;
color: #6C6C6C;
}
.box {
width: 20rpx;
height: 17.56rpx;
margin-left: 6rpx;
}
.icon {}
}
}
}
.grid-item {
background-color: #f0f0f0;
text-align: center;
border-radius: 16rpx;
}
</style>