Bladeren bron

♻️ refactor(route): 统一车型枚举值和筛选条件

- 将seed数据中的车型从中文更新为英文枚举值(bus/minibus/car)
- 修复车型筛选器中"中巴"对应的值从van改为minibus
- 修复筛选标签显示逻辑,匹配新的车型枚举值

✅ test(route): 优化路线管理页面测试

- 移除测试中未使用的searchButton定位器
- 更新搜索测试,使用更具体的搜索关键词"北京"
- 优化getRouteCount方法,处理"暂无路线数据"的空状态
- 调整搜索等待逻辑,适应防抖搜索实现
yourname 4 maanden geleden
bovenliggende
commit
2634a9ac0d

+ 9 - 9
scripts/seed.ts

@@ -80,7 +80,7 @@ async function seed() {
         pickupPoint: '北京南站',
         dropoffPoint: '上海虹桥站',
         departureTime: new Date('2025-10-01T08:00:00Z'),
-        vehicleType: '高铁',
+        vehicleType: 'bus',
         price: 553.5,
         seatCount: 500,
         availableSeats: 450,
@@ -94,7 +94,7 @@ async function seed() {
         pickupPoint: '北京首都机场',
         dropoffPoint: '广州白云机场',
         departureTime: new Date('2025-10-01T10:30:00Z'),
-        vehicleType: '飞机',
+        vehicleType: 'minibus',
         price: 1200,
         seatCount: 200,
         availableSeats: 180,
@@ -108,7 +108,7 @@ async function seed() {
         pickupPoint: '北京西站',
         dropoffPoint: '深圳北站',
         departureTime: new Date('2025-10-01T09:15:00Z'),
-        vehicleType: '动车',
+        vehicleType: 'car',
         price: 756,
         seatCount: 600,
         availableSeats: 550,
@@ -124,7 +124,7 @@ async function seed() {
         pickupPoint: '上海虹桥站',
         dropoffPoint: '北京南站',
         departureTime: new Date('2025-10-07T14:00:00Z'),
-        vehicleType: '高铁',
+        vehicleType: 'bus',
         price: 553.5,
         seatCount: 500,
         availableSeats: 400,
@@ -138,7 +138,7 @@ async function seed() {
         pickupPoint: '广州白云机场',
         dropoffPoint: '北京首都机场',
         departureTime: new Date('2025-10-07T16:30:00Z'),
-        vehicleType: '飞机',
+        vehicleType: 'minibus',
         price: 1100,
         seatCount: 200,
         availableSeats: 150,
@@ -154,7 +154,7 @@ async function seed() {
         pickupPoint: '北京南站',
         dropoffPoint: '天津站',
         departureTime: new Date('2026-01-01T09:00:00Z'),
-        vehicleType: '城际列车',
+        vehicleType: 'car',
         price: 54.5,
         seatCount: 600,
         availableSeats: 500,
@@ -170,7 +170,7 @@ async function seed() {
         pickupPoint: '天津站',
         dropoffPoint: '北京南站',
         departureTime: new Date('2026-01-03T18:00:00Z'),
-        vehicleType: '城际列车',
+        vehicleType: 'car',
         price: 54.5,
         seatCount: 600,
         availableSeats: 450,
@@ -186,7 +186,7 @@ async function seed() {
         pickupPoint: '北京朝阳站',
         dropoffPoint: '哈尔滨西站',
         departureTime: new Date('2026-02-10T07:30:00Z'),
-        vehicleType: '高铁',
+        vehicleType: 'bus',
         price: 623.5,
         seatCount: 500,
         availableSeats: 480,
@@ -202,7 +202,7 @@ async function seed() {
         pickupPoint: '哈尔滨西站',
         dropoffPoint: '北京朝阳站',
         departureTime: new Date('2026-02-17T15:00:00Z'),
-        vehicleType: '高铁',
+        vehicleType: 'bus',
         price: 623.5,
         seatCount: 500,
         availableSeats: 420,

+ 2 - 2
src/client/admin/pages/Routes.tsx

@@ -251,7 +251,7 @@ export const RoutesPage: React.FC = () => {
                 <SelectContent>
                   <SelectItem value="all">全部车型</SelectItem>
                   <SelectItem value="bus">大巴</SelectItem>
-                  <SelectItem value="van">中巴</SelectItem>
+                  <SelectItem value="minibus">中巴</SelectItem>
                   <SelectItem value="car">小车</SelectItem>
                 </SelectContent>
               </Select>
@@ -279,7 +279,7 @@ export const RoutesPage: React.FC = () => {
               )}
               {vehicleTypeFilter !== 'all' && (
                 <Badge variant="secondary" className="flex items-center gap-1">
-                  车型: {vehicleTypeFilter === 'bus' ? '大巴' : vehicleTypeFilter === 'van' ? '中巴' : '小车'}
+                  车型: {vehicleTypeFilter === 'bus' ? '大巴' : vehicleTypeFilter === 'minibus' ? '中巴' : '小车'}
                   <button
                     onClick={() => setVehicleTypeFilter('all')}
                     className="ml-1 hover:text-red-500"

+ 1 - 1
src/server/modules/routes/route.schema.ts

@@ -2,7 +2,7 @@ import { z } from 'zod';
 import { DisabledStatus } from '@/share/types';
 import { ActivityType } from '../activities/activity.entity';
 
-// 车型枚举
+// 车型枚举 
 export enum VehicleType {
   BUS = 'bus',        // 大巴
   MINIBUS = 'minibus', // 中巴

+ 10 - 3
tests/e2e/pages/admin/route-management.page.ts

@@ -5,7 +5,6 @@ export class RouteManagementPage {
   readonly pageTitle: Locator;
   readonly createRouteButton: Locator;
   readonly searchInput: Locator;
-  readonly searchButton: Locator;
   readonly routeTable: Locator;
   readonly editButtons: Locator;
   readonly deleteButtons: Locator;
@@ -18,7 +17,6 @@ export class RouteManagementPage {
     this.pageTitle = page.locator('[data-testid="route-management-title"]');
     this.createRouteButton = page.locator('[data-testid="create-route-button"]');
     this.searchInput = page.locator('[data-testid="route-search-input"]');
-    this.searchButton = page.getByRole('button', { name: '搜索' });
     this.routeTable = page.locator('[data-testid="route-table"]');
     this.editButtons = page.locator('[data-testid^="edit-route-"]');
     this.deleteButtons = page.locator('[data-testid^="delete-route-"]');
@@ -54,7 +52,8 @@ export class RouteManagementPage {
 
   async searchRoutes(keyword: string) {
     await this.searchInput.fill(keyword);
-    await this.searchButton.click();
+    // 防抖搜索,等待网络请求完成
+    await this.page.waitForTimeout(500); // 等待防抖延迟
     await this.page.waitForLoadState('networkidle');
   }
 
@@ -134,6 +133,14 @@ export class RouteManagementPage {
 
   async getRouteCount(): Promise<number> {
     const rows = await this.routeTable.locator('tbody tr').count();
+    // 如果只有一行且包含"暂无路线数据",则返回0
+    if (rows === 1) {
+      const firstRow = this.routeTable.locator('tbody tr').first();
+      const rowText = await firstRow.textContent();
+      if (rowText && rowText.includes('暂无路线数据')) {
+        return 0;
+      }
+    }
     return rows;
   }
 

+ 1 - 1
tests/e2e/specs/admin/routes.spec.ts

@@ -19,7 +19,7 @@ test.describe('路线管理 E2E 测试', () => {
     const initialCount = await routeManagementPage.getRouteCount();
 
     // 搜索存在的路线
-    await routeManagementPage.searchRoutes('路线');
+    await routeManagementPage.searchRoutes('北京');
     const searchedCount = await routeManagementPage.getRouteCount();
     expect(searchedCount).toBeGreaterThan(0);
     expect(searchedCount).toBeLessThanOrEqual(initialCount);