.page-camera { display: flex; flex-direction: column; gap: 12px; overflow: hidden; width: 100%; height: 100%; min-height: 0; } .page-camera .page5-top { display: flex; gap: 12px; width: 100%; height: 80px; flex: none; } .page-camera .page5-top .status-bar { flex: 1; min-width: 0; height: 100%; } .page-camera .status-bar { display: flex; align-items: center; padding: 8px 12px; background: linear-gradient(180deg, #0f172a, #0b1220); gap: 12px; border: 1px solid rgba(148, 163, 184, 0.15); border-radius: 6px; flex-shrink: 0; } .page-camera .status-item { display: flex; flex-direction: column; gap: 4px; } .page-camera .status-item .label { font-size: 14px; } .page-camera .status-item .value { font-size: 14px; font-family: ui-monospace, Consolas, monospace; } .page-camera .button-item { display: flex; align-items: center; gap: 4px; margin-left: auto; flex-direction: row; } /* 左右拆分的栏 */ .page-camera .panes { display: flex; gap: 12px; flex: 1; min-height: 0; overflow: hidden; } /* 相机拍照预览 */ .page-camera .left-pane { flex: 1; display: flex; flex-direction: column; gap: 12px; overflow: hidden; min-width: 0; } .page-camera .left-pane .card { flex: 1; display: flex; flex-direction: column; min-height: 0; overflow: hidden; } .page-camera .camera-card { flex: 1; display: flex; flex-direction: column; min-height: 0; } .page-camera .camera-image-box { flex: 1; display: flex; align-items: center; justify-content: center; min-height: 0; overflow: hidden; background: #020617; border: 1px solid #1f2937; border-radius: 6px; margin-bottom: 14px; } .page-camera .camera-image-box img { width: 100%; height: 100%; object-fit: contain; } .page-camera .camera-info-table { width: 100%; height: 70px; border-collapse: collapse; border-spacing: 0; background: #111827; table-layout: fixed; } .page-camera .camera-info-table td { border: 1px solid #374151; padding: 0 10px; white-space: nowrap; color: #e2e8f0; } .page-camera .camera-info-table td:nth-child(1), .page-camera .camera-info-table td:nth-child(3) { width: 110px; color: #94a3b8; } /* 展示服务日志 */ .page-camera .right-pane { flex: 1; display: flex; flex-direction: column; min-width: 0; } /* ================= 移动端状态条统一 (竖屏+横屏共用) ================= 状态项从"标签在上值在下"改为"标签居左、值居右"的行式布局, 上下成列像信息表一样整齐; 连接状态渲染为药丸徽章, 一眼可辨 */ @media (max-width: 768px), (max-height: 600px) { .page-camera .page5-top { height: auto; flex-wrap: wrap; } /* 两条状态栏都在 .page5-top 内: 各自独占整行、不可收缩(否则 flex 会 在换行前先把条目压扁, IP 值被挤成竖排), 条目内部再换行 */ .page-camera .page5-top .status-bar { height: auto; width: 100%; flex: none; flex-wrap: wrap; row-gap: 6px; } .page-camera .status-bar .status-item { flex-direction: row; align-items: center; justify-content: space-between; gap: 8px; flex-shrink: 0; } .page-camera .status-item .label { color: #94a3b8; flex-shrink: 0; } .page-camera .status-item .value { text-align: right; min-width: 0; word-break: break-all; } /* 连接状态(第二条状态栏第 3 项): 药丸徽章突出显示, 色点随状态变色 */ .page-camera .page5-top .status-bar:last-of-type > .status-item:nth-child(3) .value { display: inline-flex; align-items: center; padding: 2px 10px; border-radius: 999px; background: rgba(148, 163, 184, 0.12); font-weight: 600; } /* 第二条状态栏行内分配: GPIO22 弹性填充, 连接状态徽章紧贴右缘 — 标签长的 GPIO22 不再被挤压, 徽章位置恒定在最右 */ .page-camera .page5-top .status-bar:last-of-type > .status-item:nth-child(2) { flex: 1 1 auto; width: auto; min-width: 0; } .page-camera .page5-top .status-bar:last-of-type > .status-item:nth-child(3) { flex: 0 0 auto; width: auto; margin-left: auto; } /* 操作按钮行: 独占整行, 按钮等分, 与全站按钮组同一规格 */ .page-camera .status-item.button-item { width: 100%; margin-left: 0; } .page-camera .button-item .btn { flex: 1 1 0; min-width: 0; display: block; height: auto; padding: 6px 4px; line-height: 18px; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } } /* ================= 移动端适配 (≤768px) ================= */ @media (max-width: 768px) { .page-camera .status-bar { flex-wrap: wrap; row-gap: 6px; } .page-camera .page5-top { flex-direction: column; } .page-camera .panes { flex-direction: column; } .page-camera .left-pane, .page-camera .right-pane { width: 100%; } .page-camera .left-pane { flex-direction: column; } /* 纵向堆叠时解除裁切, 由 #view 统一滚动 */ .page-camera .panes { flex: none; overflow: visible; } .page-camera .left-pane, .page-camera .left-pane .card { overflow: visible; } /* 顶部状态条高度随内容换行撑开 */ .page-camera .page5-top { height: auto; } /* 图像预览区自适应: 不再依赖剩余高度, 限高防止占满整屏 */ .page-camera .camera-image-box { flex: none; height: auto; } .page-camera .camera-image-box img { height: auto; max-height: 280px; } /* 相机信息表: 4 列在窄屏收紧字号与留白 */ .page-camera .camera-info-table { height: auto; } .page-camera .camera-info-table td { font-size: 12px; padding: 4px 6px; white-space: normal; word-break: break-all; } .page-camera .camera-info-table td:nth-child(1), .page-camera .camera-info-table td:nth-child(3) { width: 88px; } /* 拍照操作按钮: 标题与按钮分两行排列, 4 个按钮完整可见不裁切 */ .page-camera .camera-card .card-header { flex-direction: column; align-items: flex-start; gap: 8px; } .page-camera .camera-card .log-actions { justify-content: flex-start; width: 100%; } /* 第一条状态栏(相机服务/相机总数/海康/大华): 两列排布 */ .page-camera .page5-top .status-bar .status-item:not(.button-item) { width: calc(50% - 6px); } /* 第二条状态栏: 网口相机值长占整行, GPIO22/连接状态 由共用规则分配(填充+贴右) */ .page-camera .page5-top .status-bar:last-of-type > .status-item { width: 100%; } } /* ================= 横屏/矮屏适配 (高度 ≤600px) ================= 状态条与竖屏同一套行式布局; 宽度充裕, 每行放 3~4 个状态项 */ @media (max-height: 600px) { .page-camera .page5-top .status-bar .status-item:not(.button-item) { width: calc(25% - 9px); } .page-camera .page5-top .status-bar:last-of-type > .status-item:not(.button-item) { width: calc(25% - 9px); } /* 网口相机值长(IP/MASK), 单独放宽; GPIO22/连接状态 由共用规则分配 */ .page-camera .page5-top .status-bar:last-of-type > .status-item:nth-child(1) { width: calc(40% - 9px); } }