mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-uniapp.git
synced 2026-08-06 10:57:25 +08:00
- 在 pages.json 中新增卡密详情页面路径 - 在多个组件中实现电子卡券(E_COUPON)逻辑,包括库存管理、结算页面处理、订单详情展示等 - 优化商品页面和订单页面以支持电子卡券的特性,隐藏不适用的功能 - 新增 utils/goodsType.js 文件,集中管理与电子卡券相关的类型和工具函数 - 更新样式以适应电子卡券的展示需求
245 lines
5.8 KiB
Vue
245 lines
5.8 KiB
Vue
<template>
|
||
<view>
|
||
<view class="after-sales-goods-detail-view">
|
||
<view class="header">
|
||
<view>
|
||
本次售后服务将由
|
||
<text class="seller-name">{{ sku.storeName }}</text>
|
||
为您提供
|
||
</view>
|
||
</view>
|
||
<view>
|
||
<template v-for="(item,index) in sku.orderItems" :key="index">
|
||
<view class="goods-item-view" v-if="item.sn == sn" @click="navigateToGoodsDetail(sku.skuId)">
|
||
<view class="goods-img">
|
||
<u-image
|
||
border-radius="6"
|
||
width="131rpx"
|
||
height="131rpx"
|
||
mode="aspectFill"
|
||
:src="getGoodsImage(item)"
|
||
></u-image>
|
||
</view>
|
||
<view class="goods-info">
|
||
<view class="goods-title">{{ getGoodsName(item) }}</view>
|
||
<view class="goods-price">
|
||
<text v-if="sku.orderItems.length <= 1">¥{{ unitPrice(sku.flowPrice) }}</text>
|
||
<text class="num">购买数量: {{ item.num }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="select-view">
|
||
<view class="select-cell" v-if="applyInfo.returnGoods" @click="onSelect(1)">
|
||
<view class="select-image">
|
||
<image class="select-icon" src="/static/order/t1.png"></image>
|
||
</view>
|
||
<view class="cell-body">
|
||
<view class="select-title">退货</view>
|
||
<view class="select-sub-title">退回收到的商品</view>
|
||
</view>
|
||
<u-icon name="arrow-right" color="#bababa" size="28rpx"></u-icon>
|
||
</view>
|
||
<view class="select-cell" v-if="applyInfo.returnMoney" @click="onSelect(3)">
|
||
<view class="select-image">
|
||
<image class="select-icon" src="/static/order/t3.png"></image>
|
||
</view>
|
||
<view class="cell-body">
|
||
<view class="select-title">退款</view>
|
||
<view class="select-sub-title">退款商品返还金额</view>
|
||
</view>
|
||
<u-icon name="arrow-right" color="#bababa" size="28rpx"></u-icon>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script setup lang="ts">
|
||
import { ref } from 'vue'
|
||
import { onLoad } from '@dcloudio/uni-app'
|
||
import { unitPrice, parseGoodsImageUrl } from '@/utils/filters.js'
|
||
import { getAfterSaleInfo } from '@/api/after-sale'
|
||
import storage from '@/utils/storage'
|
||
// 深链进入时拦截 E_COUPON,后端 apply/save 亦会拒绝
|
||
import { isECouponOrder } from '@/utils/goodsType.js'
|
||
|
||
const sn = ref('')
|
||
const sku = ref<any>({})
|
||
const applyInfo = ref<any>({})
|
||
|
||
onLoad((options) => {
|
||
sn.value = options?.sn || ''
|
||
sku.value = storage.getAfterSaleData()
|
||
if (isECouponOrder(sku.value?.orderType)) {
|
||
uni.showToast({
|
||
title: '电子卡券订单不支持售后',
|
||
icon: 'none',
|
||
})
|
||
setTimeout(() => {
|
||
uni.navigateBack()
|
||
}, 1500)
|
||
return
|
||
}
|
||
init()
|
||
})
|
||
|
||
function getGoodsName(item: any) {
|
||
return item.goodsName || item.name || ''
|
||
}
|
||
|
||
function getGoodsImage(item: any) {
|
||
const image = item.image || item.goodsImage || item.thumbnail
|
||
return parseGoodsImageUrl(image)
|
||
}
|
||
|
||
function init() {
|
||
getAfterSaleInfo(sn.value).then((response) => {
|
||
if (response.data.success) {
|
||
applyInfo.value = response.data.result
|
||
}
|
||
})
|
||
}
|
||
|
||
function onSelect(value: number) {
|
||
uni.redirectTo({
|
||
url: `./afterSalesDetail?sn=${sn.value}&value=${value}`,
|
||
})
|
||
}
|
||
|
||
function navigateToGoodsDetail(skuId: string) {
|
||
uni.navigateTo({
|
||
url: `/pages/product/goods?id=${skuId}&goodsId=${sku.value.goodsId}`,
|
||
})
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
page,
|
||
.content {
|
||
background: $page-color-base;
|
||
height: 100%;
|
||
}
|
||
.after-sales-goods-detail-view {
|
||
background-color: #fff;
|
||
.header {
|
||
background-color: #f7f7f7;
|
||
color: #999999;
|
||
font-size: 22rpx;
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
justify-content: center;
|
||
line-height: 70rpx;
|
||
.header-text {
|
||
background-color: #999999;
|
||
padding: 10rpx 30rpx;
|
||
border-radius: 50rpx;
|
||
}
|
||
.seller-name {
|
||
color: $main-color;
|
||
}
|
||
}
|
||
|
||
.goods-item-view {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: flex-start;
|
||
padding: 24rpx 30rpx;
|
||
background-color: #eef1f2;
|
||
|
||
.goods-img {
|
||
flex-shrink: 0;
|
||
width: 131rpx;
|
||
height: 131rpx;
|
||
border-radius: 6rpx;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.goods-info {
|
||
flex: 1;
|
||
min-width: 0;
|
||
padding-left: 24rpx;
|
||
|
||
.goods-title {
|
||
margin-bottom: 12rpx;
|
||
color: $font-color-dark;
|
||
font-size: 26rpx;
|
||
line-height: 1.4;
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
-webkit-line-clamp: 2;
|
||
overflow: hidden;
|
||
word-break: break-all;
|
||
}
|
||
|
||
.goods-price {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
font-size: 28rpx;
|
||
color: $light-color;
|
||
|
||
.num {
|
||
flex-shrink: 0;
|
||
margin-left: 16rpx;
|
||
font-size: 24rpx;
|
||
color: #999999;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
.select-view {
|
||
background-color: #fff;
|
||
margin-top: 20rpx;
|
||
|
||
.select-cell {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
padding: 32rpx 30rpx;
|
||
border-bottom: 1px solid $page-color-base;
|
||
|
||
&:last-child {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.select-image {
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
|
||
.select-icon {
|
||
width: 51rpx;
|
||
height: 51rpx;
|
||
}
|
||
}
|
||
|
||
.cell-body {
|
||
flex: 1;
|
||
min-width: 0;
|
||
margin-left: 24rpx;
|
||
margin-right: 16rpx;
|
||
|
||
.select-title {
|
||
font-size: 30rpx;
|
||
color: #666666;
|
||
line-height: 1.4;
|
||
}
|
||
|
||
.select-sub-title {
|
||
margin-top: 8rpx;
|
||
font-size: 24rpx;
|
||
color: #cccccc;
|
||
line-height: 1.4;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style>
|