|
@@ -1,6 +1,6 @@
|
|
|
<template>
|
|
|
<div>
|
|
|
- <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa" @update:modelValue="getOrderPage">
|
|
|
+ <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa" @update:modelValue="queryParams.pageNo = 1, getOrderPage()">
|
|
|
<v-tab v-for="(val, i) in tabList" :key="i" :value="val.value">{{ val.title }}</v-tab>
|
|
|
</v-tabs>
|
|
|
<div v-if="orderList.length" class="mt-3">
|
|
@@ -10,17 +10,18 @@
|
|
|
<span>订单号:{{ val.no }}</span>
|
|
|
<span class="ml-5">{{ timesTampChange(val.createTime) }}</span>
|
|
|
</div>
|
|
|
- <div class="text-end color-warning" style="flex: 1">
|
|
|
- 待发货
|
|
|
+ <div class="text-end color-warning" :class="formatOrderColor(val)" style="flex: 1">
|
|
|
+ {{ formatOrderStatus(val) }}
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-for="k in val.items" :key="k.id" class="order-item-goods px-3 pt-3">
|
|
|
- <div class="d-flex">
|
|
|
+ <div v-for="k in val.items" :key="k.id" class="order-item-goods px-3 pt-3 cursor-pointer" @click="handleDetail(val)">
|
|
|
+ <div class="d-flex align-center">
|
|
|
<div style="width: 90px; height: 90px">
|
|
|
<v-img :src="k.picUrl"></v-img>
|
|
|
</div>
|
|
|
<div class="ml-5">
|
|
|
<p class="font-size-15">{{ k.spuName }}</p>
|
|
|
+ <p class="color-999 font-size-14">{{ k.properties.map((property) => property.valueName).join(' ') }}</p>
|
|
|
<p>
|
|
|
<span class="color-333">¥{{ fen2yuan(k.price) }}</span>
|
|
|
<span v-if="k.count" class="color-999 font-size-13 ml-1">x {{ k.count }}</span>
|
|
@@ -29,8 +30,18 @@
|
|
|
</div>
|
|
|
<v-divider class="mt-3"></v-divider>
|
|
|
</div>
|
|
|
- <div class="text-end pa-3 font-size-13 color-666">共{{ val.productCount }}件商品,合计:¥{{ fen2yuan(val.payPrice) }}</div>
|
|
|
+ <div class="text-end pa-3 font-size-13 color-666">
|
|
|
+ <div>共{{ val.productCount }}件商品,合计:¥{{ fen2yuan(val.payPrice) }}</div>
|
|
|
+ <v-btn v-if="val.buttons.length === 0" class="mt-2" variant="tonal" rounded="xl" @click.stop="handleDetail(val)">查看详情</v-btn>
|
|
|
+ <v-btn v-if="val.buttons.includes('confirm')" class="mt-2" variant="tonal" color="success" rounded="xl" @click.stop="handleConfirm(val)">确认收货</v-btn>
|
|
|
+ <v-btn v-if="val.buttons.includes('comment')" class="mt-2" variant="tonal" rounded="xl">评价</v-btn>
|
|
|
+ <v-btn v-if="val.buttons.includes('express')" class="mt-2" variant="tonal" rounded="xl">查看物流</v-btn>
|
|
|
+ <v-btn v-if="val.buttons.includes('cancel')" class="mt-2" variant="tonal" rounded="xl">取消订单</v-btn>
|
|
|
+ <v-btn v-if="val.buttons.includes('delete')" class="mt-2" variant="tonal" color="error" rounded="xl">删除订单</v-btn>
|
|
|
+ <v-btn v-if="val.buttons.includes('pay')" class="mt-2" variant="tonal" rounded="xl">继续支付</v-btn>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ <CtPagination :total="total" :page="queryParams.pageNo" :limit="queryParams.pageSize" @handleChange="handleChangePage"></CtPagination>
|
|
|
</div>
|
|
|
<Empty v-else :elevation="false" :message="tab === -1 ? '暂无订单' : '暂无' + tabList.find(e => e.value === tab).title + '订单'"></Empty>
|
|
|
</div>
|
|
@@ -39,11 +50,14 @@
|
|
|
<script setup>
|
|
|
defineOptions({ name: 'mall-user-order-index'})
|
|
|
import { ref } from 'vue'
|
|
|
-import { getMallOrderPage } from '@/api/mall/user'
|
|
|
-import { getDict } from '@/hooks/web/useDictionaries'
|
|
|
+import { getMallOrderPage, receiveOrder } from '@/api/mall/user'
|
|
|
import { timesTampChange } from '@/utils/date'
|
|
|
-import { fen2yuan } from '@/hooks/web/useGoods'
|
|
|
+import { fen2yuan, handleOrderButtons, formatOrderStatus, formatOrderColor } from '@/hooks/web/useGoods'
|
|
|
+import Confirm from '@/plugins/confirm'
|
|
|
+import Snackbar from '@/plugins/snackbar'
|
|
|
+import { useRouter } from 'vue-router'
|
|
|
|
|
|
+const router = useRouter()
|
|
|
const tab = ref(-1)
|
|
|
const tabList = [
|
|
|
{ title: '全部', value: -1 },
|
|
@@ -64,20 +78,37 @@ const getOrderPage = async () => {
|
|
|
queryParams.value.status = tab.value
|
|
|
if (tab.value === -1) delete queryParams.value.status
|
|
|
if (tab.value === 30) queryParams.value.commentStatus = false
|
|
|
+
|
|
|
const result = await getMallOrderPage(queryParams.value)
|
|
|
+
|
|
|
+ result.list.forEach(order => handleOrderButtons(order))
|
|
|
orderList.value = result.list
|
|
|
total.value = result.total
|
|
|
}
|
|
|
getOrderPage()
|
|
|
|
|
|
-const getDictData = async (dictType, value) => {
|
|
|
- const { data } = await getDict(dictType)
|
|
|
- console.log(data, 'dict-data')
|
|
|
- const obj = data.find(e => e.value === value)
|
|
|
- return obj.label
|
|
|
+// 分页
|
|
|
+const handleChangePage = (e) => {
|
|
|
+ queryParams.value.pageNo = e
|
|
|
+ getOrderPage()
|
|
|
}
|
|
|
-// console.log(getDictLabel('trade_order_status', 10), 'getDictLabel')
|
|
|
|
|
|
+// 查看详情
|
|
|
+const handleDetail = ({ id }) => {
|
|
|
+ // router.push(`/mall/user/order/detail/${id}`)
|
|
|
+ window.open(`/mall/user/order/detail/${id}`)
|
|
|
+}
|
|
|
+
|
|
|
+// 确认收货
|
|
|
+const handleConfirm = ({ id }) => {
|
|
|
+ if (!id) return
|
|
|
+ Confirm('系统提示', '是否确认收货?').then(async () => {
|
|
|
+ await receiveOrder(id)
|
|
|
+ Snackbar.success('收货成功')
|
|
|
+ queryParams.value.pageNo = 1
|
|
|
+ await getOrderPage()
|
|
|
+ })
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
@@ -91,8 +122,5 @@ const getDictData = async (dictType, value) => {
|
|
|
font-size: 13px;
|
|
|
color: #666;
|
|
|
}
|
|
|
- &-goods {
|
|
|
- // border-bottom: 1px solid #dbdbdb;
|
|
|
- }
|
|
|
}
|
|
|
</style>
|