320 lines
8.7 KiB
Vue
320 lines
8.7 KiB
Vue
|
|
<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>
|