|
|
@@ -89,7 +89,10 @@ async function awaitCurves(tries = 20, gapMs = 3000) {
|
|
|
throw new Error('等 /api/curves 出图超时')
|
|
|
}
|
|
|
|
|
|
-async function baseline(tab) {
|
|
|
+/** ★P63:`tab:sub` 形式 —— 基线点一下子视图 pill,Vue 侧把 sub 传给 renderTab。 */
|
|
|
+function parseTab(x) { const [tab, sub] = String(x).split(':'); return { tab, sub: sub || null } }
|
|
|
+
|
|
|
+async function baseline(tab, sub) {
|
|
|
const state = {}
|
|
|
if (!state.warmed) { await warmup(); state.warmed = true }
|
|
|
if (tab === 'generation') { state.curves = await awaitCurves(); console.log(' [i] curves figs ' + (state.curves.figs || []).length) }
|
|
|
@@ -115,13 +118,17 @@ async function baseline(tab) {
|
|
|
last = n
|
|
|
await new Promise((r) => setTimeout(r, 700))
|
|
|
}
|
|
|
+ if (sub) {
|
|
|
+ const pill = doc.querySelector(`#root [data-fsub="${sub}"]`)
|
|
|
+ if (pill) { pill.dispatchEvent(new dom.window.MouseEvent('click', { bubbles: true })); await new Promise((r) => setTimeout(r, sub === 'cms' ? 4000 : 1200)) }
|
|
|
+ }
|
|
|
return { root: doc.getElementById('root'), data: state.fleet, cms: state.cms ?? null,
|
|
|
curves: state.curves ?? null, apis: state.apis ?? {} }
|
|
|
}
|
|
|
|
|
|
-async function vueSkel(tab, data, cms, curves, apis) {
|
|
|
+async function vueSkel(tab, sub, data, cms, curves, apis) {
|
|
|
const entry = pathToFileURL(resolve(HERE, '../target/ssr/entry-server.js')).href
|
|
|
- const html = await (await import(entry)).renderTab(data, tab, null, cms, curves, apis)
|
|
|
+ const html = await (await import(entry)).renderTab(data, tab, sub, cms, curves, apis)
|
|
|
const dom = new JSDOM(`<div id="wrap">${html}</div>`)
|
|
|
const wrap = dom.window.document.getElementById('wrap')
|
|
|
const nav = wrap.querySelector('.wb-tabs')
|
|
|
@@ -131,10 +138,11 @@ async function vueSkel(tab, data, cms, curves, apis) {
|
|
|
|
|
|
let bad = 0
|
|
|
for (const tab of TABS) {
|
|
|
- const { root, data, cms, curves, apis } = await baseline(tab)
|
|
|
+ const { tab: TAB, sub: SUB } = parseTab(tab)
|
|
|
+ const { root, data, cms, curves, apis } = await baseline(TAB, SUB)
|
|
|
if (!root) { console.log(`[X] ${tab}: 基线未渲染`); bad++; continue }
|
|
|
const a = skeletonIn(root)
|
|
|
- const b = await vueSkel(tab, data, cms, curves, apis)
|
|
|
+ const b = await vueSkel(TAB, SUB, data, cms, curves, apis)
|
|
|
if (a.length === b.length && a.every((x, i) => x === b[i])) {
|
|
|
console.log(`[OK] ${tab} 结构一致(${a.length} 个元素)`)
|
|
|
} else {
|