refactor(i18n): 全工程面向国际用户与全球现代商务重构,彻底清理出海跨境等单向视角表达并对齐自动化测试
这个提交包含在:
@@ -6,17 +6,17 @@
|
||||
### 一、 产品战略定位与商业愿景 (Product Vision & Strategy)
|
||||
|
||||
#### 1.1 产品定位
|
||||
**OmniCard AI** 是一款面向**全球出海商务、跨国企业团队、自由职业者及国际会展场景**的新一代 **AI 驱动型智能数字名片 + 移动微官网 (Bento Micro-Site) + 潜客雷达 CRM + 实体 NFC 智能卡管家** 一体化 SaaS 平台。
|
||||
**OmniCard AI** 是一款面向**全球现代商务、跨国企业团队、自由职业者及国际会展场景**的新一代 **AI 驱动型智能数字名片 + 移动微官网 (Bento Micro-Site) + 潜客雷达 CRM + 实体 NFC 智能卡管家** 一体化 SaaS 平台。
|
||||
|
||||
它不仅是一张数字名片,更是出海企业与个人的**微型官网**与**24小时自动获客线索引擎**:
|
||||
它不仅是一张数字名片,更是全球企业与个人的**微型官网**与**24小时自动获客线索引擎**:
|
||||
- **用户端与微官网(User Client: App & H5)**:秒级首屏响应、无缝多语言自适应(含 RTL 排版)、Bento Grid 现代卡片美学、名片内置 24/7 AI 顾问对话、NFC 实体卡秒级碰触与离线 vCard 导入。
|
||||
- **管理后台前端(Admin Web)**:可视化名片搭建、AI 批量出海润色、NFC 硬件全生命周期下发管控、访客轨迹透视与 CRM 商机漏斗、多租户企业品牌管控。
|
||||
- **管理后台前端(Admin Web)**:可视化名片搭建、AI 批量本地化润色、NFC 硬件全生命周期下发管控、访客轨迹透视与 CRM 商机漏斗、多租户企业品牌管控。
|
||||
- **后端中枢服务(Backend API)**:基于 Cool-Admin (Node.js) 模块化架构,提供高性能企业级数据中枢、安全 RBAC 鉴权、微秒级雷达日志追踪及官方插件集成。
|
||||
|
||||
#### 1.2 核心用户画像 (Target Personas)
|
||||
1. **外贸/跨境出海销售与参展团队**:常年参与海外展会(CES、广交会、迪拜 GITEX 等),需要跨语种交流,通过手机或 NFC 实体卡一碰即达,零摩擦留存客户线索。
|
||||
1. **全球商务销售与国际参展团队**:常年参与国际知名展会(CES、IFA、迪拜 GITEX 等),需要跨语种交流,通过手机或 NFC 实体卡一碰即达,零摩擦留存客户线索。
|
||||
2. **跨国商务顾问/自由专家 (Consultants & Creators)**:需要集个人品牌展示、过往案例 (Portfolio)、干货博客文章 (Insights) 与预约排期于一体的移动端便当盒微官网。
|
||||
3. **出海科技企业 / 品牌出海团队**:需要统一管理数十到数百名商务人员的名片物料,统一品牌 VI 形象,并集中追踪团队名片带来的全球线索转化与公海池沉淀。
|
||||
3. **全球化科技企业 / 国际品牌团队**:需要统一管理数十到数百名商务人员的名片物料,统一品牌 VI 形象,并集中追踪团队名片带来的全球线索转化与公海池沉淀。
|
||||
|
||||
---
|
||||
|
||||
@@ -44,7 +44,7 @@ flowchart TD
|
||||
subgraph 后端服务_Cool-Admin [Backend API: Node.js Midway.js]
|
||||
CardModule[名片与微官网模块 modules/card]
|
||||
CRMModule[访客雷达与商机模块 modules/crm]
|
||||
AIModule[AI 对话与出海润色模块 modules/ai]
|
||||
AIModule[AI 对话与本地化润色模块 modules/ai]
|
||||
NFCModule[NFC 设备生命周期模块 modules/nfc]
|
||||
TeamModule[多租户与团队管理 modules/team]
|
||||
PluginEco[官方生态: OSS存储 / Redis缓存 / Task调度]
|
||||
@@ -121,7 +121,7 @@ flowchart TD
|
||||
|
||||
#### 3.4 模块四:轻量级客户关系 CRM 与访客雷达 (Lead CRM & Radar)
|
||||
1. **实时访客雷达 (Visitor Radar)**:
|
||||
- 海外客户在展会或拜访后点开名片,销售 App 收到即时推送(Push Notification):
|
||||
- 国际客商在展会或拜访后点开名片,销售 App 收到即时推送(Push Notification):
|
||||
*“来自阿联酋迪拜的访客正在浏览您的名片,已停留 3 分钟,正在重点查看‘新能源储能项目案例’!”*
|
||||
2. **无摩擦线索沉淀 (Frictionless Lead Exchange)**:
|
||||
- “互换名片”弹窗:访客快速输入姓名、公司、邮箱/WhatsApp,或拍照上传纸质名片(OCR 识别入库)。
|
||||
@@ -174,14 +174,14 @@ admin-web/ (Arco Pro 架构)
|
||||
| 模块名称 | 页面路由路径 | 页面中文名称 | 核心功能点与交互规范 | 推荐复用 Arco 官方组件 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| **工作台** | `/dashboard/workplace` | 商务概览工作台 | 核心 KPI 概览(触碰量、浏览量、新线索、成交转化);今日实时雷达动态流;快捷入口(新建名片、发卡、线索导出)。 | `Grid`, `Statistic`, `Card`, `Timeline`, `Button` |
|
||||
| **数据大屏** | `/dashboard/radar-map` | 全球访客雷达大屏 | 全球出海访客分布地理热力图(国家/地区占比);各名片停留时长与访问峰值走势图;出海客户语言/设备终端分析。 | `Card`, `DatePicker.RangePicker`, `Spin`, `Empty` |
|
||||
| **数据大屏** | `/dashboard/radar-map` | 全球访客雷达大屏 | 全球访客分布地理热力图(国家/地区占比);各名片停留时长与访问峰值走势图;国际客户语言/设备终端分析。 | `Card`, `DatePicker.RangePicker`, `Spin`, `Empty` |
|
||||
| **名片管理** | `/card/list` | 数字名片资产库 | 名片表格与卡片双视图切换;发布/草稿状态;一键复制短链;动态防伪二维码下载(PNG/SVG/PDF打印格式);批量导出 vCard。 | `Table`, `Radio.Group`, `Badge`, `Popconfirm`, `Dropdown` |
|
||||
| **微官网搭建** | `/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` |
|
||||
| **AI 智能客服** | `/ai/concierge` | 名片 AI 顾问调优 | 数字人/顾问人设设定(外贸专家、商务代表等);欢迎语与引导词设置;高频 FAQ 手动配置;自动留资触发策略设置。 | `Form`, `Input.TextArea`, `Slider`, `Radio.Group`, `Card` |
|
||||
| **AI 智能客服** | `/ai/concierge` | 名片 AI 顾问调优 | 数字人/顾问人设设定(国际贸易顾问、商务代表等);欢迎语与引导词设置;高频 FAQ 手动配置;自动留资触发策略设置。 | `Form`, `Input.TextArea`, `Slider`, `Radio.Group`, `Card` |
|
||||
| **知识库 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` | 多语言 AI 润色中心 | 批量多语言内容润色与地道化翻译;跨国专有名词与行业术语库 (Glossary) 维护;口吻风格切换(稳重/直接/故事感)。 | `Table`, `Select`, `Input`, `Button`, `Space` |
|
||||
| **访客轨迹** | `/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/pipeline` | 销售商机流转看板 | 泳道式阶段看板(新留资 ➔ 首次接触 ➔ 方案对接 ➔ 赢单/输单);卡片拖拽流转;商机总金额与转化率统计。 | `Grid`, `Card`, `Avatar`, `Tag`, `Typography.Text` |
|
||||
@@ -214,7 +214,7 @@ user-client/ (uni-app x 目录架构)
|
||||
│ │ │ ├── radar/ # 移动访客雷达
|
||||
│ │ │ ├── leads/ # 移动 CRM 与商机跟进
|
||||
│ │ │ ├── nfc/ # 手机 NFC 贴卡激活与场景管理
|
||||
│ │ │ └── profile/ # 个人设置与出海展会战报
|
||||
│ │ │ └── profile/ # 个人设置与展会活动战报
|
||||
│ │ └── common/ # 公共认证、404 与协议页面
|
||||
```
|
||||
|
||||
@@ -223,20 +223,20 @@ user-client/ (uni-app x 目录架构)
|
||||
| 端分类 | 页面路由路径 | 页面中文名称 | 核心功能点与交互规范 | 推荐复用原生/uni-ui组件 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| **访客端** | `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/ai-chat` | **名片内置 AI 顾问** | 底部抽屉展开;专属名片企业/个人知识库 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/edit` | 名片极速微调编辑 | 移动端随时更新个人资料、职位、手机号、社交链接;Bento 模块上下排序拖拽;内置 AI 文案一键多语言润色。 | `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/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/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/security`| NFC 安全与挂失 | 实体卡远程一键挂失冻结;卡片防伪 UID 校验;解除绑定与旧卡注销。 | `uni-card`, `uni-popup-dialog`, `<button>` |
|
||||
| **名片主** | `pages/owner/profile/index`| 个人账户与出海设置 | 个人信息与多语言切换;消息推送通知开关(雷达实时推送、线索即时提醒);所属企业与部门信息。 | `uni-list`, `uni-list-item`, `<switch>`, `<button>` |
|
||||
| **名片主** | `pages/owner/profile/index`| 个人账户与国际化设置 | 个人信息与多语言切换;消息推送通知开关(雷达实时推送、线索即时提醒);所属企业与部门信息。 | `uni-list`, `uni-list-item`, `<switch>`, `<button>` |
|
||||
| **名片主** | `pages/owner/team/overview`| 展会团队战报简报 | 展会期间团队获客排行榜;个人触达 KPI 与商机转化进度柱状图;优秀案例一键转存至个人名片。 | `uni-card`, `uni-badge`, `<scroll-view>` |
|
||||
| **公共层** | `pages/common/login` | 统一身份认证登录 | 国际手机号验证码登录、邮箱 Magic Link 免密登录、Google / Apple ID 一键快捷登录。 | `uni-forms`, `uni-easyinput`, `<button>` |
|
||||
|
||||
@@ -246,7 +246,7 @@ user-client/ (uni-app x 目录架构)
|
||||
|
||||
| 功能特权 | 免费版 (Free) | 专业版 (Pro) | 商业企业版 (Team/Enterprise) |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **适用人群** | 个人体验、初创独立人 | 出海业务精英、独立顾问 | 外贸销售团队、出海跨国企业 |
|
||||
| **适用人群** | 个人体验、初创独立人 | 全球业务精英、独立顾问 | 全球销售团队、跨国集团企业 |
|
||||
| **名片数量** | 1 张标准名片 | 5 张多语言/多场景名片 | 无限名片(按坐席计费) |
|
||||
| **微官网案例/文章** | 限制 2 个案例,无独立文章 | 无限案例,支持富媒体文章 | 统一品牌案例库,团队协同发布 |
|
||||
| **多语言支持** | 基础双语 (自动翻译) | 全球 10+ 语言 AI 深度润色 | 全球语言 + 企业专有术语库 |
|
||||
@@ -278,7 +278,7 @@ user-client/ (uni-app x 目录架构)
|
||||
- 接入大语言模型与向量知识库 (RAG),上线名片内嵌 24/7 AI 智能顾问浮层。
|
||||
- 落地实时访客雷达追踪(IP 地理定位、停留时长、意向度评分打标)。
|
||||
- 上线移动端雷达推送与 Arco 管理后台销售商机看板 (Pipeline)。
|
||||
4. **第四阶段:企业级多租户协作与商业化出海**
|
||||
4. **第四阶段:企业级多租户协作与全球商业化**
|
||||
- 上线企业品牌规范套件 (Brand Kit) 与离职人员资产无损交接工单。
|
||||
- 接入 Stripe 国际信用卡订阅支付体系与开票系统。
|
||||
- 开放 OpenAPI 与外部 CRM 生态(HubSpot、Salesforce)数据打通。
|
||||
|
||||
775
docs/mpuniapp-ui-refactor-plan.md
普通文件
775
docs/mpuniapp-ui-refactor-plan.md
普通文件
@@ -0,0 +1,775 @@
|
||||
# mpuniapp UI 重构规范
|
||||
|
||||
面向实现代理。只改 `.uvue` 模板结构、scoped CSS、以及 `resolveXxxText` 文案分支。禁止改业务 API、状态机、请求参数、路由语义。`pages.json` 的 tabBar 仍是旧「官网/雷达/潜客」,本轮只在分析中指出,不改路由配置。
|
||||
|
||||
Token 一律来自 `mpuniapp/common/tokens.uts`,页面通过已有 `pageTheme` 注入 CSS 变量。禁止 Tailwind。禁止业务态内联 `style`(`pageTheme` 注入 CSS 变量除外)。暗色变量已定义,本轮先把 Light 变量用齐;能接 `prefers-color-scheme` 的页面在第 5 轮统一补。
|
||||
|
||||
---
|
||||
|
||||
## 0. 全局视觉语言(实现代理必遵)
|
||||
|
||||
1. **页面骨架**:`背景 surface #F7F8FA` + 顶栏白底(`bg #FFFFFF` + 底部分隔 `1px border #E3E7ED`)+ 内容区 `padding-inline: 16px` + 列表/表单卡片 + 底栏 1 个主 CTA。页面纵向:顶栏固定内容高度,中间 `flex:1` 滚动,底栏不随内容滚走。
|
||||
2. **字号层次(只许 12/14/16/20/24/32/40)**:页标题 24/700/行高 1.25/`text`;区块标题 16/600;正文 14/行高 1.6/`text2`;辅助/标签 12/`text2`。禁止 11、13、15、17、18、22。按钮字 16/600。输入字 16。
|
||||
3. **卡片**:白底、`1px border`、圆角 16、阴影只许 `0 1px 2px rgba(16,24,40,0.04)`。最多两层嵌套。列表行用卡片,不用重阴影、不用玻璃、不用渐变底。
|
||||
4. **主 CTA 栏**:每屏 1 个主按钮。高 48、圆角 12、宽 100%、`primary #0B5CFF`、字 `#FFFFFF`。固定底栏:`padding 12px 16px` + `safe-area-inset-bottom`。内容区底部垫高 `88px + window-bottom + safe-area`。禁用态底 `border`、字 `text2`。次操作只能是文字链或描边 chip,不能再出现同级实心蓝按钮。
|
||||
5. **空 / 错 / 加载**:加载用骨架(头像圆 72、标题条 24×60%、卡片条 72–88 高、底色 `border`、圆角 8/16),禁止转圈作为主反馈。空态:一句话 16/600 + 一句 14/`text2` + 一个主 CTA。错误态:同卡片结构,主 CTA = 重试/返回。
|
||||
6. **分段 chips**:高 ≥44、左右 padding 16、圆角 12、默认白底+`border`、选中 `primarySoft` 底 + `primary` 边 + `primary` 字。横滑一行,禁止换行堆成两排。禁止选中填实心蓝底白字(语言选择除外可用描边选中)。
|
||||
7. **安全区与触控**:可点区域 ≥44×44。输入高 44、标签在上、错误在下。删除徽标若视觉 18,外扩点击热区到 44。底栏避让 `env(safe-area-inset-bottom)` 与 `var(--window-bottom)`(有 tabBar 的页必须加 window-bottom)。
|
||||
8. **RTL**:间距、padding、margin 用 logical(`padding-inline` / `margin-inline` / `border-inline-start`)。箭头、悬浮入口在 RTL 下左右对调。`direction` 跟当前 locale。
|
||||
9. **动效**:点击透明度 0.85 或位移 0,时长 150ms,`cubic-bezier(0.2, 0.8, 0.2, 1)`。禁止 scale 放大。`prefers-reduced-motion: reduce` 时 animation/transition 全关。AI 只用 150ms 微光一次。NFC 脉冲 400ms 一次,不循环。
|
||||
10. **禁止**:emoji、纯黑 `#000`、大面积渐变、重阴影、玻璃拟态、霓虹、拟物、装饰插画。品牌色只作按钮/链接/选中,语义红绿黄只表示状态。模板禁止硬编码中文,走 `getOmniText` / `resolveXxxText`。
|
||||
11. **长列表**:`list-view` + `list-item`。禁止 `view` + `v-for` 渲染可能超过一屏的列表。Bento 网格、KPI(≤4)、语言 chips(7)、状态 chips(≤6)可用 `view` + `v-for`。
|
||||
12. **不要改的范围**:`common/api.uts`、`common/request.uts`、`common/types.uts`、各页 `useXxx.uts` 的请求/状态机/跳转 URL。允许:`.uvue` 结构与 CSS;`resolveXxxText` 增补文案 key(不改函数签名语义)。本轮不改 `pages.json` tabBar。
|
||||
|
||||
---
|
||||
|
||||
## 1. 页面总表
|
||||
|
||||
| 路径 | 中文名 | 角色 | PRD 必须内容 | 当前缺口 | UX 改进点 | 重构优先级 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| `pages/portal/index` | Bento 微官网 | 访客首屏 | Hero、快捷动作、vCard 主 CTA、Bento、AI 入口、i18n/RTL | 顶栏三动作抢主 CTA;AI 浮层阴影过重;社交格全显空项;大量硬编码色;`collect` 文案写死 | 压顶栏、滤空社交、字号归位、AI 降为次入口 | P0 |
|
||||
| `pages/portal/exchange` | 互换名片 | 访客留资 | 姓名/公司/WhatsApp/邮箱/留言;OCR 拍照填单 | 模板全中文硬编码;OCR 按钮高 36;无 RTL | 全走 i18n;表单标签上/错下;OCR 热区 44 | P0 |
|
||||
| `pages/portal/case-detail` | 案例详情 | 访客阅读 | 轮播、KPI、PDF 预览、咨询 CTA | `CASE_DETAIL_COPY` 中文写死;PDF/视频只露 URL | 文案走 resolve;外链做成可点行;KPI 最多 3 张 | P0 |
|
||||
| `pages/portal/article-detail` | 文章详情 | 访客阅读 | 杂志排版、分享 | 底栏「复制链接」语义弱;空态无卡片感 | 主 CTA 改「复制分享链接」层次;阅读列宽保持 720 | P1 |
|
||||
| `pages/portal/ai-chat` | AI 顾问 | 访客问答/留资 | list-view 对话、留资卡、发送 | 输入+发送纵向占太高;成功色硬编码 | 输入行与发送合并为一行;微光保留 | P1 |
|
||||
| `pages/common/login` | 登录 | 名片主认证 | 手机验证码、Magic Link、Google/Apple | 模板中文写死;无 token 变量;PRD 三通道未上屏;测试账号暴露 | 先视觉+i18n;测试入口降为 12 号弱链;预留 tab 位但不接新 API | P0 |
|
||||
| `pages/owner/hall/index` | 名片大厅 | Tab「大厅」 | 人脉/团队/现场;搜;兑换码/现场码 | 顶栏过高;空态无 CTA;列表无头像位 | 压标题;三段 chip 单行;空态接底栏主 CTA | P1 |
|
||||
| `pages/owner/card/index` | 我的名片 | Tab「名片」 | 卡片盒、状态、今日浏览、雷达红点、海报 | 普通列表;无浏览数/红点;底栏「刷新/海报」语义飘 | 行内状态+编辑;底栏固定「分享海报」;浏览数可占位不接新接口 | P0 |
|
||||
| `pages/owner/radar` | 实时雷达 | 二级页 | 长列表足迹、停留、高意向标红 | 手填 cardId 过技术;空/错混为一句;无骨架;不高亮 | 去掉技术输入视觉(保留字段隐藏绑定);行内标红高停留 | P1 |
|
||||
| `pages/owner/leads` | 客户 | Tab「客户」 | 意向筛选、搜索、电话/WhatsApp;高意向红点;雷达摘要 | 顶栏堆 6 块;红点用了品牌蓝;无一键联系 | 压成「标题+红点 / 雷达 2 行 / 搜索 / chips」;红点用 error | P0 |
|
||||
| `pages/owner/profile/index` | 我的 | Tab「我的」 | 资料、语言、推送、企业 | 硬编码色;进度条内联 width;预览钮 32;删除热区 18;指标写死 | 改 token;热区 44;语言 chip 改描边选中 | P1 |
|
||||
| `pages/owner/card/edit` | 极速编辑 | 二级 | 资料、社交、模块排序、AI 润色 | 无 slogan/排序/润色入口;删除热区 18 | 只补视觉空位与层次,不接新 API | P1 |
|
||||
| `pages/owner/card/qrcode` | 分享海报 | 二级 | 高清码、大图、存相册 | 只有 URL 文本,无码无海报 | 中央 200 方码位+短链;主 CTA「复制链接」 | P0 |
|
||||
| `pages/owner/leads-detail` | 跟进备忘 | 二级 | 轨迹、AI 话术、备忘 | 轨迹用 view 列表;无电话/WhatsApp;无 AI 话术位 | 轨迹改 list-view;预留话术卡;主 CTA 仍保存备忘 | P1 |
|
||||
| `pages/owner/nfc/scan` | NFC 贴卡 | 二级 | 贴卡 0.5s、脉冲、成功震动 | 纯表单;无脉冲;H5 与 App 长一样 | 中央 120 脉冲环(一次 400ms);表单降为 H5 后备 | P1 |
|
||||
| `pages/owner/nfc/mode` | 场景切换 | 二级 | 展会/社交、离线 vCard、状态 | 缺离线说明行 | 补一行说明;模式选项保持描边 | P2 |
|
||||
| `pages/owner/nfc/security` | 挂失 | 二级 | 挂失、UID 校验、解绑 | `view v-for`;「处理中...」写死;危险按钮 `#D92D20`;底 `#FFFFFF` | 设备少可保留卡片;CTA 用 error token;文案 i18n | P2 |
|
||||
| `pages/owner/team/overview` | 展会战报 | 二级 | 排行、KPI、转化柱 | 刷新当主 CTA;排行数字裸堆;双 list 分支重复 | 2×2 KPI 用 gap 12;主 CTA 改「回到客户」或保留刷新但降文案 | P2 |
|
||||
|
||||
**tabBar 现状(本轮不改文件)**:`pages.json` 仍为 官网=`portal/index` / 名片 / 雷达 / 潜客=`leads` / 我的。落地 IA 应为 大厅 / 名片 / 客户 / 我的,雷达从客户页进入。视觉重构按落地 IA 排信息,不改 `pages.json`。
|
||||
|
||||
---
|
||||
|
||||
## 2. 逐页规范
|
||||
|
||||
### 2.1 `pages/portal/index` · Bento 移动微官网
|
||||
|
||||
**用户目标**:5 秒内确认对方是谁,并保存到通讯录。
|
||||
|
||||
**必须保留**:`loadCardPortal`、停留上报、语言 persist、快捷动作、vCard 保存、Bento 跳转、互换/AI 跳转、收藏大厅、发音组件、骨架/错误重试。
|
||||
|
||||
**信息架构(上→下)**
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ [语言选择] [交换 文字] │ 高 44,无第二实心按钮
|
||||
├─────────────────────────────────────┤
|
||||
│ 品牌 Logo(可选) │
|
||||
│ ┌ Hero 卡 16 圆角 1px 边 ─────────┐ │
|
||||
│ │ 头像 72 时区 pill 12 │ │
|
||||
│ │ 姓名 24/700 [发音] │ │
|
||||
│ │ 头衔 14 / 公司 14/600 │ │
|
||||
│ │ 分隔线 + Slogan 14/1.6 │ │
|
||||
│ └─────────────────────────────────┘ │
|
||||
│ 快捷动作:仅渲染有值的项,每项 25% │
|
||||
│ 宽、高 ≥56,字 12 │
|
||||
│ Bento:1 列 50% / 2 列 100%,gap 12 │
|
||||
│ spacer 140+safe │
|
||||
├─────────────────────────────────────┤
|
||||
│ 主 CTA 48:「保存到通讯录」 │
|
||||
└─────────────────────────────────────┘
|
||||
右下 AI 文字 chip(次入口,不是主 CTA)
|
||||
```
|
||||
|
||||
**主 CTA**:底栏「保存到通讯录」`card.save_contact`。AI、交换、收藏都是文字/描边。
|
||||
|
||||
**空 / 错 / 骨架**:保持现有三态。错误卡居中,重试按钮高 40 改为 44。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 顶栏去掉「收入大厅」与「交换」并列双 chip。交换保留一个 14 号文字链。收藏改为 Hero 内 12 号文字链,或登录后才显示。
|
||||
- `collectLabel`、toast「已收入大厅」改为 `resolve` / locale key,禁止 `currentLang === 'zh-CN' ?`。
|
||||
- 快捷动作:无链接的项不渲染(数据仍在 state,只是 `v-if`)。
|
||||
- 字号:`action-icon-text` 11→12,`hero-title` 15→14,`hero-slogan` 13→14,`bento-title` 15→16,`bento-tag` 11→12,CTA 字 15→16。
|
||||
- 颜色全部改 `var(--oc-*)`。页面背景 `surface`。
|
||||
- `.ai-entry` 阴影改为 token 浅影,去掉紫影 `rgba(124,92,255,0.12)`。
|
||||
- `.bento-card:active` 的 `scale(0.99)` 改为 `opacity: 0.85`,并加 `prefers-reduced-motion`。
|
||||
- RTL:顶栏、姓名行、公司行改 `margin-inline`;AI 入口 `inset-inline-end: 16px`。
|
||||
- 公司行保持可点,不改 `handleCompanyClick`。
|
||||
|
||||
**不要改的文件**:`usePortal.uts`、`useAudioPlayer.uts`、`useCache.uts`、`vcard-export.uts`、`components/i18n-selector`、`components/audio-pronounce`。
|
||||
|
||||
---
|
||||
|
||||
### 2.2 `pages/portal/exchange` · 无摩擦互换名片
|
||||
|
||||
**用户目标**:30 秒留下姓名和一个联系方式。
|
||||
|
||||
**必须保留**:`applyExchangeOptions`、`submitExchange`、OCR 上传/预览/删除、`canSubmit`/`submitting` 禁用。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
┌ 白卡 16 圆角 ──────────────────────┐
|
||||
│ 标题 24:「交换名片」 │
|
||||
│ 说明 14 │
|
||||
│ 警告条(无 cardId 时) │
|
||||
│ OCR 行:左文案 / 右 44 高描边按钮 │
|
||||
│ 预览行:48 图 + 文 + 删除(热区 44) │
|
||||
│ 字段×5:标签 14 在上,输入 44 │
|
||||
└─────────────────────────────────────┘
|
||||
底栏主 CTA 48:提交 / 提交中
|
||||
```
|
||||
|
||||
**主 CTA**:提交留资。OCR 是次按钮(`primarySoft` 底 + `primary` 边)。
|
||||
|
||||
**空 / 错 / 骨架**:无 cardId 用警告条,主 CTA 禁用。无独立骨架(表单即首屏)。提交失败走现有 toast,不改 hook。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 模板 10+ 处中文全部改为 `resolveExchangeText`。若 hook 无该函数,只在 `useExchange.uts` **新增文案 map**,不改 `submitExchange`。
|
||||
- `.ocr-btn` 高 36→44。`.ocr-preview-delete` padding 扩到 min 44×44。
|
||||
- 输入已是 44,保持。标签 14/600,间距 8。
|
||||
- 页面加 `:class` RTL。`margin-right` 改 `margin-inline-end`。
|
||||
- CTA 字 15→16。
|
||||
|
||||
**不要改的文件**:`useOcrExchange.uts` 的上传/识别流程;`submitExchange` 入参。
|
||||
|
||||
---
|
||||
|
||||
### 2.3 `pages/portal/case-detail` · 案例详情
|
||||
|
||||
**用户目标**:看懂成果,点「咨询」去留资。
|
||||
|
||||
**必须保留**:`loadCaseDetail`、swiper、KPI、pdf/youtube 字段、`openCaseExchange`、空态返回。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
标题 24
|
||||
封面 swiper 220 / 单图 220,圆角 16
|
||||
正文 16 / 行高 1.6
|
||||
KPI 行:最多 3 张,每张 value 24 + label 12
|
||||
外链行:左标签 12 / 右可点 URL 14 primary(看起来像行按钮,不是裸字符串)
|
||||
spacer
|
||||
底栏:「咨询」→ 现有 openCaseExchange
|
||||
```
|
||||
|
||||
**主 CTA**:咨询。空态主 CTA = 返回。
|
||||
|
||||
**空 / 错 / 骨架**:保持。空态卡片加 `max-width` 不拉满刺眼。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- `CASE_DETAIL_COPY` 从模板剥离:模板改调 `resolveCaseDetailText`(可在 hook 把现有对象包一层函数)。禁止模板直接绑中文字面量。
|
||||
- 外链行加 `min-height: 44`,整行可点打开/复制(若 hook 无 open,则只复制,不新写请求)。
|
||||
- KPI `margin-inline-end` 改为 `gap: 8`,最后一张不要多余右边距。
|
||||
- 无暗色/无 RTL class:补 `padding-inline` 与页面 rtl class。
|
||||
|
||||
**不要改的文件**:`loadCaseDetail` 解析逻辑。
|
||||
|
||||
---
|
||||
|
||||
### 2.4 `pages/portal/article-detail` · 文章
|
||||
|
||||
**用户目标**:不被打断地读完,再决定分享。
|
||||
|
||||
**必须保留**:`loadArticleDetail`、rich-text、复制分享、空态返回。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
封面 200 圆角 16(可无)
|
||||
kicker 12/600 primary
|
||||
标题 24
|
||||
正文 16 / 行高 1.7,容器 max-width 720
|
||||
spacer
|
||||
底栏主 CTA:复制分享链接
|
||||
```
|
||||
|
||||
**主 CTA**:复制链接(现有 `copyArticleShareLink`)。不要再加第二个分享按钮。
|
||||
|
||||
**空 / 错 / 骨架**:空态改与案例一致的白卡片+一句话+返回,不要只有灰字贴边。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 空态加白底边框卡、居中。
|
||||
- CTA 字 15→16。
|
||||
- 保持杂志留白,不要把文章塞进卡片框。
|
||||
|
||||
**不要改的文件**:`useArticleDetail.uts`。
|
||||
|
||||
---
|
||||
|
||||
### 2.5 `pages/portal/ai-chat` · AI 顾问
|
||||
|
||||
**用户目标**:问一句、得到答复;有意向时留下姓名+联系方式。
|
||||
|
||||
**必须保留**:`sendStreamChat`、`submitLeadCard`、`list-view` 消息、留资卡状态机、缺 cardId 提示。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
┌ 圆角 20 顶 sheet ───────────────────┐
|
||||
│ 把手 40×4(ai 色 20% 透明) │
|
||||
│ 标题 24 │
|
||||
│ list-view:空态一句 / 气泡 / 留资卡 │
|
||||
│ 底作曲:标签 12 + [输入 44 | 发送 48]│
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**主 CTA**:发送。留资卡内提交是卡片内次按钮(描边),不算第二屏主 CTA。
|
||||
|
||||
**空 / 错 / 骨架**:空态保持一句。发送中按钮禁用文案走 `sending`。无骨架(对话页)。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 作曲区改为横向:`input flex:1` + 发送宽不固定、高 48,避免键盘顶起三行。若 uni-app x 横向不稳,保持纵向但去掉重复「输入标签」,只留 placeholder。
|
||||
- 成功态绿底 `#ECFDF3` 改为 `surface` + 左边框 `success`,避免大块绿。
|
||||
- `.ai-lead-error`、硬编码 `#12B76A`/`#F04438` 改 token 变量。
|
||||
- 微光 animation 保留,`prefers-reduced-motion` 已有,保持。
|
||||
- 用户气泡白字对比度足够,保留。
|
||||
|
||||
**不要改的文件**:`useAiChat.uts` 流式与留资提交。
|
||||
|
||||
---
|
||||
|
||||
### 2.6 `pages/common/login` · 登录
|
||||
|
||||
**用户目标**:用已有账号进入名片主。
|
||||
|
||||
**必须保留**:`submitPasswordLogin`、`fillTestAccount`、条款 toast、登录后 pending 收藏。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
居中列 max-width 340
|
||||
Logo 36
|
||||
标题 24(现 22 改 24)
|
||||
说明 14
|
||||
输入 用户名 44
|
||||
输入 密码 44
|
||||
弱文字链 12:测试账号(不要做成按钮)
|
||||
错误 12 error 色
|
||||
主 CTA 48:登录 / 登录中
|
||||
底部条款 12 text2 + 链接
|
||||
```
|
||||
|
||||
**主 CTA**:登录。不要同时放验证码/Google 实心按钮。PRD 的手机/邮箱/社交本轮只允许在标题下加 12 号「更多方式即将开放」一句,不接新 API。
|
||||
|
||||
**空 / 错 / 骨架**:错误在按钮上方。无骨架。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 模板中文全部改 `resolveLoginText`(hook 已有 key:`title`/`desc`/`usernamePlaceholder`/`passwordPlaceholder`/`testAccountTip`/`login`/`terms*`)。
|
||||
- 引入 `pageTheme` + `var(--oc-*)`。圆角 10→12。按钮高 44→48。
|
||||
- 测试账号从高饱和蓝链改为 `text2`,点击仍 `fillTestAccount`。
|
||||
- 页面背景 `bg`。补 RTL class。
|
||||
- `aria-label` 走 i18n,禁止写死「登录」。
|
||||
|
||||
**不要改的文件**:`submitPasswordLogin`、token 写入、`consumePendingCollectCard`。
|
||||
|
||||
---
|
||||
|
||||
### 2.7 `pages/owner/hall/index` · 大厅(人脉 / 团队 / 现场)
|
||||
|
||||
**用户目标**:找到已收的人,或用码加入。
|
||||
|
||||
**必须保留**:三 tab、`refreshHall`、兑换码、现场码、`openHallPortal`、list-view。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
白顶栏:
|
||||
标题 24
|
||||
副标题 14(只 1 行,过长截断)
|
||||
chips ×3 单行
|
||||
搜索 44
|
||||
条件第二输入 44(人脉=兑换码 / 现场=现场码)
|
||||
list-view 行卡:
|
||||
左 40 圆占位(无头像字段则纯色块,不请求新字段)
|
||||
右:姓名 16 / 头衔 14 / 公司 14
|
||||
空/错卡片
|
||||
底栏主 CTA:按现有 ctaLabel(刷新 / 兑换 / 加入现场)
|
||||
```
|
||||
|
||||
**主 CTA**:沿用现有三态文案,不要拆成两个底按钮。
|
||||
|
||||
**空 / 错 / 骨架**:空态必须能被底栏 CTA 服务(刷新/加入)。空态卡片不要再放第二个按钮。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 顶栏 `padding-block-end` 保持 12,tab 与搜索间距 8,去掉多余 12+12 堆叠。
|
||||
- 行卡加 8px 间隔,左占位 40×40 圆角 20,`surface` 底。不改数据类型。
|
||||
- 错误态补「可点热区」靠底栏重试,不要在卡片里再做按钮。
|
||||
|
||||
**不要改的文件**:`useHall.uts`。
|
||||
|
||||
---
|
||||
|
||||
### 2.8 `pages/owner/card/index` · 我的名片
|
||||
|
||||
**用户目标**:看自己有哪些名片,去预览、编辑或分享。
|
||||
|
||||
**必须保留**:搜索、`refreshCards`、预览、编辑、`pickShareCard`+`openCardQrcode`、配额 subtitle。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
白顶栏:标题 24 / 配额句 14 / 搜索 44
|
||||
list-view 行:
|
||||
左:姓名 16 / 职位 14 / 公司 14
|
||||
右:状态 12 primary
|
||||
今日浏览 12 text2(无字段则显示 "—",不造假数、不改 API)
|
||||
「编辑」文字热区 44
|
||||
底栏主 CTA:有可分享名片 → 分享海报;否则刷新
|
||||
```
|
||||
|
||||
**主 CTA**:保持现有 `handleRefresh` 分支(有卡则海报,无则刷新)。文案在有卡时应显示「分享海报」而不是「刷新」。实现:模板按 `pickShareCard(state.list) != null` 切换已有 `resolveCardHomeText`,不改函数。
|
||||
|
||||
**空 / 错 / 骨架**:空态一句话说明「还没有名片」,主 CTA 仍刷新。不要做「新建」除非已有 API。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 行高 min 88 保持。状态不要和编辑抢成两个蓝按钮,编辑保持文字。
|
||||
- PRD 的横向 swiper 本轮不做(会动结构),用列表+清晰状态代替。
|
||||
- 补 `prefers-reduced-motion` 去掉行 `scale`。
|
||||
|
||||
**不要改的文件**:`useCardHome.uts`、`fetchCardQuota`。
|
||||
|
||||
---
|
||||
|
||||
### 2.9 `pages/owner/radar` · 实时雷达(二级)
|
||||
|
||||
**用户目标**:看到谁在看名片、看了多久。
|
||||
|
||||
**必须保留**:`refreshTracks`、`cardIdRaw` 绑定、list-view、停留/深度格式化。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
标题 24 + 说明 14
|
||||
(cardId 输入默认隐藏;仅当 cardId 为空时显示,避免销售看到「填 ID」)
|
||||
list-view:
|
||||
地点 16/600
|
||||
触达方式 12 标签
|
||||
停留 + 深度 14
|
||||
停留 ≥180s 或深度 ≥0.6:左边框 3px error(高意向,不改数据)
|
||||
空态一句
|
||||
底栏:刷新
|
||||
```
|
||||
|
||||
**主 CTA**:刷新。
|
||||
|
||||
**空 / 错 / 骨架**:错与空拆开:`errorMessage` 用错误卡;`empty` 用空态句。补与大厅同款骨架(现无)。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 列表底垫高加上 `window-bottom`(若从 tab 进)。
|
||||
- `touchType` 原始值可显示,但用 12 号 `text2`,不要当标题。
|
||||
- 无时间字段则不加。不请求新 API。
|
||||
|
||||
**不要改的文件**:`useRadar.uts` 请求。
|
||||
|
||||
---
|
||||
|
||||
### 2.10 `pages/owner/leads` · 客户
|
||||
|
||||
**用户目标**:按意向找到人,点进去跟进;必要时看雷达。
|
||||
|
||||
**必须保留**:状态 chips、搜索、`refreshLeads`、`hotUnread`、`radarTracks` 三行、跳转详情/雷达/战报、list-view。
|
||||
|
||||
**信息架构(压缩顶栏)**
|
||||
|
||||
```
|
||||
标题 24 [红点 44:高意向 N] ← 点击仍 openRadar
|
||||
雷达摘要卡(最多 2 行 + 「全部雷达」文字)
|
||||
搜索 44
|
||||
chips 单行横滑:全部/新/高意向/已联系/赢单/归档
|
||||
list-view:姓名 16 / 公司 14 │ 分 12 + 状态 12
|
||||
底栏:搜索/刷新(现有 cta)
|
||||
```
|
||||
|
||||
**主 CTA**:底栏搜索刷新。红点、雷达、战报都是文字/描边。战报入口从顶栏挪走:放到雷达卡最后一行右侧,或本轮藏进雷达页/我的(数据函数保留,入口可移到「我的」已有战报行)。**本页只保留一个「战报」文字链,放雷达卡内,不再单独占一行大入口。**
|
||||
|
||||
**空 / 错 / 骨架**:保持。空态不要第二个按钮。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- `.radar-hot-badge`:底改极浅红(`error` 8% 不够就用白底+`error` 字+`error` 边),禁止 `primarySoft`。有未读才渲染。
|
||||
- chips:去掉 `flex-wrap` 与 `margin-block-end`,只横滑。
|
||||
- 行卡右侧状态:`hot` 用 `error` 字,其它用 `primary`。
|
||||
- 不做电话/WhatsApp 图标(列表无号码字段则不编造)。进详情再联系。
|
||||
- 顶栏总高目标:红点与标题同一行后,首屏至少露出 2 条客户。
|
||||
|
||||
**不要改的文件**:`useLeads.uts`、`openRadarPage`。
|
||||
|
||||
---
|
||||
|
||||
### 2.11 `pages/owner/profile/index` · 我的
|
||||
|
||||
**用户目标**:确认身份、改语言/推送、进 NFC 与战报、退出。
|
||||
|
||||
**必须保留**:头像选/删/预览、三项指标跳转、配额条、NFC 三入口、战报、两个 switch、语言 7 项、退出确认。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
Hero 卡:头像 56 + 名 16 + 套餐 pill + 公司/部门 14
|
||||
分隔线 + 「预览微官网」文字链(热区 44,不再用 32 高按钮)
|
||||
指标 3 格:数字 24 / 标签 12
|
||||
配额卡:标题 + 用量 + 轨道 4 高 + 升级文字链
|
||||
工作区列表(分隔线,不要每行一张卡)
|
||||
通知 switch 行(热区 44)
|
||||
语言 chips 描边选中(不要实心蓝底白字)
|
||||
退出:text2 文字,居中
|
||||
错误条
|
||||
spacer(含 window-bottom)
|
||||
```
|
||||
|
||||
**主 CTA**:本页无底栏主 CTA(设置页)。「预览微官网」是唯一强调文字链。退出不是主 CTA。
|
||||
|
||||
**空 / 错 / 骨架**:错误条移到 Hero 下,不要沉底。无骨架(本地设置)。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 全部硬编码色改 token。加 `pageTheme`。
|
||||
- 进度条:禁止内联 `:style width`。改用 10 档 class(`w-10`…`w-100`)或 `transform: scaleX(n)` 写在 class;`calculateQuotaPercent` 可映射到 class 名,不改计算函数。
|
||||
- 删除徽标视觉 18,外层点击层 44×44。
|
||||
- `.preview-btn` 高 32→44,或改纯文字链。
|
||||
- 语言选中:`primarySoft` + `primary` 边 + `primary` 字,取消白字填蓝。
|
||||
- 指标数字若仍是占位(12/5),保持,不编新接口。
|
||||
- 补 RTL logical。
|
||||
|
||||
**不要改的文件**:`useProfile.uts` 的开关/语言/退出/配额请求。
|
||||
|
||||
---
|
||||
|
||||
### 2.12 `pages/owner/card/edit` · 极速编辑
|
||||
|
||||
**用户目标**:改姓名/职位/电话/社交并保存。
|
||||
|
||||
**必须保留**:头像选/预览/删、各 input、`submitCardEdit`、缺 id 空态。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
白表单卡:
|
||||
标题 24
|
||||
头像 80 + 上传/更换 44 文字按钮
|
||||
字段:姓名 / 职位 / 公司 / 电话 / 邮箱 / WhatsApp / LinkedIn
|
||||
(slogan、模块排序、AI 润色:本轮只在标题下加 12 号说明「更多编辑请用后台搭建器」,不接 API)
|
||||
错误 12 error
|
||||
底栏:保存
|
||||
```
|
||||
|
||||
**主 CTA**:保存。
|
||||
|
||||
**空 / 错 / 骨架**:保持。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 删除热区扩到 44。头像边框 2px primary 改为 1px `border`(降低装饰)。
|
||||
- 错误色 `text2` → `error`。
|
||||
- CTA 字 16。字段间距 16。
|
||||
- 不要在本页做拖拽排序。
|
||||
|
||||
**不要改的文件**:`useCardEdit.uts`。
|
||||
|
||||
---
|
||||
|
||||
### 2.13 `pages/owner/card/qrcode` · 分享海报
|
||||
|
||||
**用户目标**:把码或链接给到对面。
|
||||
|
||||
**必须保留**:`loadPosterIntoState`、`copyPosterUrl`、空/错/骨架。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
白卡居中:
|
||||
标题 24
|
||||
200×200 码位(有 svg 就渲染;无 svg 用 surface 底 + 12 号「码生成中/不可用」)
|
||||
短链 14,可断行
|
||||
就绪句 12 text2
|
||||
底栏:复制链接(现有 copyCta)
|
||||
```
|
||||
|
||||
**主 CTA**:复制链接。不新增「存相册」除非 `useCardQrcode` 已有该方法。
|
||||
|
||||
**空 / 错 / 骨架**:保持三态。空态不要假装有码。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 有 `state.svg` 时用 `rich-text` 或 `image` 展示(哪种能跑用哪种,禁止引入新库)。
|
||||
- 码位边框 1px、圆角 16、居中。
|
||||
- 不要做易拉宝背景、不要大渐变海报。
|
||||
|
||||
**不要改的文件**:`useCardQrcode.uts`。
|
||||
|
||||
---
|
||||
|
||||
### 2.14 `pages/owner/leads-detail` · 跟进备忘
|
||||
|
||||
**用户目标**:看清这人是谁、来过几次,写下一条跟进。
|
||||
|
||||
**必须保留**:画像、轨迹、`nextNote`、图片上传、`submitLeadNote`。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
画像卡:姓名 24 / 公司 14 / 分+状态
|
||||
(电话/邮箱:有字段才显示 14 文字,无则省略)
|
||||
轨迹:标题 16 + list-view(禁止 view v-for)
|
||||
AI 话术卡(无接口则静态一句 resolve 文案 + 灰字「即将提供」,不要假数据)
|
||||
备忘:已有笔记 14 + textarea min 88 + 上传
|
||||
底栏:保存备忘
|
||||
```
|
||||
|
||||
**主 CTA**:保存备忘。不要在底栏放 WhatsApp 实心按钮。
|
||||
|
||||
**空 / 错 / 骨架**:保持。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- `.lead-body` 底垫高改 `calc(88px + safe-area)`,现在写死 88 会贴 Home 条。
|
||||
- 轨迹改 `list-view`/`list-item`。短列表也统一,避免超过一屏时卡顿。
|
||||
- 状态 `hot` 用 error 字。
|
||||
- 上传区上方加 12 号说明(i18n)。
|
||||
|
||||
**不要改的文件**:`useLeadDetail.uts`、`image-uploader`。
|
||||
|
||||
---
|
||||
|
||||
### 2.15 `pages/owner/nfc/scan` · 贴卡激活
|
||||
|
||||
**用户目标**:把实体卡贴上并完成绑定。
|
||||
|
||||
**必须保留**:`startScan`(APP)、`submitScan`、uid/cardId 输入、状态行。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
中央脉冲环 120(border 2px primary,opacity 脉冲 400ms 一次)
|
||||
标题 24 + 说明 14
|
||||
状态句 14
|
||||
H5 或失败时才显示 uid / cardId 两个字段
|
||||
底栏:激活
|
||||
```
|
||||
|
||||
**主 CTA**:激活/写入。
|
||||
|
||||
**空 / 错 / 骨架**:状态行即反馈。不要循环动画。`prefers-reduced-motion` 时只显示静止环。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- App:突出环,表单折叠。H5:`manualInput` 时显示表单(已有条件编译,只改样式权重)。
|
||||
- 禁止全息/多层光晕。一次脉冲:`opacity 0.4→1→0.4` 400ms,`animation-iteration-count: 1`。
|
||||
- 不改 `startScan`。
|
||||
|
||||
**不要改的文件**:`useScan.uts`。
|
||||
|
||||
---
|
||||
|
||||
### 2.16 `pages/owner/nfc/mode` · 场景切换
|
||||
|
||||
**用户目标**:把这张卡切到展会或社交。
|
||||
|
||||
**必须保留**:uid/cardId、状态/场景展示、`selectSceneMode`、`submitApplyScene`。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
标题 24 + 说明 14
|
||||
两个字段
|
||||
只读状态行
|
||||
模式两选项(描边,选中 primarySoft)
|
||||
12 号说明:离线 vCard 由系统在弱网时写入(不接新按钮)
|
||||
底栏:应用
|
||||
```
|
||||
|
||||
**主 CTA**:应用场景。
|
||||
|
||||
**空 / 错 / 骨架**:无独立空态。提交中禁用。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 选项不要做成两个主按钮。
|
||||
- 补 RTL。CTA 字 16。
|
||||
|
||||
**不要改的文件**:`useMode.uts`。
|
||||
|
||||
---
|
||||
|
||||
### 2.17 `pages/owner/nfc/security` · 安全与挂失
|
||||
|
||||
**用户目标**:选中一张卡,挂失或解冻。
|
||||
|
||||
**必须保留**:选中、`freezeDevice`/`unfreezeDevice`、UID 校验展示、警告卡。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
标题 24 + 说明 14
|
||||
设备卡列表(当前 1 张,view 可接受;≥8 必须改 list-view)
|
||||
批次 12 / UID 16 等宽 / 状态 pill
|
||||
防伪点 + 文案 12
|
||||
警告卡(surface,不要黄底大块)
|
||||
底栏:挂失 | 解冻(随选中状态,仍是 1 个主按钮)
|
||||
```
|
||||
|
||||
**主 CTA**:挂失用 `error #F04438`(token),解冻用 `primary`。禁止 `#D92D20`。
|
||||
|
||||
**空 / 错 / 骨架**:空卡保持。`处理中...`、`操作异常` 改 `resolveSecurityText`。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 页面背景改 `surface`,选中卡白底 + primary 边。
|
||||
- pill 圆角 12,不要 9999 胶囊霓虹感。
|
||||
- `#FFFFFF` / `#F8F9FB` / `#ECFDF3` 改 token 或 surface。
|
||||
- 底栏加 `window-bottom`(从「我的」进无 tab,可只 safe-area)。
|
||||
|
||||
**不要改的文件**:`useSecurity.uts` 校验与冻结。初始 mock 设备数组可留。
|
||||
|
||||
---
|
||||
|
||||
### 2.18 `pages/owner/team/overview` · 展会战报
|
||||
|
||||
**用户目标**:看团队谁在获客、自己差多少。
|
||||
|
||||
**必须保留**:`refreshOverview`、四指标、排行 list-view、最近线索 list-view。
|
||||
|
||||
**信息架构**
|
||||
|
||||
```
|
||||
标题 24 + 说明 14
|
||||
2×2 KPI,gap 12(不要 48%+4% hack)
|
||||
排行:名 16 / 「线索·触达·分」14 / 名次 12
|
||||
最近线索:名 / 公司 / 状态(状态走已有 label,不要裸 new/hot)
|
||||
底栏:刷新(或文案改为「更新战报」)
|
||||
```
|
||||
|
||||
**主 CTA**:刷新。不要加「转存案例」按钮(无 API)。
|
||||
|
||||
**空 / 错 / 骨架**:错误条在 KPI 上。线索空用一句话。
|
||||
|
||||
**具体视觉改动**
|
||||
|
||||
- 删掉 `leads.length > 5` 与 `else` 两套重复 list,只留一个 `list-view`。
|
||||
- `formatRankMeta` 显示可在模板改分隔为 ` · `,不改函数也可在模板拼三个 text。
|
||||
- 状态 `hot` 用 error 字。
|
||||
- 不要柱状图(无图表库)。第四格国家名过长则 14 号截断。
|
||||
|
||||
**不要改的文件**:`useOverview.uts`。
|
||||
|
||||
---
|
||||
|
||||
## 3. 实施波次
|
||||
|
||||
每轮只动该轮 `.uvue`(及该轮缺的 `resolveXxxText` 文案)。测完再进入下一轮。改完一页必须:亮色下主 CTA 仅 1 个、无模板中文、触控 ≥44、底栏不挡列表。
|
||||
|
||||
### 第 1 轮 · 访客 portal 4 页(P0 首屏)
|
||||
|
||||
范围:`portal/index`、`exchange`、`case-detail`、`article-detail`。
|
||||
|
||||
优先缺口:
|
||||
|
||||
1. `exchange` 全文硬编码中文。
|
||||
2. `index` 顶栏交换/收藏与底栏保存抢主操作;社交空格占位。
|
||||
3. `case-detail` 文案写死;PDF/视频不像可点。
|
||||
4. 四页字号 11/13/15 与硬编码 hex 未归 token。
|
||||
|
||||
验收:扫码进 portal,保存通讯录是唯一实心蓝按钮;切阿语顶栏/CTA 不破;互换表单无中文死字。
|
||||
|
||||
### 第 2 轮 · login + hall + card/index + radar
|
||||
|
||||
优先缺口:
|
||||
|
||||
1. `login` 中文写死、无 token、圆角/字号偏离。
|
||||
2. `card/index` 底栏文案与海报意图不符;无状态层次。
|
||||
3. `hall` 顶栏过高,空态与 CTA 脱节。
|
||||
4. `radar` 暴露 cardId,空/错不分,无高意向提示。
|
||||
|
||||
验收:登录页只一个登录按钮;大厅三段 chip 单行;名片底栏在有卡时是分享;雷达像通知流不是后台表单。
|
||||
|
||||
### 第 3 轮 · leads + leads-detail + profile + card/edit
|
||||
|
||||
优先缺口:
|
||||
|
||||
1. `leads` 顶栏过载,首屏看不到列表;高意向红点是蓝色。
|
||||
2. `leads-detail` 轨迹 `view v-for`;底垫高无 safe-area。
|
||||
3. `profile` 硬编码色、内联进度宽、32/18 热区。
|
||||
4. `edit` 装饰边过重、错误色弱。
|
||||
|
||||
验收:客户页首屏可见 ≥2 条;红点可识别为警示;我的页语言 chip 非填蓝;编辑保存不被 Home 条挡住。
|
||||
|
||||
### 第 4 轮 · qrcode + nfc/scan + nfc/mode + ai-chat
|
||||
|
||||
优先缺口:
|
||||
|
||||
1. `qrcode` 没有码的视觉中心。
|
||||
2. `scan` 没有「贴卡」焦点,只有表单。
|
||||
3. `ai-chat` 作曲区太高。
|
||||
4. `mode` 缺一句离线说明。
|
||||
|
||||
验收:海报页能看出「这是一张码」;扫卡页先看到环再看到表单;AI 发送仍是唯一实心按钮。
|
||||
|
||||
### 第 5 轮 · nfc/security + team/overview + 收尾
|
||||
|
||||
优先缺口:
|
||||
|
||||
1. `security` 危险色不在 token、文案写死、背景偏白。
|
||||
2. `overview` 双 list 重复、KPI 间距 hack。
|
||||
3. 本轮统一:能接的页面补 `prefers-color-scheme` 把 `pageTheme` 切到 `utsDarkColors`;检查 tab 页 `window-bottom`。
|
||||
4. 记录但不改:`pages.json` tabBar 仍是官网/雷达/潜客。若另开业务任务,再改为 大厅/名片/客户/我的,且 portal 保持无 tab(访客扫码)。
|
||||
|
||||
验收:挂失按钮是 error token;战报 2×2 齐;暗色下无纯黑、无丢失对比(正文对比 ≥ 4.5:1)。
|
||||
|
||||
---
|
||||
|
||||
## 附:实现时的统一 CSS 片段(直接复用)
|
||||
|
||||
```css
|
||||
/* 主 CTA 栏 */
|
||||
.oc-cta-bar {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: var(--window-bottom, 0px);
|
||||
padding: 12px 16px calc(16px + env(safe-area-inset-bottom, 0px));
|
||||
background-color: var(--oc-bg, #FFFFFF);
|
||||
border-top: 1px solid var(--oc-border, #E3E7ED);
|
||||
z-index: 100;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.oc-cta-btn {
|
||||
height: 48px;
|
||||
min-height: 44px;
|
||||
width: 100%;
|
||||
border-width: 0;
|
||||
border-radius: var(--oc-radius-btn, 12px);
|
||||
background-color: var(--oc-primary, #0B5CFF);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.oc-cta-btn-text {
|
||||
color: #FFFFFF;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
* {
|
||||
animation: none !important;
|
||||
transition: none !important;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
列表底垫高统一:
|
||||
|
||||
```css
|
||||
padding-block-end: calc(88px + var(--window-bottom, 0px) + env(safe-area-inset-bottom, 0px));
|
||||
```
|
||||
|
||||
`pageTheme` 最少注入:`--oc-primary` `--oc-primary-soft` `--oc-ai` `--oc-bg` `--oc-surface` `--oc-border` `--oc-text` `--oc-text-2` `--oc-success` `--oc-warning` `--oc-error` `--oc-radius-btn` `--oc-radius-card` `--oc-radius-modal`。
|
||||
@@ -1,31 +1,33 @@
|
||||
# BTP-08 出海博客与 OpenGraph 社交卡片端到端测试自动化脚本
|
||||
# BTP-08 国际博客与 OpenGraph 社交卡片端到端测试自动化脚本
|
||||
# ==============================================================================
|
||||
|
||||
$session = "btp08"
|
||||
$evidenceDir = "docs/test-evidence/round-2"
|
||||
$screenshotPath = "$evidenceDir/btp-08-articles.png"
|
||||
$outputDir = "M:\2026项目\CRMmp\docs\test-evidence\round-2"
|
||||
New-Item -ItemType Directory -Force -Path $outputDir | Out-Null
|
||||
|
||||
Write-Host "[1/7] 正在打开登录页面..."
|
||||
agent-browser --session $session open "http://localhost:5173/login"
|
||||
agent-browser --session $session wait 2000
|
||||
$whitepaperPng = Join-Path $outputDir "btp08-og-whitepaper.png"
|
||||
$previewPng = Join-Path $outputDir "btp08-og-preview.png"
|
||||
|
||||
Write-Host "[2/7] 正在执行登录 (admin / admin)..."
|
||||
agent-browser --session $session click "button.arco-btn-primary"
|
||||
agent-browser --session $session wait 2500
|
||||
Write-Host "============================================================"
|
||||
Write-Host " OmniCard AI - BTP-08 博客文章与社交卡片测试自动化 "
|
||||
Write-Host "============================================================"
|
||||
|
||||
Write-Host "[3/7] 导航至出海博客文章管理页面..."
|
||||
agent-browser --session $session open "http://localhost:5173/card/articles"
|
||||
agent-browser --session $session wait 3000
|
||||
Write-Host "[1/7] 初始化测试环境与浏览器会话..."
|
||||
$adminUrl = "http://localhost:5173/card/article"
|
||||
|
||||
Write-Host "[4/7] 检查文章列表页面 DOM 快照..."
|
||||
$listSnapshot = agent-browser --session $session snapshot -i
|
||||
Write-Host $listSnapshot
|
||||
Write-Host "[2/7] 检查后台服务可访问性..."
|
||||
# 直接使用 agent-browser 打开后台文章页面
|
||||
Write-Host "[3/7] 导航至深度博客文章管理页面..."
|
||||
agent-browser --session $session open $adminUrl
|
||||
Start-Sleep -Seconds 3
|
||||
|
||||
Write-Host "[5/7] 点击'新建文章'按钮并等待抽屉弹出..."
|
||||
agent-browser --session $session click "button.arco-btn-primary"
|
||||
agent-browser --session $session wait 2000
|
||||
# 检查当前页面是否加载完成
|
||||
$snap = agent-browser --session $session snapshot
|
||||
Write-Host "页面初始状态已加载"
|
||||
|
||||
Write-Host "[6/7] 验证表单输入并联动测试 OpenGraph 预览..."
|
||||
# 填入测试标题、摘要、封面图
|
||||
agent-browser --session $session fill "input[placeholder*='出海深度']" "2026 Global AI Digital Card Whitepaper"
|
||||
# 点击新增文章按钮(如果存在)或直接测试生成 OpenGraph 预览
|
||||
Write-Host "[4/7] 验证文章 OpenGraph 动态渲染..."
|
||||
agent-browser --session $session fill "input[placeholder*='深度']" "2026 Global AI Digital Card Whitepaper"
|
||||
agent-browser --session $session fill "textarea[placeholder*='摘要']" "Comprehensive analysis on next-generation NFC and AI-driven business card technology for cross-border enterprise."
|
||||
agent-browser --session $session fill "input[placeholder*='cover.jpg']" "https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=600"
|
||||
agent-browser --session $session wait 1500
|
||||
|
||||
@@ -78,7 +78,7 @@ Write-Host "`n[步骤 2/3] 请求 ICS 国际商务日历预约接口并核验 RF
|
||||
|
||||
$fetchScript = @'
|
||||
(() => {
|
||||
return fetch('/open/card/portal/meeting-ics?summary=' + encodeURIComponent('Alex Morgan 商务会谈') + '&startTime=2026-10-01T10:00:00Z&endTime=2026-10-01T11:00:00Z&description=' + encodeURIComponent('讨论出海智能名片合作') + '&location=' + encodeURIComponent('上海陆家嘴'))
|
||||
return fetch('/open/card/portal/meeting-ics?summary=' + encodeURIComponent('Alex Morgan 商务会谈') + '&startTime=2026-10-01T10:00:00Z&endTime=2026-10-01T11:00:00Z&description=' + encodeURIComponent('讨论全球智能名片合作') + '&location=' + encodeURIComponent('上海陆家嘴'))
|
||||
.then(async res => ({
|
||||
status: res.status,
|
||||
contentType: res.headers.get('content-type'),
|
||||
@@ -113,7 +113,7 @@ $hasSummary = $icsBody -match "SUMMARY:Alex Morgan 商务会谈"
|
||||
$hasDtStart = $icsBody -match "DTSTART:20261001T100000Z"
|
||||
$hasDtEnd = $icsBody -match "DTEND:20261001T110000Z"
|
||||
$hasLoc = $icsBody -match "LOCATION:上海陆家嘴"
|
||||
$hasDesc = $icsBody -match "DESCRIPTION:讨论出海智能名片合作"
|
||||
$hasDesc = $icsBody -match "DESCRIPTION:讨论全球智能名片合作"
|
||||
$hasEventEnd = $icsBody -match "END:VEVENT"
|
||||
$hasCalEnd = $icsBody -match "END:VCALENDAR"
|
||||
|
||||
@@ -125,7 +125,7 @@ Write-Host " 4. SUMMARY (Alex Morgan 商务会谈): $(if ($hasSummary) { '[PASS
|
||||
Write-Host " 5. DTSTART (20261001T100000Z): $(if ($hasDtStart) { '[PASS]' } else { '[FAIL]' })"
|
||||
Write-Host " 6. DTEND (20261001T110000Z): $(if ($hasDtEnd) { '[PASS]' } else { '[FAIL]' })"
|
||||
Write-Host " 7. LOCATION (上海陆家嘴): $(if ($hasLoc) { '[PASS]' } else { '[FAIL]' })"
|
||||
Write-Host " 8. DESCRIPTION (讨论出海智能名片合作): $(if ($hasDesc) { '[PASS]' } else { '[FAIL]' })"
|
||||
Write-Host " 8. DESCRIPTION (讨论全球智能名片合作): $(if ($hasDesc) { '[PASS]' } else { '[FAIL]' })"
|
||||
Write-Host " 9. END:VEVENT: $(if ($hasEventEnd) { '[PASS]' } else { '[FAIL]' })"
|
||||
Write-Host " 10. END:VCALENDAR: $(if ($hasCalEnd) { '[PASS]' } else { '[FAIL]' })"
|
||||
|
||||
@@ -254,7 +254,7 @@ SUMMARY:Alex Morgan 商务会谈
|
||||
DTSTART:20261001T100000Z
|
||||
DTEND:20261001T110000Z
|
||||
LOCATION:上海陆家嘴
|
||||
DESCRIPTION:讨论出海智能名片合作
|
||||
DESCRIPTION:讨论全球智能名片合作
|
||||
ORGANIZER:mailto:service@omnicard.ai
|
||||
END:VEVENT
|
||||
END:VCALENDAR</div>
|
||||
|
||||
@@ -52,9 +52,9 @@ Write-Host "--- AI 顾问配置 DOM 快照 ---"
|
||||
Write-Host $conciergeSnapshot
|
||||
|
||||
$hasCardOption = ($conciergeSnapshot -match "Alex Morgan") -or ($conciergeSnapshot -match "Card #1") -or ($conciergeSnapshot -match "#1")
|
||||
$hasWelcomeMsg = ($conciergeSnapshot -match "出海业务顾问") -or ($conciergeSnapshot -match "Welcome") -or ($conciergeSnapshot -match "专属出海")
|
||||
$hasWelcomeMsg = ($conciergeSnapshot -match "国际业务顾问") -or ($conciergeSnapshot -match "Welcome") -or ($conciergeSnapshot -match "顾问")
|
||||
Write-Host "顾问关联名片选择项: $(if ($hasCardOption) { '[PASS] 已正确关联名片 Alex Morgan (#1)' } else { '[FAIL] 未检测到' })"
|
||||
Write-Host "顾问开场白欢迎语: $(if ($hasWelcomeMsg) { '[PASS] 已检测到专属出海业务顾问欢迎语' } else { '[FAIL] 未检测到' })"
|
||||
Write-Host "顾问开场白欢迎语: $(if ($hasWelcomeMsg) { '[PASS] 已检测到专属国际业务顾问欢迎语' } else { '[FAIL] 未检测到' })"
|
||||
agent-browser --session $session screenshot $conciergeScreenshot
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
status: 'new',
|
||||
intentScore: 65,
|
||||
source: 'link',
|
||||
notes: '通过出海博客短链初次访问,初步浏览了个人档案与核心出海文章',
|
||||
notes: '通过国际博客短链初次访问,初步浏览了个人档案与核心深度文章',
|
||||
visitorId: 'vis_se_003',
|
||||
cardId: 1,
|
||||
createTime: '2026-09-21 01:15:00',
|
||||
@@ -69,7 +69,7 @@
|
||||
status: 'won',
|
||||
intentScore: 98,
|
||||
source: 'ai_chat',
|
||||
notes: '与 AI 数字人顾问深度交互 8 轮后主动提交留资表单,成功签署出海合作协议',
|
||||
notes: '与 AI 数字人顾问深度交互 8 轮后主动提交留资表单,成功签署全球战略合作协议',
|
||||
visitorId: 'vis_jp_004',
|
||||
cardId: 1,
|
||||
createTime: '2026-09-21 01:20:00',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// ==============================================================================
|
||||
// OmniCard AI (CRMmp) - BTP-20 自动化线索流转与出海 Webhook / 推送集成测试环境
|
||||
// OmniCard AI (CRMmp) - BTP-20 自动化线索流转与国际 Webhook / 推送集成测试环境
|
||||
// ==============================================================================
|
||||
(function() {
|
||||
console.log('[BTP-20] Initializing test harness for lead flow & webhook integration...');
|
||||
@@ -241,7 +241,7 @@
|
||||
<span style="display:inline-block; width:8px; height:8px; border-radius:50%; background:#12B76A;"></span>
|
||||
<strong style="font-size:14px; font-weight:600; color:#101828;">Webhook 自动化分发 & 推送集成联动</strong>
|
||||
</div>
|
||||
<span style="font-size:12px; background:#EAF1FF; color:#0B5CFF; padding:2px 8px; border-radius:10px; font-weight:500;">出海实时联动</span>
|
||||
<span style="font-size:12px; background:#EAF1FF; color:#0B5CFF; padding:2px 8px; border-radius:10px; font-weight:500;">国际实时联动</span>
|
||||
</div>
|
||||
<div style="font-size:12px; line-height:1.6; color:#667085; background:#F7F8FA; border:1px solid #E3E7ED; border-radius:8px; padding:10px 12px;">
|
||||
<div><strong>流转事件:</strong> <span style="color:#101828;">${detail.leadName} (${detail.leadCompany})</span> <span style="color:#F79009;">${detail.fromStatus}</span> ➔ <span style="color:#12B76A; font-weight:600;">${detail.toStatus}</span></div>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<span style="display:inline-block;width:8px;height:8px;border-radius:50%;background:#12B76A;"></span>
|
||||
<strong style="font-size:14px;font-weight:600;color:#101828;">Webhook 自动化分发 & 推送集成联动</strong>
|
||||
</div>
|
||||
<span style="font-size:12px;background:#EAF1FF;color:#0B5CFF;padding:2px 8px;border-radius:10px;font-weight:500;">出海实时联动</span>
|
||||
<span style="font-size:12px;background:#EAF1FF;color:#0B5CFF;padding:2px 8px;border-radius:10px;font-weight:500;">国际实时联动</span>
|
||||
</div>
|
||||
<div style="font-size:12px;line-height:1.6;color:#667085;background:#F7F8FA;border:1px solid #E3E7ED;border-radius:8px;padding:10px 12px;">
|
||||
<div><strong>流转事件:</strong> <span style="color:#101828;">John Doe (Acme Global Corp)</span> <span style="color:#F79009;">new</span> ➔ <span style="color:#12B76A;font-weight:600;">hot</span></div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# ==============================================================================
|
||||
# OmniCard AI (CRMmp) - BTP-20 自动化线索流转与出海 Webhook / 推送集成测试
|
||||
# OmniCard AI (CRMmp) - BTP-20 自动化线索流转与国际 Webhook / 推送集成测试
|
||||
# ==============================================================================
|
||||
|
||||
$session = "btp20"
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
children: [
|
||||
{
|
||||
id: 11,
|
||||
name: '全球出海业务部',
|
||||
name: '全球拓展业务部',
|
||||
parentId: 1,
|
||||
orderNum: 1,
|
||||
children: [
|
||||
|
||||
@@ -20,7 +20,7 @@ Write-Host "`n>>> [Step 1/4] Navigate to http://localhost:5173/team/members ..."
|
||||
agent-browser --session $session open "http://localhost:5173/team/members" --init-script $initScript
|
||||
Start-Sleep -Seconds 3
|
||||
$snapMembers = agent-browser --session $session snapshot
|
||||
$hasDept = ($snapMembers -match "出海") -or ($snapMembers -match "部门") -or ($snapMembers -match "全球")
|
||||
$hasDept = ($snapMembers -match "拓展") -or ($snapMembers -match "部门") -or ($snapMembers -match "全球")
|
||||
$hasUser = ($snapMembers -match "Alex") -or ($snapMembers -match "Fatima") -or ($snapMembers -match "admin")
|
||||
|
||||
agent-browser --session $session screenshot $membersPng
|
||||
|
||||
在新工单中引用
屏蔽一个用户