fix(shopOrder): 修复初次加载订单状态筛选问题

- 提取 getStatusFilterByTab 函数实现 tab key 与 statusFilter 的映射
- datasource 函数中当 statusFilter 未设置时,自动根据 activeKey 推导赋值
- onTabs 函数简化为复用 getStatusFilterByTab 函数,减少重复代码
- 确保初次加载时待发货等状态的 tab 能正确筛选订单数据
This commit is contained in:
2026-07-15 01:29:44 +08:00
parent 894592c290
commit 614e843673
2 changed files with 31 additions and 46 deletions

View File

@@ -0,0 +1,7 @@
# 2026-07-15
## 修复 shopOrder 页面默认待发货tab数据不正确
- 根因:`activeKey` 默认为 `'undelivered'`,但 `datasource` 函数只设了 `where.type = 0`,没有设 `statusFilter``statusFilter` 只在用户点击 tab 触发 `onTabs` 时才设置。所以页面初次加载时查的是全部订单而非待发货订单。
- 修复:提取 `getStatusFilterByTab(key)` 公共映射函数,在 `datasource` 中当 `where.statusFilter` 未设置时从 `activeKey` 自动推导。`onTabs` 也简化为复用同一函数。
- 文件:`src/views/shop/shopOrder/index.vue`

View File

@@ -435,6 +435,23 @@
const { enabled: notifyEnabled, toggle: onNotifyToggle, testNotify: onTestNotify } = useOrderNotify({ const { enabled: notifyEnabled, toggle: onNotifyToggle, testNotify: onTestNotify } = useOrderNotify({
onNewOrder: () => reload() onNewOrder: () => reload()
}); });
// 根据tab key获取对应的statusFilter值
// undefined全部0待付款1待发货2待核销3待收货4待评价5已完成6已退款7已删除8已关闭
const getStatusFilterByTab = (key: string): number | undefined => {
const filterMap: Record<string, number> = {
unpaid: 0,
undelivered: 1,
unverified: 2,
unreceived: 3,
unevaluated: 4,
completed: 5,
refunded: 6,
deleted: 7,
cancelled: 8
};
return filterMap[key];
};
// 表格数据源 // 表格数据源
const datasource: DatasourceFunction = ({ const datasource: DatasourceFunction = ({
page, page,
@@ -447,6 +464,10 @@
where.status = filters.status; where.status = filters.status;
} }
where.type = 0; where.type = 0;
// 确保初次加载时也按当前tab筛选statusFilter未设置时从activeKey推导
if (where.statusFilter === undefined) {
where.statusFilter = getStatusFilterByTab(activeKey.value);
}
return pageShopOrder({ return pageShopOrder({
...where, ...where,
...orders, ...orders,
@@ -527,54 +548,11 @@
}; };
const onTabs = () => { const onTabs = () => {
// 使用statusFilter进行筛选这是后端专门为订单状态筛选设计的字段
const filterParams: Record<string, any> = {}; const filterParams: Record<string, any> = {};
const sf = getStatusFilterByTab(activeKey.value);
// 根据后端 statusFilter 的值对应: if (sf !== undefined) {
// undefined全部0待付款1待发货2待核销3待收货4待评价5已完成6已退款7已删除 filterParams.statusFilter = sf;
switch (activeKey.value) {
case 'all':
// 全部订单不传statusFilter参数
// filterParams.statusFilter = undefined; // 不设置该字段
break;
case 'unpaid':
// 待付款pay_status = false
filterParams.statusFilter = 0;
break;
case 'undelivered':
// 待发货pay_status = true AND delivery_status = 10
filterParams.statusFilter = 1;
break;
case 'unverified':
// 待核销pay_status = true AND delivery_status = 10 (与待发货相同)
filterParams.statusFilter = 2;
break;
case 'unreceived':
// 待收货pay_status = true AND delivery_status = 20
filterParams.statusFilter = 3;
break;
case 'unevaluated':
// 待评价order_status = 1 (与已完成相同)
filterParams.statusFilter = 4;
break;
case 'completed':
// 已完成order_status = 1
filterParams.statusFilter = 5;
break;
case 'cancelled':
// 已关闭order_status = 2
filterParams.statusFilter = 8;
break;
case 'refunded':
// 退款/售后order_status = 6
filterParams.statusFilter = 6;
break;
case 'deleted':
// 已删除deleted = 1
filterParams.statusFilter = 7;
break;
} }
reload(filterParams); reload(filterParams);
}; };