<template> <view class="flex-col page"> <view class="flex-col"> <view class="flex-col section"> <view class="flex-row justify-center items-center relative group"> <text class="text">请选择优惠券</text> <image class="image pos" src="../images/cha.png" @click="closeCoupon" /> </view> <view class="flex-col mt-33"> <view class="flex-row justify-between group_2"> <text class="font" style="line-height: 70rpx;" @click="changeStateLeft(isShow)">可用</text> <text class="font" style="line-height: 70rpx;" @click="changeStateRight(isShow)">不可用</text> </view> <view class="relative divider"> <view class="section_2 pos_2" v-show="isShow"></view> <view class="section_2 pos_3" v-show="!isShow"></view> </view> </view> </view> <view class="flex-row justify-between section_3" @click="jumpToMall"> <text class="font_2 text_2">优惠券商城</text> <image class="image_2" src="../images/yjt.png" /> </view> </view> <view class="flex-col list"> <radio-group> <view class="flex-col list-item mt-17" v-for="(item, index) in myCouponList" :key="index" @click="selectOne(index)"> <view class="flex-row justify-between self-stretch group_3" :style="borderStyle"> <view class="flex-row items-baseline self-start group_6"> <text class="font_3 text_4">{{item.couponVO.standardAmount}}</text> <text class="font_4 text_5">¥</text> </view> <view class="flex-row items-center self-center group_4"> <view class="flex-col shrink-0 group_5"> <text class="self-start font text_3">{{item.couponVO.name}}</text> <text class="self-stretch font_5 text_6 mt-11">{{item.couponVO.startTime.substr(0, 16)}}至{{item.couponVO.endTime.substr(0, 16)}}</text> </view> <!-- <view class="ml-22 shrink-0 section_4"></view> --> <radio class="ml-22 shrink-0 section_4" :value="index" :checked="checkedArr[index]" color="#FFB5B8" v-show="isShow"></radio> <view class="ml-22 shrink-0 section_4" v-show="!isShow"></view> </view> </view> <text class="mt-14 self-start font_2 text_7" v-show="!isShow">未满足使用门槛</text> </view> </radio-group> </view> <view class="flex-row section_5"> <view class="flex-col justify-start items-center text-wrapper" @click="cancel"> <text class="font_6 text_8">不使用优惠券</text> </view> <view class="flex-col justify-start items-center text-wrapper_2" @click="confirm"><text class="font_6 text_9">确定</text></view> </view> </view> </template> <script setup lang="ts"> import {onMounted, ref} from 'vue' import emitter from '../../../utils/emitter'; import { baseUrl } from '../../../api/request'; import { onShow } from "@dcloudio/uni-app"; const checkedArr = ref([]) const idx = ref(-1) const isShow = ref(true) const borderStyle = ref({}) let totalAmount = 0 const myCouponList = ref([]) const cookie = wx.getStorageSync("cookie") //请求头 onMounted(() => { emitter.on('getTotalPrice', (val:any) => { totalAmount = val getMyCouponList() }) }) const changeStateLeft = (val:any) => { if (!val) { isShow.value = !isShow.value borderStyle.value.borderBottom = 'solid 0px' getMyCouponList() } } const changeStateRight = (val:any) => { if (val) { isShow.value = !isShow.value borderStyle.value.borderBottom = 'solid 1.88rpx #d9d9d9' getMyCouponList() } } const closeCoupon = () => { emitter.emit('closeCoupon') } const selectOne = (val:any) => { idx.value = val for (var i = 0; i < checkedArr.value.length; i ++ ) { if (i == val) { checkedArr.value[i] = true } else { checkedArr.value[i] = false } } } const confirm = () => { if (idx.value !== -1) { emitter.emit('getCouponObj', myCouponList.value[idx.value]) } emitter.emit('closeCoupon') } const cancel = () => { emitter.emit('cancelCoupon') emitter.emit('closeCoupon') } const getMyCouponList = async () => { const res = await uni.request({ url: baseUrl + '/coupon/list/use', method: 'POST', header: { cookie }, data: { currentAmount: totalAmount, isAvailable: isShow.value } }) myCouponList.value = res.data.data checkedArr.value = new Array(myCouponList.value.length).fill(false) } const jumpToMall = () => { uni.navigateTo({ url: '/pages/coupon/CouponMall/CouponMall' }) } </script> <style scoped lang="scss"> .mt-33 { margin-top: 61.88rpx; } .mt-17 { margin-top: 31.88rpx; } .mt-11 { margin-top: 20.63rpx; } .page { background-color: #f4f3f3; border-radius: 18.75rpx 18.75rpx 0rpx 0rpx; width: 100%; overflow-y: auto; overflow-x: hidden; height: 100%; position: fixed; bottom: 0; left: 0; right: 0; margin: 0 auto; } .section { padding-top: 41.25rpx; background-color: #ffffff; border-radius: 18.75rpx 18.75rpx 0rpx 0rpx; border-bottom: solid 1.88rpx #d9d9d9; } .group { padding: 0 35.63rpx; } .text { color: #323232; font-size: 33.75rpx; font-family: Inter; line-height: 31.18rpx; } .image { width: 37.5rpx; height: 37.5rpx; } .pos { position: absolute; right: 35.63rpx; top: 50%; transform: translateY(-50%); } .group_2 { padding: 0 138.75rpx 0 157.5rpx; } .font { font-size: 30rpx; font-family: Inter; line-height: 25.65rpx; color: #323232; } .divider { height: 5.63rpx; } .section_2 { background-color: #ff3c3c; width: 80.63rpx; height: 5.63rpx; } .pos_2 { position: absolute; left: 144.38rpx; top: 0; } .pos_3 { position: absolute; right: 144.38rpx; top: 0; } .section_3 { padding: 22.5rpx 33.75rpx 22.5rpx 41.25rpx; background-color: #ffffff; } .image_2 { width: 26.25rpx; height: 22.5rpx; } .list { padding: 31.88rpx 22.5rpx 31.88rpx; height: 70%; overflow-y: auto; } .list::-webkit-scrollbar { display: none; } .list-item { padding-bottom: 18.75rpx; background-color: #ffffff; border-radius: 18.75rpx; } .list-item:first-child { margin-top: 0; } .group_3 { padding: 33.75rpx 37.5rpx 18.75rpx; } .group_6 { margin-top: 26.25rpx; width: 81.6rpx; } .font_3 { font-size: 45rpx; font-family: Inter; line-height: 33.81rpx; font-weight: 600; color: #c35c5d; } .text_4 { margin-left: 26.25rpx; } .font_4 { font-size: 30rpx; font-family: Inter; line-height: 21.64rpx; color: #c35c5d; } .text_5 { margin-left: -82.5rpx; } .group_4 { margin-right: 7.5rpx; } .group_5 { width: 365.66rpx; } .text_3 { font-size: 28.13rpx; line-height: 25.91rpx; } .font_5 { font-size: 26.25rpx; font-family: Inter; line-height: 30rpx; color: #000000; } .text_6 { font-size: 24.38rpx; } .section_4 { background-color: #ffffff; border-radius: 75rpx; width: 33.75rpx; height: 33.75rpx; } .font_2 { font-size: 26.25rpx; font-family: Inter; line-height: 25.65rpx; color: #323232; } .text_2 { line-height: 24.28rpx; } .text_7 { margin-left: 30rpx; line-height: 24.34rpx; } .section_5 { margin-top: 50.75rpx; padding: 15rpx 46.88rpx; background-color: #ffffff; position: fixed; bottom: 0; left: 0; right: 0; margin: 0 auto; } .text-wrapper { padding: 26.25rpx 0; flex: 1 1 328.13rpx; background-color: #ff3c3cad; border-radius: 93.75rpx 0rpx 0rpx 93.75rpx; height: 82.5rpx; } .font_6 { font-size: 30rpx; font-family: Inter; color: #ffffff; } .text_8 { line-height: 27.81rpx; } .text-wrapper_2 { padding: 26.25rpx 0; flex: 1 1 328.13rpx; background-color: #ffb5b8; border-radius: 0rpx 93.75rpx 93.75rpx 0rpx; height: 82.5rpx; } .text_9 { line-height: 27.79rpx; } @import url(../../../common/css/global.css); </style>