实现订单详情页面的操作按钮区域,包括发货、取消订单和查看物流功能。
onShip() 方法MockOrderService.shipOrder() 更新订单状态实现细节:
onShip(): void {
if (!this.order) return;
const dialogRef = this.dialog.open(ShippingModalComponent, {
width: '600px',
data: { order: this.order },
disableClose: true
});
dialogRef.afterClosed().subscribe((result: ShippingFormData | undefined) => {
if (result && this.order) {
this.orderService.shipOrder(this.order.orderNo, {
trackingNo: result.trackingNo,
companyCode: result.companyCode,
companyName: result.companyName
}).subscribe({
next: (updatedOrder) => {
this.order = updatedOrder;
this.snackBar.open('发货成功!', '关闭', {...});
},
error: (err) => {
this.snackBar.open(err.message || '发货失败,请重试', '关闭', {...});
}
});
}
});
}
onCancel() 方法MockOrderService.cancelOrder() 更新订单状态实现细节:
onCancel(): void {
if (!this.order) return;
const dialogRef = this.dialog.open(CancelModalComponent, {
width: '500px',
data: { order: this.order },
disableClose: true
});
dialogRef.afterClosed().subscribe((result: CancelFormData | undefined) => {
if (result && this.order) {
this.orderService.cancelOrder(this.order.orderNo, result.reason).subscribe({
next: (updatedOrder) => {
this.order = updatedOrder;
this.snackBar.open('订单已取消', '关闭', {...});
},
error: (err) => {
this.snackBar.open(err.message || '取消订单失败,请重试', '关闭', {...});
}
});
}
});
}
onViewLogistics() 方法实现细节:
onViewLogistics(): void {
if (!this.order || !this.hasTrackingInfo()) return;
const message = `物流公司:${this.order.shippingInfo.companyName}\n物流单号:${this.order.shippingInfo.trackingNo}`;
this.snackBar.open(message, '关闭', {
duration: 5000,
horizontalPosition: 'center',
verticalPosition: 'top'
});
}
PendingShipment 状态显示PendingPayment 或 PendingShipment 状态显示模板实现:
<div class="action-buttons">
<button mat-raised-button (click)="goBack()">
返回列表
</button>
<button
mat-raised-button
color="primary"
*ngIf="canShip()"
(click)="onShip()">
<mat-icon>local_shipping</mat-icon>
发货
</button>
<button
mat-raised-button
color="accent"
*ngIf="hasTrackingInfo()"
(click)="onViewLogistics()">
<mat-icon>track_changes</mat-icon>
查看物流
</button>
<button
mat-raised-button
color="warn"
*ngIf="canCancel()"
(click)="onCancel()">
<mat-icon>cancel</mat-icon>
取消订单
</button>
</div>
本任务依赖以下已完成的组件:
创建了全面的单元测试,覆盖以下场景:
import { MatDialog } from '@angular/material/dialog';
import { MatSnackBar } from '@angular/material/snack-bar';
import { ShippingModalComponent, ShippingFormData } from '../components/shipping-modal/shipping-modal.component';
import { CancelModalComponent, CancelFormData } from '../components/cancel-modal/cancel-modal.component';
constructor(
private route: ActivatedRoute,
private router: Router,
private orderService: MockOrderService,
private dialog: MatDialog,
private snackBar: MatSnackBar
) {}
src/app/pages/orders/order-detail/order-detail.component.ts
src/app/pages/orders/order-detail/order-detail.component.spec.ts
order-detail.component.html - 操作按钮区域已在 Task 10.2 中实现order-detail.component.scss - 样式已在 Task 10.2 中实现Task 10.3 已成功完成。订单详情页面现在具有完整的操作功能:
所有功能都经过了全面的单元测试,并符合设计文档中的需求规范。用户体验流畅,错误处理完善,提示信息清晰。