2025-05-21 10:33:00 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<page-meta :page-font-size="fontValue+'px'" :root-font-size="fontValue+'px'"></page-meta>
|
|
|
|
|
|
<view class="content">
|
|
|
|
|
|
<view class="top-wrapper">
|
|
|
|
|
|
<view style="padding: 5px 16px">
|
|
|
|
|
|
<view class="list">
|
|
|
|
|
|
<view class="list-item" :class="{ active: active == index }"
|
|
|
|
|
|
v-for="(item, index) in tabList"
|
|
|
|
|
|
:key="index"
|
|
|
|
|
|
@click="handleTab(index)"
|
|
|
|
|
|
>
|
|
|
|
|
|
<view style="padding: 0 2px;">
|
|
|
|
|
|
<text>{{ item.name }}</text>
|
|
|
|
|
|
<text v-if="item.num>0">{{ item.num }}</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view v-if="active == index" class="line"></view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<scroll-view style="width: 100%;height: 80vh;" @scrolltolower="onScrollTolower" scroll-y="true">
|
|
|
|
|
|
<view class="item-list" v-for="(item, index) in tableList" :key="index" :style="{opacity:(active==1? '1':'0.5')}">
|
|
|
|
|
|
<view style="width: 100%;display: flex;padding: 10px;color: #666;position: relative;overflow: hidden;">
|
|
|
|
|
|
<view class="top-left">
|
|
|
|
|
|
<view :style="{color:(active==1? '#ff5614':'#ff6816')}">¥<text class="amount">{{item.couponAmount}}</text> </view>
|
|
|
|
|
|
<view class="btn" :style="{background:(active==1? '#ff5614':'#ff6816')}">餐券</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="top-right">
|
|
|
|
|
|
<view style="font-size: 36rpx;font-weight: 600;margin-bottom: 10px;">{{item.couponName}}</view>
|
|
|
|
|
|
<view style="color: #999;">有效期:{{item.effectDateStart}} - {{item.effectDateEnd}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="position: absolute;top:-10px;right:-10px;">
|
|
|
|
|
|
<image v-if="active==0" style="width: 120rpx;height: 120rpx;" src="../../../static/images/my/notTakeEffect.png"></image>
|
|
|
|
|
|
<image v-if="active==2" style="width: 140rpx;height: 140rpx;" src="../../../static/images/my/used.png"></image>
|
|
|
|
|
|
<image v-if="active==3" style="width: 180rpx;height: 120rpx;" src="../../../static/images/my/expired.png"></image>
|
|
|
|
|
|
<image v-if="active==4" style="width: 120rpx;height: 120rpx;" src="../../../static/images/my/cancellation.png"></image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="item-bottom">
|
|
|
|
|
|
<view> 限指定食堂可用 </view>
|
|
|
|
|
|
<view class="btn" @click="checkDetail(item)">详细信息</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="margin: 20px 0" v-if="tableList.length > 0">
|
|
|
|
|
|
<u-loadmore :status="status" nomoreText="没有更多数据了" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view v-else class="flex justify-center align-center" style="height: 50vh">
|
|
|
|
|
|
<u-empty icon="../../../static/images/not_order.png" text="暂无数据" textColor="#999" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
|
|
|
|
|
|
<u-popup :show="showDetail" mode="center" bgColor="transparent" @close="close" @open="open">
|
|
|
|
|
|
<!-- background: transparent;background-image: url('../../../static/images/index/noticeBg.png');background-repeat: no-repeat;background-size: 100% 100%; -->
|
|
|
|
|
|
<view style="width: 88vw;height: 70vh;background: #fff;">
|
|
|
|
|
|
<view style="width: 100%;text-align: center;height: 60px;line-height: 60px;font-weight: bold;color: #fe5907;">
|
|
|
|
|
|
¥<text style="font-size: 48rpx;">{{rowData.couponAmount}}</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="width: 90%;margin: 0 auto;height: 35vh;display: flex;justify-content: center;">
|
|
|
|
|
|
<image :src="rowData.couponImgUrl" style="width: 100%;height: 100%;" mode="aspectFill"></image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="width: 90%;margin: 5px auto;padding: 10px;height: 18vh;display: flex;flex-direction: column;justify-content: center;overflow-y: auto;border-top: 1px solid #ccc;color: #000;">
|
2025-05-21 15:15:30 +08:00
|
|
|
|
<view style="margin-bottom: 10px;">食堂: {{rowData.canteenNameStr || '所有食堂可用'}}</view>
|
|
|
|
|
|
<view style="margin-bottom: 10px;">档口: {{rowData.shopstallNameStr || '该食堂所有档口'}}</view>
|
|
|
|
|
|
<view style="margin-bottom: 10px;">餐次: {{rowData.intervalNameStr || '该食堂档口所有餐次'}}</view>
|
2025-05-21 10:33:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view style="width: 100%;height: 40px;display: flex;align-items: center;justify-content: center;">
|
|
|
|
|
|
<view style="width: 80%;height: 40px;line-height:40px;background:#FE7900;border-radius: 10px;text-align: center;color: #FFF;" @click="showDetail=false">关闭</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</u-popup>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
import Tabs from '@/pages/components/Tabs.vue'
|
2025-09-03 18:13:45 +08:00
|
|
|
|
import { couponMobileGroupApi } from '@/api/mine/index'
|
2025-05-21 10:33:00 +08:00
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
|
components: { Tabs },
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
fontValue:uni.getStorageSync('fontSize') || 8,
|
|
|
|
|
|
active: 0,
|
|
|
|
|
|
tabIndex: 0,
|
|
|
|
|
|
pageNum: 1,
|
|
|
|
|
|
pageSize: 10,
|
|
|
|
|
|
total: 0,
|
|
|
|
|
|
couponState:'1',
|
|
|
|
|
|
status: 'loadmore',
|
|
|
|
|
|
tabList: [{name:'待生效',num:0},{name:'未使用',num:0},{name:'已使用',num:0}, {name:'已过期',num:0},{name:'已作废',num:0}],
|
|
|
|
|
|
tableList: [],
|
|
|
|
|
|
showDetail:false,
|
|
|
|
|
|
rowData:{}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onLoad() {
|
|
|
|
|
|
},
|
|
|
|
|
|
onShow() {
|
|
|
|
|
|
this.pageNum=1
|
|
|
|
|
|
this.getList()
|
|
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
|
|
|
// 翻页
|
|
|
|
|
|
onScrollTolower(){
|
|
|
|
|
|
console.log(this.tableList.length)
|
|
|
|
|
|
if(this.total>this.tableList.length){
|
|
|
|
|
|
this.pageNum++
|
|
|
|
|
|
this.getList()
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
//获取订单列表
|
|
|
|
|
|
async getList() {
|
|
|
|
|
|
console.log('获取列表')
|
|
|
|
|
|
const params = {
|
|
|
|
|
|
custId: uni.getStorageSync('custId'),
|
|
|
|
|
|
current: this.pageNum,
|
|
|
|
|
|
size: this.pageSize,
|
|
|
|
|
|
couponState:this.couponState,
|
|
|
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
|
|
|
const res = await couponMobileGroupApi(params)
|
|
|
|
|
|
console.log('?? ~ getList ~ res:', res)
|
|
|
|
|
|
if(res.data.notTakeEffect>0){
|
|
|
|
|
|
this.tabList[0].num = res.data.notTakeEffect
|
|
|
|
|
|
}
|
|
|
|
|
|
if(res.data.notUse>0){
|
|
|
|
|
|
this.tabList[1].num = res.data.notUse
|
|
|
|
|
|
}
|
|
|
|
|
|
if(res.data.used>0){
|
|
|
|
|
|
this.tabList[2].num = res.data.used
|
|
|
|
|
|
}
|
|
|
|
|
|
if(res.data.expired>0){
|
|
|
|
|
|
this.tabList[3].num = res.data.expired
|
|
|
|
|
|
}
|
|
|
|
|
|
if(res.data.cancellation>0){
|
|
|
|
|
|
this.tabList[4].num = res.data.cancellation
|
|
|
|
|
|
}
|
|
|
|
|
|
this.total = res.data.page.total;
|
|
|
|
|
|
if(this.pageNum==1){
|
|
|
|
|
|
this.tableList = res.data.page.records
|
|
|
|
|
|
}else{
|
|
|
|
|
|
this.tableList.push(...res.data.page.records)
|
|
|
|
|
|
}
|
|
|
|
|
|
this.status = this.total == this.tableList.length ? 'nomore' : 'loadmore'
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.log(error)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
//翻页
|
|
|
|
|
|
onReachBottom() {
|
|
|
|
|
|
console.log('?? ~ onReachBottom ~ ')
|
|
|
|
|
|
},
|
|
|
|
|
|
handleTab(index) {
|
|
|
|
|
|
this.active = index
|
|
|
|
|
|
this.changeTab(index)
|
|
|
|
|
|
},
|
|
|
|
|
|
changeTab(index) {
|
|
|
|
|
|
console.log('?? ~ changeTab ~ index:', index)
|
|
|
|
|
|
this.tabIndex = index;
|
|
|
|
|
|
if(index==1){
|
|
|
|
|
|
this.couponState="2"
|
|
|
|
|
|
}else if(index==2){
|
|
|
|
|
|
this.couponState="3"
|
|
|
|
|
|
}else if(index==3){
|
|
|
|
|
|
this.couponState="4"
|
|
|
|
|
|
}else if(index==4){
|
|
|
|
|
|
this.couponState="5"
|
|
|
|
|
|
}else{
|
|
|
|
|
|
this.couponState="1"
|
|
|
|
|
|
}
|
|
|
|
|
|
this.pageNum=1;
|
|
|
|
|
|
this.tableList=[]
|
|
|
|
|
|
this.getList()
|
|
|
|
|
|
},
|
|
|
|
|
|
checkDetail(item) {
|
|
|
|
|
|
console.log('跳转订单详情', item)
|
|
|
|
|
|
this.rowData = item
|
|
|
|
|
|
if(this.active==1){
|
|
|
|
|
|
this.showDetail = true
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
open() {
|
|
|
|
|
|
// console.log('open');
|
|
|
|
|
|
},
|
|
|
|
|
|
close() {
|
|
|
|
|
|
this.showDetail = false
|
|
|
|
|
|
// console.log('close');
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
// onUnload() {
|
|
|
|
|
|
// uni.switchTab({
|
|
|
|
|
|
// url: '/pages/index'
|
|
|
|
|
|
// })
|
|
|
|
|
|
// },
|
|
|
|
|
|
// onBackPress(e) {
|
|
|
|
|
|
// //e.from === 'backbutton' 说明如果点击的是物理返回键或导航栏的返回键就进行以下操作
|
|
|
|
|
|
// if (e.from === 'backbutton') {
|
|
|
|
|
|
// //返回值为true 时,表示不执行默认的返回(默认返回上一页),执行自定义的返回
|
|
|
|
|
|
// uni.switchTab({
|
|
|
|
|
|
// url: '/pages/index'
|
|
|
|
|
|
// })
|
|
|
|
|
|
// //如果要限制必须写成true
|
|
|
|
|
|
// return true;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// },
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.content {
|
|
|
|
|
|
background: #f9fbff;
|
|
|
|
|
|
// height: 100%;
|
|
|
|
|
|
height: 95vh;
|
|
|
|
|
|
.top-wrapper {
|
|
|
|
|
|
// padding-top: 4vh;
|
|
|
|
|
|
width: 100vw;
|
|
|
|
|
|
background: #f9fbff;
|
|
|
|
|
|
height: 95vh;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.item-list {
|
|
|
|
|
|
padding: 8px;
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
// opacity: 0.5;
|
|
|
|
|
|
// background: rgba(0,0,0,0.1);
|
|
|
|
|
|
border-radius: 8px;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
margin: 0 10px;
|
|
|
|
|
|
margin-top: 15px;
|
|
|
|
|
|
|
|
|
|
|
|
.top-left{
|
|
|
|
|
|
width: 20%;border-right: 1px solid #ccc;text-align: center;
|
|
|
|
|
|
display: flex;flex-direction: column;align-items: center;
|
|
|
|
|
|
.amount{
|
|
|
|
|
|
font-size: 48rpx;font-weight: 600;
|
|
|
|
|
|
}
|
|
|
|
|
|
.btn{
|
|
|
|
|
|
width: 50px;height: 20px;line-height: 20px;font-size: 12px;
|
|
|
|
|
|
text-align: center;border-radius: 10px;background-color: #666;color: #fff;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.top-right{
|
|
|
|
|
|
width: 80%;padding-left: 20px;
|
|
|
|
|
|
}
|
|
|
|
|
|
.item-bottom{
|
|
|
|
|
|
color: #666;font-size: 28rpx;
|
|
|
|
|
|
width: 100%;height: 40px;padding: 10px;display: flex;align-items: center;justify-content: space-between;
|
|
|
|
|
|
.btn{
|
|
|
|
|
|
font-size: 12px;padding: 8rpx 20rpx;display: flex;justify-content: center;align-items: center;
|
|
|
|
|
|
border-radius: 10px;background-color: #0b60ff;color: #fff;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// .order-source {
|
|
|
|
|
|
// margin-bottom: 12px;
|
|
|
|
|
|
// font-weight: 500;
|
|
|
|
|
|
// color: #0f274b;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// .intervalName {
|
|
|
|
|
|
// font-size: 24rpx;
|
|
|
|
|
|
// text-align: center;
|
|
|
|
|
|
// margin-left: 10px;
|
|
|
|
|
|
// color: #ff6816;
|
|
|
|
|
|
// border-radius: 1px 1px 1px 1px;
|
|
|
|
|
|
// border: 1px solid #ff6816;
|
|
|
|
|
|
// padding: 0 4px;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// .img-cont {
|
|
|
|
|
|
// width: 100%;
|
|
|
|
|
|
// margin: 5px;
|
|
|
|
|
|
// display: flex;
|
|
|
|
|
|
// justify-content: space-between;
|
|
|
|
|
|
// width: 100%;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// .img {
|
|
|
|
|
|
// width: 28%;
|
|
|
|
|
|
// margin: 10rpx;
|
|
|
|
|
|
// display: flex;
|
|
|
|
|
|
// flex-direction: column;
|
|
|
|
|
|
// align-items: center;
|
|
|
|
|
|
// view {
|
|
|
|
|
|
// margin-top: 8px;
|
|
|
|
|
|
// color: #0f274b;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// .price {
|
|
|
|
|
|
// width: 20%;
|
|
|
|
|
|
// display: flex;
|
|
|
|
|
|
// flex-direction: column;
|
|
|
|
|
|
// justify-content: center;
|
|
|
|
|
|
// align-items: center;
|
|
|
|
|
|
// color: #0f274b;
|
|
|
|
|
|
// font-weight: 400;
|
|
|
|
|
|
// font-size: 24rpx;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// .btn-cont {
|
|
|
|
|
|
// display: flex;
|
|
|
|
|
|
// justify-content: flex-end;
|
|
|
|
|
|
// margin-top: 10px;
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.list {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: flex-start;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
|
|
|
|
|
|
|
.list-item {
|
|
|
|
|
|
|
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: rgba(15, 39, 75, 0.8);
|
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: flex-start;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
}
|
|
|
|
|
|
.active {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #0f274b;
|
|
|
|
|
|
z-index: 9;
|
|
|
|
|
|
}
|
|
|
|
|
|
.line {
|
|
|
|
|
|
width: 36px;
|
|
|
|
|
|
height: 8px;
|
|
|
|
|
|
background: linear-gradient(90deg, #ff6816 0%, rgba(255, 104, 22, 0) 100%);
|
|
|
|
|
|
border-radius: 4px 4px 4px 4px;
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
bottom: 0px;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
</style>
|