/** 诊断 2:台账端点为什么没有 CBWS202610150001;地图覆盖层标记在 headless 里是否可点。 */ import { cdpLaunch } from '../../../../cockpit-shell-panel-layout/verify/cdp-driver.mjs' const CHROME = process.env.CHROME_PATH || 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' const sleep = (ms) => new Promise((r) => setTimeout(r, ms)) const BASE = 'http://192.168.110.96:8301/api/cockpit/v1' const unwrap = (p) => (p && p.data && (p.code !== undefined || p.requestId) ? p.data : p) // ① 台账端点直查 for (const q of ['?page=1&pageSize=20', '']) { try { const r = await fetch(`${BASE}/monitoring-points/ledger${q}`, { cache: 'no-store' }) const d = unwrap(await r.json()) const rows = d?.points || d?.items || d?.records || [] console.log(`ledger${q || '(default)'} http=${r.status} rows=${rows.length} codes=${rows.map((x) => x.pointCode || x.code || x.monitoringPointCode).join(',')} total=${d?.total ?? d?.pagination?.total}`) } catch (e) { console.log(`ledger${q} ERR ${e.message}`) } } // ② headless 里覆盖层标记的可点性 const browser = await cdpLaunch({ executablePath: CHROME, headless: true, width: 1680, height: 950 }) const page = await browser.newPage() await page.goto('http://127.0.0.1:8000/#/cockpit', { timeout: 60000 }) await sleep(2000) await page.click('[data-cockpit-intro]').catch(() => {}) await page.waitForFunction(() => ['ready', 'failed', 'disabled'].includes(document.querySelector('.cockpit-shell__map .map-canvas')?.dataset.mapEngine || ''), { timeout: 60000 }) await sleep(4000) const overlay = await page.evaluate(() => { const nodes = [...document.querySelectorAll('[data-marker-overlay-code]')] const target = nodes.find((n) => n.dataset.markerOverlayCode === 'CBWS202610150001') return { total: nodes.length, codes: nodes.map((n) => n.dataset.markerOverlayCode).slice(0, 20), targetFound: !!target, targetRect: target ? JSON.parse(JSON.stringify(target.getBoundingClientRect())) : null, } }) console.log('overlay:', JSON.stringify(overlay, null, 2)) if (overlay.targetFound) { await page.evaluate(() => document.querySelector('[data-marker-overlay-code="CBWS202610150001"]')?.click()) await sleep(3000) const card = await page.evaluate(() => { const c = document.querySelector('[data-point-detail]') return c ? { level: c.dataset.detailLevel, point: c.dataset.pointCode } : null }) console.log('after overlay click:', JSON.stringify(card)) } await browser.close()