功能概述

Coze套餐订单功能是FastbuildAI平台订单管理系统的重要组成部分,专门用于管理用户的Coze套餐购买订单。该功能在现有"充值订单"功能基础上扩展,为管理员提供完整的套餐订单管理能力。主要功能包括:

  • 套餐订单列表查看和筛选
  • 订单详情查看
  • 订单退款处理
  • 订单统计数据展示
  • 多条件搜索和排序
  • 国际化支持(中文、英文、日文)
  • 权限控制和安全验证

文件清单

前端文件(10个文件)

1. 主页面组件
  • 文件路径: apps/web/app/console/order-management/order-cozepackage.vue
  • 状态: 新增
  • 作用: Coze套餐订单管理的主页面,包含订单列表、搜索筛选、统计数据展示
2. 详情组件
  • 文件路径: apps/web/app/console/order-management/components/cozepackage-order-detail.vue
  • 状态: 新增
  • 作用: 套餐订单详情弹窗组件,显示订单完整信息和操作按钮
3. 数据模型定义
  • 文件路径: apps/web/models/order-cozepackage.d.ts
  • 状态: 新增
  • 作用: 定义前端TypeScript类型接口,包含订单列表、详情、用户信息等数据结构
4. API服务层
  • 文件路径: apps/web/services/console/order-cozepackage.ts
  • 状态: 新增
  • 作用: 封装与后端的API通信,提供订单查询、详情获取、退款等接口
5. 页面功能国际化配置文件(3个语言版本)
  • 文件路径: apps/web/core/i18n/zh/console-order-management.json

  • 状态: 修改(新增cozepackage部分)

  • 作用: 中文国际化配置,包含页面标题、表格列名、按钮文本等

  • 文件路径: apps/web/core/i18n/en/console-order-management.json

  • 状态: 修改(新增cozepackage部分)

  • 作用: 英文国际化配置

  • 文件路径: apps/web/core/i18n/jp/console-order-management.json

  • 状态: 修改(新增cozepackage部分)

  • 作用: 日文国际化配置

6. 菜单国际化配置文件(3个语言版本)
  • 文件路径: apps/web/core/i18n/zh/menu.json

  • 状态: 修改

  • 作用: 中文菜单国际化,在orderManagement下添加"cozePackageOrder": “Coze套餐订单”

  • 文件路径: apps/web/core/i18n/en/menu.json

  • 状态: 修改

  • 作用: 英文菜单国际化,添加"cozePackageOrder": “Coze Package Orders”

  • 文件路径: apps/web/core/i18n/jp/menu.json

  • 状态: 修改

  • 作用: 日文菜单国际化,添加"cozePackageOrder": “Cozeパッケージ注文”

后端文件(7个文件)

1. 模块配置
  • 文件路径: apps/server/src/modules/console/coze-package-order/coze-package-order.module.ts
  • 状态: 新增
  • 作用: NestJS模块配置,注册控制器、服务、实体和依赖关系
2. 控制器
  • 文件路径: apps/server/src/modules/console/coze-package-order/controllers/coze-package-order.controller.ts
  • 状态: 新增
  • 作用: 处理HTTP请求,提供订单列表、详情、退款、统计等API接口
3. 服务层
  • 文件路径: apps/server/src/modules/console/coze-package-order/services/coze-package-order.service.ts
  • 状态: 新增
  • 作用: 业务逻辑处理,包含订单查询、数据统计、退款处理等核心功能
4. 数据传输对象
  • 文件路径: apps/server/src/modules/console/coze-package-order/dto/query-coze-package-order.dto.ts
  • 状态: 新增
  • 作用: 定义API查询参数的数据结构和验证规则
5. 数据库实体
  • 文件路径: apps/server/src/modules/console/coze-package-order/entities/coze-package-order.entity.ts
  • 状态: 新增
  • 作用: 定义coze_package_order表的数据库实体映射和字段关系
6. 菜单配置
  • 文件路径: apps/server/src/core/database/install/menu.json
  • 状态: 修改
  • 作用: 在财务管理模块下添加"Coze套餐订单"菜单项,配置路由和权限
7. 模块注册
  • 文件路径: apps/server/src/modules/console/console.module.ts
  • 状态: 修改
  • 作用: 在主控制台模块中注册CozePackageOrderModule

详细文件说明

前端文件详解

1. 主页面组件 (order-cozepackage.vue)

主要功能:

  • 订单列表展示和分页
  • 多条件搜索(订单号、用户信息、套餐名称)
  • 支付方式、支付状态、退款状态筛选
  • 订单统计数据卡片展示
  • 订单详情查看和退款操作

核心特性:

  • 使用Vue 3 Composition API
  • 集成Nuxt UI组件库
  • 响应式表格设计
  • 实时数据更新
  • 权限控制集成

关键代码结构:

<script setup lang="ts">
// 导入类型定义和API服务
// 状态管理和响应式数据
// 表格列配置
// 搜索和筛选逻辑
// 订单操作方法
</script>

<template>
<!-- 统计数据卡片 -->
<!-- 搜索筛选表单 -->
<!-- 订单列表表格 -->
<!-- 分页组件 -->
<!-- 详情弹窗 -->
</template>
2. 详情组件 (cozepackage-order-detail.vue)

主要功能:

  • 订单完整信息展示
  • 用户信息显示
  • 套餐信息详情
  • 支付信息展示
  • 退款操作处理

数据展示内容:

  • 订单基本信息(订单号、创建时间、支付时间)
  • 用户信息(头像、用户名、联系方式)
  • 套餐信息(名称、时长、价格、标签)
  • 支付信息(支付方式、支付状态、实付金额)
  • 退款信息(退款状态、退款时间)
3. 数据模型定义 (order-cozepackage.d.ts)

定义的接口:

// 订单列表查询参数
interface CozePackageOrderListParams {
    keyword?: string;           // 用户关键词
    orderNo?: string;          // 订单号
    packageName?: string;      // 套餐名称
    payType?: PayConfigType;   // 支付方式
    payStatus?: number;        // 支付状态
    refundStatus?: number;     // 退款状态
    userId?: string;           // 用户ID
    cozePackageId?: string;    // 套餐ID
    page?: number;             // 页码
    limit?: number;            // 每页数量
}

// 订单列表项
interface CozePackageOrderListItem {
    id: string;
    orderNo: string;
    packageName: string;
    payType: PayConfigType;
    payStatus: number;
    refundStatus: number;
    timeLast: number;
    pastPrice: number;
    nowPrice: number;
    orderAmount: number;
    payTime: string;
    createdAt: string;
    user?: CozePackageOrderUser;
    cozePackage?: CozePackageInfo;
}

// 用户信息
interface CozePackageOrderUser {
    avatar: string;
    username: string;
}

// 套餐信息
interface CozePackageInfo {
    id: string;
    timeLast: number;
    pastPrice: number;
    nowPrice: number;
    label: string;
}
4. API服务层 (order-cozepackage.ts)

提供的API方法:

// 获取订单列表
export const apiGetCozePackageOrderList = (params: CozePackageOrderListParams): Promise<CozePackageOrderList>

// 获取订单详情
export const apiGetCozePackageOrderDetail = (id: string): Promise<CozePackageOrderDetailData>

// 申请退款
export const apiCozePackageOrderRefund = (id: string): Promise<void>

// 获取统计数据
export const apiGetCozePackageOrderStatistics = (): Promise<CozePackageOrderStatistics>
5. 国际化配置文件

功能文本配置结构:

{
  "cozepackage": {
    "pageTitle": "Coze套餐订单",
    "pageDescription": "Coze套餐订单详情",
    "orderCount": "套餐订单数",
    "refundCount": "退款订单数",
    "netIncome": "净收入",
    "totalOrderAmount": "累计订单金额",
    "totalRefundAmount": "累计退款金额",
    "list": {
      "pageTitle": "Coze套餐订单列表",
      "orderNo": "订单号",
      "user": "用户",
      "packageName": "套餐名称",
      "packagePrice": "套餐价格",
      "paymentMethod": "支付方式",
      "paymentStatus": "支付状态",
      "createdAt": "下单时间",
      "actions": "操作",
      "refund": "退款",
      "viewDetails": "查看详情"
    },
    "detail": {
      "pageTitle": "套餐订单详情",
      "orderSource": "订单来源",
      "userInfo": "用户信息",
      "packageInfo": "套餐信息",
      "packageName": "套餐名称",
      "packageDuration": "套餐时长",
      "packagePrice": "套餐价格",
      "paymentStatus": "支付状态",
      "paymentMethod": "支付方式",
      "createdAt": "下单时间",
      "paidAt": "支付时间",
      "refundStatus": "退款状态"
    }
  }
}

菜单文本配置:

  • 中文: “cozePackageOrder”: “Coze套餐订单”
  • 英文: “cozePackageOrder”: “Coze Package Orders”
  • 日文: “cozePackageOrder”: “Cozeパッケージ注文”

后端文件详解

1. 模块配置 (coze-package-order.module.ts)

模块依赖:

@Module({
  imports: [
    TypeOrmModule.forFeature([CozePackageOrder, User, Cozepackage]),
    RefundModule, // 退款功能模块
    DictModule   // 字典管理模块
  ],
  controllers: [CozePackageOrderController],
  providers: [CozePackageOrderService],
  exports: [CozePackageOrderService]
})

注册组件:

  • 控制器: CozePackageOrderController
  • 服务: CozePackageOrderService
  • 实体: CozePackageOrder, User, Cozepackage
2. 控制器 (coze-package-order.controller.ts)

API端点:

@ConsoleController("coze-package-order", "Coze套餐订单")
export class CozePackageOrderController extends BaseController {
    
    // 获取订单列表
    @Get()
    @Permissions({ code: "list", name: "套餐订单列表" })
    async lists(@Query() queryDto: QueryCozePackageOrderDto)
    
    // 获取订单详情
    @Get(":id")
    @Permissions({ code: "detail", name: "套餐订单详情" })
    async detail(@Param("id") id: string)
    
    // 申请退款
    @Post("refund")
    @Permissions({ code: "refund", name: "套餐订单退款" })
    async refund(@Body() body: { id: string })
    
    // 获取统计数据
    @Get("statistics")
    @Permissions({ code: "statistics", name: "套餐订单统计" })
    async statistics()
}

权限控制:

  • coze-package-order:list - 查看订单列表
  • coze-package-order:detail - 查看订单详情
  • coze-package-order:refund - 处理订单退款
  • coze-package-order:statistics - 查看统计数据
3. 服务层 (coze-package-order.service.ts)

核心方法:

export class CozePackageOrderService {
    // 获取订单列表(支持分页和筛选)
    async lists(queryDto: QueryCozePackageOrderDto): Promise<PaginationResult<CozePackageOrder>>
    
    // 获取订单详情
    async detail(id: string): Promise<CozePackageOrder>
    
    // 处理退款申请
    async refund(id: string): Promise<void>
    
    // 获取统计数据
    async getStatistics(): Promise<OrderStatistics>
}

查询优化:

  • 使用QueryBuilder进行复杂查询
  • 左连接用户和套餐表获取关联信息
  • 支持多条件筛选和模糊搜索
  • 分页查询优化性能

业务逻辑:

  • 订单状态验证
  • 退款条件检查
  • 数据统计计算
  • 权限验证集成
4. DTO定义 (query-coze-package-order.dto.ts)

查询参数验证:

export class QueryCozePackageOrderDto extends PaginationDto {
    @IsOptional()
    @IsString()
    keyword?: string;

    @IsOptional()
    @IsString()
    orderNo?: string;

    @IsOptional()
    @IsString()
    packageName?: string;

    @IsOptional()
    @IsEnum(PayConfigType)
    payType?: PayConfigType;

    @IsOptional()
    @IsNumber()
    payStatus?: number;

    @IsOptional()
    @IsNumber()
    refundStatus?: number;
}
5. 数据库实体 (coze-package-order.entity.ts)

表结构设计:

@AppEntity({ name: "coze_package_order", comment: "Coze套餐订单" })
export class CozePackageOrder {
    @PrimaryGeneratedColumn("uuid")
    id: string;

    @Column({ type: "varchar", comment: "订单号", length: 32, unique: true })
    orderNo: string;

    @Column({ type: "varchar", comment: "套餐名称", length: 64 })
    packageName: string;

    @Column({ type: "enum", enum: PayConfigType, comment: "支付方式" })
    payType: PayConfigType;

    @Column({ type: "int", comment: "支付状态", default: 0 })
    payStatus: number;

    @Column({ type: "int", comment: "退款状态", default: 0 })
    refundStatus: number;

    @Column({ type: "int", comment: "套餐时长(月)" })
    timeLast: number;

    @Column({ type: "decimal", precision: 10, scale: 2, comment: "原价" })
    pastPrice: number;

    @Column({ type: "decimal", precision: 10, scale: 2, comment: "现价" })
    nowPrice: number;

    @Column({ type: "decimal", precision: 10, scale: 2, comment: "订单金额" })
    orderAmount: number;

    @Column({ type: "timestamp", comment: "支付时间", nullable: true })
    payTime: Date;

    @Column({ type: "enum", enum: UserTerminalType, comment: "终端类型" })
    terminal: UserTerminalType;

    @Column({ type: "text", comment: "套餐快照", nullable: true })
    cozePackageSnap: string;

    // 关联关系
    @ManyToOne(() => User, { onDelete: "CASCADE" })
    @JoinColumn({ name: "user_id" })
    user: User;

    @ManyToOne(() => Cozepackage, { onDelete: "SET NULL" })
    @JoinColumn({ name: "coze_package_id" })
    cozePackage: Cozepackage;

    @CreateDateColumn({ comment: "创建时间" })
    createdAt: Date;

    @UpdateDateColumn({ comment: "更新时间" })
    updatedAt: Date;
}

索引设计:

  • 主键索引: id
  • 唯一索引: orderNo
  • 普通索引: user_id, coze_package_id, pay_status, refund_status
  • 复合索引: (user_id, created_at), (pay_status, created_at)
6. 菜单配置 (menu.json)

菜单配置结构:

{
  "name": "console-menu.financial.cozePackageOrderList",
  "code": "coze-package-order-management",
  "path": "order-coze-package",
  "icon": "",
  "component": "/console/order-management/order-coze-package",
  "permissionCode": "coze-package-order:list",
  "sort": 1,
  "isHidden": 0,
  "type": 2,
  "sourceType": 1,
  "pluginPackName": null
}

菜单层级:

  • 财务管理 (Financial)
    • 充值订单 (Recharge Orders) - sort: 0
    • Coze套餐订单 (Coze Package Orders) - sort: 1 ← 新增菜单项

开发流程总结

1. 后端开发流程

  1. 创建数据库实体 → 定义coze_package_order表结构和关联关系
  2. 创建DTO类 → 定义查询参数验证和数据传输对象
  3. 开发服务层 → 实现订单查询、详情、退款、统计等业务逻辑
  4. 创建控制器 → 提供RESTful API接口和权限控制
  5. 配置模块 → 注册所有组件和依赖关系
  6. 集成到主模块 → 在console.module.ts中注册新模块
  7. 配置菜单权限 → 在menu.json中添加菜单项和权限配置

2. 前端开发流程

  1. 定义数据模型 → 创建TypeScript接口定义
  2. 封装API服务 → 创建HTTP请求方法和错误处理
  3. 配置国际化 → 添加多语言支持(功能文本和菜单文本)
  4. 开发主页面组件 → 实现订单列表、搜索、统计等功能
  5. 开发详情组件 → 实现订单详情展示和操作功能
  6. 集成路由和权限 → 配置页面访问路径和权限验证
  7. 测试完整流程 → 验证所有功能和交互

3. 数据库设计流程

  1. 分析业务需求 → 确定订单相关的数据字段和关系
  2. 设计表结构 → 定义字段类型、约束和索引
  3. 建立关联关系 → 配置与用户表、套餐表的外键关系
  4. 优化查询性能 → 添加必要的索引和查询优化
  5. 数据迁移 → 创建数据库迁移脚本

4. 权限集成流程

  1. 定义权限代码 → 为每个操作定义唯一的权限标识
  2. 配置菜单权限 → 在menu.json中关联权限代码
  3. 控制器权限验证 → 使用@Permissions装饰器进行权限控制
  4. 前端权限判断 → 使用hasAccessByCodes进行UI权限控制

注意事项

开发规范

  1. 代码风格: 遵循项目ESLint和Prettier配置
  2. 类型安全: 使用TypeScript严格模式,确保类型完整性
  3. 组件设计: 遵循Vue 3 Composition API最佳实践
  4. API设计: 遵循RESTful设计原则和统一响应格式
  5. 命名规范: 使用一致的命名约定(kebab-case for files, camelCase for variables)

数据安全

  1. 输入验证: 前后端双重验证,使用class-validator进行参数校验
  2. 权限控制: 每个API接口都有对应的权限验证
  3. SQL注入防护: 使用TypeORM的参数化查询
  4. 数据完整性: 数据库约束和业务逻辑双重保障
  5. 敏感信息保护: 避免在日志中记录敏感信息

性能优化

  1. 数据库查询优化:

    • 使用select指定需要的字段
    • 合理使用索引提升查询性能
    • 避免N+1查询问题
    • 使用分页减少数据传输量
  2. 前端性能优化:

    • 使用Vue响应式系统优化渲染
    • 合理使用计算属性和监听器
    • 组件懒加载和代码分割
    • 图片和资源优化
  3. API性能优化:

    • 合理的数据结构减少网络传输
    • 使用缓存策略提升响应速度
    • 异步处理耗时操作
    • 请求防抖和节流

国际化最佳实践

  1. 键名规范: 使用层级结构组织国际化键,保持一致性
  2. 文本复用: 避免重复定义相同含义的文本
  3. 上下文考虑: 确保翻译在不同上下文中都合适
  4. 测试覆盖: 确保所有语言版本都能正常显示和使用
  5. 动态内容: 处理包含变量的文本国际化

错误处理

  1. 统一异常处理: 使用全局异常过滤器处理错误
  2. 用户友好提示: 提供清晰的错误信息和解决建议
  3. 日志记录: 记录详细的错误信息用于调试
  4. 降级策略: 在服务不可用时提供备选方案
  5. 监控告警: 设置关键错误的监控和告警

扩展建议

  1. 功能扩展:

    • 订单批量操作(批量退款、批量导出)
    • 订单状态自动流转
    • 订单审核工作流
    • 订单模板和快速创建
  2. 数据分析:

    • 订单趋势分析
    • 用户购买行为分析
    • 套餐受欢迎程度统计
    • 收入和退款分析报表
  3. 集成扩展:

    • 与第三方支付平台深度集成
    • 与CRM系统集成
    • 与财务系统集成
    • 与消息通知系统集成
  4. 移动端支持:

    • 响应式设计优化
    • 移动端专用组件
    • 触摸交互优化
    • 离线功能支持

总结

Coze套餐订单功能的开发涉及了前后端共17个文件的新增和修改,实现了完整的套餐订单管理功能。该功能具有以下特点:

文件统计:

  • 前端文件(10个): 主页面、详情组件、数据模型、API服务、国际化文件(功能文本3个语言 + 菜单文本3个语言)
  • 后端文件(7个): 完整的模块结构(模块配置、控制器、服务、实体、DTO)+ 系统集成(模块注册、菜单配置)

核心优势:

  1. 完整的CRUD操作: 支持订单的查询、详情查看、退款处理
  2. 强大的搜索筛选: 多维度搜索和状态筛选
  3. 完善的权限控制: 细粒度的权限管理和验证
  4. 全面的国际化支持: 支持中英日三种语言
  5. 优秀的用户体验: 响应式设计和友好的交互界面
  6. 高性能设计: 数据库查询优化和前端性能优化
  7. 可扩展架构: 模块化设计便于功能扩展

技术亮点:

  • 基于TypeORM的数据库实体设计和关联关系
  • 使用class-validator进行数据验证
  • Vue 3 Composition API的现代化前端开发
  • NestJS的模块化后端架构
  • 完善的错误处理和日志记录机制

该功能为FastbuildAI平台的订单管理系统提供了重要的补充,与现有的充值订单功能形成完整的订单管理体系,为后续的业务扩展奠定了坚实的基础。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐