chore: 初始化文档站仓库
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
// 整页截图:遍历页面清单,截取完整页面并写入 public/screenshots/。
|
||||
import { resolve } from 'node:path'
|
||||
import { pathToFileURL } from 'node:url'
|
||||
import type { Page } from 'playwright-core'
|
||||
import { injectSession, launchBrowser, login, newContext, waitPage } from './browser.js'
|
||||
import { BASE_URL, OUT_DIR } from './config.js'
|
||||
|
||||
/** 整页截图清单:文件名、路由、视口宽度、视口高度、关键元素选择器 */
|
||||
const PAGES: Array<[string, string, number, number, string]> = [
|
||||
['login', '/login', 1440, 900, '.n-card'],
|
||||
['register', '/register', 1440, 900, '.n-card'],
|
||||
['dashboard', '/dashboard', 1440, 1280, 'canvas'],
|
||||
['transactions', '/transactions', 1720, 1200, '.n-data-table-tbody tr'],
|
||||
['categories', '/categories', 1440, 1100, '.n-data-table-tbody tr'],
|
||||
['tags', '/tags', 1440, 1100, '.n-data-table-tbody tr'],
|
||||
['rules', '/rules', 1440, 1100, '.n-data-table-tbody tr'],
|
||||
['email-bills-configs', '/email-bills/configs', 1440, 1000, '.n-data-table-tbody tr'],
|
||||
['email-bills-sender-rules', '/email-bills/senderRules', 1440, 1000, '.n-data-table-tbody tr'],
|
||||
['email-bills-messages', '/email-bills/messages', 1440, 1000, '.n-data-table-tbody tr'],
|
||||
['bill-import', '/bill-import', 1440, 1000, '.n-card'],
|
||||
['settings', '/settings', 1440, 1320, '.config-card'],
|
||||
['ai-usage', '/ai-usage', 1440, 1000, '.n-card'],
|
||||
['logs-http', '/logs/http', 1440, 1000, '.n-data-table-tbody tr'],
|
||||
['logs-login', '/logs/login', 1440, 1000, '.n-data-table-tbody tr'],
|
||||
['logs-app', '/logs/app', 1440, 1000, '.n-log'],
|
||||
]
|
||||
|
||||
/**
|
||||
* 截取全部整页。
|
||||
*
|
||||
* @param page Page 实例
|
||||
*/
|
||||
export async function capturePages(page: Page): Promise<void> {
|
||||
for (const [name, path, width, height, selector] of PAGES) {
|
||||
try {
|
||||
await page.setViewportSize({ width, height })
|
||||
await page.goto(BASE_URL + path)
|
||||
await waitPage(page, { selector })
|
||||
await page.screenshot({ path: resolve(OUT_DIR, `${name}.png`) })
|
||||
console.log(`[OK] page/${name}`)
|
||||
} catch (err) {
|
||||
console.log(`[FAIL] page/${name}: ${err}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function main(): Promise<void> {
|
||||
const browser = await launchBrowser()
|
||||
try {
|
||||
const token = await login()
|
||||
const context = await newContext(browser)
|
||||
await injectSession(context, token)
|
||||
const page = await context.newPage()
|
||||
await capturePages(page)
|
||||
await context.close()
|
||||
} finally {
|
||||
await browser.close()
|
||||
}
|
||||
}
|
||||
|
||||
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
||||
main().catch((err) => {
|
||||
console.error('FAIL', err)
|
||||
process.exit(1)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user