Files
MER-2.2_2601/mer_uniapp/components/orderGoods/index.vue
2026-03-08 20:07:52 +08:00

320 lines
8.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="orderGoods borRadius14">
<view class="flex-between-center">
<view>
<navigator v-if="orderInfo.merName" :url="`/pages/merchant/home/index?merId=`+ orderInfo.merId"
hover-class="none">
<view class='total flex-y-center'>
<text class="mr10 iconfont icon-ic_mall"></text>
<text class="mr-2">{{orderInfo.merName || ''}}</text>
<text v-if="orderInfo.orderInfoList && orderInfo.orderInfoList[0].productType != ProductTypeEnum.PunchCard"
class="iconfont icon-ic_rightarrow"></text>
</view>
</navigator>
</view>
<!-- 次卡商品核销记录 -->
<view
v-if="isShowRecord && orderInfo.orderInfoList && orderInfo.orderInfoList[0].productType == ProductTypeEnum.PunchCard">
<navigator hover-class='none'
:url="'/pages/goods/punch_card_record_list/index?type=users&orderNo='+orderData.orderNo">
<view class="color-666">
<text>核销记录</text>
<text class="iconfont icon-ic_rightarrow ver-right-icon"></text>
</view>
</navigator>
</view>
</view>
<view v-if="orderInfo.workOrderNo" class='flex-between-center pt-32'>
<text class="f-s-28">工单号</text>
<view class="flex-y-center">
<text class="f-s-28">{{orderInfo.workOrderNo || ''}}</text>
<view class="copy-btn-box" @click="handleSetClipboard(orderInfo.workOrderNo)">
<text>复制</text>
</view>
<!-- <button class="copy-btn ml-16 f-s-28" @click="handleSetClipboard(orderInfo.workOrderNo)">复制</button> -->
</view>
</view>
<view v-show="orderData.secondType ===1" class='total'>
<text class="mr10 iconfont icon-zhuanti"></text>
<text class="mr10">积分商品兑换</text>
</view>
<view class='goodWrapper' :class="{'pad24': orderInfo.merName}">
<view class="item" v-for="(item,index) in cartInfo" :key="index">
<view class='acea-row row-between-wrapper' @click="jumpCon(item)">
<view class='pictrue'>
<image :src='item.image'></image>
</view>
<view class='text'>
<view class='acea-row row-between-wrapper'>
<view class='name' :class="item.price|| item.productPrice ? 'line1': 'line2'">{{item.productName || ''}}
</view>
<view class='num line-heightOne' v-if="item.payNum">x {{item.payNum}}</view>
</view>
<view class='attr' v-if="item.sku">{{item.sku}}</view>
<!-- 积分价格 -->
<PointsPrice v-if="secondType === ProductTypeEnum.Integral" :pointsPrice="item"
:pointsGoodsStyle="hotPointsStyle" class="mt-20"></PointsPrice>
<!-- 其他价格 -->
<view v-else class='acea-row justify-between' style="align-items: baseline;">
<view v-show="item.price || item.productPrice" class="acea-row">
<view class='money line-heightOne regular fw-500'>{{item.price || item.productPrice}}</view>
</view>
<view
v-if="(item.deliveryMethod == 1 || !orderInfo.takeTheirSwitch) && !jump && Number(item.productType)==0"
class="font-color">不支持到店自提</view>
<view v-if="item.deliveryMethod == 2 && !jump && Number(item.productType)==0" class="font-color">不支持商家配送
</view>
</view>
</view>
</view>
<!-- 订单状态0待支付1待发货,2部分发货 3待使用4待收货,5已收货,6已完成9已取消 -->
<view v-if="isShowBtn" class="acea-row evaluateBox">
<view v-show="getApplyRefundNum(item)>0" class="text">申请售后
数量{{(getApplyRefundNum(item))}} </view>
<view class='evaluate text-666 fs-22' v-if="isRefund(item) && getApplyRefundNum(item)< item.payNum"
@click.stop="goRefund(item)"><text class="line-heightOne">申请退款</text>
</view>
<!-- 虚拟商品退款需要判断是否开启退款按钮 -->
</view>
</view>
</view>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import {
goProductDetail
} from "@/libs/order";
import {
ProductTypeEnum,
ProductMarketingTypeEnum
} from "@/enums/productEnums";
import PointsPrice from '@/components/PointsPrice.vue';
import {
handleSetClipboard
} from "../../libs/order";
/**
* 积分商品推荐样式
*/
const hotPointsStyle = {
iconStyle: {
width: '28rpx',
height: '28rpx'
},
priceStyle: {
fontSize: '26rpx',
},
unitStyle: {
fontSize: '24rpx',
},
}
export default {
props: {
//订单详情
orderData: {
type: Object,
default: function() {
return {};
}
},
//商品信息
cartInfo: {
type: Array,
default: function() {
return [];
}
},
orderNo: {
type: String,
default: '',
},
jump: {
type: Boolean,
default: false,
},
orderProNum: {
type: Number,
default: function() {
return 0;
}
},
//商户整条对象信息
orderInfo: {
type: Object,
default: function() {
return {};
}
},
//是否显示操作按钮
isShowBtn: {
type: Boolean,
default: true,
},
//订单二级类型:0-普通订单1-积分订单2-虚拟订单4-视频号订单5-云盘订单6-卡密订单
secondType: {
type: Number,
default: function() {
return 0;
}
},
// 是否展示核销记录,预下单不展示
isShowRecord: {
type: Boolean,
default: true
}
},
components: {
PointsPrice
},
data() {
return {
hotPointsStyle: hotPointsStyle,
totalNmu: '',
ProductMarketingTypeEnum: ProductMarketingTypeEnum,
ProductTypeEnum: ProductTypeEnum,
};
},
watch: {
cartInfo: function(nVal, oVal) {
let num = 0
nVal.forEach((item, index) => {
num += item.cartNum
})
this.totalNmu = num
}
},
methods: {
handleSetClipboard,
// 普通商品、虚拟(开启可申请退款开关)、视频号可申请退款
isRefund(item) {
return (this.secondType === this.ProductTypeEnum.Normal || this.secondType === this.ProductTypeEnum
.Reservation ||
this.secondType === this.ProductTypeEnum.Video ||
(this.secondType === this.ProductTypeEnum.Fictitious && item.proRefundSwitch) ||
this.secondType === this.ProductTypeEnum.PunchCard && this.orderData.cardIfRefund) &&
this.orderData.status > 0 && this.orderData.status < 6;
},
// 退款数量
getApplyRefundNum(item) {
return Number(item.applyRefundNum) + Number(item.refundNum)
},
/**
* 退款申请
*/
goRefund(item) {
item.groupBuyActivityId = this.orderData.groupBuyActivityId
this.$Cache.set('productInfo', item)
if (this.secondType === this.ProductTypeEnum.Reservation || this.secondType === this.ProductTypeEnum.PunchCard) {
uni.navigateTo({
url: `/pages/goods/goods_return/index?orderNo=${this.orderNo}&orderId=${item.id}&afterSalesType=1`
})
} else {
uni.navigateTo({
url: `/pages/goods/after_sales_type/index?orderNo=${this.orderNo}&orderId=${item.id}`
})
}
},
jumpCon: function(item) {
let type = item.hasOwnProperty('productMarketingType') ? item.productMarketingType : item.hasOwnProperty(
'productType') ? item.productType : item.type;
if (this.jump) {
goProductDetail(item.productId, type, '')
}
}
}
}
</script>
<style scoped lang="scss">
.copy-btn {
color: #2291F8FF;
}
.evaluateBox {
position: relative;
margin-top: 10rpx;
.text {
font-size: 20rpx;
color: #868686;
}
}
.evaluate {
// width: auto !important;
width: 136rpx !important;
height: 52rpx !important;
border-radius: 40rpx !important;
}
.pad24 {
padding: 32rpx 0 0;
}
.orderGoods {
background-color: #fff;
padding: 24rpx 0;
}
.money {
@include price_color(theme);
}
.orderGoods .total {
width: 100%;
font-size: 30rpx;
color: #282828;
box-sizing: border-box;
.icon-ic_rightarrow {
font-size: 28rpx;
}
}
.pictrue image {
background: #f4f4f4;
}
.goodWrapper {
.item {
margin-bottom: 30rpx;
}
.item:nth-last-child(1) {
margin-bottom: 0;
}
.name {
width: 87%;
}
}
.copy-btn-box {
background: #F5F5F5;
border-radius: 200rpx 200rpx 200rpx 200rpx;
padding: 0 12rpx;
margin-left: 8rpx;
font-size: 22rpx;
}
.ver-right-icon {
font-size: 24rpx;
margin-left: 4rpx;
}
.color-666 {
color: #666;
}
</style>