|
@@ -8,8 +8,8 @@
|
|
|
<sa-search-simple
|
|
|
:searchFields="searchFields"
|
|
|
:defaultValues="defaultSearchValues"
|
|
|
- @search="(val) => getData(1, val)"
|
|
|
- @reset="getData(1)"
|
|
|
+ @search="handleSearch"
|
|
|
+ @reset="handleReset"
|
|
|
>
|
|
|
<template #custom="{ data }">
|
|
|
<el-form-item label="下单时间">
|
|
@@ -30,14 +30,14 @@
|
|
|
</div>
|
|
|
<el-tabs class="sa-tabs" v-model="currentStatus" @tab-change="handleTabChange">
|
|
|
<el-tab-pane label="全部" name="all"></el-tab-pane>
|
|
|
- <el-tab-pane label="待付款" name="unpaid"></el-tab-pane>
|
|
|
- <el-tab-pane label="已付款" name="paid"></el-tab-pane>
|
|
|
- <el-tab-pane label="待发货" name="nosend"></el-tab-pane>
|
|
|
- <el-tab-pane label="待收货" name="noget"></el-tab-pane>
|
|
|
+ <el-tab-pane label="待支付" name="to_pay"></el-tab-pane>
|
|
|
+ <el-tab-pane label="已支付" name="paid"></el-tab-pane>
|
|
|
+ <el-tab-pane label="已退款" name="refund"></el-tab-pane>
|
|
|
+ <el-tab-pane label="待发货" name="to_ship"></el-tab-pane>
|
|
|
<el-tab-pane label="已完成" name="completed"></el-tab-pane>
|
|
|
- <el-tab-pane label="已关闭" name="closed"></el-tab-pane>
|
|
|
- <el-tab-pane label="已退款" name="refunded"></el-tab-pane>
|
|
|
- <el-tab-pane label="已取消" name="cancelled"></el-tab-pane>
|
|
|
+ <el-tab-pane label="待收货" name="to_receive"></el-tab-pane>
|
|
|
+ <el-tab-pane label="已关闭" name="to_closed"></el-tab-pane>
|
|
|
+ <el-tab-pane label="已取消" name="cancellation"></el-tab-pane>
|
|
|
</el-tabs>
|
|
|
<div class="sa-title sa-flex sa-row-between">
|
|
|
<div class="label sa-flex">
|
|
@@ -53,7 +53,7 @@
|
|
|
>订单导出</el-button
|
|
|
>
|
|
|
<el-button
|
|
|
- v-if="currentStatus == 'nosend'"
|
|
|
+ v-if="currentStatus == 'to_ship'"
|
|
|
:loading="exportLoading"
|
|
|
:disabled="exportLoading"
|
|
|
@click="onExportDelivery()"
|
|
@@ -130,31 +130,17 @@
|
|
|
<div>৳{{ scope.row.payPrice || 0 }}</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="支付状态" min-width="100" align="center">
|
|
|
- <template #default="scope">
|
|
|
- <el-tag :type="scope.row.paid === 1 ? 'success' : 'warning'">
|
|
|
- {{ scope.row.paid === 1 ? '已付款' : '待付款' }}
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
<el-table-column label="订单状态" min-width="100" align="center">
|
|
|
<template #default="scope">
|
|
|
- <el-tag :type="getOrderStatusType(scope.row.status)">
|
|
|
- {{ getOrderStatusText(scope.row.status) }}
|
|
|
+ <el-tag :type="getStatusType('order', scope.row.status)">
|
|
|
+ {{ getStatusText('order', scope.row.status) }}
|
|
|
</el-tag>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="拼团状态" min-width="100" align="center">
|
|
|
<template #default="scope">
|
|
|
- <el-tag :type="getPinkStatusType(scope.row.pinkStatus)">
|
|
|
- {{ getPinkStatusText(scope.row.pinkStatus) }}
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="退款状态" min-width="100" align="center">
|
|
|
- <template #default="scope">
|
|
|
- <el-tag :type="getRefundStatusType(scope.row.refundStatus)">
|
|
|
- {{ getRefundStatusText(scope.row.refundStatus) }}
|
|
|
+ <el-tag :type="getStatusType('pink', scope.row.pinkStatus)">
|
|
|
+ {{ getStatusText('pink', scope.row.pinkStatus) }}
|
|
|
</el-tag>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
@@ -185,7 +171,7 @@
|
|
|
>发货测试</el-button
|
|
|
>
|
|
|
<el-button
|
|
|
- v-if="scope.row.paid === 1 && scope.row.status === 0"
|
|
|
+ v-if="scope.row.status === 5"
|
|
|
class="is-link"
|
|
|
type="primary"
|
|
|
@click="onSend(scope.row)"
|
|
@@ -195,7 +181,7 @@
|
|
|
>详情</el-button
|
|
|
>
|
|
|
<el-button
|
|
|
- v-if="scope.row.paid === 0"
|
|
|
+ v-if="scope.row.status === 1"
|
|
|
class="is-link sa-m-l-12"
|
|
|
type="danger"
|
|
|
@click="cancelOrder(scope.row.id)"
|
|
@@ -233,14 +219,7 @@
|
|
|
</script>
|
|
|
<script setup>
|
|
|
import { onMounted, reactive, ref } from 'vue';
|
|
|
- import {
|
|
|
- api,
|
|
|
- getPayStatusInfo,
|
|
|
- getOrderStatusInfo,
|
|
|
- getRefundStatusInfo,
|
|
|
- getPinkStatusInfo,
|
|
|
- getPayTypeText,
|
|
|
- } from '../order.service';
|
|
|
+ import { api, getOrderStatusInfo, getPinkStatusInfo } from '../order.service';
|
|
|
import { useModal, usePagination } from '@/sheep/hooks';
|
|
|
import OrderDispatch from './dispatch.vue';
|
|
|
import OrderBatchDispatch from './batchDispatch.vue';
|
|
@@ -288,59 +267,64 @@
|
|
|
// 当前状态标签
|
|
|
const currentStatus = ref('all');
|
|
|
|
|
|
- // 状态映射 - 根据后端字段定义
|
|
|
+ // 状态映射 - 根据新的状态机定义
|
|
|
const statusMap = {
|
|
|
- all: {}, // 全部 - 不传任何状态参数
|
|
|
- unpaid: { paid: 0 }, // 待付款:支付状态为0
|
|
|
- paid: { paid: 1 }, // 已付款:支付状态为1(不限制订单状态)
|
|
|
- nosend: { paid: 1, status: 0 }, // 待发货:已付款且订单状态为0
|
|
|
- noget: { paid: 1, status: 1 }, // 待收货:已付款且订单状态为1
|
|
|
- completed: { paid: 1, status: 3 }, // 已完成:已付款且订单状态为3
|
|
|
- closed: { status: 4 }, // 已关闭:订单状态为4
|
|
|
- refunded: { refundStatus: 2 }, // 已退款:退款状态为2
|
|
|
- cancelled: { status: 5 }, // 已取消:订单状态为5
|
|
|
+ all: {}, // 全部 - 不传订单状态参数
|
|
|
+ to_pay: { status: 1 }, // 待支付:订单状态为1
|
|
|
+ cancellation: { status: 2 }, // 订单取消:订单状态为2
|
|
|
+ paid: { status: 3 }, // 已支付:订单状态为3
|
|
|
+ refund: { status: 4 }, // 失败已退款:订单状态为4
|
|
|
+ to_ship: { status: 5 }, // 待发货:订单状态为5
|
|
|
+ to_closed: { status: 6 }, // 未中奖关闭:订单状态为6
|
|
|
+ to_receive: { status: 7 }, // 待收货:订单状态为7
|
|
|
+ completed: { status: 8 }, // 订单完成:订单状态为8
|
|
|
};
|
|
|
|
|
|
- // 标签切换处理
|
|
|
- const handleTabChange = (status) => {
|
|
|
- currentStatus.value = status;
|
|
|
- const statusParams = statusMap[status] || {};
|
|
|
- // 合并当前搜索条件和状态参数
|
|
|
- const mergedParams = { ...currentSearchParams.value, ...statusParams };
|
|
|
+ // 搜索处理
|
|
|
+ const handleSearch = (searchParams) => {
|
|
|
+ // 合并搜索条件和当前tab状态
|
|
|
+ const statusParams = statusMap[currentStatus.value] || {};
|
|
|
+ const mergedParams = { ...searchParams, ...statusParams };
|
|
|
getData(1, mergedParams);
|
|
|
};
|
|
|
|
|
|
- // 使用公共配置的状态处理函数
|
|
|
- const getOrderStatusText = (status) => {
|
|
|
- return getOrderStatusInfo(status).text;
|
|
|
+ // 重置处理
|
|
|
+ const handleReset = () => {
|
|
|
+ // 重置时只保留当前tab状态
|
|
|
+ const statusParams = statusMap[currentStatus.value] || {};
|
|
|
+ getData(1, statusParams);
|
|
|
};
|
|
|
|
|
|
- const getOrderStatusType = (status) => {
|
|
|
- return getOrderStatusInfo(status).type;
|
|
|
- };
|
|
|
-
|
|
|
- const getPayStatusText = (paid) => {
|
|
|
- return getPayStatusInfo(paid).text;
|
|
|
- };
|
|
|
+ // 标签切换处理
|
|
|
+ const handleTabChange = (status) => {
|
|
|
+ // 立即更新tab状态,不依赖接口结果
|
|
|
+ currentStatus.value = status;
|
|
|
|
|
|
- const getPayStatusType = (paid) => {
|
|
|
- return getPayStatusInfo(paid).type;
|
|
|
- };
|
|
|
+ // 获取当前tab对应的状态参数
|
|
|
+ const statusParams = statusMap[status] || {};
|
|
|
|
|
|
- const getRefundStatusText = (refundStatus) => {
|
|
|
- return getRefundStatusInfo(refundStatus).text;
|
|
|
- };
|
|
|
+ // 合并当前搜索条件和状态参数
|
|
|
+ const mergedParams = { ...currentSearchParams.value, ...statusParams };
|
|
|
|
|
|
- const getRefundStatusType = (refundStatus) => {
|
|
|
- return getRefundStatusInfo(refundStatus).type;
|
|
|
+ // 调用数据获取,无论成功与否都不影响tab状态
|
|
|
+ getData(1, mergedParams);
|
|
|
};
|
|
|
|
|
|
- const getPinkStatusText = (pinkStatus) => {
|
|
|
- return getPinkStatusInfo(pinkStatus).text;
|
|
|
+ // 通用状态处理函数
|
|
|
+ const getStatusText = (type, value) => {
|
|
|
+ const statusMap = {
|
|
|
+ order: getOrderStatusInfo,
|
|
|
+ pink: getPinkStatusInfo,
|
|
|
+ };
|
|
|
+ return statusMap[type]?.(value)?.text || '未知';
|
|
|
};
|
|
|
|
|
|
- const getPinkStatusType = (pinkStatus) => {
|
|
|
- return getPinkStatusInfo(pinkStatus).type;
|
|
|
+ const getStatusType = (type, value) => {
|
|
|
+ const statusMap = {
|
|
|
+ order: getOrderStatusInfo,
|
|
|
+ pink: getPinkStatusInfo,
|
|
|
+ };
|
|
|
+ return statusMap[type]?.(value)?.type || 'info';
|
|
|
};
|
|
|
|
|
|
const loading = ref(true);
|
|
@@ -355,40 +339,50 @@
|
|
|
|
|
|
const { pageData } = usePagination();
|
|
|
|
|
|
- // 保存当前搜索条件
|
|
|
+ // 保存当前搜索条件(不包含状态参数)
|
|
|
const currentSearchParams = ref({});
|
|
|
|
|
|
// 获取数据
|
|
|
async function getData(page, searchParams = {}) {
|
|
|
- // 保存搜索条件供导出使用
|
|
|
- if (Object.keys(searchParams).length > 0) {
|
|
|
- currentSearchParams.value = { ...searchParams };
|
|
|
+ // 分离搜索条件和状态参数
|
|
|
+ const { paid, status, refundStatus, ...pureSearchParams } = searchParams;
|
|
|
+
|
|
|
+ // 保存纯搜索条件(不包含状态参数)
|
|
|
+ if (Object.keys(pureSearchParams).length > 0) {
|
|
|
+ currentSearchParams.value = { ...pureSearchParams };
|
|
|
}
|
|
|
+
|
|
|
if (page) pageData.page = page;
|
|
|
loading.value = true;
|
|
|
|
|
|
- // 构建请求参数
|
|
|
- const requestData = {
|
|
|
- page: pageData.page,
|
|
|
- size: pageData.size,
|
|
|
- ...searchParams,
|
|
|
- };
|
|
|
+ try {
|
|
|
+ // 构建请求参数
|
|
|
+ const requestData = {
|
|
|
+ page: pageData.page,
|
|
|
+ size: pageData.size,
|
|
|
+ ...searchParams,
|
|
|
+ };
|
|
|
|
|
|
- // 处理时间范围搜索
|
|
|
- if (searchParams.createTime && searchParams.createTime.length === 2) {
|
|
|
- requestData.startTime = searchParams.createTime[0];
|
|
|
- requestData.endTime = searchParams.createTime[1];
|
|
|
- delete requestData.createTime;
|
|
|
- }
|
|
|
+ // 处理时间范围搜索
|
|
|
+ if (searchParams.createTime && searchParams.createTime.length === 2) {
|
|
|
+ requestData.startTime = searchParams.createTime[0];
|
|
|
+ requestData.endTime = searchParams.createTime[1];
|
|
|
+ delete requestData.createTime;
|
|
|
+ }
|
|
|
|
|
|
- const { code, data } = await api.order.list(requestData);
|
|
|
+ const { code, data } = await api.order.list(requestData);
|
|
|
|
|
|
- if (code == '200') {
|
|
|
- table.data = data.list;
|
|
|
- pageData.page = data.pageNum;
|
|
|
- pageData.total = data.total;
|
|
|
+ if (code == '200') {
|
|
|
+ table.data = data.list;
|
|
|
+ pageData.page = data.pageNum;
|
|
|
+ pageData.total = data.total;
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取订单列表失败:', error);
|
|
|
+ // 接口失败时也要确保loading状态正确
|
|
|
+ } finally {
|
|
|
+ loading.value = false;
|
|
|
}
|
|
|
- loading.value = false;
|
|
|
}
|
|
|
|
|
|
// table 字段排序
|
|
@@ -408,8 +402,9 @@
|
|
|
async function onExport() {
|
|
|
exportLoading.value = true;
|
|
|
try {
|
|
|
- // 构建导出参数,使用当前搜索条件但不包含分页参数
|
|
|
- const exportParams = { ...currentSearchParams.value };
|
|
|
+ // 构建导出参数:合并搜索条件和当前tab状态
|
|
|
+ const statusParams = statusMap[currentStatus.value] || {};
|
|
|
+ const exportParams = { ...currentSearchParams.value, ...statusParams };
|
|
|
|
|
|
// 处理时间范围搜索
|
|
|
if (exportParams.createTime && exportParams.createTime.length === 2) {
|
|
@@ -418,13 +413,12 @@
|
|
|
delete exportParams.createTime;
|
|
|
}
|
|
|
|
|
|
- // 添加当前状态筛选
|
|
|
- const statusParams = statusMap[currentStatus.value] || {};
|
|
|
- Object.assign(exportParams, statusParams);
|
|
|
-
|
|
|
await api.order.export(exportParams, '订单记录');
|
|
|
- } catch (error) {}
|
|
|
- exportLoading.value = false;
|
|
|
+ } catch (error) {
|
|
|
+ console.error('导出订单失败:', error);
|
|
|
+ } finally {
|
|
|
+ exportLoading.value = false;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
async function onExportDelivery() {
|