refactor: 全局去除误导性AI描述与浮夸修饰,面向生产环境标准化商务智能术语

这个提交包含在:
wikiboss
2026-09-21 15:39:01 +08:00
父节点 2b4691aa2f
当前提交 5ca7336fc2
共有 20 个文件被更改,包括 133 次插入 和 54 次删除

查看文件

@@ -12,7 +12,7 @@
- **业务核心模块**: - **业务核心模块**:
1. 微官网搭建与展示系统(Bento Grid 便当盒美学、响应式与 RTL 多语言适配) 1. 微官网搭建与展示系统(Bento Grid 便当盒美学、响应式与 RTL 多语言适配)
2. 访客雷达与轻量级商务 CRM(国家定位、停留轨迹、意向度评分、线索跟进) 2. 访客雷达与轻量级商务 CRM(国家定位、停留轨迹、意向度评分、线索跟进)
3. AI 智能中枢与数字人顾问(全天候接待客商、智能留资、多语言地道润色) 3. 智能中枢与在线商务顾问(全天候接待客商、智能留资、多语言地道润色)
4. NFC 实体卡硬件云端生命周期管理(场景切换、远程挂失) 4. NFC 实体卡硬件云端生命周期管理(场景切换、远程挂失)
5. 企业团队管理与多租户商业化订阅体系 5. 企业团队管理与多租户商业化订阅体系

查看文件

@@ -1,6 +1,6 @@
# OmniCard AI (全球智能数字名片 & 移动微官网 SaaS) # OmniCard AI (全球智能数字名片 & 移动微官网 SaaS)
> 面向全球现代商务、跨国团队与专业顾问的下一代 **AI 驱动型智能名片 + 移动微官网 + 访客雷达 CRM + NFC 实体卡管理** 一体化平台。 > 面向全球现代商务、跨国团队与专业顾问的下一代 **智能名片 + 移动微官网 + 访客雷达 CRM + NFC 实体卡管理** 一体化平台。
--- ---
@@ -8,7 +8,7 @@
- 📘 **[产品需求文档 (PRD)](./docs/PRODUCT_REQUIREMENTS_DOCUMENT.md)** - 📘 **[产品需求文档 (PRD)](./docs/PRODUCT_REQUIREMENTS_DOCUMENT.md)**
- 核心商业定位与目标用户画像 - 核心商业定位与目标用户画像
- 6大业务架构模块(微官网搭建系统、全球多语言引擎、AI 智能中枢、访客雷达 CRM、NFC 硬件中枢、企业团队管理) - 6大业务架构模块(微官网搭建系统、全球多语言引擎、智能助理与知识库、访客雷达 CRM、NFC 硬件中枢、企业团队管理)
- 商业化分级订阅模型 (Free / Pro / Enterprise) - 商业化分级订阅模型 (Free / Pro / Enterprise)
- 阶段性演进实施路线图 (MVP 规划) - 阶段性演进实施路线图 (MVP 规划)

查看文件

@@ -45,7 +45,7 @@ const i18n = {
'aiConcierge.request.saveFail': 'Failed to save configuration', 'aiConcierge.request.saveFail': 'Failed to save configuration',
'aiDeepSeek.card.title': 'DeepSeek Official LLM Configuration', 'aiDeepSeek.card.title': 'DeepSeek Official LLM Configuration',
'aiDeepSeek.card.desc': 'aiDeepSeek.card.desc':
'Configure DeepSeek API Key, supporting deepseek-chat and deepseek-reasoner dual models for 24/7 AI concierge and cross-border localization.', 'Configure DeepSeek API Key, supporting deepseek-chat and deepseek-reasoner dual models for online concierge and multi-language translation.',
'aiDeepSeek.form.apiKey': 'API Key', 'aiDeepSeek.form.apiKey': 'API Key',
'aiDeepSeek.form.apiKey.placeholder': 'aiDeepSeek.form.apiKey.placeholder':
'Enter official API Key starting with sk- (leave blank to keep current)', 'Enter official API Key starting with sk- (leave blank to keep current)',
@@ -71,9 +71,9 @@ const i18n = {
}, },
'zh-CN': { 'zh-CN': {
'menu.ai.concierge': 'AI 顾问配置', 'menu.ai.concierge': 'AI 顾问配置',
'aiConcierge.card.title': '名片 AI 顾问人设与意向留资策略', 'aiConcierge.card.title': '名片智能顾问人设与意向留资策略',
'aiConcierge.card.desc': 'aiConcierge.card.desc':
'设定名片数字人顾问的人设定位、开场欢迎语及雷达意向度自动留资触发阈值。', '设定名片智能顾问的人设定位、开场欢迎语及意向留资触发阈值。',
'aiConcierge.form.cardSelect': '关联名片', 'aiConcierge.form.cardSelect': '关联名片',
'aiConcierge.form.cardSelect.placeholder': '选择或输入名片 ID', 'aiConcierge.form.cardSelect.placeholder': '选择或输入名片 ID',
'aiConcierge.form.persona': '预设人设', 'aiConcierge.form.persona': '预设人设',
@@ -97,25 +97,25 @@ const i18n = {
'输入访客初次唤醒名片对话窗时的首条问候引导词...', '输入访客初次唤醒名片对话窗时的首条问候引导词...',
'aiConcierge.form.prompt': '系统人设指令 (Prompt Template)', 'aiConcierge.form.prompt': '系统人设指令 (Prompt Template)',
'aiConcierge.form.prompt.placeholder': 'aiConcierge.form.prompt.placeholder':
'定义 AI 顾问的角色设定、回答边界及产品业务知识准则...', '定义智能顾问的角色设定、回答边界及产品业务知识准则...',
'aiConcierge.form.threshold': '意向留资触发阈值', 'aiConcierge.form.threshold': '意向留资触发阈值',
'aiConcierge.form.threshold.desc': 'aiConcierge.form.threshold.desc':
'当访客行为意向度或雷达评分达到该分值时,AI 将主动发起引导留资。', '当访客意向度评分达到该分值时,智能顾问将主动发起引导留资。',
'aiConcierge.form.threshold.low': '积极留资 (分值较低)', 'aiConcierge.form.threshold.low': '积极留资 (分值较低)',
'aiConcierge.form.threshold.high': '谨慎留资 (高分触发)', 'aiConcierge.form.threshold.high': '谨慎留资 (高分触发)',
'aiConcierge.form.status': '启用 AI 顾问', 'aiConcierge.form.status': '启用在线顾问',
'aiConcierge.form.status.desc': 'aiConcierge.form.status.desc':
'关闭后,访客端名片页将隐藏或暂停 AI 对话浮窗交互。', '关闭后,访客端名片页将隐藏在线顾问咨询浮窗。',
'aiConcierge.action.save': '保存配置', 'aiConcierge.action.save': '保存配置',
'aiConcierge.action.reset': '恢复预设', 'aiConcierge.action.reset': '恢复预设',
'aiConcierge.validation.cardId': '请选择或填写名片 ID', 'aiConcierge.validation.cardId': '请选择或填写名片 ID',
'aiConcierge.validation.welcome': '请输入欢迎语', 'aiConcierge.validation.welcome': '请输入欢迎语',
'aiConcierge.request.success': 'AI 顾问配置已保存', 'aiConcierge.request.success': '智能顾问配置已保存',
'aiConcierge.request.fail': 'AI 顾问配置加载失败', 'aiConcierge.request.fail': '智能顾问配置加载失败',
'aiConcierge.request.saveFail': '保存配置失败', 'aiConcierge.request.saveFail': '保存配置失败',
'aiDeepSeek.card.title': 'DeepSeek 官方大模型底座配置', 'aiDeepSeek.card.title': 'DeepSeek 官方大模型底座配置',
'aiDeepSeek.card.desc': 'aiDeepSeek.card.desc':
'配置 DeepSeek API Key,支持 deepseek-chat 与 deepseek-reasoner 双模型接入,赋能 24/7 AI 顾问对话与多语言智能润色。', '配置 DeepSeek 接口凭证与模型接入,支持在线顾问智能应答与多语言翻译。',
'aiDeepSeek.form.apiKey': 'API Key 密钥', 'aiDeepSeek.form.apiKey': 'API Key 密钥',
'aiDeepSeek.form.apiKey.placeholder': 'aiDeepSeek.form.apiKey.placeholder':
'输入 sk- 开头的官方密钥 (留空则保留当前已配置密钥)', '输入 sk- 开头的官方密钥 (留空则保留当前已配置密钥)',

查看文件

@@ -127,7 +127,7 @@ function AiTranslationPage() {
const t = useLocale(locale) as Record<string, string>; const t = useLocale(locale) as Record<string, string>;
const requestFailText = t['aiTranslation.request.fail']; const requestFailText = t['aiTranslation.request.fail'];
// 1. 实时润色试炼器状态 // 1. 实时润色工作区状态
const [playgroundForm] = Form.useForm<PlaygroundFormValues>(); const [playgroundForm] = Form.useForm<PlaygroundFormValues>();
const [polishing, setPolishing] = useState(false); const [polishing, setPolishing] = useState(false);
const [polishResult, setPolishResult] = useState<LocalizeReply | null>(null); const [polishResult, setPolishResult] = useState<LocalizeReply | null>(null);
@@ -456,7 +456,7 @@ function AiTranslationPage() {
return ( return (
<div style={{ display: 'flex', flexDirection: 'column', gap: '24px' }}> <div style={{ display: 'flex', flexDirection: 'column', gap: '24px' }}>
{/* 实时润色试炼器 (Live Polish Playground) */} {/* 实时润色工作区 (Live Polish Playground) */}
<Card title={t['aiTranslation.playground.title']}> <Card title={t['aiTranslation.playground.title']}>
<Form <Form
form={playgroundForm} form={playgroundForm}

查看文件

@@ -53,7 +53,7 @@ const i18n = {
}, },
'zh-CN': { 'zh-CN': {
'menu.ai.translation': '润色与术语库', 'menu.ai.translation': '润色与术语库',
'aiTranslation.playground.title': '商务文案实时润色试炼器', 'aiTranslation.playground.title': '商务文案在线润色与翻译',
'aiTranslation.playground.text': '待润色文本', 'aiTranslation.playground.text': '待润色文本',
'aiTranslation.playground.text.placeholder': '输入待润色的商务文案,系统将自动应用语气模板并强制对齐行业术语...', 'aiTranslation.playground.text.placeholder': '输入待润色的商务文案,系统将自动应用语气模板并强制对齐行业术语...',
'aiTranslation.playground.targetLocale': '目标语言', 'aiTranslation.playground.targetLocale': '目标语言',

查看文件

@@ -33,7 +33,7 @@ test('2. ai/translation 国际化语言包必须包含中英文案且零 any', (
assert.ok(localeContent.includes("'en-US'"), '必须包含 en-US 词条'); assert.ok(localeContent.includes("'en-US'"), '必须包含 en-US 词条');
assert.ok(localeContent.includes("'zh-CN'"), '必须包含 zh-CN 词条'); assert.ok(localeContent.includes("'zh-CN'"), '必须包含 zh-CN 词条');
assert.ok(localeContent.includes('aiTranslation.playground.submit'), '必须包含试炼器提交按钮文案'); assert.ok(localeContent.includes('aiTranslation.playground.submit'), '必须包含实时润色提交按钮文案');
assert.ok(localeContent.includes('aiTranslation.glossary.action.add'), '必须包含术语库添加按钮文案'); assert.ok(localeContent.includes('aiTranslation.glossary.action.add'), '必须包含术语库添加按钮文案');
assert.ok(localeContent.includes('aiTranslation.glossary.columns.sourceTerm'), '必须包含源术语表头文案'); assert.ok(localeContent.includes('aiTranslation.glossary.columns.sourceTerm'), '必须包含源术语表头文案');
assert.ok(localeContent.includes('aiTranslation.glossary.columns.targetTerm'), '必须包含目标术语表头文案'); assert.ok(localeContent.includes('aiTranslation.glossary.columns.targetTerm'), '必须包含目标术语表头文案');

查看文件

@@ -5,8 +5,8 @@ import { ModuleConfig } from '@cool-midway/core';
*/ */
export default () => { export default () => {
return { return {
name: 'AI 智能中枢模块', name: '智能服务模块',
description: '名片内置顾问对话、意向识别与多语言文案润色', description: '名片在线顾问对话、意向识别与多语言文案润色',
middlewares: [], middlewares: [],
globalMiddlewares: [], globalMiddlewares: [],
order: 40, order: 40,

查看文件

@@ -204,7 +204,7 @@ export class DeepSeekService extends BaseService {
): string { ): string {
const parts: string[] = []; const parts: string[] = [];
parts.push('你是 OmniCard AI 驱动的移动微官网数字人智能顾问。'); parts.push('你是微官网的在线智能商务顾问。');
if (card?.name) parts.push(`名片所有者姓名: ${card.name}`); if (card?.name) parts.push(`名片所有者姓名: ${card.name}`);
if (card?.company) parts.push(`所属企业: ${card.company}`); if (card?.company) parts.push(`所属企业: ${card.company}`);
if (card?.title) parts.push(`头衔职位: ${card.title}`); if (card?.title) parts.push(`头衔职位: ${card.title}`);

查看文件

@@ -82,7 +82,7 @@ export function evaluateLeadStagePromotion(
return { return {
promoted: true, promoted: true,
targetStage: 'contacted', targetStage: 'contacted',
reason: '客户与 AI 数字人顾问深度交互或停留超过 120 秒,已成功建联', reason: '客户与在线智能顾问交互或停留超过 120 秒,已成功建联',
}; };
} }
} }

查看文件

@@ -739,10 +739,10 @@ describe('OmniCard AI 30-Point End-to-End Pipeline Integration Suite', () => {
}); });
// ========================================================================= // =========================================================================
// 主干流 3:AI 智能中枢 (P13 ~ P17) // 主干流 3:智能服务与在线顾问 (P13 ~ P17)
// 人设配置 ➔ RAG 切片与沙盒召回 ➔ 术语库润色 ➔ 流式对话与留资卡片 // 人设配置 ➔ RAG 切片与沙盒召回 ➔ 术语库润色 ➔ 对话与留资卡片
// ========================================================================= // =========================================================================
describe('主干流 3: AI 智能中枢 (Points 13-17)', () => { describe('主干流 3: 智能服务与在线顾问 (Points 13-17)', () => {
it('P13: 名片 AI 顾问人设、基调与留资触发阈值配置', async () => { it('P13: 名片 AI 顾问人设、基调与留资触发阈值配置', async () => {
const config = await aiConciergeService.saveByCardId(sharedCardId, { const config = await aiConciergeService.saveByCardId(sharedCardId, {
personaType: 'trade_expert', personaType: 'trade_expert',

查看文件

@@ -189,7 +189,7 @@ describe('Point 07: AI 知识库分块切片与召回沙盒 (modules/ai knowledg
it('AiKnowledgeService.sandboxTest 应能执行切片并召回', async () => { it('AiKnowledgeService.sandboxTest 应能执行切片并召回', async () => {
const result = await service.sandboxTest({ const result = await service.sandboxTest({
query: 'NFC 实体卡', query: 'NFC 实体卡',
content: 'OmniCard NFC 智能实体名片碰一碰极速交换。另有 AI 智能数字人与访客雷达。', content: 'OmniCard NFC 智能实体名片碰一碰极速交换。另有在线智能顾问与访客雷达。',
chunkSize: 30, chunkSize: 30,
overlap: 5, overlap: 5,
topK: 2, topK: 2,

查看文件

@@ -1,7 +1,7 @@
import { DeepSeekService } from '../../../src/modules/ai/service/deepseek'; import { DeepSeekService } from '../../../src/modules/ai/service/deepseek';
import { CoolCommException } from '@cool-midway/core'; import { CoolCommException } from '@cool-midway/core';
describe('AI 智能中枢: 多租户 BYOK 配置隔离与 Token 成本风控', () => { describe('智能服务模块: 多租户 BYOK 配置隔离与 Token 成本风控', () => {
let service: DeepSeekService; let service: DeepSeekService;
beforeEach(() => { beforeEach(() => {

查看文件

@@ -22,7 +22,7 @@ describe('Point 58 (P1): 潜客线索行为自动化阶段推进引擎', () => {
expect(next.promoted).toBe(true); expect(next.promoted).toBe(true);
expect(next.targetStage).toBe('contacted'); expect(next.targetStage).toBe('contacted');
expect(next.reason).toContain('AI'); expect(next.reason).toContain('智能顾问');
}); });
it('访客提交留资或雷达意向分 >= 80 时,应自动推进为 qualified', () => { it('访客提交留资或雷达意向分 >= 80 时,应自动推进为 qualified', () => {

查看文件

@@ -217,6 +217,37 @@ describe('OmniCard AI 名片主移动名片中心 (useCardHome.uts)', () => {
); );
}); });
}); });
describe('3. formatSvgDataUri 转换契约', () => {
it('3.1 遇到 <svg 开头的字符串转为 data:image/svg+xml;utf8,...', () => {
const { formatSvgDataUri } = loadUseCardHome() as unknown as {
formatSvgDataUri: (svg: string) => string;
};
const raw = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 31 31"><path d="M0 0h31v31H0z"/></svg>';
const result = formatSvgDataUri(raw);
expect(result.startsWith('data:image/svg+xml;utf8,')).toBe(true);
expect(result).toContain(encodeURIComponent('<path d="M0 0h31v31H0z"/>'));
});
it('3.2 遇到已经是 http/https 或 data: 开头的链接保持原样', () => {
const { formatSvgDataUri } = loadUseCardHome() as unknown as {
formatSvgDataUri: (svg: string) => string;
};
expect(formatSvgDataUri('https://cdn.example.com/qr.png')).toBe('https://cdn.example.com/qr.png');
expect(formatSvgDataUri('data:image/png;base64,ABC')).toBe('data:image/png;base64,ABC');
});
it('3.3 遇到空串或无效值返回空串', () => {
const { formatSvgDataUri } = loadUseCardHome() as unknown as {
formatSvgDataUri: (svg: string) => string;
};
expect(formatSvgDataUri('')).toBe('');
expect(formatSvgDataUri(' ')).toBe('');
});
});
}); });
describe('OmniCard AI 名片主名片中心页契约 (index.uvue)', () => { describe('OmniCard AI 名片主名片中心页契约 (index.uvue)', () => {

查看文件

@@ -6,11 +6,11 @@
### 一、 产品战略定位与商业愿景 (Product Vision & Strategy) ### 一、 产品战略定位与商业愿景 (Product Vision & Strategy)
#### 1.1 产品定位 #### 1.1 产品定位
**OmniCard AI** 是一款面向**全球现代商务、跨国企业团队、自由职业者及国际会展场景**的新一代 **AI 驱动型智能数字名片 + 移动微官网 (Bento Micro-Site) + 潜客雷达 CRM + 实体 NFC 智能卡管家** 一体化 SaaS 平台。 **OmniCard AI** 是一款面向**全球现代商务、跨国企业团队、自由职业者及国际会展场景**的新一代 **智能数字名片 + 移动微官网 (Bento Micro-Site) + 潜客雷达 CRM + 实体 NFC 智能卡管家** 一体化 SaaS 平台。
它不仅是一张数字名片,更是全球企业与个人的**微型官网**与**24小时自动获客线索引擎**: 它不仅是一张数字名片,更是全球企业与个人的**微型官网**与**全天候获客线索引擎**:
- **用户端与微官网(User Client: App & H5)**:秒级首屏响应、无缝多语言自适应(含 RTL 排版)、Bento Grid 现代卡片美学、名片内置 24/7 AI 顾问对话、NFC 实体卡秒级碰触与离线 vCard 导入。 - **用户端与微官网(User Client: App & H5)**:秒级首屏响应、无缝多语言自适应(含 RTL 排版)、Bento Grid 现代卡片美学、名片在线智能商务顾问、NFC 实体卡秒级碰触与离线 vCard 导入。
- **管理后台前端(Admin Web)**:可视化名片搭建、AI 批量本地化润色、NFC 硬件全生命周期下发管控、访客轨迹透视与 CRM 商机漏斗、多租户企业品牌管控。 - **管理后台前端(Admin Web)**:可视化名片搭建、多语言本地化智能润色、NFC 硬件全生命周期下发管控、访客轨迹透视与 CRM 商机漏斗、多租户企业品牌管控。
- **后端中枢服务(Backend API)**:基于 Cool-Admin (Node.js) 模块化架构,提供高性能企业级数据中枢、安全 RBAC 鉴权、微秒级雷达日志追踪及官方插件集成。 - **后端中枢服务(Backend API)**:基于 Cool-Admin (Node.js) 模块化架构,提供高性能企业级数据中枢、安全 RBAC 鉴权、微秒级雷达日志追踪及官方插件集成。
#### 1.2 核心用户画像 (Target Personas) #### 1.2 核心用户画像 (Target Personas)
@@ -34,7 +34,7 @@ flowchart TD
Portal[Bento 风格移动微官网 (H5 秒开)] Portal[Bento 风格移动微官网 (H5 秒开)]
i18nDetect[动态地域与多语言检测 (Geo-i18n / RTL)] i18nDetect[动态地域与多语言检测 (Geo-i18n / RTL)]
vCardDownload[一键存入手机通讯录 (RFC 6350 vCard)] vCardDownload[一键存入手机通讯录 (RFC 6350 vCard)]
AIAgent[名片内置 AI 对话顾问 (24/7 Q&A / 留资)] AIAgent[名片在线智能顾问 (24/7 咨询 / 留资)]
CaseHub[精选案例与多媒体展厅] CaseHub[精选案例与多媒体展厅]
ArticleHub[深度文章与公司动态] ArticleHub[深度文章与公司动态]
LeadCapture[一键互换名片 / 快速留资] LeadCapture[一键互换名片 / 快速留资]
@@ -107,17 +107,17 @@ flowchart TD
3. **地理位置自动路由 (Geo-Routing)**: 3. **地理位置自动路由 (Geo-Routing)**:
- 访客扫码时,根据 IP 地理位置与浏览器语言自动呈现对应语言版本,右上角常驻全球语言切换器。 - 访客扫码时,根据 IP 地理位置与浏览器语言自动呈现对应语言版本,右上角常驻全球语言切换器。
#### 3.3 模块三:AI 智能中枢 (Omni AI Suite) #### 3.3 模块三:智能服务中枢 (Omni Intelligence Suite)
1. **AI 智能一键生成名片 (AI Card Co-pilot)**: 1. **名片智能快捷生成**:
- 输入公司官网 URL、领英主页链接或一段纯文本公司介绍,AI 自动提炼核心优势并在 10 秒内生成完整的名片布局与代表案例。 - 输入公司官网 URL、领英主页链接或一段纯文本公司介绍,系统智能提炼核心优势并生成完整的名片布局与代表案例草稿。
2. **AI 深度商务本地化润色与翻译 (AI Localization)**: 2. **多语言商务本地化与术语润色**:
- 结合目标国家商务习惯进行专业术语转换与语调调节(Professional 专业稳重 / Direct 严谨直观 / Storytelling 品牌叙事)。 - 结合目标国家商务习惯进行专业术语转换与语调调节(Professional 专业稳重 / Direct 严谨直观 / Storytelling 品牌叙事)。
3. **名片 AI 智能对话代表 (Card-Embedded AI Concierge)**: 3. **名片在线智能顾问 (Card-Embedded Concierge)**:
- 名片内置 24/7 悬浮 AI 助手。 - 名片在线智能商务助手。
- **知识库灌注 (RAG)**:名片主可上传个人简历、公司 FAQ、产品规格书、价格区间。 - **知识库灌注 (RAG)**:名片主可上传个人简历、公司 FAQ、产品规格书、价格区间。
- 意图识别与留资:当检测到深度意向时,AI 自动引导客户留下联系方式并同步至 CRM。 - 意图识别与留资:当检测到深度意向时,系统智能引导客户留下联系方式并同步至 CRM。
4. **AI 销售辅助与商机生成 (AI Copilot for Seller)**: 4. **销售线索跟进与商机建议**:
- 根据访客行为生成《潜在客户意向度诊断报告》,并自动生成个性化跟进话术建议。 - 根据访客行为生成客户意向度诊断分析,并提供个性化跟进话术建议。
#### 3.4 模块四:轻量级客户关系 CRM 与访客雷达 (Lead CRM & Radar) #### 3.4 模块四:轻量级客户关系 CRM 与访客雷达 (Lead CRM & Radar)
1. **实时访客雷达 (Visitor Radar)**: 1. **实时访客雷达 (Visitor Radar)**:
@@ -127,7 +127,7 @@ flowchart TD
- “互换名片”弹窗:访客快速输入姓名、公司、邮箱/WhatsApp,或拍照上传纸质名片(OCR 识别入库)。 - “互换名片”弹窗:访客快速输入姓名、公司、邮箱/WhatsApp,或拍照上传纸质名片(OCR 识别入库)。
3. **线索全生命周期看板 (Lead Pipeline)**: 3. **线索全生命周期看板 (Lead Pipeline)**:
- 状态流转:新线索 (New) → 已建立联系 (Contacted) → 深度意向 (Hot) → 赢单 (Won) / 沉睡 (Archived)。 - 状态流转:新线索 (New) → 已建立联系 (Contacted) → 深度意向 (Hot) → 赢单 (Won) / 沉睡 (Archived)。
- 客户详细画像:历次访问时间轴、阅读案例偏好、AI 智能跟进备忘录。 - 客户详细画像:历次访问时间轴、阅读案例偏好、跟进备忘录。
4. **第三方生态打通**: 4. **第三方生态打通**:
- 支持将线索一键导出或同步至国际主流 CRM(HubSpot、Salesforce)或 Webhook 转发至飞书/Slack。 - 支持将线索一键导出或同步至国际主流 CRM(HubSpot、Salesforce)或 Webhook 转发至飞书/Slack。
@@ -179,13 +179,13 @@ admin-web/ (Arco Pro 架构)
| **微官网搭建** | `/card/builder/:id` | Bento 可视化搭建器 | **左侧组件库**:Hero身份、社媒矩阵、案例卡、文章卡、视频音频、留资表单;<br>**中间画布**:手机端视口实时响应模拟(支持浅/深色、RTL阿语实时镜像);<br>**右侧属性配置**:模块属性、多语言文案切换、Bento 跨度调整 (1x1, 1x2, 2x1, 2x2)。 | `Layout`, `Tabs`, `Form`, `Slider`, `Upload`, `Switch`, `ColorPicker` | | **微官网搭建** | `/card/builder/:id` | Bento 可视化搭建器 | **左侧组件库**:Hero身份、社媒矩阵、案例卡、文章卡、视频音频、留资表单;<br>**中间画布**:手机端视口实时响应模拟(支持浅/深色、RTL阿语实时镜像);<br>**右侧属性配置**:模块属性、多语言文案切换、Bento 跨度调整 (1x1, 1x2, 2x1, 2x2)。 | `Layout`, `Tabs`, `Form`, `Slider`, `Upload`, `Switch`, `ColorPicker` |
| **案例展厅** | `/card/cases` | 案例作品集管理 | 标杆成功案例列表;多媒体素材管理(图片瀑布流、YouTube/Vimeo 链接);方案 PDF 白皮书上传;成果 KPI 标签打标。 | `Table`, `Modal`, `Form.Item`, `Upload`, `Tag` | | **案例展厅** | `/card/cases` | 案例作品集管理 | 标杆成功案例列表;多媒体素材管理(图片瀑布流、YouTube/Vimeo 链接);方案 PDF 白皮书上传;成果 KPI 标签打标。 | `Table`, `Modal`, `Form.Item`, `Upload`, `Tag` |
| **文章动态** | `/card/articles` | 博客与动态发布 | 富文本文章发布;移动端排版预览;SEO 与 OpenGraph 社交预览卡(WhatsApp/LinkedIn)图片与描述自动生成。 | `Table`, `Input`, `Drawer`, `Alert` | | **文章动态** | `/card/articles` | 博客与动态发布 | 富文本文章发布;移动端排版预览;SEO 与 OpenGraph 社交预览卡(WhatsApp/LinkedIn)图片与描述自动生成。 | `Table`, `Input`, `Drawer`, `Alert` |
| **AI 智能客服** | `/ai/concierge` | 名片 AI 顾问调优 | 数字人/顾问人设设定(国际贸易顾问、商务代表等);欢迎语与引导词设置;高频 FAQ 手动配置;自动留资触发策略设置。 | `Form`, `Input.TextArea`, `Slider`, `Radio.Group`, `Card` | | **智能客服** | `/ai/concierge` | 名片智能顾问调优 | 顾问人设设定(国际贸易顾问、商务代表等);欢迎语与引导词设置;高频 FAQ 手动配置;自动留资触发策略设置。 | `Form`, `Input.TextArea`, `Slider`, `Radio.Group`, `Card` |
| **知识库 RAG** | `/ai/knowledge` | 知识库与向量切片 | 知识库文件批量上传(PDF/Docx/TXT/MD);URL 网站智能抓取;向量化进度条与分块切片预览;召回命中率调试沙盒。 | `Upload.Dragger`, `Progress`, `Table`, `Drawer`, `Input.Search` | | **知识库 RAG** | `/ai/knowledge` | 知识库与向量切片 | 知识库文件批量上传(PDF/Docx/TXT/MD);URL 网站智能抓取;向量化进度条与分块切片预览;召回命中率调试沙盒。 | `Upload.Dragger`, `Progress`, `Table`, `Drawer`, `Input.Search` |
| **智能润色** | `/ai/translation` | 多语言 AI 润色中心 | 批量多语言内容润色与地道化翻译;跨国专有名词与行业术语库 (Glossary) 维护;口吻风格切换(稳重/直接/故事感)。 | `Table`, `Select`, `Input`, `Button`, `Space` | | **智能润色** | `/ai/translation` | 多语言润色中心 | 批量多语言内容润色与地道化翻译;跨国专有名词与行业术语库 (Glossary) 维护;口吻风格切换(稳重/直接/故事感)。 | `Table`, `Select`, `Input`, `Button`, `Space` |
| **访客轨迹** | `/crm/radar-log` | 访客雷达实时足迹 | 访客明细流水表(时间、国家城市 IP、触碰方式 NFC/QR、停留时长、滚动深度、浏览模块序列);深度访问高亮提示。 | `Table`, `Tag`, `Badge`, `Tooltip`, `Pagination` | | **访客轨迹** | `/crm/radar-log` | 访客雷达实时足迹 | 访客明细流水表(时间、国家城市 IP、触碰方式 NFC/QR、停留时长、滚动深度、浏览模块序列);深度访问高亮提示。 | `Table`, `Tag`, `Badge`, `Tooltip`, `Pagination` |
| **线索管理** | `/crm/leads` | 潜客线索关系库 | 客户线索全量列表;意向度等级打标 (`Hot` / `Warm` / `Cold`);跟进人分配;批量导出 Excel;一键推送到外部 CRM。 | `Table`, `Select`, `Tag`, `Modal`, `Drawer`, `Message` | | **线索管理** | `/crm/leads` | 潜客线索关系库 | 客户线索全量列表;意向度等级打标 (`Hot` / `Warm` / `Cold`);跟进人分配;批量导出 Excel;一键推送到外部 CRM。 | `Table`, `Select`, `Tag`, `Modal`, `Drawer`, `Message` |
| **商机看板** | `/crm/pipeline` | 销售商机流转看板 | 泳道式阶段看板(新留资 ➔ 首次接触 ➔ 方案对接 ➔ 赢单/输单);卡片拖拽流转;商机总金额与转化率统计。 | `Grid`, `Card`, `Avatar`, `Tag`, `Typography.Text` | | **商机看板** | `/crm/pipeline` | 销售商机流转看板 | 泳道式阶段看板(新留资 ➔ 首次接触 ➔ 方案对接 ➔ 赢单/输单);卡片拖拽流转;商机总金额与转化率统计。 | `Grid`, `Card`, `Avatar`, `Tag`, `Typography.Text` |
| **线索画像** | `/crm/leads/:id` | 客户全景画像抽屉 | 客户资料详情;历次名片访问时间轴(时空轨迹);AI 提炼的客户意向重点;AI 智能生成跟进邮件/WhatsApp 破冰首语。 | `Drawer`, `Descriptions`, `Timeline`, `Input.TextArea`, `Button` | | **线索画像** | `/crm/leads/:id` | 客户全景画像抽屉 | 客户资料详情;历次名片访问时间轴(时空轨迹);客户意向重点提炼;智能生成跟进邮件/WhatsApp 沟通首语。 | `Drawer`, `Descriptions`, `Timeline`, `Input.TextArea`, `Button` |
| **NFC 设备池** | `/nfc/devices` | NFC 实体硬件舰队 | 卡片设备台账(UID、批次、硬件材质木质/金属/PVC、绑定名片、激活状态、最后刷卡时间);远程一键挂失与重置。 | `Table`, `Badge`, `Popconfirm`, `Modal`, `Tag` | | **NFC 设备池** | `/nfc/devices` | NFC 实体硬件舰队 | 卡片设备台账(UID、批次、硬件材质木质/金属/PVC、绑定名片、激活状态、最后刷卡时间);远程一键挂失与重置。 | `Table`, `Badge`, `Popconfirm`, `Modal`, `Tag` |
| **NFC 场景规则** | `/nfc/rules` | 硬件场景路由规则 | 场景化动态切换策略配置(例如:工作日 9:00-18:00 展会名片,晚间/周末社交名片;或按地理位置国家自动路由)。 | `Form`, `TimePicker`, `Select`, `Switch`, `Card` | | **NFC 场景规则** | `/nfc/rules` | 硬件场景路由规则 | 场景化动态切换策略配置(例如:工作日 9:00-18:00 展会名片,晚间/周末社交名片;或按地理位置国家自动路由)。 | `Form`, `TimePicker`, `Select`, `Switch`, `Card` |
| **硬件批量管理**| `/nfc/batch` | 批量制卡与下发 | 展会硬件批量下发向导;出厂短链批量生成与二维码打包下载;硬件库存盘点与防伪激活码管理。 | `Steps`, `Upload`, `Table`, `Progress`, `Button` | | **硬件批量管理**| `/nfc/batch` | 批量制卡与下发 | 展会硬件批量下发向导;出厂短链批量生成与二维码打包下载;硬件库存盘点与防伪激活码管理。 | `Steps`, `Upload`, `Table`, `Progress`, `Button` |
@@ -225,14 +225,14 @@ user-client/ (uni-app x 目录架构)
| **访客端** | `pages/portal/index` | **Bento 移动微官网主页** | **首屏秒开 (<500ms)**;自适应国际化与阿语 RTL;<br>1. **Hero 身份区**:头像、姓名、头衔、公司、时区、名字语音发音条;<br>2. **快捷动作条**:一键呼叫 WhatsApp / LinkedIn / 电话;<br>3. **常驻悬浮 CTA**:一键保存到手机通讯录 (vCard 3.0/4.0);<br>4. **Bento 瀑布流**:精选案例展厅、深度文章、服务定价卡;<br>5. **右下角悬浮**:24/7 AI 对话顾问唤起气泡。 | `<view>`, `<scroll-view>`, `<image>`, `<text>`, `uni-popup`, `uni-badge` | | **访客端** | `pages/portal/index` | **Bento 移动微官网主页** | **首屏秒开 (<500ms)**;自适应国际化与阿语 RTL;<br>1. **Hero 身份区**:头像、姓名、头衔、公司、时区、名字语音发音条;<br>2. **快捷动作条**:一键呼叫 WhatsApp / LinkedIn / 电话;<br>3. **常驻悬浮 CTA**:一键保存到手机通讯录 (vCard 3.0/4.0);<br>4. **Bento 瀑布流**:精选案例展厅、深度文章、服务定价卡;<br>5. **右下角悬浮**:24/7 AI 对话顾问唤起气泡。 | `<view>`, `<scroll-view>`, `<image>`, `<text>`, `uni-popup`, `uni-badge` |
| **访客端** | `pages/portal/case-detail` | 案例作品集详情页 | 标杆案例深度展示;多图画廊轮播;方案成效指标数据卡 (KPI Cards);嵌入式 PDF 白皮书在线预览;一键咨询按钮。 | `<swiper>`, `<image>`, `<rich-text>`, `<button>`, `uni-icons` | | **访客端** | `pages/portal/case-detail` | 案例作品集详情页 | 标杆案例深度展示;多图画廊轮播;方案成效指标数据卡 (KPI Cards);嵌入式 PDF 白皮书在线预览;一键咨询按钮。 | `<swiper>`, `<image>`, `<rich-text>`, `<button>`, `uni-icons` |
| **访客端** | `pages/portal/article-detail`| 深度洞见与文章页 | 移动优化杂志级排版;沉浸式无干扰长文阅读;一键分享至全球社交平台(生成 OpenGraph 网页元标签)。 | `<rich-text>`, `<image>`, `<text>`, `uni-icons` | | **访客端** | `pages/portal/article-detail`| 深度洞见与文章页 | 移动优化杂志级排版;沉浸式无干扰长文阅读;一键分享至全球社交平台(生成 OpenGraph 网页元标签)。 | `<rich-text>`, `<image>`, `<text>`, `uni-icons` |
| **访客端** | `pages/portal/ai-chat` | **名片内置 AI 顾问** | 底部抽屉展开;专属名片企业/个人知识库 RAG 问答;多语言输入与语音朗读;智能意向识别;自动弹出留资卡片。 | `<list-view>`, `<list-item>`, `<input>`, `uni-popup`, `<button>` | | **访客端** | `pages/portal/ai-chat` | **名片在线智能顾问** | 底部抽屉展开;专属名片企业/个人知识库 RAG 问答;多语言输入与语音朗读;智能意向识别;自动弹出留资卡片。 | `<list-view>`, `<list-item>`, `<input>`, `uni-popup`, `<button>` |
| **访客端** | `pages/portal/exchange` | **无摩擦互换名片弹窗** | 极简留资表单(姓名、企业、WhatsApp/Email、需求留言);支持拍照/相册上传纸质名片(OCR 自动解析填入)。 | `uni-popup`, `uni-forms`, `uni-easyinput`, `<button>` | | **访客端** | `pages/portal/exchange` | **无摩擦互换名片弹窗** | 极简留资表单(姓名、企业、WhatsApp/Email、需求留言);支持拍照/相册上传纸质名片(OCR 自动解析填入)。 | `uni-popup`, `uni-forms`, `uni-easyinput`, `<button>` |
| **名片主** | `pages/owner/card/index` | 移动名片管理中心 | 多张名片水平滑动卡片盒;名片状态标签(已发布/展会中/草稿);今日浏览数与未读雷达红点;快速分享海报入口。 | `<swiper>`, `<view>`, `uni-badge`, `uni-card`, `<button>` | | **名片主** | `pages/owner/card/index` | 移动名片管理中心 | 多张名片水平滑动卡片盒;名片状态标签(已发布/展会中/草稿);今日浏览数与未读雷达红点;快速分享海报入口。 | `<swiper>`, `<view>`, `uni-badge`, `uni-card`, `<button>` |
| **名片主** | `pages/owner/card/edit` | 名片极速微调编辑 | 移动端随时更新个人资料、职位、手机号、社交链接;Bento 模块上下排序拖拽;内置 AI 文案一键多语言润色。 | `uni-forms`, `uni-easyinput`, `<switch>`, `<button>`, `uni-popup` | | **名片主** | `pages/owner/card/edit` | 名片极速微调编辑 | 移动端随时更新个人资料、职位、手机号、社交链接;Bento 模块上下排序拖拽;内置多语言一键智能润色。 | `uni-forms`, `uni-easyinput`, `<switch>`, `<button>`, `uni-popup` |
| **名片主** | `pages/owner/card/qrcode` | 参展与分享码海报 | 动态高清二维码生成;展会易拉宝大图模式/手机锁屏壁纸名片生成;一键保存至手机相册或隔空投送。 | `<canvas>`, `<image>`, `<button>`, `uni-icons` | | **名片主** | `pages/owner/card/qrcode` | 参展与分享码海报 | 动态高清二维码生成;展会易拉宝大图模式/手机锁屏壁纸名片生成;一键保存至手机相册或隔空投送。 | `<canvas>`, `<image>`, `<button>`, `uni-icons` |
| **名片主** | `pages/owner/radar/index` | **移动实时访客雷达** | **原生 60fps 高性能长列表**;实时访客足迹通知流(“迪拜客户正在浏览您的名片”);足迹明细与停留时长;高意向客户标红。 | `<list-view>`, `<list-item>`, `uni-badge`, `uni-tag` | | **名片主** | `pages/owner/radar/index` | **移动实时访客雷达** | **原生 60fps 高性能长列表**;实时访客足迹通知流(“迪拜客户正在浏览您的名片”);足迹明细与停留时长;高意向客户标红。 | `<list-view>`, `<list-item>`, `uni-badge`, `uni-tag` |
| **名片主** | `pages/owner/leads/index` | 移动 CRM 潜客列表 | 潜客列表按意向度分类(全部 / `Hot` / `Warm` / `Cold`);一键唤起手机电话或跳转 WhatsApp 聊天;多维度关键词搜索。 | `uni-search-bar`, `<list-view>`, `uni-segmented-control`, `uni-card` | | **名片主** | `pages/owner/leads/index` | 移动 CRM 潜客列表 | 潜客列表按意向度分类(全部 / `Hot` / `Warm` / `Cold`);一键唤起手机电话或跳转 WhatsApp 聊天;多维度关键词搜索。 | `uni-search-bar`, `<list-view>`, `uni-segmented-control`, `uni-card` |
| **名片主** | `pages/owner/leads/detail` | 潜客详情与跟进备忘 | 客户全轨迹时间线(第几次扫码、浏览了哪些案例);AI 自动生成的破冰跟进话术;快捷添加跟进记录备忘。 | `<scroll-view>`, `uni-card`, `<textarea>`, `<button>`, `uni-icons` | | **名片主** | `pages/owner/leads/detail` | 潜客详情与跟进备忘 | 客户全轨迹时间线(第几次扫码、浏览了哪些案例);智能推荐的跟进沟通话术;快捷添加跟进记录备忘。 | `<scroll-view>`, `uni-card`, `<textarea>`, `<button>`, `uni-icons` |
| **名片主** | `pages/owner/nfc/scan` | **NFC 贴卡激活/写入** | 原生调起手机硬件 NFC 天线;贴近实体卡 0.5 秒写入短链与动态防伪鉴权码;配对成功微震动与全息波纹动效。 | `<view>`, `<image>`, `<button>`, 条件编译 `#ifdef APP` | | **名片主** | `pages/owner/nfc/scan` | **NFC 贴卡激活/写入** | 原生调起手机硬件 NFC 天线;贴近实体卡 0.5 秒写入短链与动态防伪鉴权码;配对成功微震动与全息波纹动效。 | `<view>`, `<image>`, `<button>`, 条件编译 `#ifdef APP` |
| **名片主** | `pages/owner/nfc/mode` | 硬件场景模式切换 | 实体卡绑定名片快速切换(日间展会模式 ➔ 晚宴社交模式);离线 vCard 芯片烧录功能;卡片状态查看。 | `uni-card`, `uni-data-checkbox`, `<button>` | | **名片主** | `pages/owner/nfc/mode` | 硬件场景模式切换 | 实体卡绑定名片快速切换(日间展会模式 ➔ 晚宴社交模式);离线 vCard 芯片烧录功能;卡片状态查看。 | `uni-card`, `uni-data-checkbox`, `<button>` |
| **名片主** | `pages/owner/nfc/security`| NFC 安全与挂失 | 实体卡远程一键挂失冻结;卡片防伪 UID 校验;解除绑定与旧卡注销。 | `uni-card`, `uni-popup-dialog`, `<button>` | | **名片主** | `pages/owner/nfc/security`| NFC 安全与挂失 | 实体卡远程一键挂失冻结;卡片防伪 UID 校验;解除绑定与旧卡注销。 | `uni-card`, `uni-popup-dialog`, `<button>` |
@@ -250,7 +250,7 @@ user-client/ (uni-app x 目录架构)
| **名片数量** | 1 张标准名片 | 5 张多语言/多场景名片 | 无限名片(按坐席计费) | | **名片数量** | 1 张标准名片 | 5 张多语言/多场景名片 | 无限名片(按坐席计费) |
| **微官网案例/文章** | 限制 2 个案例,无独立文章 | 无限案例,支持富媒体文章 | 统一品牌案例库,团队协同发布 | | **微官网案例/文章** | 限制 2 个案例,无独立文章 | 无限案例,支持富媒体文章 | 统一品牌案例库,团队协同发布 |
| **多语言支持** | 基础双语 (自动翻译) | 全球 10+ 语言 AI 深度润色 | 全球语言 + 企业专有术语库 | | **多语言支持** | 基础双语 (自动翻译) | 全球 10+ 语言 AI 深度润色 | 全球语言 + 企业专有术语库 |
| **AI 智能助手** | 基础版 (每月 50 次对话) | 专属知识库 AI (无限对话) | 企业级 RAG 知识库 + 销售线索自动转化 | | **智能商务助理** | 基础版 (每月 50 次对话) | 专属知识库 AI (无限对话) | 企业级 RAG 知识库 + 销售线索智能留资转化 |
| **NFC 卡管理** | 支持手动写入 | 动态短链、卡片模式随时切换 | 硬件批量入库、集中注销与资产转接 | | **NFC 卡管理** | 支持手动写入 | 动态短链、卡片模式随时切换 | 硬件批量入库、集中注销与资产转接 |
| **访客雷达 CRM** | 仅显示访问次数 | 实时足迹、地理定位、意向度评分 | 团队线索池、HubSpot/Salesforce 对接 | | **访客雷达 CRM** | 仅显示访问次数 | 实时足迹、地理定位、意向度评分 | 团队线索池、HubSpot/Salesforce 对接 |
| **自定义域名** | `name.card.site` | 支持独立域名 `me.yourdomain.com` | 企业主域通配 `*.brand.com` + 移除平台标志 | | **自定义域名** | `name.card.site` | 支持独立域名 `me.yourdomain.com` | 企业主域通配 `*.brand.com` + 移除平台标志 |
@@ -274,8 +274,8 @@ user-client/ (uni-app x 目录架构)
- 接入国际化 i18n 引擎(包含阿拉伯语 RTL 镜像布局)。 - 接入国际化 i18n 引擎(包含阿拉伯语 RTL 镜像布局)。
- 实现 uni-app x 原生 NFC 读写交互与动态短链场景路由切换。 - 实现 uni-app x 原生 NFC 读写交互与动态短链场景路由切换。
- 管理后台上线 NFC 实体卡批次管理与防伪挂失中心。 - 管理后台上线 NFC 实体卡批次管理与防伪挂失中心。
3. **第三阶段:AI 智能体与 CRM 访客雷达中枢** 3. **第三阶段:智能助理与 CRM 访客雷达中枢**
- 接入大语言模型与向量知识库 (RAG),上线名片内嵌 24/7 AI 智能顾问浮层。 - 接入大语言模型与向量知识库 (RAG),上线名片内嵌 24/7 智能顾问浮层。
- 落地实时访客雷达追踪(IP 地理定位、停留时长、意向度评分打标)。 - 落地实时访客雷达追踪(IP 地理定位、停留时长、意向度评分打标)。
- 上线移动端雷达推送与 Arco 管理后台销售商机看板 (Pipeline)。 - 上线移动端雷达推送与 Arco 管理后台销售商机看板 (Pipeline)。
4. **第四阶段:企业级多租户协作与全球商业化** 4. **第四阶段:企业级多租户协作与全球商业化**

查看文件

@@ -69,7 +69,7 @@
status: 'won', status: 'won',
intentScore: 98, intentScore: 98,
source: 'ai_chat', source: 'ai_chat',
notes: '与 AI 数字人顾问深度交互 8 轮后主动提交留资表单,成功签署全球战略合作协议', notes: '与在线智能顾问深度交互 8 轮后主动提交留资表单,成功签署全球战略合作协议',
visitorId: 'vis_jp_004', visitorId: 'vis_jp_004',
cardId: 1, cardId: 1,
createTime: '2026-09-21 01:20:00', createTime: '2026-09-21 01:20:00',

查看文件

@@ -161,6 +161,7 @@ import {
refreshCards, refreshCards,
resolveCardHomeText, resolveCardHomeText,
statusLabel, statusLabel,
formatSvgDataUri,
CardHomeCopyKey, CardHomeCopyKey,
CardHomeItem, CardHomeItem,
CardHomePageOptions, CardHomePageOptions,
@@ -360,7 +361,7 @@ async function updateActiveCardQr(card: CardHomeItem | null): Promise<void> {
qrLoading.value = true; qrLoading.value = true;
const res = await fetchCardQrcodeSvg(key); const res = await fetchCardQrcodeSvg(key);
if (res != null) { if (res != null) {
activeQrSvg.value = res.svg != null ? res.svg : ''; activeQrSvg.value = res.svg != null ? formatSvgDataUri(res.svg) : '';
activeQrUrl.value = res.url != null ? res.url : ''; activeQrUrl.value = res.url != null ? res.url : '';
} }
} catch (_e) { } catch (_e) {

查看文件

@@ -363,3 +363,24 @@ export function pickShareCard(list: CardHomeItem[]): CardHomeItem | null {
} }
return null; return null;
} }
export function formatSvgDataUri(svg: string | null | undefined): string {
if (svg == null) {
return '';
}
const trimmed = svg.trim();
if (trimmed === '') {
return '';
}
if (
trimmed.indexOf('http://') === 0 ||
trimmed.indexOf('https://') === 0 ||
trimmed.indexOf('data:') === 0
) {
return trimmed;
}
if (trimmed.indexOf('<svg') === 0) {
return 'data:image/svg+xml;utf8,' + encodeURIComponent(trimmed);
}
return trimmed;
}

查看文件

@@ -274,7 +274,7 @@ const EXCHANGE_TEXTS: Record<string, Record<string, string>> = {
submit: '提交留资', submit: '提交留资',
submitting: '提交中...', submitting: '提交中...',
badge: '双向名片互换', badge: '双向名片互换',
badgeAi: 'AI 极速识别', badgeAi: '智能扫描识别',
contactSectionTitle: '联系人信息', contactSectionTitle: '联系人信息',
contactSectionDesc: '留下真实商务联系方式,便于后续及时跟进', contactSectionDesc: '留下真实商务联系方式,便于后续及时跟进',
intentTitle: '沟通意向 (快捷选择)', intentTitle: '沟通意向 (快捷选择)',

查看文件

@@ -52,3 +52,29 @@ test('5. 个人资料顶部身份区域与配额进度条具备点击交互响
assert.ok(content.includes('onEditProfileClick'), '顶部身份卡片必须具备 onEditProfileClick'); assert.ok(content.includes('onEditProfileClick'), '顶部身份卡片必须具备 onEditProfileClick');
assert.ok(content.includes('onQuotaClick'), '配额进度条必须具备 onQuotaClick 交互反馈'); assert.ok(content.includes('onQuotaClick'), '配额进度条必须具备 onQuotaClick 交互反馈');
}); });
test('6. profile/index.uvue 必须集成 Executive 商业资产罗盘指标看板', () => {
const content = fs.readFileSync(profileUvuePath, 'utf-8');
assert.ok(content.includes('metricsCards'), '指标看板必须包含活跃名片统计');
assert.ok(content.includes('metricsVisitors'), '指标看板必须包含雷达访客统计');
assert.ok(content.includes('metricsLeads'), '指标看板必须包含沉淀线索统计');
assert.ok(content.includes('/pages/owner/radar'), '雷达指标必须支持跳转到雷达页');
assert.ok(content.includes('/pages/owner/leads'), '线索指标必须支持跳转到线索页');
});
test('7. profile/index.uvue 触控热区保证与底部安全区适配', () => {
const content = fs.readFileSync(profileUvuePath, 'utf-8');
assert.ok(content.includes('env(safe-area-inset-bottom'), '必须适配视口底部安全区');
assert.ok(content.includes('min-height: 44px') || content.includes('min-height: 46px') || content.includes('min-height: 48px'), '核心按钮与触控区必须保证 >= 44px');
});
test('8. profile/index.uvue 必须符合 Bento Grid、漫反射软阴影与极光流光视觉 Token', () => {
const content = fs.readFileSync(profileUvuePath, 'utf-8');
assert.ok(content.includes('bento-card'), '必须应用 bento-card 便当盒结构');
assert.ok(content.includes('box-shadow'), '必须包含漫反射软阴影设计');
assert.ok(content.includes('linear-gradient'), '必须包含品牌微渐变或极光流光微效果');
});