实现订单列表页面的Tab导航组件,支持按订单状态筛选和显示各状态订单数量。
在 OrderListComponent 中定义了完整的Tab配置:
interface TabConfig {
label: string;
status?: OrderStatus;
count: number;
}
tabs: TabConfig[] = [
{ label: '全部', status: undefined, count: 0 },
{ label: '待付款', status: OrderStatus.PendingPayment, count: 0 },
{ label: '待发货', status: OrderStatus.PendingShipment, count: 0 },
{ label: '已发货', status: OrderStatus.Shipped, count: 0 },
{ label: '已完成', status: OrderStatus.Completed, count: 0 },
{ label: '已取消', status: OrderStatus.Cancelled, count: 0 }
];
实现了 onTabChange() 方法:
重新加载订单数据
onTabChange(index: number): void {
this.activeTabIndex = index;
this.currentStatus = this.tabs[index].status;
this.pagination.page = 1;
this.loadOrders();
}
currentStatus 属性控制当前筛选的订单状态loadOrders() 方法中将状态传递给服务实现了 updateTabCounts() 方法:
更新每个Tab的count属性
updateTabCounts(): void {
this.orderService.getOrders().subscribe({
next: (response) => {
const allOrders = response.data;
this.tabs[0].count = allOrders.length;
this.tabs[1].count = allOrders.filter(o => o.status === OrderStatus.PendingPayment).length;
// ... 其他状态统计
}
});
}
在HTML模板中使用Material Tab组件:
<mat-card class="tabs-card">
<mat-tab-group
[(selectedIndex)]="activeTabIndex"
(selectedIndexChange)="onTabChange($event)"
animationDuration="300ms">
<mat-tab *ngFor="let tab of tabs">
<ng-template mat-tab-label>
<span class="tab-label">
{{ tab.label }}
<span class="tab-count">({{ tab.count }})</span>
</span>
</ng-template>
</mat-tab>
</mat-tab-group>
</mat-card>
在SCSS文件中定义了Tab的样式:
创建了完整的单元测试用例:
Tab管理测试
初始化测试
数据加载测试
✅ THE Merchant Portal SHALL display order list with tabs for all, pending payment, pending shipment, shipped, completed, and cancelled
实现了6个Tab,分别对应:
每个Tab都显示对应状态的订单数量,并支持点击切换筛选。
MatTabsModule)[(selectedIndex)] 实现Tab索引的双向绑定(selectedIndexChange) 监听Tab切换事件animationDuration="300ms" 提供平滑的切换动画用户点击Tab
→ onTabChange(index)
→ 更新activeTabIndex和currentStatus
→ 重置分页
→ loadOrders()
→ 调用MockOrderService.getOrders(status, pagination)
→ 更新orders数组
→ 视图刷新
Task 9.2已完成,成功实现了订单Tab导航的所有功能:
所有代码已提交,功能正常运行,可以进入下一个任务。