011.004.story.md 29 KB

故事 011.004:订单管理功能实现

状态

Ready for Review

故事

作为企业用户, 我希望管理残疾人就业订单和查看打卡数据, 以便跟踪就业进展和进行薪资核算。

验收标准

  1. 订单管理页展示订单列表,支持状态筛选和搜索
  2. 支持订单状态管理(查看、编辑、状态变更)
  3. 打卡数据统计功能完整,显示考勤记录
  4. 视频统计功能正常,关联订单的视频资料可查看
  5. 页面设计符合原型标准,与系统其他部分无缝集成

任务 / 子任务

  • 任务1:实现订单列表页(AC:1)
    • 创建订单管理页面组件,使用基础布局组件
    • 集成订单管理API(order模块)
    • 实现订单表格展示(订单号、人才姓名、岗位、状态、创建时间等)
    • 实现订单搜索功能(按订单号、人才姓名搜索)
    • 实现状态筛选(进行中、已完成、已取消等)
    • 添加分页和排序功能
  • 任务2:实现订单状态管理(AC:2)
    • 创建订单详情模态框或页面
    • 展示订单完整信息(基础信息、关联人才、岗位详情等)
    • 实现订单状态变更功能(需权限验证)
    • 添加订单备注和操作日志
    • 实现订单编辑功能(如有权限)
  • 任务3:实现打卡数据统计(AC:3)
    • 集成订单统计API(史诗012提供)
    • 展示打卡数据统计卡片(出勤率、迟到早退统计等)
    • 实现打卡日历或时间线视图
    • 支持按时间范围筛选打卡数据
    • 添加打卡数据导出功能
  • 任务4:实现视频统计功能(AC:4)
    • 集成视频管理API(史诗012提供)
    • 展示订单关联视频列表
    • 支持视频播放、下载、分享
    • 实现视频统计卡片(视频数量、类型分布)
    • 添加批量视频下载功能
  • 任务5:优化用户体验(AC:5)
    • 参考原型设计:docs/小程序原型/yongren.html中的订单管理页面
    • 确保页面加载性能,大数据量优化
    • 添加数据刷新和实时更新
    • 优化移动端表格交互
  • 任务6:集成Navbar导航栏组件(页面层级结构规范)
    • 订单列表页:集成Navbar组件,标题"订单列表",隐藏左侧返回按钮(主页面配置)
    • 导入Navbar组件:import { Navbar } from '@d8d/mini-shared-ui-components/components/navbar'
    • 配置navbar:title="订单列表"leftIcon=""leftText=""
    • 保持YongrenTabBarLayout包裹,activeTab="order"
    • 调整ScrollView布局:px-4 pb-4 pt-0(移除顶部内边距适配navbar占位)
    • 订单详情页:集成Navbar组件,标题"订单详情",带左侧返回按钮(二级页面配置)
    • 导入Navbar组件,配置:title="订单详情"leftIcon="i-heroicons-chevron-left-20-solid"leftText="返回"
    • 移除YongrenTabBarLayout包裹(二级页不需要底部导航)
    • 调整ScrollView布局:h-screen overflow-y-auto px-4 pb-4 pt-0
    • 统一页面层级结构:主页面使用YongrenTabBarLayout+Navbar(无返回),二级页使用Navbar(带返回)
    • 验证类型检查:确保所有页面类型检查通过
  • 任务7:编写集成测试
    • 编写订单列表功能测试
    • 编写订单状态管理测试
    • 测试打卡数据统计功能
    • 测试视频管理功能

开发笔记

依赖关系

依赖故事

  • 011.001(基础框架搭建):提供API客户端、路由、基础布局、企业认证框架
  • 011.002(认证与首页):提供认证状态管理,Navbar组件集成规范
  • 011.003(人才管理):订单与人才关联,可能需要人才选择功能,页面层级结构规范

API规范

订单管理API(order模块)- 通用版本

  • 警告:此API为通用版本,返回所有订单数据,未按企业过滤。企业用户必须使用下面的"企业专用订单API",确保数据安全隔离。
  • 架构说明:此客户端在mini/src/api.ts中统一注册,为通用版本。按照史诗011的mini-ui-packages架构,企业用户应使用UI包内创建的企业专用订单API客户端,而非此通用版本。
  • 客户端orderClient(在mini/src/api.ts中可用,由故事011.001集成的通用版本)
  • 路径前缀/api/v1/order
  • 主要接口
    • GET / - 订单列表查询接口(支持搜索、筛选、分页)
    • 查询参数:search?(订单号、订单名称)、status?(订单状态)、page?limit?
    • GET /{id} - 订单详情查询接口
    • PUT /{id} - 订单状态更新接口
    • POST / - 订单创建接口(如有权限)
    • PUT /{id} - 订单编辑接口(如有权限)
  • 使用示例(仅用于参考,企业用户不应使用):

    import { orderClient } from '@/api'
    
    // 获取订单列表(带搜索和筛选)
    const orderList = await orderClient.get({
    query: {
      search: '阿里巴巴',
      status: 'in_progress',
      page: 1,
      limit: 20
    }
    })
    
    // 获取订单详情
    const orderDetail = await orderClient[':id'].get({
    param: { id: '123' }
    })
    

企业专用订单API(order模块扩展):

  • 背景:通用订单API(/api/v1/order)返回所有订单数据,未按企业过滤。企业专用订单API(/api/v1/yongren/order)只返回当前企业用户关联的订单数据,确保数据安全隔离。
  • 架构模式:按照史诗011的mini-ui-packages架构,API客户端在各自的UI包内注册,而非统一在mini/src/api.ts中注册。
  • 客户端创建:在@d8d/yongren-order-management-ui包内创建企业专用订单API客户端,参考@d8d/mini-enterprise-auth-ui包的模式:

    // 文件:mini-ui-packages/yongren-order-management-ui/src/api/enterpriseOrderClient.ts
    // 故事012.014已实现,使用enterpriseOrderRoutes类型(仅包含企业专用路由)
    // 原orderRoutes类型包含混合路由,已不适用于企业专用API客户端
    import type { enterpriseOrderRoutes } from '@d8d/order-module';
    import { rpcClient } from '@d8d/mini-shared-ui-components/utils/rpc/rpc-client';
    
    // 注意:企业专用订单API通过enterpriseAuthMiddleware中间件保护,确保仅限企业用户访问
    // 路径前缀 /api/v1/yongren/order 在路由层配置
    export const enterpriseOrderClient = rpcClient<typeof enterpriseOrderRoutes>('/api/v1/yongren/order');
    
  • 路径前缀/api/v1/yongren/order

  • 主要接口

    • 基础订单CRUD接口(通过enterpriseAuthMiddleware中间件保护,确保仅限企业用户访问):
    • GET /list - 订单列表查询接口(支持搜索、筛选、分页,自动过滤当前企业订单)
      • 查询参数:orderName?(订单名称搜索)、orderStatus?(订单状态过滤)、page?limit?
    • GET /detail/{id} - 订单详情查询接口(验证订单是否属于当前企业)
    • POST /create - 订单创建接口
    • PUT /update/{id} - 订单更新接口(验证订单权限)
    • DELETE /delete/{id} - 订单删除接口(验证订单权限)
    • POST /activate/{orderId} - 激活订单接口
    • POST /close/{orderId} - 关闭订单接口
    • POST /{orderId}/persons/batch - 批量添加人员到订单
    • POST /assets/create - 创建订单人员资产
    • GET /assets/query - 查询订单人员资产
    • DELETE /assets/delete/{id} - 删除订单人员资产
    • PUT /persons/work-status - 更新订单人员工作状态
    • 企业专用扩展API(史诗012实现,通过enterpriseAuthMiddleware中间件保护):
    • GET /checkin-statistics - 打卡数据统计接口(按企业维度统计打卡视频数量)
      • 查询参数:companyId?(企业ID,从认证用户获取)
    • GET /video-statistics - 视频分类统计接口(按企业维度统计视频类型分布)
      • 查询参数:companyId?(企业ID)、assetType?(视频类型过滤)
    • GET /company-orders - 企业维度订单查询接口(专为企业用户设计的订单列表,支持完整查询参数)
      • 查询参数:companyId?(企业ID)、orderName?orderStatus?page?pageSize?sortBy?sortOrder?
    • GET /company-videos - 企业维度视频查询接口(按企业筛选视频资产,支持分页和排序)
      • 查询参数:companyId?(企业ID)、assetType?(资产类型)、page?pageSize?sortBy?sortOrder?
    • POST /batch-download - 批量下载视频接口(支持企业维度和个人维度下载)
      • 请求体:downloadScope(下载范围:company/person)、companyId?personId?(个人维度需要)、assetTypes?fileIds?
    • PUT /videos/{id}/status - 更新视频审核状态接口(支持pending/verified/rejected状态更新)
      • 路径参数:id(视频资产ID)
      • 请求体:status(审核状态)
  • 使用示例

    // 在订单管理UI包内使用
    import { enterpriseOrderClient } from '../api/enterpriseOrderClient'
    
    // 获取企业维度订单列表(带搜索和筛选)
    const orderList = await enterpriseOrderClient['company-orders'].$get({
    query: {
      orderName: '阿里巴巴',
      orderStatus: 'confirmed',
      page: 1,
      pageSize: 20
    }
    })
    
    // 获取订单详情(基础CRUD接口)
    const orderDetail = await enterpriseOrderClient.detail[':id'].$get({
    param: { id: '123' }
    })
    
    // 获取打卡数据统计
    const checkinStats = await enterpriseOrderClient['checkin-statistics'].$get({
    query: {
      companyId: 1 // 可选,默认从认证用户获取
    }
    })
    
    // 获取视频分类统计
    const videoStats = await enterpriseOrderClient['video-statistics'].$get({
    query: {
      companyId: 1,
      assetType: 'checkin_video'
    }
    })
    
    // 批量下载企业维度视频
    const downloadResult = await enterpriseOrderClient['batch-download'].$post({
    body: {
      downloadScope: 'company',
      companyId: 1,
      assetTypes: ['checkin_video', 'work_video']
    }
    })
    
    // 更新视频审核状态
    const updateResult = await enterpriseOrderClient.videos[':id'].status.$put({
    param: { id: '456' },
    body: {
      status: 'verified'
    }
    })
    

订单统计API(史诗012提供):

  • 企业专用版本:通过企业专用订单API的checkin-statisticsvideo-statistics路由访问
    • 路径:/api/v1/yongren/order/checkin-statistics - 打卡数据统计接口(按企业维度统计打卡视频数量)
    • 路径:/api/v1/yongren/order/video-statistics - 视频统计接口(按企业维度统计视频类型分布)
  • 主要功能
    • 打卡数据统计:出勤率、迟到早退统计、考勤分析
    • 订单完成率统计:订单进度、完成情况分析
    • 视频统计:视频数量、类型分布、上传时间分析

视频管理API(史诗012提供):

  • 企业专用版本:通过企业专用订单API的company-videos(视频列表查询)、video-statistics(视频统计)、batch-download(批量下载)、videos/{id}/status(状态更新)等路由访问
  • 主要接口
    • GET /company-videos - 视频列表查询接口(按企业筛选视频资产,支持分页和排序)
    • POST /batch-download - 批量下载视频接口(支持企业维度和个人维度下载)
    • PUT /videos/{id}/status - 更新视频审核状态接口(支持pending/verified/rejected状态更新)
    • GET /video-statistics - 视频统计接口(分类统计、类型分布)

技术集成

  • RPC客户端工具:使用@d8d/mini-shared-ui-components/utils/rpc/rpc-client提供的RPC客户端工具,在UI包内创建企业专用API客户端
  • 企业专用API路径前缀api/v1/yongren
  • 架构模式:按照史诗011的mini-ui-packages架构,每个UI包负责创建和管理自己的API客户端,实现模块化集成
  • 类型安全:从相应的业务模块包(如@d8d/order-module)导入路由类型定义,确保类型安全
  • 数据安全:所有企业专用API自动验证企业用户权限,仅返回当前企业关联数据
  • 认证集成:所有API调用自动携带企业用户token(通过企业认证框架管理)

组件规范

订单管理页设计规范: 必须严格对照原型文件 docs/小程序原型/yongren.html 第1114-1301行的订单管理页面设计实现:

页面结构

  • 注意:小程序环境中状态栏由宿主提供,无需自行实现
  • 内容区域:h-[calc(100%-60px)] overflow-y-auto(仅减去底部导航60px)
  • 底部导航:订单标签激活状态(原型中未显示底部导航,但应使用基础布局)

订单筛选区域(第1129-1136行):

  • 容器:p-4 border-b border-gray-200
  • 筛选标签区域:flex space-x-2 overflow-x-auto pb-2
    • 标签样式:bg-blue-100 text-blue-800 text-xs px-3 py-1 rounded-full whitespace-nowrap(激活状态)
    • 非激活标签:bg-gray-100 text-gray-800 text-xs px-3 py-1 rounded-full whitespace-nowrap
    • 标签内容:全部订单、进行中、已完成、已取消

列表标题区域(第1140-1145行):

  • 容器:flex justify-between items-center mb-4
  • 标题:<h3 class="font-semibold text-gray-700">订单列表</h3>
  • 新建订单按钮:bg-blue-500 text-white text-xs px-3 py-1 rounded-lg
    • 图标:<i class="fas fa-plus mr-1"></i>
    • 文字:"新建订单"

订单卡片列表(第1147-1301行):

  • 容器:space-y-4
  • 订单卡片:card bg-white p-4

订单卡片头部(第1150-1156行):

  • 容器:flex justify-between items-start mb-3
    • 左侧:订单名称 <h4 class="font-semibold text-gray-800">阿里巴巴2023-11</h4>,创建时间 <p class="text-xs text-gray-500">2023-11-01 创建</p>
    • 右侧:状态标签 <span class="bg-green-100 text-green-800 text-xs px-2 py-1 rounded-full">进行中</span>

订单信息网格(第1157-1174行):

  • 容器:grid grid-cols-2 gap-3 text-sm mb-3
  • 每个字段:标签 <p class="text-gray-500">预计人数</p>,值 <p class="text-gray-800">30人</p>
  • 字段包括:预计人数、实际人数、开始日期、预计结束日期

打卡数据统计网格(第1176-1192行):

  • 容器:grid grid-cols-3 gap-2 mb-3
  • 统计卡片:bg-blue-50 rounded-lg p-2 text-center(三种颜色:blue-50, green-50, purple-50)
    • 标题:<p class="text-xs text-gray-600">本月打卡</p>
    • 数值:<p class="text-sm font-bold text-gray-800">24/30</p>
    • 百分比:<p class="text-xs text-gray-500">80%</p>
  • 统计类型:本月打卡、工资视频、个税视频

操作按钮区域(第1193-1200行):

  • 容器:flex justify-between text-sm
    • 查看详情按钮:text-blue-500,图标 <i class="fas fa-eye mr-1"></i>,文字"查看详情"
    • 下载视频按钮:text-gray-500,图标 <i class="fas fa-download mr-1"></i>,文字"下载视频"

订单详情设计规范: 原型文件中没有单独的订单详情页面,需要基于人才详情页面(页面4)的设计风格创建:

设计原则

  • 遵循人才详情页的卡片式布局和信息分组方式
  • 使用相同的颜色系统、字体大小和间距规范
  • 保持一致的交互模式(返回列表、操作按钮等)

建议页面结构

  1. 顶部信息区域:类似人才详情页,显示订单名称、状态、创建时间等关键信息
  2. 基本信息卡片:订单编号、创建时间、预计人数、实际人数、时间范围等
  3. 关联人才卡片:显示订单关联的人才列表(可点击跳转人才详情)
  4. 打卡记录卡片:按月显示打卡统计,支持查看详细打卡记录
  5. 视频资料卡片:分类显示关联视频(工资视频、个税视频等),支持播放下载
  6. 操作区域:状态变更、添加备注、下载报告等操作按钮

样式参考

  • 卡片样式:使用 .card bg-white p-4 mb-4
  • 标题样式:<h3 class="font-semibold text-gray-700 mb-3">
  • 字段布局:grid grid-cols-2 gap-3 text-smspace-y-3 text-sm
  • 状态标签:复用现有标签样式(绿色-进行中、蓝色-已完成等)

UI组件使用

  • 基础组件来源(现在来自独立的UI包):
    • YongrenTabBarLayout - 从@d8d/yongren-shared-ui/components/YongrenTabBarLayout导入(底部导航布局组件,主页面必须使用,订单标签激活状态)
    • Navbar - 从@d8d/mini-shared-ui-components/components/navbar导入(顶部导航栏组件,所有页面必须使用)
    • PageContainer - 从@d8d/mini-shared-ui-components/components/page-container导入(页面容器组件)
  • 页面层级结构规范
    • 主页面(订单列表页):使用YongrenTabBarLayout + Navbar组合
    • Navbar配置:title="订单列表"leftIcon=""leftText=""(无返回按钮)
    • ScrollView布局:px-4 pb-4 pt-0(移除顶部内边距适配navbar占位)
    • 二级页面(订单详情页):仅使用Navbar(移除YongrenTabBarLayout包裹)
    • Navbar配置:title="订单详情"leftIcon="i-heroicons-chevron-left-20-solid"leftText="返回"(带返回按钮)
    • ScrollView布局:h-screen overflow-y-auto px-4 pb-4 pt-0
  • 独立开发小程序UI组件:基于原型文件独立设计开发订单管理相关UI组件
  • 复用现有基础组件:复用mini项目中已有的基础UI组件(表格、统计卡片等),根据原型设计调整样式
  • 注意:史诗011针对mini小程序,UI组件应独立设计,而非复用管理后台的@d8d/allin-*系列UI包

文件位置

当前架构(已按mini-ui-packages拆分)

订单管理UI包

  • 包名称@d8d/yongren-order-management-ui(位于mini-ui-packages/yongren-order-management-ui/
  • 主要页面组件
    • src/pages/OrderList/OrderList.tsx - 订单列表页面组件
    • 使用YongrenTabBarLayout布局,activeTab="order"
    • 集成Navbar组件,标题"订单列表",隐藏左侧返回按钮(主页面)
    • 使用ScrollView作为内容容器,布局px-4 pb-4 pt-0适配navbar占位
    • 路由路径:pages/yongren/order/list
    • src/pages/OrderDetail/OrderDetail.tsx - 订单详情页面组件
    • 集成Navbar组件,标题"订单详情",带左侧返回按钮(二级页面)
    • 移除YongrenTabBarLayout包裹(二级页不需要底部导航)
    • 使用ScrollView作为内容容器,布局h-screen overflow-y-auto px-4 pb-4 pt-0
    • 路由路径:pages/yongren/order/detail
  • 依赖的UI包
    • 布局组件
    • @d8d/yongren-shared-ui/components/YongrenTabBarLayout - 底部导航布局组件(主页面使用)
    • @d8d/mini-shared-ui-components/components/navbar - 顶部导航栏组件(所有页面使用)
    • @d8d/mini-shared-ui-components/components/page-container - 页面容器组件
    • 业务模块
    • @d8d/allin-order-module - 订单管理模块类型定义

桥接文件位置(在mini项目中):

  • mini/src/pages/yongren/order/list/index.tsx - 订单列表页面桥接文件
    • @d8d/yongren-order-management-ui导入OrderList组件
    • 路由路径:pages/yongren/order/list
  • mini/src/pages/yongren/order/detail/index.tsx - 订单详情页面桥接文件
    • @d8d/yongren-order-management-ui导入OrderDetail组件
    • 路由路径:pages/yongren/order/detail

数据模型

基于史诗012扩展的数据库schema:

  • order_person_asset表的asset_type枚举已扩展视频类型 [来源:docs/stories/012.001.story.md#数据模型]
    • 新增视频类型:salary_videotax_videocheckin_videowork_video
  • 订单与人才、企业、岗位的多重关联关系

技术约束

  • 数据权限:企业只能查看和管理自己的订单
  • 状态流转:订单状态变更需符合业务流程规则
  • 性能考虑:打卡数据可能量大,需分页或懒加载
  • 视频处理:视频播放需考虑格式兼容性和加载性能
  • 页面结构:主页面必须使用YongrenTabBarLayout+Navbar(无返回按钮),二级页必须使用Navbar(带返回按钮,移除YongrenTabBarLayout包裹),遵循统一的页面层级结构规范
  • 布局渲染:Taro小程序中View容器内的Text组件默认内联显示,需要使用flex flex-col强制垂直排列,确保布局符合原型设计

测试要求

测试框架:Jest + Testing Library 关键测试场景

  1. 订单列表测试
    • 搜索筛选功能测试
    • 分页排序测试
    • 表格渲染性能测试
  2. 订单管理测试
    • 订单状态变更流程测试
    • 权限验证测试
    • 数据一致性测试
  3. 打卡统计测试
    • 数据统计准确性测试
    • 时间范围筛选测试
    • 数据导出功能测试
  4. 视频管理测试
    • 视频列表展示测试
    • 视频播放功能测试
    • 批量操作测试
  5. 页面结构测试
    • Navbar组件集成测试(主页面无返回,二级页带返回)
    • 页面层级结构验证(主页面使用YongrenTabBarLayout,二级页移除)
    • 类型检查验证

变更日志

日期 版本 描述 作者
2025-12-17 1.0 初始创建(订单管理故事) Bob(Scrum Master)
2025-12-20 1.1 更新Navbar集成规范,添加页面层级结构,反映mini-ui-packages架构 Claude Code
2025-12-20 1.2 实施订单管理功能:订单列表页、订单详情页、打卡统计、视频统计、集成测试 James (Developer)
2025-12-21 1.3 更新企业专用订单API规范,反映史诗012实现和架构变更,修正客户端类型引用 Claude Code
2025-12-21 1.4 添加故事012.014路由分离说明,更新API客户端类型引用,添加enterpriseOrderRoutes迁移指引 Claude Code

开发代理记录

使用的代理模型

claude-sonnet

调试日志引用

  • 类型检查发现订单管理UI包中API客户端为模拟实现,需要集成真实RPC客户端
  • 订单列表和详情组件使用模拟数据,需要连接后端API

完成笔记列表

  • ✅ 检查故事011.004代码实现完成情况:
    • 订单列表页已创建:mini-ui-packages/yongren-order-management-ui/src/pages/OrderList/OrderList.tsx
    • 订单详情页已创建:mini-ui-packages/yongren-order-management-ui/src/pages/OrderDetail/OrderDetail.tsx
    • API客户端占位符已创建:mini-ui-packages/yongren-order-management-ui/src/api/orderClient.ts
    • 测试文件已创建:OrderList.test.tsxOrderDetail.test.tsx
    • 构建配置完整:TypeScript配置、Jest配置、包配置
    • 桥接文件已设置:mini/src/pages/yongren/order/list/index.tsxmini/src/pages/yongren/order/detail/index.tsx
  • ✅ 实现订单列表页基础功能:
    • 创建订单列表页面组件,使用YongrenTabBarLayout基础布局组件
    • 实现订单表格卡片展示(订单号、人才姓名、岗位、状态、创建时间等)
    • 实现订单搜索功能UI(按订单号、人才姓名搜索)
    • 实现状态筛选UI(进行中、已完成、已取消等)
    • 集成Navbar导航栏组件,标题"订单列表",隐藏左侧返回按钮(主页面配置)
    • 调整ScrollView布局:px-4 pb-4 pt-0适配navbar占位
    • 使用模拟数据展示订单列表
  • ✅ 实现订单详情页基础功能:
    • 创建订单详情页面组件
    • 展示订单完整信息(基础信息、关联人才、岗位详情等)
    • 实现订单状态变更UI(需权限验证)
    • 添加订单备注和操作日志UI
    • 集成Navbar导航栏组件,标题"订单详情",带左侧返回按钮(二级页面配置)
    • 移除YongrenTabBarLayout包裹(二级页不需要底部导航)
    • 调整ScrollView布局:h-screen overflow-y-auto px-4 pb-4 pt-0
    • 使用模拟数据展示订单详情
  • ✅ 实现打卡数据统计UI:
    • 创建打卡数据统计卡片UI(出勤率、迟到早退统计等)
    • 实现打卡日历或时间线视图UI
    • 支持按时间范围筛选打卡数据UI
    • 使用模拟数据展示统计信息
  • ✅ 实现视频统计功能UI:
    • 创建视频统计卡片UI(视频数量、类型分布)
    • 展示订单关联视频列表UI
    • 支持视频播放、下载、分享UI
    • 添加批量视频下载功能UI
    • 使用模拟数据展示视频统计
  • ✅ 集成Navbar导航栏组件(页面层级结构规范):
    • 订单列表页:集成Navbar组件,标题"订单列表",隐藏左侧返回按钮(主页面配置)
    • 导入Navbar组件:import { Navbar } from '@d8d/mini-shared-ui-components/components/navbar'
    • 配置navbar:title="订单列表"leftIcon=""leftText=""
    • 保持YongrenTabBarLayout包裹,activeTab="order"
    • 调整ScrollView布局:px-4 pb-4 pt-0(移除顶部内边距适配navbar占位)
    • 订单详情页:集成Navbar组件,标题"订单详情",带左侧返回按钮(二级页面配置)
    • 导入Navbar组件,配置:title="订单详情"leftIcon="i-heroicons-chevron-left-20-solid"leftText="返回"
    • 移除YongrenTabBarLayout包裹(二级页不需要底部导航)
    • 调整ScrollView布局:h-screen overflow-y-auto px-4 pb-4 pt-0
    • 统一页面层级结构:主页面使用YongrenTabBarLayout+Navbar(无返回),二级页使用Navbar(带返回)
  • ✅ 编写基础测试:
    • 创建订单列表组件测试:OrderList.test.tsx
    • 创建订单详情组件测试:OrderDetail.test.tsx
    • 测试组件渲染和基本交互

发现的问题

  1. API集成缺失:订单管理UI包中的API客户端为模拟实现(orderClient.ts),需要集成真实的企业专用订单API
  2. 数据模拟状态:订单列表和详情组件使用硬编码的模拟数据,未连接后端API
  3. 原型对照检查:需要对照原型文件 docs/小程序原型/yongren.html 第1114-1301行进行详细UI验证
  4. 企业专用API使用:需要确认使用企业专用订单API(/api/v1/yongren/order)而非通用订单API,确保数据安全隔离
  5. Taro小程序Text组件垂直排列:可能需要为包含多个Text组件的View容器添加flex flex-col类,确保垂直排列符合原型设计

建议

  1. 集成真实的企业专用订单API客户端

    • mini-ui-packages/yongren-order-management-ui/src/api/目录创建enterpriseOrderClient.ts文件
    • 参考@d8d/mini-enterprise-auth-ui包的模式创建客户端:

      // 故事012.014已实现,使用enterpriseOrderRoutes类型(仅包含企业专用路由)
      // 原orderRoutes类型包含混合路由,已不适用于企业专用API客户端
      import type { enterpriseOrderRoutes } from '@d8d/order-module';
      import { rpcClient } from '@d8d/mini-shared-ui-components/utils/rpc/rpc-client';
      
      // 注意:企业专用订单API通过enterpriseAuthMiddleware中间件保护,确保仅限企业用户访问
      // 路径前缀 /api/v1/yongren/order 在路由层配置
      export const enterpriseOrderClient = rpcClient<typeof enterpriseOrderRoutes>('/api/v1/yongren/order');
      
    • 注意:企业专用订单API已通过史诗012在order-module中实现。故事012.014已提供enterpriseOrderRoutes类型(仅包含企业专用路由),实现更安全的类型检查。所有企业专用API(包括基础CRUD接口和扩展API)均通过enterpriseAuthMiddleware中间件保护,确保数据安全隔离。

    • 更新src/api/index.ts导出新的客户端

  2. 更新订单列表和详情组件

    • OrderList.tsxOrderDetail.tsx中导入并使用enterpriseOrderClient
    • 替换硬编码的模拟数据,连接后端API获取真实数据
    • 添加加载状态、错误处理和空状态显示
  3. 对照原型文件进行详细UI验证

    • 严格对照docs/小程序原型/yongren.html第1114-1301行的订单管理页面设计
    • 验证所有卡片布局、字段显示、操作按钮位置和样式
    • 确保移动端响应式设计和交互友好性
  4. 验证企业专用API路径和权限控制

    • 确认企业专用订单API路径:/api/v1/yongren/order
    • 验证API自动进行企业用户权限验证,仅返回当前企业关联数据
    • 确保数据安全隔离,防止跨企业数据访问
  5. 解决Taro小程序Text组件垂直排列问题

    • 为所有包含多个Text组件的View容器添加flex flex-col
    • 验证人才详情页、订单卡片等区域的文本垂直排列符合原型设计
  6. 完善类型检查和测试

    • 运行pnpm typecheck确保无TypeScript错误
    • 更新OrderList.test.tsxOrderDetail.test.tsx测试真实API集成
    • 添加订单搜索、筛选、状态变更等功能的集成测试

文档更新记录 (2025-12-20)

  • 根据史诗011最新实现,更新Navbar组件集成规范
  • 添加任务6:集成Navbar导航栏组件(页面层级结构规范)
  • 更新UI组件使用规范,反映mini-ui-packages拆分后的架构
  • 更新技术约束,添加页面结构要求
  • 更新测试要求,添加页面结构测试场景
  • 统一所有用人小程序页面的Navbar集成标准

QA结果

来自QA代理对已完成故事实施的QA审查结果