319 lines
9.6 KiB
Vue
Raw Normal View History

2025-04-11 17:32:55 +08:00
<template>
2025-04-14 15:33:58 +08:00
<div class="user-orders-warp">
<userHeader :title="'订单管理'"></userHeader>
<div class="user-orders-content">
<div class="order-tab">
<el-tabs v-model="activeCurrent">
<el-tab-pane v-for="(t, indext) in bottomList" :key="indext" :label="t.title" :name="t.name"> </el-tab-pane>
</el-tabs>
</div>
<div class="order-list-warp">
<div class="order-list">
<div v-for="(o, indexo) in orderList" :key="indexo" class="order-item">
<div class="order-item-top">
<div class="top-l">
<div class="top-item">
<div class="label">订单编号</div>
<div class="val">{{ o.orderNo || '--' }}</div>
</div>
<div class="top-item">
<div class="label">下单时间</div>
<div class="val">{{ o.createTime || '--' }}</div>
</div>
</div>
<div class="top-r">
<div class="top-item">
<div class="label">订单金额</div>
<div class="val amount">{{ o.payAmount.toFixed(2) || '0.00' }}</div>
</div>
</div>
</div>
<div v-if="o.goodlist && o.goodlist.length > 0" class="order-item-content">
<div class="content-list">
<div v-for="(g, indexg) in o.goodlist" :key="indexg" class="good-item">
2025-04-14 16:47:58 +08:00
<div class="good-img">
2025-04-14 15:33:58 +08:00
<costomImg
:url="'images/ecommerce/' + 'pic.png'"
:preview-list="[getAssetsFile('images/ecommerce/' + 'pic.png')?.href ?? '']"
:is-view="false"
></costomImg>
</div>
2025-04-14 16:47:58 +08:00
<div class="good-info">
2025-04-14 15:33:58 +08:00
<div class="good-info-pos">
<div class="txt-ellipsis clamp2">{{ g.title || '--' }}</div>
</div>
</div>
<div class="good-price-num">
<div class="good-price-num-pos">
2025-04-14 16:47:58 +08:00
<div class="price">{{ g.price }} / {{ g.unit }} * {{ g.num }}</div>
<div class="total">
<div class="amount">{{ (g.price * g.num + g.carriage).toFixed(2) }}</div>
2025-04-14 15:33:58 +08:00
<div class="carriage">( 含运费{{ g.carriage.toFixed(2) }})</div>
</div>
</div>
</div>
</div>
</div>
<div class="content-right">
2025-04-14 16:47:58 +08:00
<div class="content-right-pos">
<div v-if="o.status == 0" class="right-item do-btn">
<el-button type="primary" @click="doPay">立即付款</el-button>
</div>
<div v-if="o.status == 0" class="right-item do-btn">
<el-button @click="doPay">取消订单</el-button>
</div>
<div v-if="o.status != 0" class="right-item">已发货</div>
<div v-if="o.status != 0" class="right-item text-link">快递单号</div>
<div class="right-item text-link">订单详情</div>
</div>
2025-04-14 15:33:58 +08:00
</div>
</div>
</div>
</div>
</div>
</div>
</div>
2025-04-11 17:32:55 +08:00
</template>
<script setup>
import { ref, reactive } from 'vue';
import { isEmpty, getAssetsFile } from '@/utils';
import { useRoute, useRouter } from 'vue-router';
2025-04-14 15:33:58 +08:00
import userHeader from './components/userHeader.vue';
2025-04-11 17:32:55 +08:00
const route = useRoute();
const router = useRouter();
2025-04-14 15:33:58 +08:00
let bottomList = reactive([
{ title: '全部', name: 'all' },
{ title: '待付款', name: 'topay' },
{ title: '待发货', name: 'pending' },
{ title: '待收货', name: 'receive' },
{ title: '已发货', name: 'sendout' },
]);
let activeCurrent = ref('all');
let orderList = reactive([
{
id: '1',
orderNo: 'YH8888888888',
createTime: '2025.01.01 10:00:00',
2025-04-14 16:47:58 +08:00
payAmount: 81,
status: 0,
2025-04-14 15:33:58 +08:00
goodlist: [
{ id: '001', title: '耿马镇 原生态 有机 西红柿', price: 4.9, unit: '份', num: 10, carriage: 6 },
{ id: '002', title: '耿马镇 原生态 有机 西蓝花', price: 2.6, unit: '份', num: 10, carriage: 0 },
],
},
{
id: '2',
orderNo: 'YH8888888889',
createTime: '2025.02.01 10:00:00',
2025-04-14 16:47:58 +08:00
payAmount: 110,
status: 1,
2025-04-14 15:33:58 +08:00
goodlist: [
{ id: '001', title: '耿马镇 原生态 有机 西红柿', price: 4.8, unit: '份', num: 10, carriage: 6 },
{ id: '002', title: '耿马镇 原生态 有机 西蓝花', price: 2.5, unit: '份', num: 10, carriage: 6 },
{ id: '002', title: '耿马镇 原生态 有机 茄子', price: 2.5, unit: '份', num: 10, carriage: 0 },
],
},
2025-04-14 16:47:58 +08:00
{
id: '3',
orderNo: 'YH8888888899',
createTime: '2025.02.01 10:00:00',
payAmount: 85,
status: 2,
goodlist: [
{ id: '001', title: '勐简镇 原生态 有机 西红柿', price: 4.8, unit: '份', num: 10, carriage: 6 },
{ id: '002', title: '勐简镇 原生态 有机 西蓝花', price: 2.5, unit: '份', num: 10, carriage: 6 },
],
},
2025-04-14 15:33:58 +08:00
]);
2025-04-14 16:47:58 +08:00
const doPay = () => {};
2025-04-11 17:32:55 +08:00
</script>
<style lang="scss" scoped>
.user-orders-warp {
width: 100%;
2025-04-14 15:33:58 +08:00
.user-orders-content {
width: 100%;
background: $color-fff;
border-radius: 16px;
padding: 16px;
margin-top: 16px;
height: calc(100vh - 136px);
}
.order-tab {
width: 100%;
::v-deep() {
.el-tabs__nav-wrap:after {
background: transparent !important;
}
.el-tabs__item {
font-size: 20px !important;
}
.el-tabs__active-bar {
height: 5px !important;
border-radius: 4px;
}
.el-descriptions__label,
.el-descriptions__content {
font-size: 16px !important;
}
.cell-item {
display: inline-flex;
}
.el-descriptions__label {
color: $color-999;
}
.el-descriptions__content {
color: $color-333;
}
}
}
.order-list-warp {
width: 100%;
2025-04-14 15:52:40 +08:00
height: calc(100% - 60px);
overflow-y: auto;
2025-04-14 15:33:58 +08:00
.order-list {
width: 100%;
.order-item {
width: 100%;
.order-item-top {
display: inline-flex;
width: 100%;
padding: 16px 0;
.top-l,
.top-r {
display: inline-block;
vertical-align: middle;
}
.top-l {
display: inline-flex;
width: 80%;
gap: 64px;
justify-content: flex-start;
}
.top-r {
text-align: right;
}
.top-item {
display: inline-flex;
justify-content: flex-start;
.label,
.val {
font-size: 18px;
}
.label {
padding-right: 8px;
}
.amount::before {
content: '¥';
}
}
}
.order-item-content {
background: $color-f5;
display: inline-flex;
width: 100%;
border-radius: 16px;
.content-list,
.content-right {
display: inline-block;
vertical-align: top;
}
.content-list {
2025-04-14 16:47:58 +08:00
width: calc(100% - 160px);
2025-04-14 15:33:58 +08:00
.good-item {
display: inline-flex;
width: 100%;
justify-content: flex-start;
gap: 16px;
padding-left: 16px;
margin: 8px 0;
}
.good-img,
.good-info,
.good-price-num {
display: inline-block;
vertical-align: middle;
}
.good-img {
width: 120px;
height: 120px;
}
.good-info {
width: 200px;
display: inline-flex;
flex-direction: column;
justify-content: center;
.good-info-pos {
font-size: 18px;
color: $color-666;
}
}
.good-price-num {
width: calc(100% - 340px);
display: inline-flex;
justify-content: center;
flex-direction: column;
.good-price-num-pos {
display: inline-flex;
justify-content: space-around;
gap: 16px;
.price,
.total {
font-size: 20px;
}
.price {
font-weight: 400;
}
.total {
text-align: center;
.amount {
color: $color-main;
font-weight: 700;
}
.amount::before {
content: '¥';
}
.carriage {
color: $color-666;
font-size: 16px;
}
}
}
}
}
.content-right {
2025-04-14 16:47:58 +08:00
width: 160px;
2025-04-14 15:33:58 +08:00
display: inline-flex;
justify-content: center;
flex-direction: column;
2025-04-14 16:47:58 +08:00
text-align: center;
2025-04-14 15:33:58 +08:00
.content-right-pos {
2025-04-14 16:47:58 +08:00
.text-normal {
cursor: pointer;
font-size: 16px;
}
.text-link {
color: $color-main;
cursor: pointer;
font-size: 16px;
}
}
.do-btn {
margin-top: 8px;
2025-04-14 15:33:58 +08:00
}
}
}
}
}
}
2025-04-11 17:32:55 +08:00
}
</style>