对照 ledgerly 自文档上次更新以来的全部改动,补充新功能文档、修正品牌与版本残留,并新增下载与安装页;配图已重新截取并上传 OSS,本地截图目录不纳入版本管理。 变更内容: - 新增「智能查数」「账单关系」两个使用文档页,并登记侧边栏与总览 - 设置页扩充为八个面板(账号安全、数据库实时进度、外观、导航等)并改为即时保存 - 收支记录补充关系列、批量操作、AI 搜索浮窗、可配置分页与「账单详情」弹窗 - 统计面板补充饼图/渠道图下钻与筛选双向联动;规则管理补充批量删除 - AI 能力补充智能查数与关系命名;新增下载与安装页 - 开发文档同步:AI 13 类调用、数据模型 24 张表、API、前端偏好、构建部署 - 统一「汇账 Ledgerly」品牌与「设置/日志」菜单文案,版本号对齐 0.1 - 截图脚本新增账单详情等场景并更新登记 说明: - download.md 的 OSS 下载链接保持待发布产物回填,暂不调整 - 已通过 npm run docs:build 与 npm run typecheck:scripts
69 lines
2.7 KiB
TypeScript
69 lines
2.7 KiB
TypeScript
// 整页截图:遍历页面清单,截取完整页面并写入 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'],
|
|
['sql-query', '/smart-query', 1440, 1180, '.n-card'],
|
|
['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'],
|
|
['channels', '/channels', 1440, 1000, '.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, 1900, '.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)
|
|
})
|
|
}
|