|
|
@@ -270,10 +270,8 @@ export function portalCmsHtml(d: any, cms: any): string {
|
|
|
const total = n(kpi['全场'] ?? kpi['收录台'])
|
|
|
const okn = Math.max(total - alert, 0)
|
|
|
const win = String((d && d.win) || '')
|
|
|
- // 窗口内报警工单条数(按窗,取 d.fus.事件.主轴.工单.总条数)
|
|
|
const ev = (((fus['事件'] || {})['主轴'] || {})['工单'] || {})
|
|
|
const tickets = n(ev['总条数'])
|
|
|
- // CMS 侧(/api/vibcms):采集窗 / 时间范围 / 裁决分布 / 行动项 / 数据时点
|
|
|
const c = cms || {}
|
|
|
const grades = Array.isArray(c.grades) ? c.grades : []
|
|
|
const cnt = (g: string) => grades.filter((x: any) => String(x['综合'] || '') === g).length
|
|
|
@@ -283,18 +281,27 @@ export function portalCmsHtml(d: any, cms: any): string {
|
|
|
const cmsDate = String(c.date || '')
|
|
|
const chip = (cls: string, s: string) => '<span class="chip' + (cls ? ' ' + cls : '') + '">' + s + '</span>'
|
|
|
let html = PORTAL_CMS_HTML
|
|
|
- // 移除门户里写死的静态数字句("TCM 六采集窗 · 320 万记录 · 160 万谱")——接口不提供记录/谱计数
|
|
|
+ // 门户里写死的静态数字(接口不提供记录/谱计数)先移除
|
|
|
html = html.replace(/<span class="chip[^"]*">TCM[^<]*<\/span>/, '')
|
|
|
- // 门户原有的两个状态 chip → 按窗实时值
|
|
|
- html = html.replace(/(<span class="chip s al">)[^<]*/, '$1需关注 ' + alert + ' 台')
|
|
|
- html = html.replace(/(<span class="chip s gd">)[^<]*/, '$1未见异常 ' + okn + ' 台')
|
|
|
- const live = [
|
|
|
+ // ★P71 精确替换 hero 内的整个 .chips 容器(此前是往第一个 </div> 塞 ⇒ 位置错、显示乱)
|
|
|
+ const chips = [
|
|
|
+ chip('s al', '需关注 ' + alert + ' 台'),
|
|
|
+ chip('s gd', '未见异常 ' + okn + ' 台'),
|
|
|
+ chip('ev', '证据窗末 ' + (String(fus['证据窗末'] || c.date || '').slice(0, 10) || '—')),
|
|
|
chip('', '当前时间窗 · ' + win),
|
|
|
chip('ev', '窗口内报警工单 · ' + tickets + ' 条'),
|
|
|
chip('', 'CMS 采集窗 ' + (cmsWin || '—') + (cmsRange ? ' · ' + cmsRange : '')),
|
|
|
chip('', 'CMS 裁决 · 优秀 ' + cnt('优秀') + ' / 良好 ' + cnt('良好') + ' / 报警 ' + cnt('报警')),
|
|
|
chip('', '行动项 ' + actions + ' 条' + (cmsDate ? ' · 数据时点 ' + cmsDate : '')),
|
|
|
].join('')
|
|
|
- html = html.replace('</div>', live + '</div>', 1)
|
|
|
+ if (/<div class="chips">[\s\S]*?<\/div>/.test(html)) html = html.replace(/<div class="chips">[\s\S]*?<\/div>/, '<div class="chips">' + chips + '</div>')
|
|
|
+ else html = html.replace('</div>', '<div class="chips">' + chips + '</div></div>', 1)
|
|
|
return html
|
|
|
}
|
|
|
+
|
|
|
+/** ★P71 「振动 CMS」整页文档:门户 CSS + 该节(供同源 iframe srcdoc 使用,渲染与门户一致)。 */
|
|
|
+export function portalCmsDoc(d: any, cms: any, portalCss: string): string {
|
|
|
+ return '<!doctype html><html lang="zh" data-theme="light"><head><meta charset="utf-8">'
|
|
|
+ + '<base target="_top"><style>' + portalCss + '</style></head><body>'
|
|
|
+ + portalCmsHtml(d, cms) + '</body></html>'
|
|
|
+}
|