<template> <view class="shop-item"> <view class="item-title" @click="navTo"> <view>{{order_id}}</view> <view v-if="datas.paid==0"> <text>待付款</text> </view> <view v-else> <text v-if="datas.status==0">待核销</text> <text v-if="datas.status==1">待核销</text> <text v-if="datas.status==2||datas.status==3">已完成</text> </view> </view> <view class="item-body" @click="navTo"> <view class="body-content"> <view> <view v-for="(item,index) in datas.goods_list" :key="index" style="display: flex;margin-bottom: 20rpx;"> <image class="image" :src="item.image"></image> <view style="width: 520rpx;"> <view class="" style="display: flex;justify-content: space-between;"> <view> {{item.store_name}} </view> <view style="font-size: 32rpx;"> ¥{{item.price}} </view> </view> <view class="" style="display: flex;justify-content: space-between;"> <view> {{item.unit_name}} </view> <view style="font-size: 32rpx;"> x{{item.cart_num}} </view> </view> </view> </view> </view> <!-- <view style="display: flex;flex-direction: column;align-items: center;justify-content: center;width: 100rpx;"> <up-icon name="arrow-right-double" color="#20B128"></up-icon> </view> --> </view> <view class="all">共 {{datas.goods_count}} 件商品, 总金额 <text>¥{{datas.total_price}}</text> </view> </view> <view v-if="datas.paid==0" class="item-btn"> <view style="width: 80px;"><up-button size="small" plain color="#989898" shape="circle" @click="cancleOrder">取消订单</up-button></view> <view style="width: 80px;"><up-button size="small" color="#20B128" shape="circle" @click="rePay">立即支付</up-button></view> </view> <view v-else class="item-btn"> <view @click="showVerifyPop=true,options.code=datas.verify_code" v-if="datas.status==1" style="width: 80px;"><up-button size="small" plain color="#20B128" shape="circle">核销码</up-button></view> <view @click="purchaseAgain" v-if="datas.status==2||datas.status==3" style="width: 80px;"><up-button size="small" plain color="#20B128" shape="circle">再次购买</up-button></view> <view @click="navTo" style="width: 80px;"><up-button size="small" plain color="#20B128" shape="circle">查看详情</up-button></view> <view @click="applySh" style="width: 80px;" v-if="datas.status == 1 || datas.status == 2"><up-button size="small" plain color="#ccc" shape="circle">申请售后</up-button></view> </view> </view> <up-popup :show="showVerifyPop" @close="showVerifyPop=false" @open="showVerifyPop=true" mode="center"> <view style="width: 80vw;height: 20vh;position: relative;"> <view style="position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);"> <w-barcode :options="options"></w-barcode> <view style="font-weight: bold;color: #333;font-size: 26;text-align: center;"> 核销码 {{datas.verify_code}} </view> </view> </view> </up-popup> </template> <script setup> import { ref, reactive } from "vue" // 订单状态(0:待发货;1:待收货;2:已完成;3:已完成) const props = defineProps({ type: { type: Number, default: 0 }, datas: { type: Object, default: () => {} }, status: { type: String, default: '' }, order_id: { type: String, default: '0' } }) const navTo = () => { if (props.status == 4) { uni.navigateTo({ url: "/pages/afterSales/afterSalesOrderDetail?id=" + props.datas.id }) } else { uni.navigateTo({ url: `/pagesOrder/detail/detail?type=${props.datas.paid}&id=${props.datas.id}` }) } } const emit = defineEmits(['cancleOrder', 'rePay', 'takeOrder', 'purchaseAgain']); const cancleOrder = () => { emit('cancleOrder', props.datas) } const takeOrder = () => { emit('takeOrder', props.datas) } const purchaseAgain = () => { emit('purchaseAgain', props.datas) } const rePay = () => { emit('rePay', props.datas) } const applySh = () => { emit('applyAfterSales', props.datas) } const showVerifyPop = ref(false) const options = reactive({ width: 500, // 宽度 单位rpx height: 100, // 高度 单位rpx code: props.datas.verify_code, // 生成条形码的值 }, ) </script> <style lang="scss"> .shop-item { width: 710rpx; margin-bottom: 20rpx; background-color: #fff; border-radius: 14rpx; padding: 20rpx; box-sizing: border-box; .item-title { display: flex; justify-content: space-between; } .item-body { margin: 20rpx 0; .body-content { display: flex; justify-content: space-between; color: #989898; .image { width: 120rpx; height: 120rpx; margin-right: 20rpx; border-radius: 14rpx; } .title { display: flex; justify-content: space-between; font-size: 28rpx; color: #444; } .tips { display: flex; justify-content: space-between; font-size: 24rpx; margin-top: 10rpx; } } .all { text-align: right; font-size: 26rpx; text { color: #F55726; } } } .item-btn { display: flex; justify-content: flex-end; view { width: 80rpx; margin-left: 20rpx; } } .item-close { display: flex; justify-content: space-between; align-items: center; background-color: #F6F6F6; padding: 15rpx; border-radius: 14rpx; .title { display: flex; .type { font-weight: 600; margin-right: 20rpx; } } } } </style>