docs: 补充收支记录页 AI 生成规则、CORS/反向代理与邮箱检查进度时间戳
同步近期 ledgerly 功能与配置变更到文档站:新增收支记录页「AI 生成规则」入口的用户与开发说明、补充新接口与规则应用逻辑、修正 CORS/反向代理与运行环境编码说明,并更新邮箱检查进度时间戳描述。 变更内容: - guide/transactions.md 批量操作区新增「AI 生成规则」按钮与「AI 生成规则(从勾选账单)」小节(含「同时应用到勾选账单」),引用新截图。 - guide/ai.md、guide/rules.md、guide/pages.md 补充两处生成入口与「同时应用」说明。 - dev/api.md 新增 POST /api/ai/rule/apply-transactions;dev/rule-engine.md、dev/ai.md 补充 applyToTransactions 与两个生成入口。 - dev/build-deploy.md 将 CORS 更新为放开全部来源并信任反向代理转发头,新增运行环境 UTF-8 locale 说明。 - guide/email-bills.md 补充「立即检查」进度每行带 HH:mm:ss 时间戳。 - scripts/ts/capture-elements.ts 新增 captureAiRuleFromTransactions 截图场景(交易页 AI 生成规则弹窗)。 说明: - 新截图 elements/ai-rule-transactions.png 已上传 OSS,正文以 OSS 长期地址引用。
This commit is contained in:
@@ -442,6 +442,44 @@ export async function captureAiRule(page: Page): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 截取「收支记录 → 批量操作 → AI 生成规则」弹窗(基于勾选账单生成规则)。
|
||||
*
|
||||
* <p>仅触发规则建议生成(只读),不点击「创建勾选规则」,不修改数据。
|
||||
* 需目标环境已启用 AI 且存在可勾选账单。</p>
|
||||
*
|
||||
* @param page Page 实例
|
||||
*/
|
||||
export async function captureAiRuleFromTransactions(page: Page): Promise<void> {
|
||||
try {
|
||||
await page.setViewportSize({ width: 1440, height: 1000 })
|
||||
await page.goto(BASE_URL + '/transactions')
|
||||
await waitPage(page, { selector: PAGE_READY })
|
||||
|
||||
// 进入批量操作模式,勾选前若干条账单
|
||||
if (!(await clickText(page, '批量操作'))) throw new Error('未找到「批量操作」按钮')
|
||||
await page.waitForTimeout(500)
|
||||
const checkboxes = page.locator('.n-data-table-tbody .n-checkbox')
|
||||
const count = Math.min(await checkboxes.count(), 5)
|
||||
for (let i = 0; i < count; i++) {
|
||||
await checkboxes.nth(i).click({ force: true }).catch(() => undefined)
|
||||
}
|
||||
await page.waitForTimeout(300)
|
||||
|
||||
// 点击「AI 生成规则」,等待弹窗与规则建议表(真实 AI 调用)
|
||||
if (!(await clickText(page, 'AI 生成规则'))) throw new Error('未找到「AI 生成规则」按钮')
|
||||
const modal = page.locator('.n-modal').first()
|
||||
await modal.waitFor({ state: 'visible', timeout: 30000 })
|
||||
await modal.locator('.n-data-table-tbody tr').first().waitFor({ state: 'visible', timeout: 90000 })
|
||||
await page.waitForLoadState('networkidle', { timeout: 90000 }).catch(() => undefined)
|
||||
await page.waitForTimeout(1000)
|
||||
await modal.screenshot({ path: resolve(ELEM_DIR, 'ai-rule-transactions.png') })
|
||||
console.log('[OK] modal/ai-rule-transactions')
|
||||
} catch (err) {
|
||||
console.log(`[FAIL] modal/ai-rule-transactions: ${err}`)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 截取系统设置的配置面板。
|
||||
*
|
||||
@@ -641,6 +679,7 @@ async function main(): Promise<void> {
|
||||
await captureEditRecord(page)
|
||||
await captureInlineCreate(page)
|
||||
await captureAiRule(page)
|
||||
await captureAiRuleFromTransactions(page)
|
||||
await captureAiRecordImage(page)
|
||||
await captureBillDetail(page)
|
||||
await captureChannelAi(page)
|
||||
|
||||
Reference in New Issue
Block a user