4.9 KiB
4.9 KiB
G01 固定信息区与独立列表滚动设计
决定
G01“已有家谱”的正常列表态改为两段式布局:上方信息区固定,下方列表区独立纵向滚动。该决定只作用于 G01,不改变其他 G 页面,也不改变 G01 的业务数据、入口、卡片样式、背景或弹窗。
用户已通过可操作对比稿确认该方向。
固定范围
由上到下固定显示:
- 红色“我的家谱”标题栏;
- 当前家谱大卡片;
- 世系图、成员、字辈诗、申请审核四个快捷入口;
- 快捷入口下方金色分隔线;
- 底部三项导航栏。
固定区不随列表滚动,不做折叠、缩放、吸顶动画或滚动渐变。
独立滚动范围
金色分隔线下方到固定底部导航上方为唯一列表滚动区,包含:
- “我创建的”标题及卡片;
- “我加入的”标题及卡片;
- “加入申请”标题及卡片;
- “添加家谱”入口;
- 列表底部安全留白。
三个分组标题随列表一起滚动,不二次吸顶。现有“加入申请”连续卡片继续保持 12rpx 间距。
页面状态规则
仅 hasGenealogies 正常列表态使用两段式布局。
loading:保持当前页面级加载布局,不创建空的固定区或内部列表滚动区;error:保持完整错误面板自然纵向布局;empty:保持完整空状态面板自然纵向布局;- 添加家谱弹层、当前家谱切换层:继续使用全屏固定遮罩,滚动区不得穿透;
- 背景:继续由
GenealogyPageBackground.vue固定覆盖整页,不进入任何滚动容器。
尺寸与布局
正常列表态使用视口高度和弹性布局分配空间,不按某一台手机写死滚动区像素高度:
- 页面壳占满当前可用视口;
- 标题栏按现有真实状态栏高度占位;
- 底部导航按现有
112rpx + safe-area-inset-bottom占位; - 当前家谱、快捷入口和分隔线按现有视觉尺寸占位;
- 剩余空间全部分配给列表滚动区,滚动容器必须得到可计算高度;
- 320×568 不压缩字号、卡片或快捷入口,列表保留约一张半卡片的可视高度并允许自然滚动;
- 360×640、360×800、412×915 以及 412×1000 均不得出现横向溢出、底栏遮挡或列表无法滚动。
滚动反馈与位置规则
- 不把“绝对没有滚动条”写成合同;Android 滑动时允许出现短暂的系统滚动指示条;
- 不专门美化或强制隐藏系统滚动指示条,只验证其不挤压卡片、不造成横向错位;
- 不新增下拉刷新、回弹动画、滚动阴影或底部分页行为;
- 从 G01 打开详情/申请页后返回,保留离开前的列表滚动位置;
- 打开并关闭添加家谱弹层或当前家谱切换层,不改变列表滚动位置;
- 用户切换当前家谱后,列表明确回到顶部,避免继续停留在旧家谱的浏览位置;
- loading、error、empty 与正常态切换时,不错误复用正常列表态的旧滚动位置。
实现边界
- 正常列表态使用单一纵向区域滚动容器;禁止嵌套同方向滚动容器;
- 当前家谱卡、快捷入口和分隔线必须位于区域滚动容器之外;
- 只调整 G01 模板结构、G01 局部样式和直接对应的测试;
- 不修改
PageHeader.vue、AppTabbar.vue、GenealogyPageBackground.vue或其他 G 页面; - 不对接接口,不新增全局状态,不改变路由;
- 不使用原生
uni.showToast、uni.showModal、uni.showLoading或uni.showActionSheet。
验证合同
静态合同
- 正常列表态存在且只存在一个纵向滚动容器;
- 当前家谱、快捷入口和分隔线位于滚动容器外;
- 三组列表和“添加家谱”入口位于滚动容器内;
- loading、error、empty 不被包进正常态固定结构;
- 未修改其他 G 页面共享组件引用。
H5 运行验证
在 320×568、360×640、360×800、412×915 和 412×1000 下:
- 滚动列表前后,标题栏、当前家谱卡、快捷入口、分隔线和底部导航的视口位置保持不变;
- “我创建的”及其后内容发生纵向位移;
- 可以滚动到最后一个申请卡和“添加家谱”入口;
- 页面没有横向溢出、滚动穿透或底栏遮挡;
- 卡片点击、添加家谱弹层、当前家谱切换层、快捷入口保持可操作;
- 返回 G01 保留列表位置,切换当前家谱后列表回到顶部;
- 浏览器无异常、资源 404 或
console.error。
仍缺验证
H5 证据不能替代 Android/HBuilderX 真机或模拟器。最终仍需复核 Android 区域滚动手感、短暂系统滚动指示条、惯性、返回现场、状态栏、安全区和 4GB 设备性能。
验收状态边界
本次实现完成后仍只是 G01 新滚动结构的内部 H5 候选。背景方向已由用户确认,但 G01 整页未获得正式验收,不得因此改为 [x] 或冻结。