Files
EmailBill/openspec/changes/unified-popup-component/specs/unified-popup-system/spec.md
SunCheng a88556c784 fix
2026-02-15 10:10:28 +08:00

89 lines
4.0 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: 统一弹窗组件提供底部弹出式容器
系统 SHALL 提供统一的弹窗组件 `PopupContainer`,支持底部弹出式布局,用于展示表单、列表、详情等内容。
#### Scenario: 基础弹窗展示
- **WHEN** 用户触发弹窗打开
- **THEN** 系统显示底部弹出的弹窗容器,带有圆角和关闭按钮
- **THEN** 弹窗高度可配置(默认 80%
#### Scenario: 弹窗头部固定内容可滚动
- **WHEN** 弹窗内容超出可视区域
- **THEN** 弹窗头部保持固定,内容区域可滚动
- **THEN** 底部页脚(如有)保持固定不可滚动
### Requirement: 统一弹窗组件支持标题和副标题
系统 SHALL 允许配置弹窗的标题和副标题,副标题用于显示统计信息或辅助说明。
#### Scenario: 显示标题和副标题
- **WHEN** 弹窗配置了标题和副标题
- **THEN** 标题显示在弹窗头部,字体大小 16px加粗
- **THEN** 副标题显示在标题下方,字体大小 14px居中显示
#### Scenario: 无副标题时的头部布局
- **WHEN** 弹窗只配置了标题,未配置副标题
- **THEN** 标题居中显示
- **THEN** 如果有操作按钮,操作按钮显示在标题右侧
### Requirement: 统一弹窗组件支持头部操作按钮插槽
系统 SHALL 提供 `header-actions` 插槽,允许在弹窗头部插入自定义操作按钮。
#### Scenario: 插入头部操作按钮
- **WHEN** 父组件使用 `header-actions` 插槽
- **THEN** 操作按钮显示在弹窗头部的合适位置(有副标题时在右侧,无副标题时与标题同行右侧)
### Requirement: 统一弹窗组件支持底部固定页脚
系统 SHALL 提供固定底部的页脚区域,用于放置确认、取消等操作按钮。
#### Scenario: 显示底部页脚
- **WHEN** 父组件使用 `footer` 插槽
- **THEN** 页脚固定显示在弹窗底部,内容区域可滚动
- **THEN** 页脚区域有上边框分隔,背景色与头部一致
### Requirement: 统一弹窗组件支持双向绑定
系统 SHALL 使用 `v-model:show``v-model` 控制弹窗的显示/隐藏状态。
#### Scenario: 通过 v-model 控制弹窗显示
- **WHEN** 父组件修改 v-model 绑定的值为 true
- **THEN** 弹窗打开并显示内容
- **WHEN** 用户点击关闭按钮或弹窗外部区域
- **THEN** 弹窗关闭v-model 绑定的值更新为 false
### Requirement: 统一弹窗组件支持关闭按钮配置
系统 SHALL 允许通过 `closeable` prop 配置是否显示关闭按钮。
#### Scenario: 禁用关闭按钮
- **WHEN** closeable 设置为 false
- **THEN** 弹窗不显示关闭按钮
- **THEN** 用户只能通过 v-model 关闭弹窗或点击弹窗外部区域
### Requirement: 统一弹窗组件支持点击外部关闭
系统 SHALL 支持点击弹窗外部区域关闭弹窗(继承自 Vant UI 的 van-popup
#### Scenario: 点击外部区域关闭
- **WHEN** 用户点击弹窗外部区域
- **THEN** 弹窗关闭v-model 绑定的值更新为 false
### Requirement: 统一弹窗组件支持表单验证场景
系统 SHALL 支持在弹窗内容区域放置表单,并提供表单验证功能。
#### Scenario: 表单弹窗提交
- **WHEN** 用户填写表单并点击页脚的提交按钮
- **THEN** 父组件可以访问表单数据进行验证和提交
- **THEN** 验证失败时,弹窗保持打开状态
### Requirement: 统一弹窗组件使用 Vant UI 主题变量
系统 SHALL 使用 Vant UI 的 CSS 变量(如 `--van-text-color``--van-border-color``--van-background` 等)保持与现有设计系统一致。
#### Scenario: 主题适配
- **WHEN** 应用切换主题(深色/浅色)
- **THEN** 弹窗组件自动适配主题颜色
### Requirement: 统一弹窗组件支持 teleport 到 body
系统 SHALL 将弹窗挂载到 `body` 元素,避免被父组件的样式或层级影响。
#### Scenario: 弹窗层级正确
- **WHEN** 弹窗在嵌套组件中打开
- **THEN** 弹窗正确显示在最顶层,不被父组件的 z-index 影响