线上问题修改

This commit is contained in:
zzyuan 2025-05-21 10:33:00 +08:00
parent 585a15b29e
commit f01acb5c9d
15 changed files with 429 additions and 44 deletions

View File

@ -111,10 +111,14 @@ export function syncPayStateApi(data) {
})
}
//获取取餐柜/生鲜柜
export function getCounterBypageApi(data) {
return request({
url: '/smart-canteen/api/v1/applet/machine/getCounterBypage',
method: 'get',
params:data
})
}

View File

@ -15,7 +15,7 @@ export function getWalletBalanceAPI(data) {
*/
export function getOrderQRCodeAPI(data) {
return request({
url: '/smart-canteen/custInfo/getOrderQRCode',
url: '/smart-canteen/custInfo/get-yst-timestamp',
method: 'post',
data
})

View File

@ -144,5 +144,12 @@ export function rebindMobileApi(data) {
}
//app端电子券列表
export function couponMobileGroupApi(data) {
return request({
url: '/smart-canteen/api/v2/mkt/coupon/list-electron-mobile-group',
method: 'post',
data
})
}

View File

@ -275,6 +275,12 @@
"navigationBarTitleText": "历史记录"
}
},
{
"path": "pages/mine/coupon/index",
"style": {
"navigationBarTitleText": "我的卡券"
}
},
{
"path": "pages/review/index",
"style": {

View File

@ -17,7 +17,7 @@
:data="qrCodeUrl"
></ikun-qrcode>
<!-- 有效期 -->
<view class="valid-time">有效时间15分钟</view>
<!-- <view class="valid-time">有效时间15分钟</view> -->
<view class="refresh-button">
<button @click="refreshQrCode" class="login-btn cu-btn block bg-blue lg round" style="width: 70%;">刷新二维码</button>
</view>
@ -31,22 +31,31 @@
export default {
data() {
return {
timer:null,
fontValue:uni.getStorageSync('fontSize') || 8,
custName:uni.getStorageSync('custName'),
qrCodeUrl:"" // URL
qrCodeUrl:`xnzn{\"s\":1,\"y\":3,\"p\":\"${uni.getStorageSync('custId')}\",\"t\":\"${uni.getStorageSync('codeTime')}\"}`// URL
};
},
onShow() {
this.getOrderQRCodeData()
onLoad() {
this.timer = setInterval(() => {
console.log("codeTime")
this.getOrderQRCodeData()
}, 4000)
},
onUnload() {
clearInterval(this.timer)
this.timer = null;
uni.navigateBack()
},
methods: {
//
async getOrderQRCodeData() {
const res = await getOrderQRCodeAPI({ "custId":uni.getStorageSync('custId') })
console.log(res, '二维码信息--')
if(res.code==200){
this.qrCodeUrl=res.msg;
}
uni.setStorageSync("codeTime",res);
this.qrCodeUrl = `xnzn{\"s\":1,\"y\":3,\"p\":\"${uni.getStorageSync('custId')}\",\"t\":\"${uni.getStorageSync('codeTime')}\"}`
// console.log(res, '--')
},
refreshQrCode() {
//

View File

@ -185,13 +185,15 @@ export default {
}
},
onLoad() {
this.getUserInfo()
this.getWalletBalanceData(uni.getStorageSync('custId') || '')
this.getOrderQRCodeData(uni.getStorageSync('custId') || '')
this.getUnReadNoticeNum()
this.timer = setInterval(() => {
this.getWalletBalanceData(uni.getStorageSync('custId')||'')
}, 10000)
this.getOrderQRCodeData()
}, 30000)
},
onShow() {
this.getUserInfo()
this.getWalletBalanceData()
this.getUnReadNoticeNum()
this.getOrderQRCodeData()
},
onUnload() {
clearInterval(this.timer)
@ -254,9 +256,9 @@ export default {
})
},
//
async getWalletBalanceData(custId) {
async getWalletBalanceData() {
let param = {
"custId": custId.toString(),
"custId": uni.getStorageSync('custId'),
"openid": uni.getStorageSync('openId'),
"sourceType": "1"
}
@ -265,9 +267,9 @@ export default {
// console.log(res, '--')
},
//
async getOrderQRCodeData(custId) {
const res = await getOrderQRCodeAPI({ custId })
// console.log(res, '--')
async getOrderQRCodeData() {
const res = await getOrderQRCodeAPI({ "custId":uni.getStorageSync('custId') })
uni.setStorageSync("codeTime",res);
},
//
async getUnReadNoticeNum() {

View File

@ -171,7 +171,7 @@ export default {
// this.getCode()
// }
})
this.$tab.reLaunch('/pages/system')
// this.$tab.reLaunch('/pages/system')
},
//
loginSuccess(result) {

344
pages/mine/coupon/index.vue Normal file
View File

@ -0,0 +1,344 @@
<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;">
<view style="margin-bottom: 10px;">食堂 {{rowData.canteenNameStr}}</view>
<view style="margin-bottom: 10px;">档口 {{rowData.shopstallNameStr}}</view>
<view style="margin-bottom: 10px;">餐次 {{rowData.intervalNameStr}}</view>
</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'
import { couponMobileGroupApi } from '../../../api/mine/index'
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>

View File

@ -62,6 +62,14 @@
</view>
<text class="icon-text">健康监测</text>
</view>
<!-- 电子餐券 -->
<view class="grid-item" @click="navigateTo('/pages/mine/coupon/index')">
<view class="icon-wrapper">
<image style="width: 120rpx;height: 120rpx;" src="/static/images/my/coupon.png"></image>
</view>
<text class="icon-text">电子餐券</text>
</view>
</view>
</view>

View File

@ -11,7 +11,7 @@
<view class="appraise">
<view>您对本单满意吗?</view>
<view class="refund-btn" @click="refundOrder" v-if="detailData.orderState==1">
<view class="refund-btn" @click="refundOrder" v-if="detailData.orderState==1&&detailData.canteenId=='378928463446282240'">
退单
</view>
<!-- <view class="refund-btn" @click="refundOrder" v-if="detailData.payState==4&&detailData.orderState==4">
@ -37,20 +37,28 @@
</view>
<view class="img-cont m-8">
<view class="img-list m-8" v-for="(item, index) in detailData.orderDetailList" :key="index">
<view class="flex align-center">
<u-image :src="item.goodsDishesImgUrl" width="80px" height="80px" />
<view class="name-num">
<view style="margin-bottom: 10px;font-weight: 600;">{{ item.goodsDishesName }}</view>
<view>x{{ item.quantity }}</view>
</view>
</view>
<view>
<view style="color: red;" v-if="detailData.orderState==3">已退款</view>
<view style="color: red;" v-if="detailData.orderState==3">{{ (Number(item.salePrice/100)*item.quantity).toFixed(2) }}</view>
<view v-else>{{ (Number(item.salePrice/100)*item.quantity).toFixed(2) }}</view>
</view>
<view style="width: 100%;display: flex;justify-content: space-between;">
<view style="width: 24%;">
<u-image :src="item.goodsDishesImgUrl" width="80px" height="80px" />
</view>
<view style="width: 74%;display: flex;flex-direction: column;justify-content: space-between;padding: 10rpx;font-size: 24rpx;">
<view style="display: flex;justify-content: space-between;">
<view style="font-weight: 600;font-size: 28rpx;">{{ item.goodsDishesName }}</view>
<!-- <view style="color: red;" v-if="item.refundAmount>0">{{ (Number(item.salePrice/100)*item.quantity).toFixed(2) }}</view> -->
<view style="font-size: 28rpx;">{{ (Number(item.salePrice/100)*item.quantity).toFixed(2) }}</view>
</view>
<view style="display: flex;justify-content: space-between;">
<view style="font-size: 28rpx;">x{{ item.quantity }}</view>
<view style="color: red;" v-if="item.refundAmount>0">已退款{{ (item.refundAmount/100).toFixed(2) }}</view>
</view>
</view>
</view>
</view>
</view>
<view class="flex justify-between m-8 bt fs26">
订单金额
<view style="font-weight: 600;">{{ (detailData.realAmount/100).toFixed(2) }}</view>
</view>
<view class="flex justify-between m-8 bt fs26">
配送费
<view style="font-weight: 600;">{{ detailData.deliveryAmount>0? "¥"+(detailData.deliveryAmount/100).toFixed(2):"免配送费" }}</view>
@ -67,11 +75,8 @@
优惠金额
<view style="color: red;font-weight: 600;">-{{ (detailData.discountsAmount/100).toFixed(2) }}</view>
</view>
<view class="flex justify-between m-8 bt fs26">
订单金额
<view style="font-weight: 600;">{{ (detailData.payableAmount/100).toFixed(2) }}</view>
</view>
<view class="flex justify-between m-8 bt fs26" v-if="detailData.orderState==3">
<view class="flex justify-between m-8 bt fs26" v-if="detailData.refundAmount>0">
退款金额
<view style="font-weight: 600;">{{ (detailData.refundAmount/100).toFixed(2) }}</view>
</view>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
static/images/my/coupon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
static/images/my/used.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB