import test from 'node:test'; import assert from 'node:assert/strict'; import fs from 'node:fs'; import path from 'node:path'; const MP_ROOT = path.resolve('m:/2026项目/CRMmp/mpuniapp'); function readMpFile(relPath: string): string { const fullPath = path.join(MP_ROOT, relPath); return fs.readFileSync(fullPath, 'utf-8'); } test('1. common/locale.uts 7国语言词典用词规范与去 AI 化', () => { const content = readMpFile('common/locale.uts'); // 严禁存在 "AI 咨询"、"AI Assistant" assert.ok(!content.includes("'card.ai_chat': 'AI 咨询'"), 'locale.uts 严禁含有 "AI 咨询"'); assert.ok(!content.includes("'card.ai_chat': 'AI Assistant'"), 'locale.uts 严禁含有 "AI Assistant"'); assert.ok(content.includes("'card.ai_chat': '在线咨询'"), 'card.ai_chat zh-CN 必须规范为 "在线咨询"'); assert.ok(content.includes("'card.ai_chat': 'Inquire'"), 'card.ai_chat en-US 必须规范为 "Inquire"'); // 严禁内部术语暴露给访客 assert.ok(!content.includes('便当盒内容'), '严禁给访客展示内部黑话 "便当盒内容"'); assert.ok(content.includes("'portal.block': '板块内容'"), 'portal.block 规范为 "板块内容"'); // 预约表单去除多余废话 assert.ok(!content.includes('全球跨时区'), '预约描述严禁包含浮夸冗余词 "全球跨时区"'); assert.ok(!content.includes('需求将实时同步至名片主'), '预约表单说明严禁包含开发视角套话'); assert.ok(content.includes("'portal.appointment_submit': '提交预约'"), '提交按钮必须规范为 "提交预约"'); assert.ok(content.includes("'portal.social': '社交媒体'"), '社交必须规范为 "社交媒体" 避免夸张词 "矩阵"'); assert.ok(content.includes("'portal.article': '专栏文章'"), '文章必须规范为 "专栏文章" 避免夸张词 "深度文章"'); assert.ok(content.includes("'portal.case': '客户案例'"), '案例必须规范为 "客户案例"'); }); test('2. 在线咨询 useAiChat.uts 与 ai-chat.uvue 消除机械人 AI 口吻与写死文本', () => { const utsContent = readMpFile('pages/portal/useAiChat.uts'); const uvueContent = readMpFile('pages/portal/ai-chat.uvue'); // 消除机械人口吻 assert.ok(!utsContent.includes('我是名片智能顾问,很高兴为您服务'), '严禁使用机械人 AI 模板回复'); assert.ok(!utsContent.includes('专属智能顾问为您解答业务'), '严禁使用 "专属智能顾问为您解答业务"'); assert.ok(utsContent.includes('商务咨询与业务对接'), '必须规范为 "商务咨询与业务对接"'); assert.ok(utsContent.includes('提交需求'), '主操作必须规范为 "提交需求"'); // uvue 视图消除写死 AI 文本 assert.ok(!uvueContent.includes('>AI'), 'ai-chat.uvue 严禁出现写死的大文本 ">AI"'); }); test('3. 名片互换 useExchange.uts 与 exchange.uvue 剔除留资行话与写死 AI', () => { const utsContent = readMpFile('pages/portal/useExchange.uts'); const uvueContent = readMpFile('pages/portal/exchange.uvue'); assert.ok(!utsContent.includes('提交留资'), '访客端严禁向用户展示 "提交留资" 行业黑话'); assert.ok(utsContent.includes("submit: '交换名片'"), '互换名片提交按钮必须规范为 "交换名片"'); assert.ok(utsContent.includes("successTitle: '名片交换已完成'"), '成功标题必须规范为 "名片交换已完成"'); assert.ok(!utsContent.includes('智能扫描识别'), '去除 "智能扫描识别"'); assert.ok(utsContent.includes("badgeAi: '名片扫描识别'"), '规范为 "名片扫描识别"'); // uvue 视图消除写死 AI assert.ok(!uvueContent.includes('>AI'), 'exchange.uvue 严禁出现写死的大文本 ">AI"'); }); test('4. 销售工作台 useWorkplace.uts 与 index.uvue 剔除中二浮夸与销售营销腔', () => { const utsContent = readMpFile('pages/owner/workplace/useWorkplace.uts'); assert.ok(!utsContent.includes('闪电出示展台'), '工作台严禁含有浮夸中二词 "闪电出示展台"'); assert.ok(utsContent.includes("'workplace.quick_showcase': {\n zh: '出示名片'"), '出示必须规范为 "出示名片"'); assert.ok(!utsContent.includes('今日战情报表'), '严禁使用中二词 "今日战情报表"'); assert.ok(utsContent.includes("'workplace.kpi_title': {\n zh: '今日数据'"), 'KPI标题规范为 "今日数据"'); assert.ok(!utsContent.includes('一键破冰'), '严禁使用销售黑话 "一键破冰"'); assert.ok(utsContent.includes("'workplace.radar_action_whatsapp': {\n zh: '立即联系'"), '破冰动作规范为 "立即联系"'); assert.ok(!utsContent.includes('AI 销售副驾驶洞察'), '严禁使用营销词 "AI 销售副驾驶洞察"'); assert.ok(utsContent.includes("'workplace.ai_tip_title': {\n zh: '跟进建议'"), '提示标题规范为 "跟进建议"'); }); test('5. 产品案例与专栏文章去除夸大修饰与多此一举说明', () => { const casesContent = readMpFile('pages/owner/card/useCardCases.uts'); const articlesContent = readMpFile('pages/owner/card/useCardArticles.uts'); // cases assert.ok(!casesContent.includes('在微官网中向全球买家展现硬核实力'), '严禁包含自嗨浮夸营销说明'); assert.ok(!casesContent.includes('点击下方按钮,拍照或上传您的首个'), '严禁包含多此一举的操作说明废话'); assert.ok(casesContent.includes("'产品与案例'"), '标题必须规范为 "产品与案例"'); // articles assert.ok(!articlesContent.includes('深度博文'), '去除浮夸词汇 "深度博文"'); assert.ok(!articlesContent.includes('点击下方按钮,撰写并发布您的第一篇'), '严禁包含多此一举的操作说明废话'); assert.ok(articlesContent.includes("'发布动态'"), '按钮必须规范为 "发布动态"'); }); test('6. 潜客详情 useLeadDetail.uts 话术真实严谨,去假大空套话', () => { const content = readMpFile('pages/owner/useLeadDetail.uts'); assert.ok(!content.includes('一键生成破冰话术'), '严禁使用浮夸的 "一键生成破冰话术"'); assert.ok(content.includes('生成跟进话术'), '规范为 "生成跟进话术"'); assert.ok(!content.includes('智能跟进建议'), '严禁使用 "智能跟进建议"'); assert.ok(content.includes('建议跟进话术'), '规范为 "建议跟进话术"'); assert.ok(!content.includes('我是来自 OmniCard 的商务顾问'), '生成话术严禁写死伪装成 OmniCard 销售'); }); test('7. 硬件安全与场景模式用词严谨、去浮夸', () => { const secContent = readMpFile('pages/owner/nfc/useSecurity.uts'); const modeContent = readMpFile('pages/owner/nfc/useMode.uts'); const teamContent = readMpFile('pages/owner/team/useOverview.uts'); // security assert.ok(!secContent.includes('一键远程挂失'), '去除 "一键远程挂失"'); assert.ok(secContent.includes("'远程挂失'"), '规范为 "远程挂失"'); assert.ok(!secContent.includes('芯片防盗与云端防护运行中'), '去除浮夸假大空描述'); assert.ok(!secContent.includes('秒级一键'), '去除浮夸修饰 "秒级一键"'); // mode assert.ok(!modeContent.includes('日间展会用商务档,晚宴社交用社交档'), '去除生硬口语化文案'); // team assert.ok(!teamContent.includes('展会战报'), '去除中二词汇 "展会战报"'); assert.ok(!teamContent.includes('保持现场触碰'), '去除空洞鸡汤说教'); }); test('8. pages.json 页面导航标题统一严谨规范', () => { const jsonContent = readMpFile('pages.json'); assert.ok(!jsonContent.includes('"navigationBarTitleText": "AI 顾问"'), 'pages.json 严禁 "AI 顾问"'); assert.ok(jsonContent.includes('"navigationBarTitleText": "在线咨询"'), 'pages.json 必须规范为 "在线咨询"'); assert.ok(!jsonContent.includes('"navigationBarTitleText": "极速编辑"'), 'pages.json 严禁 "极速编辑"'); assert.ok(jsonContent.includes('"navigationBarTitleText": "名片编辑"'), 'pages.json 必须规范为 "名片编辑"'); assert.ok(!jsonContent.includes('"navigationBarTitleText": "展会战报"'), 'pages.json 严禁 "展会战报"'); assert.ok(jsonContent.includes('"navigationBarTitleText": "展会数据"'), 'pages.json 必须规范为 "展会数据"'); });