// 外包项目风险评估系统 — 详细使用演示视频配置 // 运行:AI_API_KEY= node demo-video-kit/src/cli.mjs demo.config.mjs --out demo-video-out // // 设计:多角色走查(销售 → 风控 → 管理层 → 系统管理员),以生产环境真实数据为准, // 全程只读浏览 + 展示新建向导前两步(不实际运行,避免产生脏数据;演示草稿事后清理)。 const PASS = '123456'; const ADMIN_PASS = 'Abc123456'; // 已完成(approved)评估,数据完整,用于详情逐区讲解。 const DETAIL_ID = 'assessment-mq8wvenq-sou59jrj'; /** 登录指定用户(SPA,无整页刷新;字幕浮层保留)。 */ async function login(page, username, password, pause) { // 已登录则先退出,回到登录页。 const logoutBtn = page.getByRole('button', { name: '退出' }); if (await logoutBtn.count()) { await logoutBtn.first().click(); await pause(1500); } await page.getByPlaceholder('请输入用户名').fill(username); await page.getByPlaceholder('请输入密码').fill(password); await page.getByRole('button', { name: '登录', exact: true }).click(); await pause(2600); } /** 点击顶部导航(data-nav-link 跨度元素)。 */ async function nav(page, text, pause) { await page.locator('[data-nav-link]', { hasText: text }).first().click(); await pause(1800); } /** 展开详情页所有可折叠分区,便于完整呈现。 */ async function expandAll(page) { for (let i = 0; i < 18; i += 1) { const collapsed = page.locator('button[aria-expanded="false"]'); if ((await collapsed.count()) === 0) break; try { await collapsed.first().click({ timeout: 4000 }); } catch { break; } await page.waitForTimeout(180); } } /** 平滑滚动到指定纵向位置。 */ async function scrollTo(page, y) { await page.evaluate((yy) => window.scrollTo({ top: yy, behavior: 'smooth' }), y); } export default { baseUrl: 'https://pm.hr8ai.top', viewport: { width: 1440, height: 900 }, brand: '外包项目风险评估系统', outDir: 'demo-video-out', gotoTimeout: 60000, subtitles: false, // 不在画面上渲染字幕(仍按解说时间轴配音) voice: { name: 'Cherry', model: 'qwen-tts', apiKeyEnv: 'AI_API_KEY', fallbackVoice: 'Tingting' }, intro: { narration: '欢迎使用外包项目风险评估系统。它把人工智能的语言理解与确定性的风控引擎结合,' + '帮助企业在承接外包项目前,自动完成风险评分、红线校验与盈利测算,并支持多角色的分级审批。', }, outro: { narration: '以上就是从销售申报、风控审核、管理层审批到系统管理的完整流程演示。' + '评分、分级、红线与盈利测算均为确定性计算,全程留痕可审计。感谢观看。', }, steps: [ // ---------------- 销售视角 ---------------- { label: '销售登录', narration: '首先以销售人员张伟的身份登录。系统采用角色化的权限管理,不同角色登录后看到的工作台与可用功能各不相同。', run: async ({ page, pause }) => { await login(page, '张伟', PASS, pause); }, }, { label: '销售工作台', narration: '这是销售的工作台。上方是我的评估统计,下方可以看到我发起的项目、审批进度,以及未完成的向导草稿。销售只能看到本人发起的评估,实现了数据隔离。', run: async ({ page, pause }) => { await scrollTo(page, 0); await pause(2000); await scrollTo(page, 360); await pause(1500); }, }, { label: '新建评估-立项', narration: '点击新建评估,进入六步录入向导。第一步填写立项信息:项目名称、客户名称与适用地域。客户名称会自动匹配信用档案,影响后续的坏账计提。', run: async ({ page, pause }) => { await nav(page, '新建评估', pause); await page.getByPlaceholder('如 某银行信用卡客服 BPO').fill('某制造企业生产线劳务外包项目(演示)'); await page.getByPlaceholder('客户公司全称').fill('某大型制造企业(演示)'); await page.locator('select').first().selectOption('上海').catch(() => {}); await pause(1800); }, }, { label: '新建评估-描述', narration: '第二步填写项目描述。系统会调用大模型解析这段文字,自动识别业务类型、所属行业,并为风险指标给出预填建议,销售只需确认或微调,大幅降低录入成本。', run: async ({ page, pause }) => { await page.getByRole('button', { name: '下一步', exact: true }).click().catch(() => {}); await pause(1200); await page.locator('textarea').first().fill( '为客户提供生产线普工与质检岗位的劳务外包,约一百二十人,两班倒;' + '按人头费率结算,账期约两个月;需符合最低工资与社保合规要求,涉及驻场管理与考勤。', ).catch(() => {}); await pause(2200); }, }, // ---------------- 风控视角 ---------------- { label: '风控登录', narration: '接下来以风控专员刘洋的身份登录,查看需要审核的项目。', run: async ({ page, pause }) => { await login(page, '刘洋', PASS, pause); }, }, { label: '风控待办', narration: '风控工作台的核心是待办审核列表,列出了所有报送到风控、等待审阅的项目,以及风险分、分级与承接建议。', run: async ({ page, pause }) => { await scrollTo(page, 0); await pause(2200); }, }, { label: '评估详情-结论', narration: '我们打开一个已完成的评估详情。页面顶部是核心结论:风险总分、风险分级、可接受性与承接建议,一目了然。', run: async ({ page, pause }) => { await page.goto('https://pm.hr8ai.top/assessments/' + DETAIL_ID, { waitUntil: 'domcontentloaded' }); await pause(2500); await expandAll(page); await scrollTo(page, 0); await pause(1500); }, }, { label: '详情-风险评分', narration: '向下是风险评分明细。系统按多个维度的指标加权计算总分,并标注每项数据的来源——是用户输入、智能体假设,还是外部数据,保证评分过程完全可解释。', run: async ({ page, pause }) => { await scrollTo(page, 620); await pause(2600); }, }, { label: '详情-红线校验', narration: '红线校验区会列出命中的合规红线,例如派遣比例超标、低于最低工资等。需要人工核实的项,风控可以在这里直接裁定。', run: async ({ page, pause }) => { await scrollTo(page, 1240); await pause(2600); }, }, { label: '详情-盈利分析', narration: '盈利分析区基于全口径成本——工资、社保、公积金、福利与各项摊销,测算月度与合同期的毛利、净利、税费与风险准备金,收入则按报价模式确定性计算。', run: async ({ page, pause }) => { await scrollTo(page, 1860); await pause(2800); }, }, { label: '详情-现金流', narration: '现金流与垫资峰值,反映外包先垫付成本、账期后才收款的资金压力,帮助判断项目的现金占用与融资成本。', run: async ({ page, pause }) => { await scrollTo(page, 2480); await pause(2600); }, }, { label: '详情-定价曲线', narration: '盈亏平衡与定价空间曲线,直观展示在不同报价水平下的净利率,给出安全的降价空间,为商务谈判提供依据。', run: async ({ page, pause }) => { await scrollTo(page, 3100); await pause(2600); }, }, { label: '详情-审计时间线', narration: '页面底部是完整的操作时间线,记录从发起、风控审核到管理层审批的每一步,全程留痕,可供合规追溯。', run: async ({ page, pause }) => { await scrollTo(page, await page.evaluate(() => document.body.scrollHeight - 900)); await pause(2600); }, }, // ---------------- 管理层视角 ---------------- { label: '管理层登录', narration: '再以管理层赵磊的身份登录。管理层负责终审,并维护费率、红线与客户档案等基础数据。', run: async ({ page, pause }) => { await page.goto('https://pm.hr8ai.top/', { waitUntil: 'domcontentloaded' }); await pause(1500); await login(page, '赵磊', PASS, pause); }, }, { label: '管理层看板', narration: '管理层看板提供组合分析:预测准确度对比预测与实际净利率,给出系统性偏差并支持一键校准;还有驳回原因排行、到期复评与审批超时提醒。', run: async ({ page, pause }) => { await scrollTo(page, 0); await pause(2200); await scrollTo(page, 420); await pause(2200); }, }, { label: '费率管理', narration: '费率管理把社保、公积金、增值税等费率从代码中解放出来,按地域可配置、可复核、可版本化,盈利测算据此计算。', run: async ({ page, pause }) => { await nav(page, '费率管理', pause); await pause(1800); }, }, { label: '红线管理', narration: '红线管理是可配置的合规规则库,可以按地域和业务类型启用规则、绑定度量与阈值,让红线在评估时自动判定命中。', run: async ({ page, pause }) => { await nav(page, '红线管理', pause); await pause(1800); }, }, { label: '客户档案', narration: '客户档案维护客户的信用评级、逾期与集中度。集中度过高会自动预警,信用评级则联动坏账准备金的计提比例。', run: async ({ page, pause }) => { await nav(page, '客户档案', pause); await pause(1800); await scrollTo(page, 360); await pause(1500); }, }, // ---------------- 系统管理员视角 ---------------- { label: '管理员登录', narration: '最后以系统管理员周强的身份登录,负责用户、审批流程与系统日志的管理。', run: async ({ page, pause }) => { await page.goto('https://pm.hr8ai.top/', { waitUntil: 'domcontentloaded' }); await pause(1500); await login(page, '周强', ADMIN_PASS, pause); }, }, { label: '用户管理', narration: '用户管理可以新增、停用账号并分配角色。每个人都有稳定的用户编号,系统用它在各类记录中保持关联,界面再实时解析成姓名。', run: async ({ page, pause }) => { await page.goto('https://pm.hr8ai.top/users', { waitUntil: 'domcontentloaded' }).catch(() => {}); await pause(2200); }, }, { label: '审批流程', narration: '审批流程页配置审批规则与审批线:哪些项目需要管理层终审、各角色的服务时限,以及销售归属的风控与管理层。', run: async ({ page, pause }) => { await nav(page, '审批流程', pause); await pause(2000); }, }, { label: '日志管理', narration: '日志管理记录系统的全部操作——登录登出、申报审批、配置变更乃至报告导出,支持按操作人、角色、动作、方法、结果和时间范围多维筛选,满足审计追溯需求。', run: async ({ page, pause }) => { await nav(page, '日志管理', pause); await pause(2200); await scrollTo(page, 300); await pause(1800); }, }, ], };