|
|
<!DOCTYPE html><html lang="zh-CN">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <link rel="shortcut icon" href="dbqb_favicon.ico" /> <link rel="Bookmark" href="dbqb_favicon.ico" /> <meta http-equiv="keywords" content="夺宝奇兵,homilychart,homilylink,DeepChart"> <meta http-equiv="description" content="HomilyLink"> <title>夺宝奇兵免费体验</title> <!-- 引入外部资源 --> <script src="https://cdn.tailwindcss.com?v=3.3.5"></script> <link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- 基础样式配置 --> <script> tailwind.config = { theme: { extend: { colors: { primary: '#3B82F6', secondary: '#8B5CF6' } } } } </script>
<style type="text/tailwindcss"> @layer utilities { .card-hover { @apply transition-all duration-300 hover:shadow-xl; } .btn-effect { @apply relative overflow-hidden transition-all duration-300; } .btn-effect::after { content: ''; @apply absolute top-0 left-[-100%] w-full h-full bg-white/20 transform skew-x-12 transition-all duration-500; } .btn-effect:hover::after { @apply left-[100%]; } .input-focus { @apply focus:border-primary focus:ring-2 focus:ring-primary/20 focus:outline-none; } .form-icon-container { @apply absolute inset-y-0 left-0 flex items-center pl-3.5 pointer-events-none z-10; } .form-icon { @apply text-gray-500 text-base; } .form-group { @apply mb-5 relative; } .form-label { @apply block text-gray-700 font-medium mb-2; } .form-control { @apply w-full pl-10 py-3 border border-gray-300 rounded-lg input-focus transition-colors; height: 54px; } .form-select { @apply form-control pr-8 appearance-none bg-white; background-image: url('data:image/svg+xml;charset=US-ASCII,<svg width=\"20\" height=\"20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\" fill=\"%23333\"/></svg>'); background-repeat: no-repeat; background-position: right 0.5rem center; background-size: 1em; } } </style>
<style> @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); } }
.fade-in { animation: fadeIn 0.5s ease-out forwards; }
.delay-100 { animation-delay: 0.1s; }
.delay-200 { animation-delay: 0.2s; }
.delay-300 { animation-delay: 0.3s; }
input.form-control, select.form-select { box-sizing: border-box; vertical-align: middle; }
select.form-select { -webkit-appearance: none; -moz-appearance: none; appearance: none; }
.loading-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.6); display: flex; align-items: center; justify-content: center; z-index: 9999; flex-direction: column; }
.spinner { width: 50px; height: 50px; border: 4px solid #f3f3f3; border-top: 4px solid #3B82F6; border-radius: 50%; animation: spin 1s linear infinite; }
@keyframes spin { 0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); } }
.loading-text { color: white; margin-top: 15px; font-size: 16px; } </style></head>
<body class="bg-gray-50 text-gray-800 font-sans"> <!-- 导航栏 --> <header class="fixed top-0 left-0 right-0 bg-white/95 shadow-sm z-50"> <div class="container mx-auto px-4 py-4 flex justify-between items-center"> <div class="flex items-center space-x-2"> <div class="w-10 h-10 rounded-lg bg-gradient-to-r from-primary to-secondary flex items-center justify-center"> <img alt="夺宝奇兵" src="https://hc.homilychart.com/hc/250121/img/20230711171637.png" style="width: 40px;height: 40px;"> </div> <span class="text-xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-primary to-secondary">夺宝奇兵免费体验</span> </div>
<nav class="hidden md:flex items-center space-x-8"> <a href="hkhcdbqb.html" class="hover:text-primary transition-colors">首页</a> <a href="hkhcdbqbDownload.html" class="hover:text-primary transition-colors">下载中心</a> <a href="hkhcdbqbGuide.html" class="text-primary font-medium">操作指南</a> <a href="https://wa.me/85269518757?text=我要了解夺宝奇兵" target="_blank" class="px-5 py-2 rounded-full bg-gradient-to-r from-primary to-secondary text-white hover:shadow-lg transition-all">联系我们</a> </nav>
<button id="mobileMenuBtn" class="md:hidden text-xl"> <i class="fa fa-bars"></i> </button> </div>
<div id="mobileMenu" class="md:hidden hidden bg-white border-t"> <div class="container mx-auto px-4 py-3 flex flex-col space-y-3"> <a href="hkhcdbqb.html" class="py-2 hover:text-primary transition-colors">首页</a> <a href="hkhcdbqbDownload.html" class="py-2 hover:text-primary transition-colors">下载中心</a> <a href="hkhcdbqbGuide.html" class="py-2 text-primary">操作指南</a> <a href="https://wa.me/85269518757?text=我要了解夺宝奇兵" target="_blank" class="py-2 mt-2 rounded-full bg-gradient-to-r from-primary to-secondary text-white text-center">联系我们</a> </div> </div> </header>
<!-- 主要内容 --> <main class="pt-28 pb-16 px-4"> <div class="container mx-auto max-w-6xl"> <div class="text-center mb-12 fade-in"> <h1 class="text-[clamp(1.8rem,4vw,2.5rem)] font-bold mb-4">夺宝奇兵+内部班级课程<br />免费体验</h1> <p class="text-gray-600 max-w-2xl mx-auto">AD粉报名即可获得体验的机会!<br />超级云脑 夺宝利剑 AI预测大模型</p> </div>
<div class="grid grid-cols-1 lg:grid-cols-5 gap-8 max-w-5xl mx-auto"> <!-- 注册表单 --> <div class="lg:col-span-3 fade-in delay-100"> <div class="bg-white rounded-xl shadow-md p-6 md:p-8 card-hover"> <!-- 注意:移除了 action 和 method,由JS处理 --> <form id="registrationForm"> <div class="form-group"> <label class="form-label">姓名 <span class="text-red-500">*</span></label> <div class="relative"> <div class="form-icon-container"> <i class="form-icon fa fa-user"></i> </div> <input type="text" id="unameinfo" name="unameinfo" class="form-control" autocomplete="off" placeholder="请输入您的姓名"> </div> <div id="nameError" class="text-red-500 text-sm mt-1" style="display: none;">请输入您的姓名 </div> </div>
<div class="form-group"> <label class="form-label">手机号码 <span class="text-red-500">*</span></label> <input type="hidden" name="zbtype" id="zbtype" value="2"> <div class="flex gap-3"> <div class="w-30 relative"> <div class="form-icon-container"> <i class="form-icon fa fa-globe"></i> </div> <select name="countryinfo" id="countryinfo" class="form-select"> <option value="+65">+65 新加坡</option> <option value="+60">+60 马来西亚</option> <option value="+852">+852 香港</option> <option value="+1" selected="selected">+1 美国</option> <option value="+62">+62 印尼</option> <option value="+61">+61 澳大利亚</option> <option value="+673">+673 文莱</option> <option value="+886">+886 台湾</option> <option value="+86">+86 中国</option> <option value="+0">+0 其他</option> <option value="+64">+64 新西兰</option> <option value="+44">+44 英国</option> <option value="+81">+81 日本</option> <option value="+49">+49 德国</option> <option value="+82">+82 韩国</option> <option value="+84">+84 越南</option> <option value="+971">+971 阿联酋</option> <option value="+45">+45 丹麦</option> <option value="+853">+853 澳门</option> <option value="+66">+66 泰国</option> <option value="+91">+91 印度</option> <option value="+41">+41 瑞士</option> <option value="+358">+358 芬兰</option> <option value="+33">+33 法国</option> <option value="+63">+63 菲律宾</option> <option value="+31">+31 荷兰</option> <option value="+46">+46 瑞典</option> <option value="+34">+34 西班牙</option> <option value="+54">+54 阿根廷</option> <option value="+39">+39 意大利</option> <option value="+7">+7 俄罗斯</option> <option value="+420">+420 捷克</option> </select> </div>
<div class="flex-1 relative"> <div class="form-icon-container"> <i class="form-icon fa fa-whatsapp"></i> </div> <input type="tel" id="umoblie" name="umoblie" class="form-control" onkeyup="value=value.replace(/[^\d]/g,'').replace(/^0/g,'')" autocomplete="off" placeholder="不带国家编号的纯机号"> </div> </div> <div id="phoneError" class="text-red-500 text-sm mt-1" style="display: none;"> 请输入正确的手机号(纯手机号,不含国家编号)</div> </div>
<div class="form-group"> <label class="form-label">微信ID</label> <div class="relative"> <div class="form-icon-container"> <i class="form-icon fa fa-weixin"></i> </div> <input type="text" id="uwechat" name="uwechat" class="form-control" placeholder="微信ID(如没有WhatsApp)" autocomplete="off"> </div> </div>
<div class="form-group mb-6"> <label class="form-label">邮箱地址 <span class="text-red-500">*</span></label> <div class="relative"> <div class="form-icon-container"> <i class="form-icon fa fa-envelope"></i> </div> <input type="email" id="uemail" name="uemail" class="form-control" autocomplete="off" placeholder="请输入您的邮箱地址"> </div> <div id="emailError" class="text-red-500 text-sm mt-1" style="display: none;"> 请输入您的有效邮箱地址</div> </div>
<button type="submit" id="submitBtn" class="btn-effect w-full py-3 rounded-lg bg-gradient-to-r from-primary to-secondary text-white font-medium text-lg"> <i class="fa fa-check-circle mr-2"></i>提交注册 </button>
<p class="text-center text-gray-500 text-sm mt-4"> 如需帮助?<a href="https://wa.me/85269518757?text=我要体验DEEPCHART" target="_blank" class="text-primary hover:underline">点击发WhatsApp</a> </p> </form> </div> </div>
<!-- 注册说明 --> <div class="lg:col-span-2 fade-in delay-200"> <div class="bg-white rounded-xl shadow-md p-6 md:p-8 h-full card-hover"> <h3 class="text-xl font-bold mb-5 flex items-center"> <i class="fa fa-info-circle text-primary mr-2"></i>注册说明 </h3>
<div class="space-y-4 text-gray-600"> <div class="flex"> <div class="w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-primary flex-shrink-0 mr-3 mt-0.5"> <i class="fa fa-user"></i> </div> <p>请填写方便称呼您的姓名信息。</p> </div>
<div class="flex"> <div class="w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-primary flex-shrink-0 mr-3 mt-0.5"> <i class="fa fa-whatsapp"></i> </div> <p>手机号码最好支持WhatsApp联系。</p> </div>
<div class="flex"> <div class="w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-primary flex-shrink-0 mr-3 mt-0.5"> <i class="fa fa-weixin"></i> </div> <p>微信的联系方式我们也支持。</p> </div>
<div class="flex"> <div class="w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-primary flex-shrink-0 mr-3 mt-0.5"> <i class="fa fa-envelope"></i> </div> <p>邮箱作为联系您的备用联系方式。</p> </div>
<div class="mt-6 pt-5 border-t border-gray-100"> <h4 class="font-semibold mb-3 text-gray-700">温馨提示</h4> <p class="text-sm"> AD粉可以进入HomilyLink内部班级群<br />免费学习。<br /> 免费体验包括:夺宝奇兵三大模板<br /> 铁粉可以体验部分DeepChart功能! </p> </div>
<div class="mt-6 pt-5 border-t border-gray-100"> <h4 class="font-semibold mb-3 text-gray-700">郑重声明</h4> <p class="text-sm">我们将严格保护您的个人信息安全,绝对不会向第三方泄露。</p> </div> </div> </div> </div> </div> </div> </main>
<!-- 页脚 --> <footer class="bg-gray-900 text-white py-10 px-4 mt-16"> <div class="container mx-auto max-w-6xl text-center"> <div class="mb-6"> <div class="inline-flex items-center space-x-2"> <div class="w-10 h-10 rounded-lg gradient-bg flex items-center justify-center"> <img alt="夺宝奇兵" src="https://hc.homilychart.com/hc/250121/img/20230711171637.png" style="width: 40px;height: 40px;"> </div> <span class="font-bold">夺宝奇兵免费体验</span> </div> </div> <p class="text-gray-400 text-sm mb-4">Copyright 2026.Capitalmaster Pte Ltd All Rights Reserved.</p> </div> </footer>
<!-- 交互脚本 - 使用 type="module" 保留原有API导入 --> <script type="module"> // 从外部文件导入 registerMemberApi 函数(保持原有方式) import { registerMemberApi } from './src/api/hkmember.js';
// 获取表单元素 const form = document.getElementById('registrationForm'); const submitBtn = document.getElementById('submitBtn');
// 错误提示元素 const nameError = document.getElementById('nameError'); const phoneError = document.getElementById('phoneError'); const emailError = document.getElementById('emailError');
// 隐藏所有错误提示 function hideAllErrors() { if (nameError) nameError.style.display = 'none'; if (phoneError) phoneError.style.display = 'none'; if (emailError) emailError.style.display = 'none'; }
// 显示错误 function showError(element) { if (element) element.style.display = 'block'; }
// 邮箱校验 function isValidEmail(email) { if (!email || email.trim() === '') return false; const emailRegex = /^[^\s@]+@([^\s@]+\.)+[^\s@]+$/; if (!emailRegex.test(email)) return false; if (email.length > 254) return false; if (email.includes('..')) return false; return true; }
// 手机号校验 function isValidPhone(phone) { if (!phone || phone.trim() === '') return false; const digitsOnly = phone.replace(/[^\d]/g, ''); if (digitsOnly.length < 4 || digitsOnly.length > 20) return false; return true; }
// 清理手机号 function cleanPhoneNumber(phone) { if (!phone) return ''; let cleaned = phone.replace(/[^\d]/g, ''); cleaned = cleaned.replace(/^(00)/, ''); return cleaned; }
// 显示加载状态 function showLoading() { const loadingDiv = document.createElement('div'); loadingDiv.id = 'loadingOverlay'; loadingDiv.className = 'loading-overlay'; loadingDiv.innerHTML = '<div class="spinner"></div><div class="loading-text">正在提交注册信息...</div>'; document.body.appendChild(loadingDiv);
if (submitBtn) { submitBtn.disabled = true; submitBtn.style.opacity = '0.6'; submitBtn.innerHTML = '<i class="fa fa-spinner fa-spin mr-2"></i>提交中...'; } }
// 隐藏加载状态 function hideLoading() { const loadingDiv = document.getElementById('loadingOverlay'); if (loadingDiv) loadingDiv.remove();
if (submitBtn) { submitBtn.disabled = false; submitBtn.style.opacity = '1'; submitBtn.innerHTML = '<i class="fa fa-check-circle mr-2"></i>提交注册'; } }
// 使用 GET 方式跳转到提示页面(避免 Nginx 405 错误) function redirectToSuccessPage(formData) { const params = new URLSearchParams(); params.set('unameinfo', formData.name); params.set('countryinfo', formData.countryCode); params.set('umoblie', formData.phone); params.set('uemail', formData.email); if (formData.wechat) params.set('uwechat', formData.wechat); params.set('zbtype', formData.zbtype);
// GET 方式跳转,不会出现 405 错误 window.location.href = `./hkRegisterTip.html?${params.toString()}`; }
// 表单提交处理 - 先调用API保存数据,然后GET跳转 form.addEventListener('submit', async function (e) { // 阻止默认提交 e.preventDefault();
// 前端校验 hideAllErrors();
const name = document.getElementById('unameinfo').value.trim(); const countryCode = document.getElementById('countryinfo').value; const phoneRaw = document.getElementById('umoblie').value.trim(); const wechat = document.getElementById('uwechat').value.trim(); const email = document.getElementById('uemail').value.trim(); const zbtype = document.getElementById('zbtype').value;
let isValid = true;
if (!name) { showError(nameError); isValid = false; }
if (!phoneRaw || !isValidPhone(phoneRaw)) { showError(phoneError); isValid = false; }
if (!email || !isValidEmail(email)) { showError(emailError); isValid = false; }
if (!isValid) { return; }
// 清理手机号 const cleanedPhone = cleanPhoneNumber(phoneRaw);
// 组装请求参数(与原来保持一致) const requestData = { name: name, code: countryCode, tel: cleanedPhone, email: email };
if (wechat) { requestData.weChat = wechat; }
// 保存表单数据用于跳转 const formData = { name: name, countryCode: countryCode, phone: cleanedPhone, wechat: wechat, email: email, zbtype: zbtype };
// 显示加载状态 showLoading();
try { // 调用原有的 API 接口保存数据 const result = await registerMemberApi(requestData);
if (result.code === 200) { // API调用成功,GET方式跳转到提示页面 redirectToSuccessPage(formData); } else { hideLoading(); alert('注册失败:' + (result.msg || '未知错误,请稍后重试')); } } catch (error) { console.error('提交注册出错:', error); hideLoading();
// API失败时,询问是否继续(数据未保存到后端) if (confirm('网络错误,注册失败。请检查网络后重试。\n\n是否返回表单重新提交?')) { // 用户选择重试,停留在当前页面 return; } } });
// 移动端菜单切换 const mobileMenuBtn = document.getElementById('mobileMenuBtn'); if (mobileMenuBtn) { mobileMenuBtn.addEventListener('click', function () { const menu = document.getElementById('mobileMenu'); if (menu) { menu.classList.toggle('hidden'); const icon = this.querySelector('i'); if (icon.classList.contains('fa-bars')) { icon.classList.replace('fa-bars', 'fa-times'); } else { icon.classList.replace('fa-times', 'fa-bars'); } } }); }
// 页面加载动画 document.addEventListener('DOMContentLoaded', function () { document.querySelectorAll('.fade-in').forEach(el => { el.style.opacity = '1'; }); });
// 输入框实时验证 const nameInput = document.getElementById('unameinfo'); const phoneInput = document.getElementById('umoblie'); const emailInput = document.getElementById('uemail');
if (nameInput) { nameInput.addEventListener('blur', function () { if (this.value.trim()) nameError.style.display = 'none'; }); }
if (phoneInput) { phoneInput.addEventListener('blur', function () { if (this.value.trim() && isValidPhone(this.value.trim())) phoneError.style.display = 'none'; }); }
if (emailInput) { emailInput.addEventListener('blur', function () { if (this.value.trim() && isValidEmail(this.value.trim())) emailError.style.display = 'none'; }); } </script></body>
</html>
|