Files
SunCheng 32d5ed62d0
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
fix
2026-02-20 14:57:19 +08:00

109 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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 未显式指定 `height` prop默认 `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 使用 `subtitle` prop 显示副标题
- **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-button` props
- **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` 的引用(通过全局搜索验证)