feat: brand 白名单下发(站点覆盖/租户头像/CORS) + widget/chat 客户端 key 租户化 + 会话站点标

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-12 22:26:15 +08:00
parent 49e2b476f5
commit bbc7bc520e
15 changed files with 570 additions and 93 deletions
+11 -13
View File
@@ -3,16 +3,16 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>HESUPIPE Support</title>
<title>AI Support</title>
<link rel="stylesheet" href="/static/css/style.css">
<script src="/static/js/theme.js"></script>
</head>
<body>
<div class="chat-container">
<div class="chat-header">
<div class="avatar"><span class="avatar-emoji">🤖</span><img class="avatar-img" alt="" src="/static/kefu-small.png"></div>
<div class="avatar"><span class="avatar-emoji">🤖</span><img class="avatar-img" alt="" src="/api/public/avatar"></div>
<div class="info">
<h1>HESUPIPE Support</h1>
<h1>AI Support</h1>
<div class="availability">Online now - Usually replies in minutes</div>
</div>
<!-- <div class="actions">
@@ -33,11 +33,13 @@
<div class="help-description">Ask about pipe specifications, quotations, MOQ, shipping and delivery.</div>
</div>
<div class="help-actions">
<a href="https://wa.me/+8615937108317" target="_blank" class="call-btn whatsapp-btn">
<!-- Task 10: 联系按钮/标题/欢迎语/话题/隐私链接由 chat.js 从
/api/public/brand 填充(值缺位隐藏),出厂不再内嵌租户品牌 -->
<a target="_blank" rel="noopener" class="call-btn whatsapp-btn">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg>
<span>WhatsApp</span>
</a>
<a href="mailto:hesu@hesuu.com" class="call-btn email-btn">
<a class="call-btn email-btn">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
<span>Email</span>
</a>
@@ -48,7 +50,7 @@
<div class="chat-separator"></div>
<div class="chat-messages" id="messages">
<div class="message assistant">
<div class="bubble">What kind of piping project are you working on?</div>
<div class="bubble"></div>
</div>
</div>
@@ -56,14 +58,10 @@
<span></span><span></span><span></span>
</div>
<!-- POPULAR TOPICS 区块 -->
<!-- POPULAR TOPICS 区块(按钮由 chat.js 按 brand.topics 生成) -->
<div class="popular-topics-fixed" id="popular-topics">
<div class="popular-topics-label">POPULAR TOPICS</div>
<div class="popular-topics-grid">
<button class="popular-topic-btn" data-topic="Get Quotation">Get Quotation</button>
<button class="popular-topic-btn" data-topic="Pipe Specifications">Pipe Specifications</button>
<button class="popular-topic-btn" data-topic="Delivery & Shipping">Delivery &amp; Shipping</button>
</div>
<div class="popular-topics-grid"></div>
</div>
<div class="chat-separator-topics"></div>
@@ -76,7 +74,7 @@
</button>
</div>
</div>
<div class="chat-footer"><span class="footer-left">By chatting, you agree to our <a href="https://hesupipe.com/privacy-policy/" target="_blank" rel="noopener">privacy policy</a>.</span></div>
<div class="chat-footer"><span class="footer-left">By chatting, you agree to our <a target="_blank" rel="noopener">privacy policy</a>.</span></div>
</div>
<script src="/static/js/chat.js"></script>