All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 16s
Docker Build & Deploy / Deploy to Production (push) Successful in 6s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 1s
Docker Build & Deploy / WeChat Notification (push) Successful in 1s
5.3 KiB
5.3 KiB
ADDED Requirements
Requirement: PopupContainer 组件导入路径迁移
所有引用 PopupContainer.vue 的文件必须更新导入路径为 PopupContainerV2.vue,并将组件名更改为 PopupContainerV2。
Scenario: 更新 import 语句
- WHEN 文件中存在
import PopupContainer from '@/components/PopupContainer.vue'或import PopupContainer from './PopupContainer.vue' - THEN 系统必须将其替换为
import PopupContainerV2 from '@/components/PopupContainerV2.vue'
Scenario: 更新模板中的组件名
- WHEN 模板中使用
<PopupContainer>标签 - THEN 系统必须将其替换为
<PopupContainerV2>
Requirement: Props API 映射转换
V1 和 V2 的 props 差异必须通过重构适配,确保功能等价。
Scenario: 基础 props 映射
- WHEN V1 使用
v-model:show、title等基础 props - THEN V2 必须保留这些 props 不变(
modelValue、title在两个版本中一致)
Scenario: height prop 默认值处理
- WHEN V1 未显式指定
heightprop(默认80%) - THEN V2 必须显式添加
:height="'80%'"以保持一致的视觉效果
Scenario: 移除不支持的 props
- WHEN V1 使用
closeable、subtitle、showConfirmButton、showCancelButton、confirmText、cancelText等 props - THEN 系统必须移除这些 props,并通过插槽方式重构(见下一需求)
Requirement: subtitle 功能迁移
V1 的 subtitle prop 必须转换为 V2 的默认插槽内容或自定义标题结构。
Scenario: subtitle 作为内容区域展示
- WHEN V1 使用
subtitleprop 显示副标题 - THEN 必须将 subtitle 内容移至
<PopupContainerV2>的默认插槽中,并使用适当的样式包裹(如<p class="subtitle-text">{{ subtitle }}</p>)
Scenario: subtitle 包含 HTML 内容
- WHEN V1 的
subtitle使用v-html渲染(如统计信息) - THEN 必须在默认插槽中创建等价的 HTML 结构,保持语义和样式一致
Requirement: 确认/取消按钮迁移
V1 的 showConfirmButton、showCancelButton 等按钮相关 props 必须转换为 V2 的 footer 插槽。
Scenario: 标准确认/取消按钮
- WHEN V1 使用
show-confirm-button和show-cancel-buttonprops - THEN 必须在 V2 的
<template #footer>中手动创建<van-button>组件,绑定相同的事件处理器(@confirm、@cancel)
Scenario: 自定义按钮文本
- WHEN V1 使用
confirm-text或cancel-text自定义按钮文字 - THEN 必须将文本内容应用到 footer 插槽中的按钮组件
Scenario: 按钮布局样式
- WHEN 创建 footer 插槽内的按钮
- THEN 必须使用 flexbox 布局确保按钮水平排列,间距为 12px,与 V1 的视觉效果一致
Requirement: header-actions 插槽迁移
V1 的 header-actions 插槽必须根据业务逻辑转换为 V2 的内容区域或自定义实现。
Scenario: 移除 header-actions 插槽
- WHEN V1 使用
<template #header-actions>插槽放置操作按钮 - THEN V2 必须将这些按钮移至默认插槽顶部或 footer 插槽中,根据业务语义选择合适位置
Scenario: 保持操作按钮的视觉层级
- WHEN V1 的 header-actions 与标题同行显示(grid 布局)
- THEN 必须在 V2 的默认插槽中创建自定义布局,使用绝对定位或 flexbox 实现相同效果
Requirement: 样式和暗色模式兼容性
迁移后的组件必须保持视觉一致性,正确响应暗色模式。
Scenario: 暗色模式自动适配
- WHEN 用户切换到暗色模式
- THEN V2 的硬编码颜色(
#ffffff、#09090b等)必须通过@media (prefers-color-scheme: dark)自动切换
Scenario: 内容区域 padding 处理
- WHEN V1 的可滚动内容区域有默认样式
- THEN V2 的内容插槽无默认 padding,必须由使用方手动添加(如
<div class="content" style="padding: 16px">)
Requirement: 事件处理器兼容性
V1 的事件(@confirm、@cancel)必须正确映射到 V2 的按钮点击事件。
Scenario: 确认事件触发
- WHEN 用户点击 footer 插槽中的确认按钮
- THEN 必须手动触发原有的
@confirm事件处理逻辑(可能需要通过emit或直接调用方法)
Scenario: 取消事件触发
- WHEN 用户点击取消按钮或关闭弹窗
- THEN 必须确保原有的
@cancel逻辑被正确执行(V2 已通过关闭按钮自动关闭弹窗,但可能需要额外的清理逻辑)
Requirement: 代码质量和测试
迁移后的代码必须通过 ESLint 检查,并保持功能正确性。
Scenario: ESLint 验证通过
- WHEN 完成迁移后
- THEN 运行
pnpm lint必须无错误和警告
Scenario: 功能回归测试
- WHEN 迁移后的页面加载
- THEN 弹窗的打开/关闭、内容展示、按钮交互必须与迁移前行为一致
Requirement: 删除旧版本组件
所有迁移完成后,必须删除 PopupContainer.vue 文件以避免混淆。
Scenario: 文件删除
- WHEN 所有 18 个文件迁移完成并验证通过
- THEN 系统必须删除
Web/src/components/PopupContainer.vue文件
Scenario: 无残留引用
- WHEN 删除旧组件后
- THEN 项目中不得存在任何对
PopupContainer.vue的引用(通过全局搜索验证)