# WhatsApp / Email 动态配置 Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 将写死的 WhatsApp / Email 联系方式改为通过 `
```
刷新页面,再次执行 Step 6 的 Console 命令。
Expected:
- `whatsapp-btn` → `https://wa.me/8613800138000`
- `email-btn` → `mailto:demo@hesu-auto.com`
覆盖路径验证通过后,**先不要回退**——这个改动正好是 Task 3 的成果,直接进入提交。
> 注:即使这里手滑回退了也无妨——Task 3 Step 1 会重新把它加回来。本 Task 的提交只包含 `widget.js`,不含 `widget-test.html`。
- [ ] **Step 8: 提交**
```bash
git add static/widget.js
git commit -m "$(cat <<'EOF'
feat(widget): WhatsApp/Email 改为 data-whatsapp/data-email 动态配置
组件读取自身
```
替换为(用与 Task 1 Step 7 一致的自定义演示值):
```html
```
> `chat.html:35` 与 `:39` 原有的静态 `href` **保留不动**——作为 `chat.js` 未执行时的 fallback(默认值),`chat.js` 启动后会覆盖为配置值。
- [ ] **Step 3: 手动验证——自定义值生效**
打开 `static/chat.html`(方式 A 或 B),DevTools Console 执行:
```js
[...document.querySelectorAll('a.whatsapp-btn, a.email-btn')].forEach(a => console.log(a.className, '->', a.href));
```
Expected:
- `call-btn whatsapp-btn` → `https://wa.me/8613800138000`
- `call-btn email-btn` → `mailto:demo@hesu-auto.com`
(chat.html 是 light DOM,不需要 shadowRoot。)
- [ ] **Step 4: 手动验证——回退默认值(临时)**
临时把 `chat.html:80` 的两个 data 属性删掉(恢复成 ``),刷新页面,再次执行 Step 3 的 Console 命令。
Expected:
- `whatsapp-btn` → `https://wa.me/+8619037179250`
- `email-btn` → `mailto:info@borderlesscar.com`
回退验证通过后,**把 data 属性加回去**(恢复 Step 2 的状态)。
- [ ] **Step 5: 提交**
```bash
git add static/js/chat.js static/chat.html
git commit -m "$(cat <<'EOF'
feat(chat): 独立页 WhatsApp/Email 改为 data-* 动态配置
chat.js 读取自身
```
若 Step 7 之后被改动过,恢复成上面这样。
- [ ] **Step 2: 全局终检——确认无残留写死联系方式(前端)**
Run: `grep -rn "wa.me/+8619037179250\|mailto:info@borderlesscar.com" static/widget.js static/js/chat.js`
Expected: **无输出**(两处运行时文件都已参数化)。
注:`static/chat.html:35` 和 `:39` 仍含默认值字符串,这是**有意保留的 fallback**,属正常。
- [ ] **Step 3: 更新测试清单文档**
在 `docs/test-checklist.md` 末尾追加一节(若文件不存在则新建并加标题 `# 测试清单`):
```markdown
## WhatsApp / Email 动态配置(2026-06-18)
- [ ] **默认值(未传属性)**:组件(widget-test.html 去掉 data 属性时)与独立页(chat.html 去掉 data 属性时)的 WhatsApp / Email 按钮分别指向 `https://wa.me/+8619037179250` 与 `mailto:info@borderlesscar.com`,与历史行为一致。
- [ ] **自定义值**:widget-test.html 传 `data-whatsapp` / `data-email` 后,组件内三处链接(面板 help-block 的 WhatsApp、面板 help-block 的 Email、邀请卡 WhatsApp、邀请卡 Email)均指向自定义地址。
- [ ] **独立页自定义值**:chat.html 传 `data-whatsapp` / `data-email` 后,两个按钮指向自定义地址。
- [ ] **空字符串**:`data-whatsapp=""` 等价于未传,回退默认值。
- [ ] **JS 未执行**:chat.html 在 JS 禁用 / 未执行时,静态 `href` 仍为默认值,不出现空链接。
```
- [ ] **Step 4: 提交**
```bash
git add static/widget-test.html docs/test-checklist.md
git commit -m "$(cat <<'EOF'
docs(test): widget-test 演示动态配置属性 + 补充测试清单
Co-Authored-By: Claude
EOF
)"
```
---
## 完成标准(Definition of Done)
- [ ] `static/widget.js` 与 `static/js/chat.js` 中不再有任何写死的 `wa.me/+8619037179250` / `mailto:info@borderlesscar.com`(grep 无输出)。
- [ ] 不传任何新属性时,所有联系方式链接与改动前完全一致(向后兼容)。
- [ ] 传入自定义 `data-whatsapp` / `data-email` 时,组件 3 处 + 独立页 2 处链接均指向自定义值。
- [ ] 3 个 commit 已提交,每个 commit 自包含、可独立验证。
- [ ] `docs/test-checklist.md` 已补充对应手动验证条目。
## 风险与回滚
- 风险极低:纯前端字符串替换 + 新增属性读取,不触碰 WebSocket、后端、样式。
- 回滚:`git revert` 对应 commit 即可;未传属性的部署本来就无任何行为变化。