ThingsPanel 物联网平台 v1.2.4 的更新重点很务实:不是增加一个炫目的新概念,而是把业务系统里最常见、也最容易让人烦躁的看板嵌入问题继续打磨。看板放进业务页面后高度不合适、内容被截断、滚动条互相打架、图表细节不够清楚,这些问题在 IoT 场景里会直接影响值班、巡检和运营判断。
这次版本围绕看板显示稳定性、嵌入自适应能力、图表展示细节和平台兼容性展开。对已经把 ThingsPanel 作为设备监控、能耗分析、告警展示入口的团队来说,v1.2.4 更像是一次“把看板真正放进生产页面”的体验修正。
看板嵌入的问题,通常不是 iframe 这么简单
很多物联网平台的看板最终都会被嵌入到企业门户、运维系统、工单系统或客户大屏中。技术上看,嵌入一个页面似乎只要一行 iframe:
<iframe src="https://thingspanel.example.com/dashboard/xxx"></iframe>
但实际运行时会遇到几个硬问题:
- 父页面不知道子页面真实高度,结果 iframe 太矮,底部图表被截断。
- iframe 自己滚动,外层业务页面也滚动,用户滚几下就丢失上下文。
- 看板图表尺寸依赖容器宽高,嵌入后如果 resize 触发不稳定,图表会出现空白、压缩或展示不完整。
- 不同浏览器、不同后台布局、不同屏幕密度下,细节表现不一致。
v1.2.4 聚焦的“嵌入自适应能力”和“显示稳定性”,正是这些生产场景里的痛点。对开发者来说,升级价值不只是页面更顺眼,而是减少业务系统集成时的补丁代码和临时 CSS。
图表细节是 IoT 看板的有效信息密度
物联网看板和普通管理后台表格不同,它的关键价值在于连续数据和现场状态:温度曲线、压力波动、电流峰值、设备在线率、告警趋势,都需要在有限空间里准确呈现。
如果图表显示“不够细”,问题往往不只是视觉层面。比如:
- 折线过粗,异常尖峰被视觉上抹平。
- 坐标轴标签拥挤,值班人员需要猜测时间点。
- tooltip 信息不足,排查人员无法快速定位设备和指标。
- 嵌入后图表高度被压缩,趋势判断变得困难。
因此,v1.2.4 对图表展示细节的优化,应该放到“降低误判成本”的角度看。IoT 系统里,少看清一次峰值,可能就意味着晚处理一次设备异常。
可以这样实践:给嵌入看板加一层自适应高度协议
下面是一个可改造的最小示例,用于业务系统中嵌入 ThingsPanel 看板时处理高度自适应。它不声称是 ThingsPanel v1.2.4 的内置 API,只是一个通用实践:如果看板页面和业务页面都在你的控制范围内,可以通过 postMessage 让子页面把内容高度发给父页面。
需要改的地方:
- 把
DASHBOARD_URL换成你的 ThingsPanel 看板地址。 - 把
ALLOWED_ORIGIN换成 ThingsPanel 所在域名。 - 如果跨域嵌入受限,需要同时检查平台的 iframe 安全策略、反向代理头和登录态策略。
父页面示例:
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>业务系统中的 ThingsPanel 看板</title>
<style>
body {
margin: 0;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background: #f6f7f9;
}
.page-header {
height: 56px;
display: flex;
align-items: center;
padding: 0 20px;
background: #ffffff;
border-bottom: 1px solid #e5e7eb;
font-weight: 600;
}
.dashboard-frame {
width: 100%;
min-height: calc(100vh - 56px);
border: 0;
display: block;
background: #ffffff;
}
</style>
</head>
<body>
<header class="page-header">设备运行总览</header>
<iframe
id="thingspanel-dashboard"
class="dashboard-frame"
src="https://thingspanel.example.com/dashboard/demo"
title="ThingsPanel Dashboard"
></iframe>
<script>
const ALLOWED_ORIGIN = "https://thingspanel.example.com";
const frame = document.getElementById("thingspanel-dashboard");
window.addEventListener("message", (event) => {
if (event.origin !== ALLOWED_ORIGIN) return;
if (!event.data || event.data.type !== "thingspanel:resize") return;
const nextHeight = Number(event.data.height);
if (!Number.isFinite(nextHeight)) return;
frame.style.height = `${Math.max(nextHeight, window.innerHeight - 56)}px`;
});
</script>
</body>
</html>
如果你能在被嵌入的看板页面中加入脚本,可以这样发送高度变化:
<script>
function notifyParentHeight() {
const height = Math.max(
document.documentElement.scrollHeight,
document.body.scrollHeight
);
window.parent.postMessage(
{ type: "thingspanel:resize", height },
"https://business.example.com"
);
}
window.addEventListener("load", notifyParentHeight);
window.addEventListener("resize", notifyParentHeight);
const observer = new ResizeObserver(notifyParentHeight);
observer.observe(document.documentElement);
</script>
这个方案的关键点是:父页面只信任指定来源,子页面只向指定业务域发送消息。不要在生产环境里把 postMessage 的目标域写成 *,也不要接受任意来源的 resize 消息,否则会留下页面操控风险。
部署前可以重点验证这几项
升级到 v1.2.4 后,建议不要只在平台内部打开看板看一眼。真正的验证应该覆盖“业务页面中的看板”。可以按下面清单跑一遍:
# 1. 在桌面浏览器中检查嵌入页是否出现双滚动条
# 2. 切换 1366x768、1920x1080、移动端宽度,观察图表是否被截断
# 3. 打开包含多张图表的看板,确认页面加载后高度能稳定下来
# 4. 模拟数据刷新,观察图表 resize 后是否出现空白或重叠
# 5. 在目标浏览器中验证登录态、跨域策略和 iframe 加载策略
如果团队有 Playwright,也可以给嵌入页补一个简单的视觉冒烟测试。下面示例假设你的业务嵌入页地址是 http://localhost:3000/iot-dashboard:
npm init -y
npm install -D @playwright/test
npx playwright install chromium
// dashboard.spec.js
const { test, expect } = require("@playwright/test");
test("embedded ThingsPanel dashboard is visible and scrollable", async ({ page }) => {
await page.goto("http://localhost:3000/iot-dashboard");
const frame = page.locator("iframe[title='ThingsPanel Dashboard']");
await expect(frame).toBeVisible();
const box = await frame.boundingBox();
expect(box.height).toBeGreaterThan(500);
const hasDoubleScrollbar = await page.evaluate(() => {
const pageScrollable = document.documentElement.scrollHeight > window.innerHeight;
const iframe = document.querySelector("iframe[title='ThingsPanel Dashboard']");
return pageScrollable && iframe && iframe.clientHeight < iframe.scrollHeight;
});
expect(hasDoubleScrollbar).toBeFalsy();
});
运行:
npx playwright test dashboard.spec.js
这类测试不需要覆盖所有图表细节,但能防止最明显的回归:iframe 没加载、高度明显不对、页面滚动体验异常。
采用建议:把它当成集成体验升级,而不是单纯版本号升级
ThingsPanel v1.2.4 的关键词是稳定、自适应、细节和兼容。对物联网平台来说,这些词不花哨,但非常接近真实交付现场。
建议采用时关注三件事:
- 已经在业务系统中嵌入看板的团队,优先验证高度、滚动和图表完整性。
- 准备做客户门户或运维大屏的团队,可以把 v1.2.4 作为嵌入体验的基线版本评估。
- 对跨域、单点登录、iframe 安全头有严格要求的环境,升级前要把代理配置和浏览器策略一起检查。
看板不是孤立页面。它进入业务系统之后,才真正变成运维人员每天使用的工具。v1.2.4 的价值,也正在于把这段嵌入后的使用链路补得更稳。