فهرست منبع

📝 docs(story): add story for vehicle type and travel mode configuration enhancement

- document system administrator requirement for configuring vehicle types and travel modes
- define acceptance criteria for complete vehicle type enumeration and independent travel mode field
- outline tasks for implementing combined query logic for travel services
- specify technical implementation details for both frontend and backend changes
- include database migration requirements and testing strategy
yourname 3 ماه پیش
والد
کامیت
e3b67661a3
1فایلهای تغییر یافته به همراه210 افزوده شده و 0 حذف شده
  1. 210 0
      docs/stories/005.004.story.md

+ 210 - 0
docs/stories/005.004.story.md

@@ -0,0 +1,210 @@
+# Story 5.4: 车型和出行方式配置增强
+
+## Status
+Draft
+
+## Story
+**As a** 系统管理员
+**I want** 能够配置完整的车型枚举和独立的出行方式字段
+**so that** 支持更灵活的出行服务组合查询
+
+## Acceptance Criteria
+1. 车型枚举包含完整选项:大巴、中巴、小车、商务车
+2. 路线配置支持独立的出行方式选择(拼车/包车)
+3. 支持组合查询逻辑:大巴拼车、商务车、包车三种查询方式
+4. 不同组合支持不同的价格策略和座位配置
+5. 前端页面正确显示组合查询选项
+6. 小程序和管理后台界面支持组合查询方式
+7. 查询API支持组合查询逻辑
+8. 活动选择页面支持组合查询逻辑
+9. 班次列表页面正确显示组合查询结果
+
+## Tasks / Subtasks
+- [ ] 更新VehicleType枚举,添加商务车选项 (AC: 1)
+  - [ ] 在 `src/share/route.types.ts` 中更新VehicleType枚举
+  - [ ] 验证所有相关类型定义和Schema
+- [ ] 创建TravelMode枚举,定义拼车和包车出行方式 (AC: 2)
+  - [ ] 在 `src/share/route.types.ts` 中创建TravelMode枚举
+  - [ ] 在Route实体中添加travelMode字段
+- [ ] 更新管理后台路线配置页面,支持车型和出行方式独立选择 (AC: 2, 6)
+  - [ ] 更新 `src/client/admin/components/RouteForm.tsx` 添加出行方式选择器
+  - [ ] 更新Zod Schema验证
+  - [ ] 更新API请求和响应处理
+- [ ] 更新小程序首页出行方式选择器的查询逻辑,支持组合查询 (AC: 3, 5)
+  - [ ] 更新 `mini/src/pages/home/index.tsx` 中的查询逻辑
+  - [ ] 实现组合查询参数映射:大巴拼车、商务车、包车
+  - [ ] 更新查询参数传递逻辑
+- [ ] 更新活动选择页面查询逻辑,支持组合查询 (AC: 8)
+  - [ ] 更新 `mini/src/pages/select-activity/ActivitySelectPage.tsx` 查询逻辑
+  - [ ] 支持根据车型和出行方式的组合条件筛选活动
+- [ ] 更新班次列表页面查询逻辑,支持组合查询 (AC: 9)
+  - [ ] 更新 `mini/src/pages/schedule-list/ScheduleListPage.tsx` 查询逻辑
+  - [ ] 支持根据组合查询条件显示匹配的路线
+- [ ] 更新班次列表页面显示逻辑,正确显示车型和出行方式的组合信息 (AC: 9)
+  - [ ] 更新路线卡片显示,同时显示车型和出行方式
+  - [ ] 更新班次列表页面的筛选和排序逻辑
+- [ ] 更新路线查询API,支持组合查询逻辑 (AC: 7)
+  - [ ] 更新 `src/server/api/routes/index.ts` 中的用户端路线查询API
+  - [ ] 支持多值参数查询:`vehicleType=bus,business` 和 `travelMode=carpool,charter`
+  - [ ] 实现组合查询逻辑:大巴拼车、商务车、包车
+- [ ] 更新订单详情页面,显示完整的车型和出行方式信息 (AC: 6)
+  - [ ] 更新订单详情页面显示逻辑
+  - [ ] 确保订单快照包含车型和出行方式信息
+- [ ] 验证前端页面正确显示组合查询选项 (AC: 5)
+  - [ ] 测试首页出行方式选择器显示
+  - [ ] 验证组合查询参数正确传递
+- [ ] 编写测试,验证组合查询逻辑正确性 (AC: 3, 7, 8, 9)
+  - [ ] 编写后端API组合查询测试
+  - [ ] 编写前端组件组合查询测试
+  - [ ] 编写E2E测试验证完整组合查询流程
+
+## Dev Notes
+
+### 组合查询逻辑设计
+基于 [docs/prd/epic-005-travel-service-core.md#组合查询逻辑],需要实现以下组合查询逻辑:
+
+**组合查询映射规则**:
+- **大巴拼车** → `vehicleType=bus&travelMode=carpool`
+- **商务车** → `vehicleType=business&travelMode=carpool,charter`(支持两种出行方式)
+- **包车** → `vehicleType=bus,business&travelMode=charter`(支持两种车型)
+
+### 数据模型更新
+基于 [docs/architecture/data-model-schema-changes.md#路线实体接口],需要更新Route实体:
+
+**VehicleType枚举扩展** (遵循 [通用CRUD实体设计规范](../architecture/generic-crud-standards.md#实体设计)):
+```typescript
+export enum VehicleType {
+  BUS = '大巴',
+  MINIBUS = '中巴',
+  CAR = '小车',
+  BUSINESS = '商务车' // 新增选项
+}
+```
+
+**TravelMode枚举创建** (遵循 [通用CRUD实体设计规范](../architecture/generic-crud-standards.md#实体设计)):
+```typescript
+export enum TravelMode {
+  CARPOOL = '拼车',
+  CHARTER = '包车'
+}
+```
+
+**Route实体更新** (遵循 [通用CRUD实体设计规范](../architecture/generic-crud-standards.md#实体设计)):
+- 添加 `travelMode: TravelMode` 字段
+- 保持现有字段不变
+- 确保数据库迁移正确添加新字段
+
+### API查询参数设计
+基于 [docs/prd/epic-005-travel-service-core.md#api查询参数设计],需要支持多值参数查询:
+
+**路线查询API参数**:
+- `vehicleType`: 支持逗号分隔的多个车型(如`bus,business`)
+- `travelMode`: 支持逗号分隔的多个出行方式(如`carpool,charter`)
+- 组合查询逻辑:`vehicleType`和`travelMode`参数同时存在时进行组合筛选
+
+**查询示例**:
+```typescript
+// 大巴拼车
+GET /api/v1/routes/search?vehicleType=bus&travelMode=carpool
+
+// 商务车(支持拼车和包车)
+GET /api/v1/routes/search?vehicleType=business&travelMode=carpool,charter
+
+// 包车(支持大巴和商务车)
+GET /api/v1/routes/search?vehicleType=bus,business&travelMode=charter
+```
+
+### 前端页面更新要求
+
+**首页 (mini/src/pages/home/index.tsx)** [Source: architecture/source-tree.md#实际项目结构]:
+- 保持现有三种查询选项显示(大巴拼车、商务车、包车)
+- 更新查询逻辑,将组合选项映射为对应的API查询参数
+- 确保查询参数正确传递到活动选择页面
+
+**活动选择页面 (mini/src/pages/select-activity/ActivitySelectPage.tsx)** [Source: architecture/source-tree.md#实际项目结构]:
+- 根据组合查询条件查询关联的活动
+- 支持多条件筛选:车型和出行方式的组合
+- 确保活动列表正确反映组合查询结果
+
+**班次列表页面 (mini/src/pages/schedule-list/ScheduleListPage.tsx)** [Source: architecture/source-tree.md#实际项目结构]:
+- 根据组合查询条件查询匹配的路线
+- 支持车型和出行方式的组合筛选
+- 更新路线卡片显示,同时显示车型和出行方式信息
+
+**管理后台路线配置页面 (src/client/admin/components/RouteForm.tsx)** [Source: architecture/source-tree.md#实际项目结构]:
+- 添加出行方式选择器,与车型选择器并列
+- 更新表单验证,确保车型和出行方式的组合有效性
+- 支持创建和编辑包含出行方式的路线
+
+### 文件位置
+- **枚举定义**: `src/share/route.types.ts` [Source: architecture/source-tree.md#实际项目结构]
+- **Route实体更新**: `src/server/modules/routes/route.entity.ts` [Source: architecture/source-tree.md#实际项目结构]
+- **Zod Schema更新**: `src/server/modules/routes/route.schema.ts` [Source: architecture/source-tree.md#实际项目结构]
+- **用户端API更新**: `src/server/api/routes/index.ts` [Source: architecture/source-tree.md#实际项目结构]
+- **管理后台页面更新**: `src/client/admin/components/RouteForm.tsx` [Source: architecture/source-tree.md#实际项目结构]
+- **小程序页面更新**:
+  - `mini/src/pages/home/index.tsx` [Source: architecture/source-tree.md#实际项目结构]
+  - `mini/src/pages/select-activity/ActivitySelectPage.tsx` [Source: architecture/source-tree.md#实际项目结构]
+  - `mini/src/pages/schedule-list/ScheduleListPage.tsx` [Source: architecture/source-tree.md#实际项目结构]
+
+### 技术栈要求
+- **后端框架**: Hono + TypeORM [Source: architecture/tech-stack.md#现有技术栈维护]
+- **前端框架**: Taro + React [Source: architecture/tech-stack.md#现有技术栈维护]
+- **状态管理**: React Query [Source: architecture/tech-stack.md#现有技术栈维护]
+- **样式**: Tailwind CSS [Source: architecture/tech-stack.md#现有技术栈维护]
+
+### 开发规范要求
+- **Taro开发**: 遵循 [Taro小程序开发规范](../architecture/taro-mini-program-standards.md)
+- **样式开发**: 遵循 [Tailwind CSS样式规范](../architecture/tailwind-css-standards.md)
+- **管理后台开发**: 遵循 [管理后台开发规范](../architecture/admin-dashboard-standards.md)
+- **API开发**: 严格遵循 [通用CRUD规范](../architecture/generic-crud-standards.md)
+
+### 数据库迁移要求
+- 创建数据库迁移文件,为routes表添加travel_mode字段
+- 确保字段类型与枚举定义一致
+- 添加适当的索引优化查询性能
+
+### Testing
+**测试要求**:
+- **主项目测试位置**: `tests/unit/`, `tests/integration/`, `tests/e2e/` 目录 [Source: architecture/testing-strategy.md#主项目测试体系]
+- **Taro项目测试位置**: `mini/tests/` 目录 [Source: architecture/testing-strategy.md#taro小程序测试体系]
+- **主项目测试框架**: Vitest + Testing Library + hono/testing + Playwright [Source: architecture/testing-strategy.md#测试框架]
+- **Taro项目测试框架**: Jest + @tarojs/test-utils-react [Source: architecture/testing-strategy.md#taro小程序测试体系]
+- **覆盖率目标**: 核心业务逻辑 > 80% [Source: architecture/testing-strategy.md#覆盖率目标]
+
+**具体测试要求**:
+- **组合查询API测试** (P0优先级)
+  - 验证三种组合查询模式的正确性:大巴拼车、商务车、包车
+  - 测试多值参数解析和处理
+  - 验证组合查询结果正确性
+- **前端组件组合查询测试** (P1优先级)
+  - 首页出行方式选择器组合查询逻辑测试
+  - 活动选择页面组合查询集成测试
+  - 班次列表页面组合查询显示测试
+- **管理后台路线配置测试** (P1优先级)
+  - 车型和出行方式选择器集成测试
+  - 表单验证测试
+  - API请求和响应测试
+- **完整组合查询流程E2E测试** (P0优先级)
+  - 首页选择出行方式 → 活动选择 → 班次列表完整流程
+  - 验证组合查询参数正确传递
+  - 验证查询结果正确显示
+
+## Change Log
+| Date | Version | Description | Author |
+|------|---------|-------------|--------|
+| 2025-10-20 | 1.0 | 初始故事创建,基于史诗005 US005-04需求 | Bob (Scrum Master) |
+
+## Dev Agent Record
+*此部分由开发代理在实施过程中填写*
+
+### Agent Model Used
+
+### Debug Log References
+
+### Completion Notes List
+
+### File List
+
+## QA Results
+*此部分由QA代理在审查完成后填写*