针对 1080×1920 分辨率立式一体机,优化对话界面布局,确保所有可操作元素位于用户易触及区域(Y≤1500px)。
HomeView.vue 和 SsInputBox.vuecomputed 从窗口尺寸派生,无额外状态┌──────────────────────────────┐ Y=0
│ 顶部导航栏(100px) │ ← 返回首页 + 标题
├──────────────────────────────┤ Y=100
│ 服务快捷栏(100px) │ ← 四川特色、政策解读等
├──────────────────────────────┤ Y=200
│ │
│ 中部对话区(flex: 1) │ ← 消息列表 + 输入框
│ │
├──────────────────────────────┤ Y≈1500
│ 底部常见问题区(420px) │ ← 仅展示,不可点击
└──────────────────────────────┘ Y=1920
设计原则:所有内容区域与顶部导航栏的内容区域对齐
对齐策略:使用 CSS 变量定义统一的内容宽度
--kiosk-content-padding: 2rem;
--kiosk-content-width: calc(100vw - var(--kiosk-content-padding) * 2);
应用范围:
padding: 0 2rem(定义内容区域边界)width: var(--kiosk-content-width)max-width: var(--kiosk-content-width)max-width: var(--kiosk-content-width)width: var(--kiosk-content-width)计算结果:
calc(100vw - 4rem) = 1080px - 64px = 1016px优势:
SsService 组件的渐变背景、阴影效果flex: 1 和 justify-content: space-between 均匀分布itemClass 逻辑linear-gradient(180deg, rgba(250, 255, 253, 0.8), rgba(225, 245, 248, 0.8))linear-gradient(180deg, rgba(255, 255, 255, 0.7), rgba(246, 240, 239, 0.7))linear-gradient(90deg, #c2dff9, #c6e2fa)flex: 1,最小宽度 140px,高度 70px,图标半透明显示global.commonProblem 取前 5 条v-if 完全不渲染侧边栏v-if="!(global.spread && isKioskDevice)"isKioskDevice computed 属性(设备检测)kioskFaqList computed 属性(常见问题列表)getServiceClass 方法(复用服务项样式逻辑)kiosk-top-nav 顶部导航栏组件kiosk-service-bar 服务快捷栏(复用原有设计)kiosk-bottom-faq 底部展示区.kiosk-mode 样式规则--kiosk-content-width CSS 变量(768px)isKioskDevice computed 属性.kiosk-chat 类名支持--kiosk-content-width: calc(100vw - 4rem) 用于统一宽度对齐.ss-chat-container 和 .input-container 使用 var(--kiosk-content-width)✅ 单一数据源:设备检测通过 computed 从窗口尺寸派生,无冗余状态
✅ 组件复用:复用 SsService 的样式设计和 SsCommonProblem 数据
✅ 清晰注释:关键逻辑添加中文注释说明设计意图
✅ 最小改动:仅在必要位置添加条件渲染和样式
✅ 响应式设计:使用 media query 隔离立式一体机样式
✅ 视觉一致性:保持原有的渐变背景、阴影、图标等视觉元素
当同时满足以下条件时,自动启用立式一体机布局:
global.spread === true)点击顶部"返回首页"按钮,调用 goHome() 方法重置状态。
| 区域 | Y 坐标范围 | 高度 | 可操作性 |
|---|---|---|---|
| 顶部导航 | 0-100px | 100px | ✅ 强烈推荐 |
| 服务快捷栏 | 100-200px | 100px | ✅ 强烈推荐 |
| 对话区域 | 200-1500px | ~1300px | ✅ 核心操作区 |
| 常见问题 | 1500-1920px | 420px | ⚠️ 仅展示 |
核心原则:所有内容区域与顶部导航栏的内容区域完美对齐
实现方式:
padding: 0 2rem使用 CSS 变量计算内容宽度:
--kiosk-content-padding: 2rem;
--kiosk-content-width: calc(100vw - var(--kiosk-content-padding) * 2);
所有内容区域使用相同的宽度变量
应用组件:
width: var(--kiosk-content-width)max-width: var(--kiosk-content-width)max-width: var(--kiosk-content-width)width: var(--kiosk-content-width)计算示例(1080px 屏幕):
100vw = 1080pxvar(--kiosk-content-padding) * 2 = 2rem * 2 = 4rem = 64pxvar(--kiosk-content-width) = 1080px - 64px = 1016px对齐效果:
┌─────────────────────────────┐ 屏幕边缘
│ ← 返回首页 商小川智能助手 │ ← padding: 0 2rem
│ ↑ ↑ │
│ └────────────────────────┘ │ ← 内容区域宽度 1016px
│ ┌────────────────────────┐ │
│ │ 服务快捷栏 1016px │ │
│ └────────────────────────┘ │
│ ┌────────────────────────┐ │
│ │ 聊天消息区 1016px │ │
│ │ + 输入框 1016px │ │
│ └────────────────────────┘ │
│ ┌────────────────────────┐ │
│ │ 热门问题 1016px │ │
│ └────────────────────────┘ │
└─────────────────────────────┘
优势: