Compare commits

...

4 Commits

Author SHA1 Message Date
zhaoruhui 21a9ce66d3 港股完整功能初版 14 hours ago
zhaoruhui aa6a910663 对接后台接口 17 hours ago
zhaoruhui bba9e41bec 修改跳转 18 hours ago
zhaoruhui 6f865890ee 港股基本的页面 2 days ago
  1. 2
      hcdbqb-guide.html
  2. 351
      hkLogiManagement.html
  3. 539
      hkRegister.html
  4. 270
      hkRegisterSuccess.html
  5. 138
      hkRegisterTip.html
  6. 716
      hkfeedback.html
  7. 826
      hkhcdbqb.html
  8. 2076
      hkhcdbqbDownload.html
  9. 669
      hkhcdbqbGuide.html
  10. 860
      hkhcdbqbManagement.html
  11. 47
      src/api/hkmember.js
  12. 2
      src/api/member.js
  13. 11
      vite.config.js

2
hcdbqb-guide.html

@ -2030,7 +2030,7 @@
<ul class="space-y-3"> <ul class="space-y-3">
<li> <li>
<a <a
href="hcdbqb-guide.html"
href="./hcdbqb-guide.html"
class="text-gray-400 hover:text-white transition-colors" class="text-gray-400 hover:text-white transition-colors"
>帮助中心</a >帮助中心</a
> >

351
hkLogiManagement.html

@ -0,0 +1,351 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>系统登录</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
}
body {
background: linear-gradient(135deg, #ACC9FC 0%, #ACC9FC 100%);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 20px;
}
.login-container {
background-color: white;
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
width: 100%;
max-width: 420px;
padding: 40px 30px;
transition: transform 0.3s ease;
}
.login-container:hover {
transform: translateY(-5px);
}
.login-header {
text-align: center;
margin-bottom: 30px;
}
.login-header h1 {
color: #333;
font-size: 28px;
margin-bottom: 8px;
}
.login-header p {
color: #666;
font-size: 16px;
}
.form-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 8px;
color: #555;
font-weight: 500;
}
input {
width: 100%;
padding: 14px 16px;
border: 1px solid #ddd;
border-radius: 8px;
font-size: 16px;
transition: all 0.3s;
}
input:focus {
border-color: #4a90e2;
box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.2);
outline: none;
}
.error-message {
color: #e74c3c;
font-size: 14px;
margin-top: 5px;
display: none;
}
.login-button {
background: linear-gradient(to right, #6a11cb, #2575fc);
color: white;
border: none;
border-radius: 8px;
padding: 14px;
font-size: 16px;
font-weight: 600;
cursor: pointer;
width: 100%;
transition: all 0.3s;
margin-top: 10px;
}
.login-button:hover {
background: linear-gradient(to right, #5a0db5, #1c68e8);
box-shadow: 0 5px 15px rgba(37, 117, 252, 0.4);
}
.login-button:active {
transform: scale(0.98);
}
.login-footer {
text-align: center;
margin-top: 25px;
color: #777;
font-size: 14px;
}
.alert {
padding: 12px 16px;
border-radius: 8px;
margin-bottom: 20px;
display: none;
}
.alert-error {
background-color: #ffebee;
color: #c62828;
border: 1px solid #ffcdd2;
}
.alert-success {
background-color: #e8f5e9;
color: #2e7d32;
border: 1px solid #c8e6c9;
}
.password-requirements {
font-size: 12px;
color: #777;
margin-top: 5px;
}
.input-error {
border-color: #e74c3c;
box-shadow: 0 0 0 3px rgba(231, 76, 60, 0.2);
}
</style>
</head>
<body>
<div class="login-container">
<div class="login-header">
<h1>系统登录</h1>
<p>请输入您的账号和密码</p>
</div>
<div id="usernameAlert" class="alert alert-error">
账号不存在,请检查后重试!
</div>
<div id="passwordAlert" class="alert alert-error">
密码错误,请检查后重试!
</div>
<form id="loginForm">
<div class="form-group">
<label for="username">账号</label>
<input type="text" id="username" name="username" placeholder="请输入账号" required>
<div class="error-message" id="usernameError">账号不能为空</div>
</div>
<div class="form-group">
<label for="password">密码</label>
<input type="password" id="password" name="password" placeholder="请输入密码" required>
<div class="error-message" id="passwordError">密码不能为空</div>
<div class="password-requirements">密码必须为8位数字</div>
</div>
<button type="submit" class="login-button">登录</button>
</form>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
const loginForm = document.getElementById('loginForm');
const usernameInput = document.getElementById('username');
const passwordInput = document.getElementById('password');
const usernameError = document.getElementById('usernameError');
const passwordError = document.getElementById('passwordError');
const usernameAlert = document.getElementById('usernameAlert');
const passwordAlert = document.getElementById('passwordAlert');
// 正确的账号和密码
const CORRECT_USERNAME = 'admin';
const CORRECT_PASSWORD = '20260408';
// 表单提交事件
loginForm.addEventListener('submit', function (e) {
e.preventDefault();
// 重置错误状态
resetErrors();
// 获取表单数据
const username = usernameInput.value.trim();
const password = passwordInput.value.trim();
// 表单验证
let isValid = true;
if (!username) {
showError(usernameError, '账号不能为空');
usernameInput.classList.add('input-error');
isValid = false;
}
if (!password) {
showError(passwordError, '密码不能为空');
passwordInput.classList.add('input-error');
isValid = false;
} else if (!/^\d{8}$/.test(password)) {
showError(passwordError, '密码必须为8位数字');
passwordInput.classList.add('input-error');
isValid = false;
}
// 如果验证通过,尝试登录
if (isValid) {
// 验证账号密码
if (username === CORRECT_USERNAME && password === CORRECT_PASSWORD) {
// 登录成功,保存登录状态
localStorage.setItem('isLoggedIn', 'true');
localStorage.setItem('loginTime', new Date().getTime());
// 显示成功消息(短暂显示后跳转)
showSuccessMessage();
// 延迟跳转,让用户看到成功消息
setTimeout(function () {
window.location.href = 'hkhcdbqbManagement.html';
}, 1000);
} else {
// 登录失败,明确提示是账号还是密码错误
if (username !== CORRECT_USERNAME) {
usernameAlert.style.display = 'block';
usernameInput.classList.add('input-error');
usernameInput.focus();
} else {
passwordAlert.style.display = 'block';
passwordInput.classList.add('input-error');
passwordInput.value = '';
passwordInput.focus();
}
}
}
});
// 实时验证
usernameInput.addEventListener('blur', function () {
if (!this.value.trim()) {
showError(usernameError, '账号不能为空');
this.classList.add('input-error');
} else {
hideError(usernameError);
this.classList.remove('input-error');
}
});
passwordInput.addEventListener('blur', function () {
const password = this.value.trim();
if (!password) {
showError(passwordError, '密码不能为空');
this.classList.add('input-error');
} else if (!/^\d{8}$/.test(password)) {
showError(passwordError, '密码必须为8位数字');
this.classList.add('input-error');
} else {
hideError(passwordError);
this.classList.remove('input-error');
}
});
// 输入时隐藏错误提示
usernameInput.addEventListener('input', function () {
hideError(usernameError);
hideAlert(usernameAlert);
this.classList.remove('input-error');
});
passwordInput.addEventListener('input', function () {
hideError(passwordError);
hideAlert(passwordAlert);
this.classList.remove('input-error');
});
// 辅助函数
function showError(element, message) {
element.textContent = message;
element.style.display = 'block';
}
function hideError(element) {
element.style.display = 'none';
}
function hideAlert(alertElement) {
alertElement.style.display = 'none';
}
function resetErrors() {
hideError(usernameError);
hideError(passwordError);
hideAlert(usernameAlert);
hideAlert(passwordAlert);
usernameInput.classList.remove('input-error');
passwordInput.classList.remove('input-error');
}
function showSuccessMessage() {
// 临时创建一个成功提示
const successAlert = document.createElement('div');
successAlert.className = 'alert alert-success';
successAlert.textContent = '登录成功,正在跳转...';
usernameAlert.parentNode.insertBefore(successAlert, usernameAlert);
successAlert.style.display = 'block';
// 移除错误提示(如果有)
hideAlert(usernameAlert);
hideAlert(passwordAlert);
}
// 检查是否已经登录(如果已经登录,直接跳转)
if (localStorage.getItem('isLoggedIn') === 'true') {
// 检查登录时间,如果超过24小时需要重新登录
const loginTime = parseInt(localStorage.getItem('loginTime'));
const currentTime = new Date().getTime();
const hoursDiff = (currentTime - loginTime) / (1000 * 60 * 60);
if (hoursDiff < 24) {
window.location.href = 'hcdbqb-management.html';
} else {
// 超过24小时,清除登录状态
localStorage.removeItem('isLoggedIn');
localStorage.removeItem('loginTime');
}
}
});
</script>
</body>
</html>

539
hkRegister.html

@ -0,0 +1,539 @@
<!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元素的高度差异 */
select.form-select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
</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/+6588792879?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/+6588792879?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">财富粉报名即可获得体验的机会!<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">
<form id="registrationForm" action="./hkRegisterTip.html" method="post">
<!-- 姓名 -->
<div class="form-group">
<label for="fullname" 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" style="display: none;">请输入您的姓名 [ Please enter
your name ] </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="+1">+1 加拿大</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" style="display: none;">请输入正确的手机号(纯手机号 不含国家编号 )
</div>
</div>
<!-- 微信ID -->
<div class="form-group">
<label for="wechat" class="form-label">微信ID <span class="text-red-500"></span></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 id="wechatError" class="text-red-500" style="display: none;">请输入微信ID</div>
</div>
<!-- 邮箱地址 -->
<div class="form-group mb-6">
<label for="email" 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" style="display: none;">请输入您的有效邮箱地址</div>
</div>
<!-- 提交按钮 -->
<button type="submit"
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/+6588792879?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">
财富粉可以进入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">
我们将严格保护您的个人信息安全,绝对不会向第三方泄露。<br />
</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>
<!-- 交互脚本 -->
<script type="module">
// 从外部文件导入 registerMemberApi 函数
import { registerMemberApi } from './src/api/hkmember.js';
// 获取表单元素
const form = document.getElementById('registrationForm');
// 错误提示元素
const nameError = document.getElementById('nameError');
const phoneError = document.getElementById('phoneError');
const emailError = document.getElementById('emailError');
// 隐藏所有错误提示
function hideAllErrors() {
nameError.style.display = 'none';
phoneError.style.display = 'none';
emailError.style.display = 'none';
}
// 邮箱校验
function isValidEmail(email) {
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;
}
// 表单提交处理 - 先调用API保存数据,然后继续表单提交跳转
form.addEventListener('submit', async function (e) {
// 先进行前端校验
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();
let isValid = true;
if (!name) {
nameError.style.display = 'block';
isValid = false;
}
if (!phoneRaw || !isValidPhone(phoneRaw)) {
phoneError.style.display = 'block';
isValid = false;
}
if (!email || !isValidEmail(email)) {
emailError.style.display = 'block';
isValid = false;
}
if (!isValid) {
e.preventDefault();
return;
}
// 阻止默认提交,先调用API
e.preventDefault();
// 清理手机号
const cleanedPhone = cleanPhoneNumber(phoneRaw);
// 组装请求参数
const requestData = {
name: name,
code: countryCode,
tel: cleanedPhone,
email: email
};
if (wechat) {
requestData.weChat = wechat;
}
try {
const result = await registerMemberApi(requestData);
if (result.code === 200) {
// API调用成功,继续表单提交跳转
form.submit();
} else {
alert('注册失败:' + (result.msg || '未知错误,请稍后重试'));
}
} catch (error) {
console.error('提交注册出错:', error);
alert('网络错误或接口异常,请稍后重试');
}
});
// 移动端菜单切换
document.getElementById('mobileMenuBtn').addEventListener('click', function () {
const menu = document.getElementById('mobileMenu');
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';
});
});
</script>
</body>
</html>

270
hkRegisterSuccess.html

@ -0,0 +1,270 @@
<!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">
<meta http-equiv="description" content="HomilyLink">
<title>夺宝奇兵 - AI炒股时代,机构界的黑科技!</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',
success: '#10B981' // 成功状态颜色
}
}
}
}
</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%];
}
.pulse-animation {
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
}
</style>
<style>
/* 基础动画 */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.fade-in {
animation: fadeIn 0.6s ease-out forwards;
}
.delay-100 {
animation-delay: 0.1s;
}
.delay-200 {
animation-delay: 0.2s;
}
.delay-300 {
animation-delay: 0.3s;
}
.delay-400 {
animation-delay: 0.4s;
}
.delay-500 {
animation-delay: 0.5s;
}
</style>
</head>
<body class="bg-gray-50 text-gray-800 font-sans min-h-screen">
<!-- 导航栏 -->
<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/+6588792879?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/+6588792879?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 flex-grow">
<div class="container mx-auto max-w-4xl">
<!-- 成功提示卡片 -->
<div class="bg-white rounded-2xl shadow-lg p-8 md:p-10 max-w-3xl mx-auto fade-in">
<!-- 成功图标 -->
<div
class="w-20 h-20 mx-auto mb-6 rounded-full bg-success/10 flex items-center justify-center text-success pulse-animation delay-100">
<i class="fa fa-check text-4xl"></i>
</div>
<!-- 标题 -->
<div class="text-center mb-6 delay-200 fade-in">
<h1 class="text-[clamp(1.5rem,3vw,2.2rem)] font-bold text-gray-800 mb-2">注册成功!</h1>
<p class="text-gray-600 text-lg">感谢您参加DeepChart VS 夺宝奇兵体验</p>
</div>
<!-- 成功图片 -->
<div class="mb-8 rounded-xl overflow-hidden shadow-md delay-300 fade-in">
<a href="./hkhcdbqbDownload.html"><img src="https://hc.homilychart.com/hc/250121/img/homilylink-down.jpeg"
alt="点我跳转多平台设备软件安装" class="w-full h-auto rounded-xl shadow-lg"></a>
</div>
<!-- 成功信息 -->
<div class="space-y-4 mb-8 text-gray-600 delay-400 fade-in">
<div class="flex items-start">
<div
class="w-6 h-6 rounded-full bg-primary/10 flex items-center justify-center text-primary flex-shrink-0 mt-0.5 mr-3">
<i class="fa fa-envelope-o text-sm"></i>
</div>
<p>我们很快将通过Whatsapp或者微信与您取得联系!</p>
</div>
<div class="flex items-start">
<div
class="w-6 h-6 rounded-full bg-primary/10 flex items-center justify-center text-primary flex-shrink-0 mt-0.5 mr-3">
<i class="fa fa-mobile text-sm"></i>
</div>
<p>同时,点击面图片跳转到HomilyLink安装界面!</p>
</div>
<div class="flex items-start">
<div
class="w-6 h-6 rounded-full bg-primary/10 flex items-center justify-center text-primary flex-shrink-0 mt-0.5 mr-3">
<i class="fa fa-mobile text-sm"></i>
</div>
<p>手机商店搜索"DeepChart"并下载安装!</p>
</div>
<div class="flex items-start">
<div
class="w-6 h-6 rounded-full bg-primary/10 flex items-center justify-center text-primary flex-shrink-0 mt-0.5 mr-3">
<i class="fa fa-mobile text-sm"></i>
</div>
<p>DeepChart的体验账号和夺宝奇兵账号一致!</p>
</div>
<div class="flex items-start">
<div
class="w-6 h-6 rounded-full bg-primary/10 flex items-center justify-center text-primary flex-shrink-0 mt-0.5 mr-3">
<i class="fa fa-clock-o text-sm"></i>
</div>
<p>您不需要自己注册,我们的老师会为您发送体验的iD和密码!</p>
</div>
</div>
<!-- 操作按钮 -->
<div class="flex flex-col sm:flex-row gap-4 delay-500 fade-in">
<a href="./hkhcdbqbGuide.html"
class="btn-effect flex-1 py-3 rounded-lg bg-gradient-to-r from-primary to-secondary text-white font-medium text-center">
<i class="fa fa-home mr-2"></i>查看操作指南
</a>
<a href="https://wa.me/+6588792879?text=我要体验夺宝奇兵"
class="btn-effect flex-1 py-3 rounded-lg border border-primary text-primary font-medium text-center hover:bg-primary/5 transition-colors">
<i class="fa fa-user mr-2"></i>需要联系帮助
</a>
</div>
</div>
<!-- 帮助信息 -->
<div class="text-center mt-8 text-gray-500 text-sm max-w-xl mx-auto delay-500 fade-in">
<p>如果您没有收到我们老师的消息,请及时<a href="https://wa.me/+6588792879?text=我要体验夺宝奇兵" target="_blank"
class="text-primary hover:underline">联系我们</a></p>
</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>
<!-- 交互脚本 -->
<script>
// 移动端菜单切换
document.getElementById('mobileMenuBtn').addEventListener('click', function () {
const menu = document.getElementById('mobileMenu');
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';
});
});
// 可选:5秒后自动跳转到首页
// setTimeout(() => {
// window.location.href = '#'; // 替换为实际首页URL
// }, 5000);
</script>
</body>
</html>

138
hkRegisterTip.html

@ -0,0 +1,138 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HomilyChart-弘历软件</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style>
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #f5f5f5;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.container {
max-width: 600px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}
h1 {
text-align: center;
color: #4caf50;
}
p {
font-size: 18px;
line-height: 1.5;
margin: 20px 0;
}
button {
display: block;
margin: 0 auto;
padding: 10px 20px;
background-color: #4caf50;
color: #fff;
border: none;
border-radius: 5px;
font-size: 18px;
cursor: pointer;
}
@media screen and (max-width: 600px) {
.container {
max-width: 100%;
border-radius: 0;
}
}
</style>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function closew() {
window.location.href = "about:blank";
window.opener = null;
window.open('', '_self');
window.close();
}
function bakcj() {
window.location.href = "https://hc.homilychart.com/hc/homilyjg.asp";
}
</script>
<script type="text/javascript">
function closew() {
window.location.href = "about:blank";
window.opener = null;
window.open('', '_self');
window.close();
}
window.onload = function () {
// 设置倒计时时间(以毫秒为单位)
var countdownTime = 5000; // 5秒
// 显示倒计时
var countdownElement = document.getElementById('countdown');
countdownElement.textContent = Math.ceil(countdownTime / 1000);
// 开始倒计时
setTimeout(function () {
// 在倒计时结束后跳转到目标页面
window.location.href = './hkRegisterSuccess.html';
}, countdownTime);
// 更新倒计时显示
var countdownInterval = setInterval(function () {
countdownTime -= 1000;
countdownElement.textContent = Math.ceil(countdownTime / 1000);
if (countdownTime <= 0) {
clearInterval(countdownInterval);
}
}, 1000);
};
</script>
</head>
<body>
<div class="container">
<h1>报名成功</h1>
<p>恭喜您,课程报名成功!</p>
<p>稍后我们的助教老师会与您取得联系!</p>
<p>在开课之前会发给您听课信息!</p>
<p>我们建议您安装弘历听课平台!</p>
<p>所以本页面将在</p>
<h3><span id="countdown" style="font-size: 23px;color: red"></span>
<font color="red"></font> 后自动跳转到弘历听课平台安装界面
</h3>
<!---->
</div>
</body>
</html>

716
hkfeedback.html

@ -0,0 +1,716 @@
<!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="夺宝奇兵,意见反馈,用户反馈">
<meta http-equiv="description" content="夺宝奇兵用户意见反馈页面">
<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',
danger: '#EF4444',
success: '#10B981'
}
}
}
}
</script>
<style type="text/tailwindcss">
@layer utilities {
.input-focus {
@apply focus:ring-2 focus:ring-primary/50 focus:border-primary focus:outline-none;
}
.input-error {
@apply border-danger focus:ring-danger/20 focus:border-danger;
}
.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%];
}
.card-shadow {
@apply shadow-md hover:shadow-lg transition-shadow duration-300;
}
.modal-backdrop {
@apply fixed inset-0 bg-black/50 z-50 flex items-center justify-center opacity-0 pointer-events-none transition-opacity duration-300;
}
.modal-backdrop.active {
@apply opacity-100 pointer-events-auto;
}
.modal-content {
@apply bg-white rounded-xl shadow-2xl max-w-md w-full mx-4 transform translate-y-8 transition-transform duration-300;
}
.modal-backdrop.active .modal-content {
@apply translate-y-0;
}
.error-message {
@apply text-danger text-sm mt-1 hidden;
}
.country-select-container {
@apply relative;
}
.country-select {
@apply appearance-none bg-white border border-gray-300 rounded-lg py-3 pl-10 pr-10 input-focus transition-colors w-full;
}
.loading-spinner {
@apply inline-block w-5 h-5 border-2 border-white border-t-transparent rounded-full animate-spin;
}
}
</style>
<style>
/* 确保基础样式生效 */
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}
/* 简单动画 */
@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;
}
/* 国家选择框箭头样式 */
.country-select-arrow {
pointer-events: none;
}
/* 国家选择下拉列表样式 */
.country-select option {
padding: 8px 12px;
}
/* 确保3:7比例在所有中等及以上屏幕生效 */
@media (min-width: 640px) {
.whatsapp-container {
display: flex;
gap: 1rem;
}
.country-code-wrapper {
width: 30%;
}
.phone-number-wrapper {
width: 70%;
}
}
</style>
</head>
<body class="bg-gray-50 text-gray-800">
<!-- 导航栏 -->
<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="#" class="text-primary font-medium">意见反馈</a>
<a href="https://api.whatsapp.com/send?phone=6588792879&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="#" class="py-2 hover:text-primary transition-colors">首页</a>
<a href="#" class="py-2 text-primary">意见反馈</a>
<a href="https://api.whatsapp.com/send?phone=6588792879&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-4xl">
<!-- 页面标题 -->
<div class="text-center mb-12 fade-in">
<h1 class="text-[clamp(1.8rem,4vw,2.5rem)] font-bold mb-4">意见反馈</h1>
<p class="text-gray-600 max-w-2xl mx-auto">感谢您对Adam说港股团队的支持!<br>请留下您的宝贵意见和建议,我们将不断的提升服务质量!</p>
</div>
<!-- 反馈表单卡片 -->
<div class="bg-white rounded-xl p-6 md:p-8 mb-10 fade-in delay-100 card-shadow">
<form id="feedbackForm" class="space-y-6">
<!-- 姓名输入 -->
<div class="form-group">
<label for="name" class="block text-gray-700 font-medium mb-2">姓名 <span
class="text-danger">*</span></label>
<div class="relative">
<div
class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400">
<i class="fa fa-user"></i>
</div>
<input type="text" id="fusername" name="fusername" required
class="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-lg input-focus transition-colors"
placeholder="请输入您的姓名">
<div class="error-message" id="nameError">请输入您的姓名</div>
</div>
</div>
<!-- WhatsApp号码 - 精确3:7比例布局 -->
<div class="form-group">
<label class="block text-gray-700 font-medium mb-2">Whatsapp <span
class="text-danger">*</span></label>
<div class="whatsapp-container flex flex-col sm:flex-row gap-3">
<!-- 国家选择(30%宽度) -->
<div class="country-code-wrapper country-select-container">
<div
class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400">
<i class="fa fa-whatsapp"></i>
</div>
<select id="countryinfo" name="countryinfo" required class="country-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="+1">+1 加拿大</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
class="absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-gray-400 country-select-arrow">
<i class="fa fa-chevron-down"></i>
</div>
<div class="error-message" id="countryCodeError">请选择国家/地区</div>
</div>
<!-- 手机号(70%宽度) -->
<div class="phone-number-wrapper relative">
<div
class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400">
<i class="fa fa-mobile text-lg"></i>
</div>
<input type="tel" id="umoblie" name="umoblie" required
class="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-lg input-focus transition-colors"
placeholder="请输入手机号码">
<div class="error-message" id="phoneError">请输入有效的手机号码</div>
</div>
</div>
</div>
<!-- 微信ID输入 -->
<div class="form-group">
<label for="wechatId" class="block text-gray-700 font-medium mb-2">微信ID</label>
<div class="relative">
<div
class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400">
<i class="fa fa-weixin"></i>
</div>
<input type="text" id="fwechat" name="fwechat"
class="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-lg input-focus transition-colors"
placeholder="请输入您的微信ID(选填)">
</div>
</div>
<!-- 邮箱输入 -->
<div class="form-group">
<label for="email" class="block text-gray-700 font-medium mb-2">邮箱 <span
class="text-danger">*</span></label>
<div class="relative">
<div
class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400">
<i class="fa fa-envelope"></i>
</div>
<input type="email" id="femail" name="femail" required
class="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-lg input-focus transition-colors"
placeholder="请输入您的邮箱地址">
<div class="error-message" id="emailError">请输入有效的邮箱地址</div>
</div>
</div>
<!-- 反馈类型 -->
<div class="form-group">
<label for="feedbackType" class="block text-gray-700 font-medium mb-2">反馈类型</label>
<div class="relative">
<div
class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400">
<i class="fa fa-tag"></i>
</div>
<select id="ftype" name="ftype"
class="w-full pl-10 pr-10 py-3 border border-gray-300 rounded-lg input-focus transition-colors appearance-none bg-white">
<option value="功能建议">功能建议</option>
<option value="问题反馈">问题反馈</option>
<option value="体验优化">体验优化</option>
<option value="其他建议">其他建议</option>
</select>
<div
class="absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-gray-400">
<i class="fa fa-chevron-down"></i>
</div>
</div>
</div>
<!-- 反馈内容(增加最大长度500字的实时限制与校验) -->
<div class="form-group">
<label for="feedbackContent" class="block text-gray-700 font-medium mb-2">反馈内容 <span
class="text-danger">*</span></label>
<div class="relative">
<textarea id="fcontent" name="fcontent" rows="5" required maxlength="500"
class="w-full px-4 py-3 border border-gray-300 rounded-lg input-focus transition-colors resize-none"
placeholder="请详细描述您的意见或建议...(最多500字)"></textarea>
<div class="absolute right-3 bottom-3 text-gray-400 text-sm">
<span id="charCount">0</span> / 500
</div>
<div class="error-message" id="feedbackContentError">请输入反馈内容(至少10个字符,最多500字)</div>
</div>
</div>
<!-- 提交按钮 -->
<div class="pt-4">
<button type="submit" id="submitBtn"
class="btn-effect w-full py-3 px-6 rounded-lg bg-gradient-to-r from-primary to-secondary text-white font-medium text-lg flex items-center justify-center">
<i class="fa fa-paper-plane mr-2"></i>
<span>提交反馈</span>
<span id="loadingIndicator" class="ml-2 hidden">
<span class="loading-spinner"></span>
</span>
</button>
</div>
</form>
</div>
<!-- 反馈须知 -->
<div
class="bg-gradient-to-r from-primary/5 to-secondary/5 border border-primary/20 rounded-xl p-6 mb-16 fade-in delay-200">
<h3 class="font-semibold text-lg text-gray-800 mb-4 flex items-center">
<i class="fa fa-info-circle text-primary mr-2"></i>反馈须知
</h3>
<ul class="space-y-2 text-gray-700">
<li class="flex items-start">
<i class="fa fa-check-circle text-success mt-1 mr-2 flex-shrink-0"></i>
<span>我们会在1-3个工作日内处理您的反馈并给予回复</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-success mt-1 mr-2 flex-shrink-0"></i>
<span><span class="text-danger">*</span> 的为必填项,请确保信息准确无误</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-success mt-1 mr-2 flex-shrink-0"></i>
<span>您的个人信息仅用于反馈跟进,我们将严格保密</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-success mt-1 mr-2 flex-shrink-0"></i>
<span>反馈内容限500字以内,请合理控制字数</span>
</li>
</ul>
</div>
</div>
</main>
<!-- 成功弹窗(与参考页面样式一致,点击确定按钮关闭) -->
<div id="successModal" class="modal-backdrop" role="dialog" aria-modal="true">
<div class="modal-content p-6">
<div class="text-center">
<div class="w-16 h-16 rounded-full bg-success/20 flex items-center justify-center mx-auto mb-4">
<i class="fa fa-check-circle text-success text-3xl"></i>
</div>
<h3 class="text-xl font-bold mb-2">反馈成功!</h3>
<p class="text-gray-600 mb-6">感谢您的反馈,我们将持续优化更新</p>
<button id="closeModalBtn"
class="px-6 py-2 bg-gradient-to-r from-primary to-secondary text-white rounded-lg hover:shadow-lg transition-all">
确定
</button>
</div>
</div>
</div>
<!-- 页脚 -->
<footer class="bg-gray-900 text-white py-10 px-4">
<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>
<script type="module">
// 从外部文件导入 registerMemberApi 函数
import { registerMemberApi } from './src/api/hkmember.js';
// DOM 元素
const form = document.getElementById('feedbackForm');
const submitBtn = document.getElementById('submitBtn');
const loadingIndicator = document.getElementById('loadingIndicator');
const successModal = document.getElementById('successModal');
const closeModalBtn = document.getElementById('closeModalBtn');
// 字符计数
const fcontent = document.getElementById('fcontent');
const charCount = document.getElementById('charCount');
// 错误提示元素
const nameError = document.getElementById('nameError');
const phoneError = document.getElementById('phoneError');
const emailError = document.getElementById('emailError');
const feedbackContentError = document.getElementById('feedbackContentError');
// 隐藏所有错误提示
function hideAllErrors() {
nameError.style.display = 'none';
phoneError.style.display = 'none';
emailError.style.display = 'none';
feedbackContentError.style.display = 'none';
}
// 显示错误提示
function showError(element, message) {
if (element) {
element.textContent = message;
element.style.display = 'block';
}
}
// 显示成功弹窗
function showSuccessModal() {
successModal.classList.add('active');
}
// 隐藏成功弹窗
function hideSuccessModal() {
successModal.classList.remove('active');
}
// 关闭弹窗事件
closeModalBtn.addEventListener('click', hideSuccessModal);
// 点击模态框背景关闭
successModal.addEventListener('click', function (e) {
if (e.target === successModal) {
hideSuccessModal();
}
});
// 邮箱校验
function isValidEmail(email) {
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 getFeedbackTypeValue(typeText) {
const typeMap = {
'功能建议': '1',
'问题反馈': '2',
'体验优化': '3',
'其他建议': '4'
};
return typeMap[typeText] || '4';
}
// 字符计数 & 实时限制(确保不超过500字,与maxlength配合)
if (fcontent && charCount) {
// 初始化显示
charCount.textContent = fcontent.value.length;
fcontent.addEventListener('input', function () {
let len = this.value.length;
// 双重保险:如果超过500则截断
if (len > 500) {
this.value = this.value.substring(0, 500);
len = 500;
}
charCount.textContent = len;
// 实时移除字数超限的错误提示(如果之前是因为超限报错)
if (len <= 500 && feedbackContentError && feedbackContentError.style.display === 'block' && feedbackContentError.textContent.includes('最多500字')) {
// 但避免移除其他类型错误,通过文本内容判断
if (feedbackContentError.textContent.includes('最多500字')) {
feedbackContentError.style.display = 'none';
}
}
});
// 增加blur时再次校验,保证用户粘贴超长内容时提示
fcontent.addEventListener('blur', function () {
let len = this.value.length;
if (len > 500) {
this.value = this.value.substring(0, 500);
charCount.textContent = 500;
showError(feedbackContentError, '反馈内容不能超过500字');
}
});
}
// 移动端菜单切换
const mobileMenuBtn = document.getElementById('mobileMenuBtn');
if (mobileMenuBtn) {
mobileMenuBtn.addEventListener('click', function () {
const menu = document.getElementById('mobileMenu');
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');
}
});
}
// 表单提交处理 - 调用API保存数据,成功后显示弹窗,额外校验500字限制
form.addEventListener('submit', async function (e) {
e.preventDefault();
// 前端校验
hideAllErrors();
const name = document.getElementById('fusername').value.trim();
const countryCode = document.getElementById('countryinfo').value;
const phoneRaw = document.getElementById('umoblie').value.trim();
const wechat = document.getElementById('fwechat').value.trim();
const email = document.getElementById('femail').value.trim();
const feedbackTypeText = document.getElementById('ftype').value;
let feedbackContent = document.getElementById('fcontent').value.trim();
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;
}
// 反馈内容校验: 不能为空且长度必须在10~500之间
if (!feedbackContent) {
showError(feedbackContentError, '请输入反馈内容(至少10个字符,最多500字)');
isValid = false;
} else {
// 重新获取实际内容(防止中间有特殊空格导致长度偏差)
const rawLen = feedbackContent.length;
if (rawLen < 10) {
showError(feedbackContentError, '反馈内容至少需要10个字符,请详细描述');
isValid = false;
} else if (rawLen > 500) {
// 如果因为某些意外情况(例如直接通过开发者工具修改)导致超长,再次截断并提示
feedbackContent = feedbackContent.substring(0, 500);
document.getElementById('fcontent').value = feedbackContent;
charCount.textContent = 500;
showError(feedbackContentError, '反馈内容不能超过500字,已自动截断');
isValid = false;
}
}
if (!isValid) {
return;
}
// 清理手机号
const cleanedPhone = cleanPhoneNumber(phoneRaw);
// 组装请求参数
const requestData = {
name: name,
code: countryCode,
tel: cleanedPhone,
email: email,
feedback_content: feedbackContent,
feedback_type: getFeedbackTypeValue(feedbackTypeText)
};
// 微信ID有值才传递
if (wechat) {
requestData.weChat = wechat;
}
// 显示加载状态
submitBtn.disabled = true;
loadingIndicator.classList.remove('hidden');
try {
const result = await registerMemberApi(requestData);
if (result.code === 200) {
// API调用成功,显示成功弹窗
showSuccessModal();
// 清空表单
form.reset();
// 重置字符计数
if (charCount) charCount.textContent = '0';
// 清空所有隐藏错误显示
hideAllErrors();
} else {
alert('提交失败:' + (result.msg || '请稍后重试'));
}
} catch (error) {
console.error('提交出错:', error);
alert('网络错误或接口异常,请稍后重试');
} finally {
submitBtn.disabled = false;
loadingIndicator.classList.add('hidden');
}
});
// 页面加载动画
document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('.fade-in').forEach(el => {
el.style.opacity = '1';
});
// 确保字符计数初始正确
if (fcontent && charCount) {
charCount.textContent = fcontent.value.length;
}
});
</script>
</body>
</html>

826
hkhcdbqb.html

@ -0,0 +1,826 @@
<!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,HomilyLink,夺宝奇兵HomilyLink,股票体检专家,AI预测大模型,AI炒股时代,AI情绪大模型,超级云脑,夺宝利剑,AI金牛,AI探牛,AI雷达,AI小财神,大牛有型,金牛送福,牛刀小试,HomilyChart,免费体验,机构界的黑科技,数据分析时代,John Lu谈股,John Lu谈股财富圈">
<meta http-equiv="description" content="HomilyLink">
<title>夺宝奇兵 - AI炒股时代,机构界的黑科技!</title>
<!-- 引入Tailwind CSS -->
<script src="https://cdn.tailwindcss.com"></script>
<script type="text/javascript" src="210802/js/jquery-1.9.1.min.js"></script>
<!-- 引入Font Awesome -->
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- 配置Tailwind自定义颜色和字体 -->
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: '#3B82F6',
secondary: '#10B981',
accent: '#8B5CF6',
dark: '#1E293B',
light: '#F8FAFC'
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
},
},
}
}
</script>
<!-- 自定义工具类 -->
<style type="text/tailwindcss">
@layer utilities {
.content-auto {
content-visibility: auto;
}
.text-shadow {
text-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.card-hover {
@apply transition-all duration-300 hover:shadow-xl hover:-translate-y-1;
}
.gradient-bg {
background: linear-gradient(135deg, #3B82F6 0%, #8B5CF6 100%);
}
}
</style>
<style>
/* 加载字体 */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
/* 全局动画定义 */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-fade-in {
animation: fadeIn 0.6s ease-out forwards;
}
.delay-100 {
animation-delay: 0.1s;
}
.delay-200 {
animation-delay: 0.2s;
}
.delay-300 {
animation-delay: 0.3s;
}
/* 平滑滚动 */
html {
scroll-behavior: smooth;
}
</style>
</head>
<body class="font-sans bg-light text-dark">
<!-- 导航栏 -->
<header class="fixed w-full bg-white/90 backdrop-blur-sm shadow-sm z-50 transition-all duration-300">
<div class="container mx-auto px-4 py-3 flex justify-between items-center">
<a href="#" class="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="text-xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-primary to-accent">夺宝奇兵</span>
</a>
<!-- 桌面导航 -->
<nav class="hidden md:flex items-center space-x-8">
<a href="#features" class="font-medium hover:text-primary transition-colors">特色功能</a>
<!-- <a href="#kc" class="font-medium hover:text-primary transition-colors">最新课程</a> -->
<a href="./hkfeedback.html" class="font-medium hover:text-primary transition-colors">意见反馈</a>
<a href="./hkhcdbqbGuide.html" class="font-medium hover:text-primary transition-colors">操作指南</a>
<a href="https://api.whatsapp.com/send?phone=6588792879&text=夺宝奇兵指南我需要帮助" target="_blank"
class="px-5 py-2 rounded-full gradient-bg text-white font-medium hover:shadow-lg transition-all">联系我们</a>
</nav>
<!-- 移动端菜单按钮 -->
<button id="menuBtn" class="md:hidden text-xl">
<i class="fa fa-bars"></i>
</button>
</div>
<!-- 移动端导航菜单 -->
<div id="mobileMenu" class="md:hidden hidden bg-white border-t animate-fade-in">
<div class="container mx-auto px-4 py-3 flex flex-col space-y-4">
<a href="#features" class="font-medium py-2 hover:text-primary transition-colors">特色功能</a>
<!-- <a href="#kc" class="font-medium py-2 hover:text-primary transition-colors">最新课程</a> -->
<a href="./hkfeedback.html" class="font-medium py-2 hover:text-primary transition-colors">意见反馈</a>
<a href="./hkhcdbqbGuide.html" class="font-medium py-2 hover:text-primary transition-colors">操作指南</a>
<a href="https://api.whatsapp.com/send?phone=6588792879&text=夺宝奇兵指南我需要帮助" target="_blank"
class="py-2 rounded-full gradient-bg text-white font-medium text-center hover:shadow-lg transition-all">联系我们</a>
</div>
</div>
</header>
<!-- 英雄区域 -->
<section class="pt-32 pb-20 md:pt-40 md:pb-32 px-4 bg-gradient-to-b from-blue-50 to-white">
<div class="container mx-auto max-w-6xl">
<div class="flex flex-col md:flex-row items-center">
<div class="md:w-1/2 mb-10 md:mb-0 animate-fade-in">
<h1 class="text-[clamp(2rem,5vw,3.5rem)] font-bold leading-tight text-shadow mb-6">
夺宝奇兵,<br>
<span
class="bg-clip-text text-transparent bg-gradient-to-r from-primary to-accent">现在免费体验!</span>
</h1>
<p class="text-lg text-gray-600 mb-8 max-w-lg">
AI时代股票投资必备机构界的黑科技!<br />
现开放免费体验7天的活动,立刻注册报名吧!
</p>
<div class="flex flex-col sm:flex-row gap-4">
<a href="#register"
class="px-8 py-3 rounded-full gradient-bg text-white font-medium text-center hover:shadow-lg hover:shadow-primary/20 transition-all transform hover:-translate-y-0.5">
立即注册
</a>
<a href="#promotions"
class="px-8 py-3 rounded-full border-2 border-primary text-primary font-medium text-center hover:bg-primary/5 transition-all">
了解更多
</a>
<a href="./hkhcdbqbDownload.html"
class="px-8 py-3 rounded-full border-2 border-primary text-primary font-medium text-center hover:bg-primary/5 transition-all">
立刻下载
</a>
</div>
</div>
<div class="md:w-1/2 animate-fade-in delay-200">
<div class="relative">
<div
class="absolute -inset-4 bg-gradient-to-r from-primary/20 to-accent/20 rounded-3xl blur-xl opacity-70">
</div>
<img src="https://hc.homilychart.com/hc/250121/img/dbqbindex.jpg" alt="夺宝奇兵"
class="relative z-10 rounded-2xl shadow-xl w-full object-cover">
</div>
</div>
</div>
</div>
</section>
<!-- 特色亮点 -->
<section id="features" class="py-16 px-4 bg-white">
<div class="container mx-auto max-w-6xl">
<div class="text-center mb-16 animate-fade-in">
<h2 class="text-[clamp(1.5rem,3vw,2.5rem)] font-bold mb-4">您可以免费体验什么?</h2>
<p class="text-gray-600 max-w-2xl mx-auto">您可以免费体验 超级云脑 AI预测大模型 夺宝利剑三个模块 7天 </p>
</div>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="bg-white p-8 rounded-2xl shadow-lg card-hover animate-fade-in delay-100">
<div class="w-14 h-14 rounded-xl bg-blue-100 flex items-center justify-center mb-6">
<img alt="夺宝奇兵" src="https://hc.homilychart.com/hc/250121/img/chaojiyunnao.png">
</div>
<h3 class="text-xl font-semibold mb-3">超级云脑</h3>
<p class="text-gray-600">您的股票该体检了!<br />从十大维度,为您的股票进行全面体检!</p>
</div>
<div class="bg-white p-8 rounded-2xl shadow-lg card-hover animate-fade-in delay-200">
<div class="w-14 h-14 rounded-xl bg-purple-100 flex items-center justify-center mb-6">
<img alt="夺宝奇兵" src="https://hc.homilychart.com/hc/250121/img/AIyuce.png">
</div>
<h3 class="text-xl font-semibold mb-3">AI预测大模型</h3>
<p class="text-gray-600">采用最先进的安全技术,保护您的数据和隐私,让您高枕无忧地开展业务。</p>
</div>
<div class="bg-white p-8 rounded-2xl shadow-lg card-hover animate-fade-in delay-300">
<div class="w-14 h-14 rounded-xl bg-green-100 flex items-center justify-center mb-6">
<img alt="夺宝奇兵" src="https://hc.homilychart.com/hc/250121/img/duobaolijian.png">
</div>
<h3 class="text-xl font-semibold mb-3">夺宝利剑</h3>
<p class="text-gray-600">根据您的具体需求提供个性化解决方案,灵活适应不同业务场景和规模。</p>
</div>
</div>
</div>
</section>
<!-- 图文宣传区 -->
<section id="promotions" class="py-20 px-4 bg-gray-50">
<div class="container mx-auto max-w-6xl">
<div class="text-center mb-16 animate-fade-in">
<h2 class="text-[clamp(1.5rem,3vw,2.5rem)] font-bold mb-4">我们的创新解决方案</h2>
<p class="text-gray-600 max-w-2xl mx-auto">探索我们的核心产品和服务,了解如何为您的业务创造价值</p>
</div>
<!-- 宣传项 1 -->
<div class="bg-white rounded-3xl shadow-xl overflow-hidden mb-16 flex flex-col md:flex-row animate-fade-in">
<div class="md:w-1/2">
<img src="https://hc.homilychart.com/hc/250121/img/chaojiyunnaoimg.jpg" alt="智能数据分析平台"
class="w-full h-full object-cover">
</div>
<div class="md:w-1/2 p-8 md:p-12 flex flex-col justify-center">
<span
class="inline-block px-4 py-1 rounded-full bg-blue-100 text-primary text-sm font-medium mb-4">HomilyLink
> 夺宝奇兵 > 超级云脑</span>
<h3 class="text-2xl md:text-3xl font-bold mb-4">超级云脑:股票体检专家</h3>
<p class="text-gray-600 mb-6">
利用人工智能和机器学习技术,快速处理和分析海量数据,通过十大维度为您的股票进行专科体检,追踪机构行为。
</p>
<ul class="space-y-3 mb-8">
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>云脑探秘</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>机构动向</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>体检专家</span>
</li>
</ul>
<a href="#register" class="inline-flex items-center text-primary font-medium hover:underline">
注册了解更多 <i class="fa fa-arrow-right ml-2"></i>
</a>
</div>
</div>
<!-- 宣传项 2 -->
<div
class="bg-white rounded-3xl shadow-xl overflow-hidden mb-16 flex flex-col md:flex-row-reverse animate-fade-in delay-100">
<div class="md:w-1/2">
<img src="https://hc.homilychart.com/hc/250121/img/aiyucedamoxing.jpg" alt="AI预测大模型"
class="w-full h-full object-cover">
</div>
<div class="md:w-1/2 p-8 md:p-12 flex flex-col justify-center">
<span
class="inline-block px-4 py-1 rounded-full bg-purple-100 text-accent text-sm font-medium mb-4">HomilyLink
> 夺宝奇兵 > AI预测大模型</span>
<h3 class="text-2xl md:text-3xl font-bold mb-4">AI预测大模型</h3>
<p class="text-gray-600 mb-6">
AI 预测大模型颠覆传统,以深度学习与算法挖股市数据抓趋势、预测高低点;AI时空共振结合前沿 AI与时空共振精准识别变盘点。
</p>
<ul class="space-y-3 mb-8">
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>AI股价预测术</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>AI时空共振</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>未来预测</span>
</li>
</ul>
<a href="#register" class="inline-flex items-center text-primary font-medium hover:underline">
注册了解更多 <i class="fa fa-arrow-right ml-2"></i>
</a>
</div>
</div>
<!-- 宣传项 2 -->
<div
class="bg-white rounded-3xl shadow-xl overflow-hidden mb-16 flex flex-col md:flex-row-reverse animate-fade-in delay-100">
<div class="md:w-1/2">
<img src="https://hc.homilychart.com/hc/250121/img/duobaolijianindex.jpg" alt="夺宝利剑"
class="w-full h-full object-cover">
</div>
<div class="md:w-1/2 p-8 md:p-12 flex flex-col justify-center">
<span
class="inline-block px-4 py-1 rounded-full bg-purple-100 text-accent text-sm font-medium mb-4">HomilyLink
>夺宝奇兵 >Ai金牛 >夺宝利剑</span>
<h3 class="text-2xl md:text-3xl font-bold mb-4">夺宝利剑</h3>
<p class="text-gray-600 mb-6">
最聪明的AI智能均线结合三维波动量,让您在AI时代深度追踪机构的操盘行为!
</p>
<ul class="space-y-3 mb-8">
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>最聪明的AI智能均线</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>三维波动量</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>AI大数据模型</span>
</li>
</ul>
<a href="#register" class="inline-flex items-center text-primary font-medium hover:underline">
注册了解更多 <i class="fa fa-arrow-right ml-2"></i>
</a>
</div>
</div>
<!-- 宣传项 3 -->
<!-- <div id="kc"
class="bg-white rounded-3xl shadow-xl overflow-hidden flex flex-col md:flex-row animate-fade-in delay-200">
<div class="md:w-1/2">
<img src="https://hc.homilychart.com/hc/250121/img/kecheng.jpg" alt="John Lu谈股专题讲座" class="w-full h-full object-cover">
</div>
<div class="md:w-1/2 p-8 md:p-12 flex flex-col justify-center">
<span
class="inline-block px-4 py-1 rounded-full bg-green-100 text-secondary text-sm font-medium mb-4">HomilyLink
> 消息 > John Lu谈股财富圈</span>
<h3 class="text-2xl md:text-3xl font-bold mb-4">HomilyLink专题讲座</h3>
<p class="text-gray-600 mb-6">
我们推出 HomilyLink专题讲座;结合市场事实热点与机构领域黑科技 “夺宝奇兵”,助力投资者提升股市获利能力。
</p>
<ul class="space-y-3 mb-8">
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>新加坡时间</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>注意换算当地时间</span>
</li>
<li class="flex items-start">
<i class="fa fa-check-circle text-secondary mt-1 mr-3"></i>
<span>HomilyLink班级群课程</span>
</li>
</ul>
<a href="#register" class="inline-flex items-center text-primary font-medium hover:underline">
注册了解更多 <i class="fa fa-arrow-right ml-2"></i>
</a>
</div>
</div> -->
</div>
</section>
<!-- 注册表单区域 -->
<section id="register" class="py-20 px-4 bg-white">
<div class="container mx-auto max-w-6xl">
<div class="bg-gradient-to-br from-dark to-gray-800 rounded-3xl shadow-2xl overflow-hidden">
<div class="grid grid-cols-1 md:grid-cols-2">
<div class="p-8 md:p-12 text-white flex flex-col justify-center">
<h2 class="text-2xl md:text-3xl font-bold mb-4">立即注册,开启属于你的AI时代!</h2>
<p class="text-gray-300 mb-8">
<!-- 填写报名表,我们会尽快为您开启智能体验之旅! -->
</p>
<div class="space-y-6">
<div class="flex items-start">
<div
class="w-10 h-10 rounded-full bg-primary/20 flex items-center justify-center mr-4 mt-1">
<img alt="超级云脑" src="https://hc.homilychart.com/hc/250121/img/chaojiyunnao.png">
</div>
<div>
<h3 class="font-semibold mb-1">超级云脑</h3>
<p class="text-gray-400 text-sm">您的股票体检专家!</p>
</div>
</div>
<div class="flex items-start">
<div
class="w-10 h-10 rounded-full bg-primary/20 flex items-center justify-center mr-4 mt-1">
<img alt="AI预测大模型" src="https://hc.homilychart.com/hc/250121/img/AIyuce.png">
</div>
<div>
<h3 class="font-semibold mb-1">AI预测大模型</h3>
<p class="text-gray-400 text-sm">时间空间价格AI精准预测!</p>
</div>
</div>
<div class="flex items-start">
<div
class="w-10 h-10 rounded-full bg-primary/20 flex items-center justify-center mr-4 mt-1">
<img alt="夺宝利剑" src="https://hc.homilychart.com/hc/250121/img/duobaolijian.png
">
</div>
<div>
<h3 class="font-semibold mb-1">夺宝利剑</h3>
<p class="text-gray-400 text-sm">最聪明的AI智能均线+三维波动量</p>
</div>
</div>
</div>
</div>
<div class="bg-white p-8 md:p-12">
<form id="registrationForm" class="space-y-6">
<input type="hidden" name="zbtype" id="zbtype" value="6">
<div>
<label for="unameinfo" class="block text-sm font-medium text-gray-700 mb-1">姓名</label>
<input type="text" id="unameinfo" name="unameinfo"
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-primary transition-all"
placeholder="请输入您的姓名" required>
</div>
<div>
<label for="countryinfo"
class="block text-sm font-medium text-gray-700 mb-1">国家/地区代码</label>
<select id="countryinfo" name="countryinfo"
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-primary transition-all"
required>
<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="+1">+1 加拿大</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>
<label for="umoblie" class="block text-sm font-medium text-gray-700 mb-1">电话号码</label>
<input type="tel" name="umoblie" id="umoblie" placeholder="请输入您的手机号码(可包含空格、连字符等)"
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-primary transition-all"
autocomplete="off" required>
</div>
<div>
<label for="uwechat" class="block text-sm font-medium text-gray-700 mb-1">微信ID</label>
<input type="text" name="uwechat" id="uwechat" placeholder="微信ID ( 如没有WhatsApp )"
autocomplete="off"
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-primary transition-all">
</div>
<div>
<label for="email" class="block text-sm font-medium text-gray-700 mb-1">电子邮箱</label>
<input type="email" placeholder="请输入您的邮箱" name="uemail" id="uemail" autocomplete="off"
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-primary transition-all"
required>
</div>
<div class="flex items-start">
<input type="checkbox" id="agreement" name="agreement" class="mt-1 mr-2" required>
<label for="agreement" class="text-sm text-gray-600">
我同意接收相关产品和服务的资讯
</label>
</div>
<button type="submit"
class="w-full py-3 px-6 rounded-lg gradient-bg text-white font-medium hover:shadow-lg hover:shadow-primary/20 transition-all transform hover:-translate-y-0.5">
提交注册
</button>
</form>
</div>
</div>
</div>
</div>
</section>
<!-- 页脚 -->
<footer class="bg-dark text-white py-12 px-4">
<div class="container mx-auto max-w-6xl">
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 mb-8">
<div>
<div class="flex items-center space-x-2 mb-6">
<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="text-xl font-bold">夺宝奇兵</span>
</div>
<p class="text-gray-400 mb-6">
AI炒股时代 机构界的黑科技!
</p>
<div class="flex space-x-4">
<a href="#"
class="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-primary transition-colors">
<i class="fa fa-facebook"></i>
</a>
<a href="#"
class="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-primary transition-colors">
<i class="fa fa-twitter"></i>
</a>
<a href="#"
class="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-primary transition-colors">
<i class="fa fa-linkedin"></i>
</a>
<a href="#"
class="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-primary transition-colors">
<i class="fa fa-instagram"></i>
</a>
</div>
</div>
<div>
<h4 class="text-lg font-semibold mb-6">产品</h4>
<ul class="space-y-3">
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解弘历云版软件" target="_blank"
class="text-gray-400 hover:text-white transition-colors">弘历云版软件</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解HomilyChart"
target="_blank" class="text-gray-400 hover:text-white transition-colors">HomilyChart</a>
</li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解夺宝奇兵" target="_blank"
class="text-gray-400 hover:text-white transition-colors">夺宝奇兵</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解博股会员"
class="text-gray-400 hover:text-white transition-colors">博股会员</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解最新软件"
class="text-gray-400 hover:text-white transition-colors">最新软件</a></li>
</ul>
</div>
<div>
<h4 class="text-lg font-semibold mb-6">公司</h4>
<ul class="space-y-3">
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要咨询" target="_blank"
class="text-gray-400 hover:text-white transition-colors">关于我们</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要咨询" target="_blank"
class="text-gray-400 hover:text-white transition-colors">团队介绍</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要咨询" target="_blank"
class="text-gray-400 hover:text-white transition-colors">联系我们</a></li>
</ul>
</div>
<div>
<h4 class="text-lg font-semibold mb-6">支持</h4>
<ul class="space-y-3">
<li><a href="./hkhcdbqbGuide.html"
class="text-gray-400 hover:text-white transition-colors">帮助中心</a>
</li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我有问题" target="_blank"
class="text-gray-400 hover:text-white transition-colors">常见问题</a></li>
</ul>
</div>
</div>
<div class="border-t border-gray-800 pt-8 flex flex-col md:flex-row justify-between items-center">
<p class="text-gray-500 text-sm mb-4 md:mb-0">&copy; Copyright 2026.Capitalmaster Pte Ltd All Rights
Reserved.<br /></p>
<div class="flex space-x-6">
如需帮助,请及时联系我们!
</div>
</div>
</div>
</footer>
<!-- 表单提交成功提示 -->
<div id="successModal" class="fixed inset-0 bg-black/50 flex items-center justify-center z-50 hidden">
<div class="bg-white rounded-2xl p-8 max-w-md w-full mx-4 transform transition-all">
<div class="text-center">
<div class="w-16 h-16 rounded-full bg-green-100 flex items-center justify-center mx-auto mb-6">
<i class="fa fa-check text-secondary text-2xl"></i>
</div>
<h3 class="text-xl font-bold mb-2">注册成功!</h3>
<p class="text-gray-600 mb-6">感谢您的注册,我们的顾问将尽快与您联系。</p>
<button id="closeModal"
class="px-6 py-2 bg-primary text-white rounded-lg hover:bg-primary/90 transition-colors">
确定
</button>
</div>
</div>
</div>
<!-- JavaScript - 从外部文件导入API,并包含表单提交与全球兼容的校验逻辑 -->
<script type="module">
// 从指定路径导入 registerMemberApi 函数
import { registerMemberApi } from './src/api/hkmember.js';
// 等待 DOM 加载完成
document.addEventListener('DOMContentLoaded', function () {
const form = document.getElementById('registrationForm');
const successModal = document.getElementById('successModal');
const closeModalBtn = document.getElementById('closeModal');
const submitBtn = form.querySelector('button[type="submit"]');
// 关闭模态框
function closeModal() {
successModal.classList.add('hidden');
}
closeModalBtn.addEventListener('click', closeModal);
successModal.addEventListener('click', function (e) {
if (e.target === successModal) closeModal();
});
// ============================================
// 全球兼容的校验函数
// ============================================
/**
* 邮箱校验 - 支持全球各种域名格式
* @param {string} email - 邮箱地址
* @returns {boolean} - 是否有效
*/
function isValidEmail(email) {
// 基础格式校验:必须包含@和点号,不能有空格
const emailRegex = /^[^\s@]+@([^\s@]+\.)+[^\s@]+$/;
if (!emailRegex.test(email)) return false;
// 长度限制(RFC 5322 标准:本地部分最长64,域名最长255,总长不超过254)
if (email.length > 254) return false;
// 检查是否包含连续的点号(如 user..name@example.com)
if (email.includes('..')) return false;
return true;
}
/**
* 手机号校验 - 全球宽松模式,不限制具体格式
* 只做最基本的检查:不能为空,清理后至少包含4位数字
* 注意:真正的号码有效性验证应在后端完成
* @param {string} phone - 原始手机号输入
* @returns {boolean} - 是否通过基础检查
*/
function isValidPhone(phone) {
if (!phone || phone.trim() === '') return false;
// 移除所有非数字字符(保留数字)
const digitsOnly = phone.replace(/[^\d]/g, '');
// 检查是否至少包含4位数字(全球最短手机号约为4-5位)
// 同时不超过20位数字(全球最长手机号约15位,20位留有足够余量)
if (digitsOnly.length < 4 || digitsOnly.length > 20) {
return false;
}
return true;
}
/**
* 清理手机号 - 提取纯数字部分,用于提交给后端
* 注意:国家代码已经通过下拉框单独传递,这里只提取用户输入的本地号码部分
* @param {string} phone - 原始手机号输入
* @returns {string} - 清理后的纯数字字符串
*/
function cleanPhoneNumber(phone) {
if (!phone) return '';
// 移除所有非数字字符,只保留数字
let cleaned = phone.replace(/[^\d]/g, '');
// 如果用户输入了国家代码(如开头有00或+86的情况),自动移除开头的00或+后面的数字
// 因为国家代码已经通过下拉框单独传递了
// 移除开头的00(国际长途前缀)
cleaned = cleaned.replace(/^(00)/, '');
return cleaned;
}
// 表单提交处理
form.addEventListener('submit', async function (e) {
e.preventDefault();
// 获取表单字段值
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 agreement = document.getElementById('agreement').checked;
// 姓名校验
if (!name) {
alert('请输入姓名');
document.getElementById('unameinfo').focus();
return;
}
if (name.length > 50) {
alert('姓名长度不能超过50个字符');
document.getElementById('unameinfo').focus();
return;
}
// 手机号校验(宽松模式,全球兼容)
if (!phoneRaw) {
alert('请输入电话号码');
document.getElementById('umoblie').focus();
return;
}
if (!isValidPhone(phoneRaw)) {
alert('请输入有效的电话号码(至少4位数字)\n\n示例:\n• 91234567\n• 09123456789\n• 123-4567\n• 1234 5678');
document.getElementById('umoblie').focus();
return;
}
// 邮箱校验
if (!email) {
alert('请输入电子邮箱');
document.getElementById('uemail').focus();
return;
}
if (!isValidEmail(email)) {
alert('请输入有效的电子邮箱地址\n\n示例:\n• username@example.com\n• name@company.co.uk');
document.getElementById('uemail').focus();
return;
}
// 协议确认
if (!agreement) {
alert('请同意接收相关产品和服务的资讯');
return;
}
// 清理手机号(提取纯数字)
const cleanedPhone = cleanPhoneNumber(phoneRaw);
// 组装接口参数(按照 registerMemberApi 要求的格式)
const requestData = {
name: name,
code: countryCode,
tel: cleanedPhone,
weChat: wechat || '',
email: email,
feedback_content: '',
feedback_type: '' // 4:其他建议
};
// 显示加载状态
const originalBtnText = submitBtn.innerHTML;
submitBtn.disabled = true;
submitBtn.innerHTML = '提交中...';
try {
// 调用导入的 registerMemberApi 函数
const result = await registerMemberApi(requestData);
// 根据返回结果判断是否成功
if (result.code === 200) {
successModal.classList.remove('hidden');
form.reset();
document.getElementById('agreement').checked = false;
} else {
alert('注册失败:' + (result.msg || '未知错误,请稍后重试'));
}
} catch (error) {
console.error('提交注册出错:', error);
alert('网络错误或接口异常,请稍后重试');
} finally {
submitBtn.disabled = false;
submitBtn.innerHTML = originalBtnText;
}
});
});
</script>
</body>
</html>

2076
hkhcdbqbDownload.html
File diff suppressed because it is too large
View File

669
hkhcdbqbGuide.html

@ -0,0 +1,669 @@
<!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,HomilyLink,夺宝奇兵HomilyLink,股票体检专家,AI预测大模型,AI炒股时代,AI情绪大模型,超级云脑,夺宝利剑,AI金牛,AI探牛,AI雷达,AI小财神,大牛有型,金牛送福,牛刀小试,HomilyChart,免费体验,机构界的黑科技,数据分析时代,John Lu谈股,John Lu谈股财富圈">
<meta http-equiv="description" content="HomilyLink">
<title>夺宝奇兵 - AI炒股时代,机构界的黑科技!</title>
<!-- 引入Tailwind CSS -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- 引入Font Awesome -->
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- 配置Tailwind自定义颜色和字体(与原页面保持一致) -->
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: '#3B82F6',
secondary: '#10B981',
accent: '#8B5CF6',
dark: '#1E293B',
light: '#F8FAFC'
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
},
},
}
}
</script>
<!-- 自定义工具类 -->
<style type="text/tailwindcss">
@layer utilities {
.content-auto {
content-visibility: auto;
}
.text-shadow {
text-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.card-hover {
@apply transition-all duration-300 hover:shadow-xl hover:-translate-y-1;
}
.gradient-bg {
background: linear-gradient(135deg, #3B82F6 0%, #8B5CF6 100%);
}
}
</style>
<style>
/* 全局动画定义 */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-fade-in {
opacity: 0;
animation: fadeIn 0.6s ease-out forwards;
}
.delay-100 {
animation-delay: 0.1s;
}
.delay-200 {
animation-delay: 0.2s;
}
/* 平滑滚动 */
html {
scroll-behavior: smooth;
}
/* 视频容器比例控制 */
.video-container {
position: relative;
padding-bottom: 56.25%;
/* 16:9 比例 */
height: 0;
overflow: hidden;
border-radius: 1.5rem;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
}
.video-container iframe,
.video-container video {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
}
/* 图片展示样式 */
.image-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1.5rem;
}
.image-item {
border-radius: 1rem;
overflow: hidden;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
transition: all 0.3s ease;
cursor: pointer;
position: relative;
}
.image-item img {
width: 100%;
height: 200px;
object-fit: cover;
transition: transform 0.5s ease;
}
.image-item:hover {
transform: translateY(-5px);
box-shadow: 0 12px 20px rgba(0, 0, 0, 0.12);
}
.image-item:hover img {
transform: scale(1.05);
}
.image-caption {
padding: 1rem;
background-color: white;
}
/* 图片查看器 */
.image-viewer {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.9);
display: none;
justify-content: center;
align-items: center;
z-index: 100;
padding: 2rem;
}
.image-viewer.active {
display: flex;
}
.viewer-content {
max-width: 90%;
max-height: 90%;
position: relative;
}
.viewer-image {
max-width: 100%;
max-height: 80vh;
border-radius: 0.5rem;
}
.viewer-caption {
color: white;
text-align: center;
margin-top: 1rem;
font-size: 1.2rem;
}
.close-viewer {
position: absolute;
top: -40px;
right: 0;
color: white;
font-size: 2rem;
cursor: pointer;
transition: color 0.3s ease;
}
.viewer-nav {
position: absolute;
top: 50%;
width: 100%;
display: flex;
justify-content: space-between;
transform: translateY(-50%);
padding: 0 1rem;
}
.viewer-nav button {
background-color: rgba(255, 255, 255, 0.2);
border: none;
color: white;
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: background-color 0.3s ease;
}
</style>
</head>
<body class="font-sans bg-light text-dark">
<!-- 导航栏 -->
<header class="fixed w-full bg-white/90 backdrop-blur-sm shadow-sm z-50 transition-all duration-300">
<div class="container mx-auto px-4 py-3 flex justify-between items-center">
<a href="#" class="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="text-xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-primary to-accent">夺宝奇兵-操作指南</span>
</a>
<!-- 桌面导航 -->
<nav class="hidden md:flex items-center space-x-6">
<a href="#video-guide" class="font-medium hover:text-primary transition-colors">视频指南</a>
<a href="#image-guide" class="font-medium hover:text-primary transition-colors">图片说明</a>
<a href="./hkhcdbqbDownload.html" class="font-medium hover:text-primary transition-colors">软件下载</a>
<a href="https://api.whatsapp.com/send?phone=6588792879&text=夺宝奇兵指南我需要帮助" target="_blank"
class="px-5 py-2 rounded-full gradient-bg text-white font-medium hover:shadow-lg transition-all">联系支持</a>
</nav>
<!-- 移动端菜单按钮 -->
<button id="menuBtn" class="md:hidden text-xl">
<i class="fa fa-bars"></i>
</button>
</div>
<!-- 移动端导航菜单 -->
<div id="mobileMenu" class="md:hidden hidden bg-white border-t animate-fade-in">
<div class="container mx-auto px-4 py-3 flex flex-col space-y-4">
<a href="#video-guide" class="font-medium py-2 hover:text-primary transition-colors">视频指南</a>
<a href="#image-guide" class="font-medium py-2 hover:text-primary transition-colors">图片说明</a>
<a href="hcdbqb-download.asp" class="font-medium py-2 hover:text-primary transition-colors">图片说明</a>
<a href="https://api.whatsapp.com/send?phone=6588792879&text=夺宝奇兵指南我需要帮助" target="_blank"
class="py-2 rounded-full gradient-bg text-white font-medium text-center hover:shadow-lg transition-all">联系支持</a>
</div>
</div>
</header>
<!-- 英雄区域 -->
<section class="pt-32 pb-20 md:pt-40 md:pb-32 px-4 bg-gradient-to-b from-blue-50 to-white">
<div class="container mx-auto max-w-6xl text-center">
<div class="animate-fade-in">
<h1 class="text-[clamp(2rem,5vw,3rem)] font-bold leading-tight text-shadow mb-6">
操作指南中心
</h1>
<p class="text-lg text-gray-600 mb-8 max-w-2xl mx-auto">
通过视频以及图文说明,教你如何使用夺宝奇兵软件以及如何观看直播和观看重播!
</p>
<div class="flex flex-col sm:flex-row justify-center gap-4">
<a href="#video-guide"
class="px-8 py-3 rounded-full gradient-bg text-white font-medium text-center hover:shadow-lg hover:shadow-primary/20 transition-all transform hover:-translate-y-0.5">
观看视频教程
</a>
<a href="#image-guide"
class="px-8 py-3 rounded-full border-2 border-primary text-primary font-medium text-center hover:bg-primary/5 transition-all">
查看图文说明
</a>
</div>
</div>
</div>
</section>
<!-- 视频指南区域 -->
<section id="video-guide" class="py-20 px-4 bg-white">
<div class="container mx-auto max-w-5xl">
<div class="text-center mb-12 animate-fade-in">
<h2 class="text-[clamp(1.5rem,3vw,2.5rem)] font-bold mb-4">HomilyLink指南视频</h2>
<p class="text-gray-600 max-w-2xl mx-auto">详细的视频教程,如何体验夺宝奇兵,如何听课,如何看重播!</p>
</div>
<!-- 主视频播放窗口 -->
<div class="bg-white rounded-2xl shadow-xl p-6 md:p-8 animate-fade-in delay-100">
<h3 class="text-xl md:text-2xl font-semibold mb-4">HomilyLink操作指南 &nbsp;|&nbsp;课程直播以及重播指南</h3>
<div class="video-container">
<!-- 兼容性视频播放器 -->
<video id="guideVideo" controls poster="https://d31zlh4on95l9h.cloudfront.net/images/7da138ae80e260196f892a1fd813c66d.jpg" controlsList="nodownload"
class="w-full"></video>
</div>
<div class="mt-6 flex flex-wrap items-center justify-between gap-4">
<div>
<p class="text-gray-600">时长: 02:14</p>
<p class="text-gray-500 text-sm mt-1">HomilyLink操作指南 </p>
</div>
<div class="flex space-x-3">
<button
class="flex items-center space-x-1 px-4 py-2 rounded-lg bg-gray-100 hover:bg-gray-200 transition-colors">
<img alt="夺宝奇兵" src="https://hc.homilychart.com/hc/250121/img/20230711171637.png" style="width: 30px;height: 30px;">
<span><a href="https://api.whatsapp.com/send?phone=6588792879&text=进HomilyLink听课需要帮助"
target="_blank" class="text-gray-400 transition-colors"
style="color: black">点击寻求帮助</a></span>
</button>
</div>
</div>
</div>
</div>
</section>
<!-- 图片说明区域 -->
<section id="image-guide" class="py-20 px-4 bg-gray-50">
<div class="container mx-auto max-w-6xl" style="display: none;">
<div class="text-center mb-16 animate-fade-in">
<h2 class="text-[clamp(1.5rem,3vw,2.5rem)] font-bold mb-4">操作步骤图解</h2>
<p class="text-gray-600 max-w-2xl mx-auto">详细的图文说明,带您一步步完成各项操作设置</p>
</div>
<!-- 图片过滤标签 -->
<div class="flex flex-wrap justify-center gap-3 mb-10 animate-fade-in delay-100">
<button class="filter-btn active px-5 py-2 rounded-full bg-primary text-white font-medium"
data-filter="all">全部步骤</button>
<button
class="filter-btn px-5 py-2 rounded-full bg-white text-gray-700 font-medium hover:bg-gray-100 transition-colors"
data-filter="setup">安装登录</button>
<button
class="filter-btn px-5 py-2 rounded-full bg-white text-gray-700 font-medium hover:bg-gray-100 transition-colors"
data-filter="operation">观看直播</button>
<button
class="filter-btn px-5 py-2 rounded-full bg-white text-gray-700 font-medium hover:bg-gray-100 transition-colors"
data-filter="advanced">观看重播</button>
</div>
<!-- 图片网格 -->
<div class="image-grid animate-fade-in delay-200">
<!-- 安装设置 -->
<div class="image-item" data-category="setup" data-caption="步骤1:开箱与配件检查">
<img src="https://picsum.photos/seed/setup1/600/400" alt="开箱与配件检查">
<div class="image-caption">
<h4 class="font-medium">步骤1:开箱与配件检查</h4>
<p class="text-gray-600 text-sm mt-1">检查包装内物品是否完整,包含主机、电源线、数据线和说明书</p>
</div>
</div>
<div class="image-item" data-category="setup" data-caption="步骤2:设备连接与安装">
<img src="https://picsum.photos/seed/setup2/600/400" alt="设备连接与安装">
<div class="image-caption">
<h4 class="font-medium">步骤2:设备连接与安装</h4>
<p class="text-gray-600 text-sm mt-1">按照图示连接电源和数据线,固定设备到合适位置</p>
</div>
</div>
<!-- 基本操作 -->
<div class="image-item" data-category="operation" data-caption="步骤3:开机与初始设置">
<img src="https://picsum.photos/seed/operate1/600/400" alt="开机与初始设置">
<div class="image-caption">
<h4 class="font-medium">步骤3:开机与初始设置</h4>
<p class="text-gray-600 text-sm mt-1">首次开机后按照向导完成语言、网络等基本设置</p>
</div>
</div>
<div class="image-item" data-category="operation" data-caption="步骤4:主界面功能介绍">
<img src="https://picsum.photos/seed/operate2/600/400" alt="主界面功能介绍">
<div class="image-caption">
<h4 class="font-medium">步骤4:主界面功能介绍</h4>
<p class="text-gray-600 text-sm mt-1">了解主界面布局和各功能模块的位置与作用</p>
</div>
</div>
<!-- 高级功能 -->
<div class="image-item" data-category="advanced" data-caption="步骤5:用户权限管理">
<img src="https://picsum.photos/seed/advanced1/600/400" alt="用户权限管理">
<div class="image-caption">
<h4 class="font-medium">步骤5:用户权限管理</h4>
<p class="text-gray-600 text-sm mt-1">如何创建和管理不同权限的用户账户</p>
</div>
</div>
<div class="image-item" data-category="advanced" data-caption="步骤6:数据备份与恢复">
<img src="https://picsum.photos/seed/advanced2/600/400" alt="数据备份与恢复">
<div class="image-caption">
<h4 class="font-medium">步骤6:数据备份与恢复</h4>
<p class="text-gray-600 text-sm mt-1">设置自动备份和手动备份,以及数据恢复方法</p>
</div>
</div>
</div>
</div>
</section>
<!-- 图片查看器 -->
<div class="image-viewer" id="imageViewer">
<div class="viewer-content">
<span class="close-viewer" id="closeViewer">&times;</span>
<div class="viewer-nav">
<button id="prevImage"><i class="fa fa-chevron-left"></i></button>
<button id="nextImage"><i class="fa fa-chevron-right"></i></button>
</div>
<img src="" alt="" class="viewer-image" id="viewerImage">
<div class="viewer-caption" id="viewerCaption"></div>
</div>
</div>
<!-- 页脚 -->
<footer class="bg-dark text-white py-12 px-4">
<div class="container mx-auto max-w-6xl">
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 mb-8">
<div>
<div class="flex items-center space-x-2 mb-6">
<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="text-xl font-bold">夺宝奇兵</span>
</div>
<p class="text-gray-400 mb-6">
AI炒股时代 机构界的黑科技!
</p>
<div class="flex space-x-4">
<a href="#"
class="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-primary transition-colors">
<i class="fa fa-facebook"></i>
</a>
<a href="#"
class="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-primary transition-colors">
<i class="fa fa-twitter"></i>
</a>
<a href="#"
class="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-primary transition-colors">
<i class="fa fa-linkedin"></i>
</a>
<a href="#"
class="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center hover:bg-primary transition-colors">
<i class="fa fa-instagram"></i>
</a>
</div>
</div>
<div>
<h4 class="text-lg font-semibold mb-6">产品</h4>
<ul class="space-y-3">
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解弘历云版软件" target="_blank"
class="text-gray-400 hover:text-white transition-colors">弘历云版软件</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解HomilyChart"
target="_blank" class="text-gray-400 hover:text-white transition-colors">HomilyChart</a>
</li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解夺宝奇兵" target="_blank"
class="text-gray-400 hover:text-white transition-colors">夺宝奇兵</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解博股会员"
class="text-gray-400 hover:text-white transition-colors">博股会员</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要了解最新软件"
class="text-gray-400 hover:text-white transition-colors">最新软件</a></li>
</ul>
</div>
<div>
<h4 class="text-lg font-semibold mb-6">公司</h4>
<ul class="space-y-3">
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要咨询" target="_blank"
class="text-gray-400 hover:text-white transition-colors">关于我们</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要咨询" target="_blank"
class="text-gray-400 hover:text-white transition-colors">团队介绍</a></li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我要咨询" target="_blank"
class="text-gray-400 hover:text-white transition-colors">联系我们</a></li>
</ul>
</div>
<div>
<h4 class="text-lg font-semibold mb-6">支持</h4>
<ul class="space-y-3">
<li><a href="./hkhcdbqbGuide.html" class="text-gray-400 hover:text-white transition-colors">帮助中心</a>
</li>
<li><a href="https://api.whatsapp.com/send?phone=6588792879&text=我有问题" target="_blank"
class="text-gray-400 hover:text-white transition-colors">常见问题</a></li>
</ul>
</div>
</div>
<div class="border-t border-gray-800 pt-8 flex flex-col md:flex-row justify-between items-center">
<p class="text-gray-500 text-sm mb-4 md:mb-0">&copy; Copyright 2026.Capitalmaster Pte Ltd All Rights
Reserved.<br /></p>
<div class="flex space-x-6">
如需帮助,请及时联系我们!
</div>
</div>
</div>
</footer>
<!-- JavaScript -->
<script>
// 移动端菜单切换
const menuBtn = document.getElementById('menuBtn');
const mobileMenu = document.getElementById('mobileMenu');
menuBtn.addEventListener('click', () => {
mobileMenu.classList.toggle('hidden');
// 切换图标
const icon = menuBtn.querySelector('i');
if (icon.classList.contains('fa-bars')) {
icon.classList.replace('fa-bars', 'fa-times');
} else {
icon.classList.replace('fa-times', 'fa-bars');
}
});
// 导航栏滚动效果
window.addEventListener('scroll', () => {
const header = document.querySelector('header');
if (window.scrollY > 50) {
header.classList.add('py-2', 'shadow');
header.classList.remove('py-3');
} else {
header.classList.add('py-3');
header.classList.remove('py-2', 'shadow');
}
});
// 图片查看器功能
const imageViewer = document.getElementById('imageViewer');
const viewerImage = document.getElementById('viewerImage');
const viewerCaption = document.getElementById('viewerCaption');
const closeViewer = document.getElementById('closeViewer');
const prevImage = document.getElementById('prevImage');
const nextImage = document.getElementById('nextImage');
const imageItems = document.querySelectorAll('.image-item');
let currentImageIndex = 0;
let filteredImages = Array.from(imageItems);
// 打开图片查看器
imageItems.forEach((item) => {
item.addEventListener('click', () => {
currentImageIndex = filteredImages.indexOf(item);
updateViewer();
imageViewer.classList.add('active');
document.body.style.overflow = 'hidden';
});
});
// 关闭图片查看器
closeViewer.addEventListener('click', () => {
imageViewer.classList.remove('active');
document.body.style.overflow = '';
});
// 点击查看器外部关闭
imageViewer.addEventListener('click', (e) => {
if (e.target === imageViewer) {
imageViewer.classList.remove('active');
document.body.style.overflow = '';
}
});
// 上一张/下一张图片
prevImage.addEventListener('click', (e) => {
e.stopPropagation();
currentImageIndex = (currentImageIndex - 1 + filteredImages.length) % filteredImages.length;
updateViewer();
});
nextImage.addEventListener('click', (e) => {
e.stopPropagation();
currentImageIndex = (currentImageIndex + 1) % filteredImages.length;
updateViewer();
});
// 更新查看器内容
function updateViewer() {
const currentItem = filteredImages[currentImageIndex];
const imgSrc = currentItem.querySelector('img').src;
const caption = currentItem.dataset.caption;
viewerImage.src = imgSrc;
viewerImage.alt = caption;
viewerCaption.textContent = caption;
}
// 图片过滤功能
const filterBtns = document.querySelectorAll('.filter-btn');
filterBtns.forEach(btn => {
btn.addEventListener('click', () => {
// 更新按钮样式
filterBtns.forEach(b => {
b.classList.remove('active', 'bg-primary', 'text-white');
b.classList.add('bg-white', 'text-gray-700', 'hover:bg-gray-100');
});
btn.classList.add('active', 'bg-primary', 'text-white');
btn.classList.remove('bg-white', 'text-gray-700', 'hover:bg-gray-100');
const filter = btn.dataset.filter;
// 过滤图片
filteredImages = [];
imageItems.forEach(item => {
if (filter === 'all' || item.dataset.category === filter) {
item.style.display = 'block';
filteredImages.push(item);
} else {
item.style.display = 'none';
}
});
});
});
// 滚动动画
const animateOnScroll = () => {
const elements = document.querySelectorAll('.animate-fade-in');
elements.forEach(element => {
const elementPosition = element.getBoundingClientRect().top;
const windowHeight = window.innerHeight;
if (elementPosition < windowHeight - 100) {
element.style.opacity = '1';
element.style.transform = 'translateY(0)';
}
});
};
// 初始加载和滚动时执行动画
window.addEventListener('load', animateOnScroll);
window.addEventListener('scroll', animateOnScroll);
// 键盘导航支持
document.addEventListener('keydown', (e) => {
if (imageViewer.classList.contains('active')) {
if (e.key === 'Escape') {
imageViewer.classList.remove('active');
document.body.style.overflow = '';
} else if (e.key === 'ArrowLeft') {
currentImageIndex = (currentImageIndex - 1 + filteredImages.length) % filteredImages.length;
updateViewer();
} else if (e.key === 'ArrowRight') {
currentImageIndex = (currentImageIndex + 1) % filteredImages.length;
updateViewer();
}
}
});
</script>
<script>
// 等页面完全加载后再执行(避免播放器还没渲染好)
window.onload = function () {
const video = document.getElementById('guideVideo');
// 这里放你的真实视频地址(本地/网络都可以)
const realVideoSrc = "https://hc.homilychart.com/hc/250121/img/homilylink-guide.mp4";
// 动态添加视频源(支持多格式,兼容性更好)
const mp4Source = document.createElement('source');
mp4Source.src = realVideoSrc;
mp4Source.type = 'video/mp4';
video.appendChild(mp4Source);
// 触发播放器加载(可选,确保视频能正常播放)
video.load();
};
</script>
</body>
</html>

860
hkhcdbqbManagement.html

@ -0,0 +1,860 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>管理后台 · Adam说港股导流</title>
<style>
.tab-container {
max-width: 1200px;
margin: 0 0 12px 0;
padding: 0 16px;
}
.tabs {
display: flex;
gap: 50px;
padding: 4px;
border-radius: 8px;
width: fit-content;
}
.tab {
padding: 10px 20px;
border-radius: 6px;
border: none;
background: transparent;
color: #131212;
font-weight: 700;
cursor: pointer;
transition: all 0.3s ease;
font-size: 16px;
white-space: nowrap;
}
.tab:hover {
background: rgba(46, 125, 50, 0.1);
color: #25D366;
}
.tab.active {
background: #BAF7D0;
color: #0E4322;
box-shadow: 0 2px 4px rgba(46, 125, 50, 0.3);
}
* {
box-sizing: border-box;
}
body {
font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;
padding: 24px;
background: #f0f2f6;
color: #1e293b;
margin: 0;
}
.card {
background: #ffffff;
padding: 20px 16px 24px 16px;
border-radius: 20px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.05);
max-width: 100%;
overflow-x: auto;
}
/* 表格容器实现横向滚动(移动端友好),同时保证单元格内容溢出省略 */
.table-wrapper {
overflow-x: auto;
border-radius: 14px;
margin-top: 8px;
}
table {
width: 100%;
border-collapse: collapse;
min-width: 1000px;
font-size: 13.5px;
}
th,
td {
padding: 12px 10px;
border-bottom: 1px solid #e9edf2;
text-align: center;
vertical-align: middle;
max-width: 0;
/* 辅助溢出省略 */
}
/* 表头固定宽度 + 允许文字折行但优先省略 */
th {
background: #f8fafc;
font-weight: 600;
color: #1e293b;
letter-spacing: 0.3px;
white-space: nowrap;
}
/* 单元格内容超出宽度后隐藏文字,鼠标悬浮显示完整内容 */
td {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 180px;
transition: background 0.1s;
}
/* 针对特定列单独控制最大宽度,确保不超出表头宽度 */
td:nth-child(1) {
max-width: 55px;
}
/* 姓名 */
td:nth-child(2) {
max-width: 100px;
}
/* WhatsApp按钮列 */
td:nth-child(3) {
max-width: 100px;
overflow: visible;
white-space: normal;
}
/* 国家代码 */
td:nth-child(4) {
max-width: 90px;
}
/* 电话号码 */
td:nth-child(5) {
max-width: 120px;
}
/* 微信ID */
td:nth-child(6) {
max-width: 120px;
}
/* 邮箱 */
td:nth-child(7) {
max-width: 150px;
}
/* 反馈内容 */
td:nth-child(8) {
max-width: 120px;
}
/* 反馈类型 */
td:nth-child(9) {
max-width: 100px;
}
/* 添加时间 */
td:nth-child(10) {
max-width: 160px;
}
/* 是否联系 */
td:nth-child(11) {
max-width: 100px;
white-space: normal;
}
/* 备注 */
td:nth-child(12) {
max-width: 160px;
}
/* 操作 */
td:nth-child(13) {
max-width: 100px;
white-space: normal;
}
/* 悬浮显示完整内容(自定义title特性,但使用全局title亦可,增强体验)*/
td[title] {
cursor: help;
}
.controls {
display: flex;
gap: 16px;
align-items: center;
flex-wrap: wrap;
margin-top: 20px;
background: #ffffff;
padding: 8px 4px;
}
.pagination {
display: flex;
gap: 6px;
align-items: center;
margin-left: auto;
flex-wrap: wrap;
}
.btn {
padding: 6px 12px;
border-radius: 30px;
border: 1px solid #d4d9e2;
background: #fff;
cursor: pointer;
font-size: 12.5px;
font-weight: 500;
transition: all 0.2s ease;
}
.btn:hover:not(:disabled) {
background-color: #f1f5f9;
border-color: #94a3b8;
}
.btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.btn.primary {
background: #2563eb;
color: white;
border-color: #2563eb;
}
.btn.primary:hover:not(:disabled) {
background: #1d4ed8;
}
.btn.whatsapp {
background: #25D366;
color: #fff;
border-color: #1da15a;
}
.btn.whatsapp:hover {
background: #20b859;
}
.status-btn {
padding: 5px 12px;
border-radius: 24px;
border: none;
font-weight: 500;
cursor: pointer;
font-size: 12px;
transition: 0.1s;
}
.status-0 {
background: #fee2e2;
color: #b91c1c;
border: 1px solid #fecaca;
}
.status-1 {
background: #dcfce7;
color: #15803d;
border: 1px solid #bbf7d0;
}
.btn.active {
background: #2563eb;
color: white;
border-color: #2563eb;
}
select,
input[type="number"] {
padding: 6px 12px;
border-radius: 30px;
border: 1px solid #cbd5e1;
background: white;
font-size: 13px;
}
.small {
font-size: 13px;
color: #475569;
}
@media (max-width: 720px) {
.controls {
flex-direction: column;
align-items: stretch;
}
.pagination {
margin-left: 0;
justify-content: center;
}
}
/* 备注模态框 */
#noteModal {
display: none;
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(3px);
align-items: center;
justify-content: center;
z-index: 10000;
}
#noteModal .dialog {
background: #fff;
padding: 24px;
border-radius: 28px;
width: 90%;
max-width: 520px;
box-shadow: 0 25px 40px rgba(0, 0, 0, 0.2);
}
#noteModal textarea {
width: 100%;
min-height: 130px;
padding: 12px;
border-radius: 18px;
border: 1px solid #cbd5e1;
font-size: 14px;
font-family: inherit;
resize: vertical;
}
.toast {
position: fixed;
top: 24px;
left: 50%;
transform: translateX(-50%) translateY(-30px);
background: #1e293b;
color: white;
padding: 10px 20px;
border-radius: 60px;
font-size: 14px;
font-weight: 500;
opacity: 0;
transition: all 0.2s ease;
z-index: 11000;
pointer-events: none;
box-shadow: 0 6px 14px rgba(0, 0, 0, 0.1);
}
.toast.show {
opacity: 1;
transform: translateX(-50%) translateY(0);
}
/* 登录遮罩 */
#loginCheckModal {
display: none;
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.75);
align-items: center;
justify-content: center;
z-index: 99999;
}
#loginCheckModal .dialog {
background: #fff;
padding: 32px;
border-radius: 32px;
width: 90%;
max-width: 380px;
text-align: center;
}
#loginCheckModal h3 {
margin: 0 0 12px;
color: #e11d48;
}
</style>
</head>
<body>
<div id="loginCheckModal">
<div class="dialog">
<h3>🔐 访问被拒绝</h3>
<p>您尚未登录或登录已过期,请重新登录系统。</p>
<button class="btn primary" id="goToLoginBtn">前往登录页面</button>
</div>
</div>
<div class="tab-container">
<div class="tabs">
<button class="tab active" data-tab="win-us-stock">Adam说港股导流</button>
</div>
</div>
<div class="card">
<div class="table-wrapper">
<table aria-describedby="成员反馈列表">
<thead>
<tr>
<th style="width: 50px">序号</th>
<th style="width: 100px">姓名</th>
<th style="width: 100px">WhatsApp</th>
<th style="width: 90px">国家/地区代码</th>
<th style="width: 120px">电话号码</th>
<th style="width: 120px">微信ID</th>
<th style="width: 150px">邮箱</th>
<th style="width: 130px">反馈内容</th>
<th style="width: 100px">反馈类型</th>
<th style="width: 160px">添加时间</th>
<th style="width: 100px">是否联系</th>
<th style="width: 160px">备注</th>
<th style="width: 100px">操作</th>
</tr>
</thead>
<tbody id="tableBody"></tbody>
</table>
</div>
<div class="controls">
<div class="small">
每页显示
<select id="pageSizeSelect">
<option value="20" selected>20</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="200">200</option>
</select>
</div>
<div class="small"><span id="totalCount">0</span></div>
<div class="pagination" id="pagination"></div>
</div>
</div>
<div id="noteModal">
<div class="dialog">
<h3 style="margin-top: 0;">✏️ 编辑备注</h3>
<textarea id="noteTextarea" rows="4" placeholder="输入备注信息..."></textarea>
<div style="margin-top: 20px; display: flex; justify-content: flex-end; gap: 12px;">
<button class="btn" id="noteCancelBtn">取消</button>
<button class="btn primary" id="noteSaveBtn">保存</button>
</div>
</div>
</div>
<div id="toast" class="toast"></div>
<script type="module">
import { getMemberListApi, updateMemberStateApi, editMemberNoteApi } from './src/api/hkmember.js'
// ---------- 登录验证 ----------
function checkLoginStatus() {
const isLoggedIn = localStorage.getItem('isLoggedIn') === 'true';
const loginTime = parseInt(localStorage.getItem('loginTime'), 10);
if (!isLoggedIn || isNaN(loginTime)) return false;
const hoursDiff = (new Date().getTime() - loginTime) / (1000 * 60 * 60);
return hoursDiff < 24;
}
function showLoginCheckModal() {
const modal = document.getElementById('loginCheckModal');
if (modal) modal.style.display = 'flex';
}
function hideLoginCheckModal() {
const modal = document.getElementById('loginCheckModal');
if (modal) modal.style.display = 'none';
}
function redirectToLogin() {
window.location.href = 'hkLogiManagement.html';
}
// 全局前置守卫:如果未登录则显示弹窗,返回false
function requireAuth() {
if (!checkLoginStatus()) {
showLoginCheckModal();
return false;
}
return true;
}
document.getElementById('goToLoginBtn')?.addEventListener('click', redirectToLogin);
// ---------- 映射反馈类型文字 ----------
function formatFeedbackType(typeValue) {
// 后端返回可能是字符串或数字 "1", 2, 3, 4
const val = parseInt(typeValue, 10);
switch (val) {
case 1: return '功能建议';
case 2: return '问题反馈';
case 3: return '体验优化';
case 4: return '其他建议';
default: return typeValue || '—';
}
}
let state = {
pageSize: 20,
currentPage: 1,
total: 0,
items: []
};
const tableBody = document.getElementById("tableBody");
const paginationEl = document.getElementById("pagination");
const totalCountEl = document.getElementById("totalCount");
const pageSizeSelect = document.getElementById("pageSizeSelect");
const noteModal = document.getElementById("noteModal");
const noteTextarea = document.getElementById("noteTextarea");
const noteCancelBtn = document.getElementById("noteCancelBtn");
const noteSaveBtn = document.getElementById("noteSaveBtn");
const toastEl = document.getElementById("toast");
let editingRowId = null;
function showToast(msg, isError = false) {
toastEl.textContent = msg;
toastEl.style.background = isError ? '#e11d48' : '#1e293b';
toastEl.classList.add("show");
setTimeout(() => {
toastEl.classList.remove("show");
toastEl.style.background = '#1e293b';
}, 1800);
}
// 获取数据
async function fetchPage(page, pageSize) {
if (!requireAuth()) return { items: [], total: 0 };
try {
const res = await getMemberListApi({
page: page,
page_size: pageSize,
});
if (res && typeof res.code !== "undefined" && res.code !== 200) {
throw new Error(res.msg || "接口异常");
}
const payload = res?.data || {};
state.items = payload.list || [];
state.total = payload.total || 0;
return { items: state.items, total: state.total };
} catch (err) {
console.error(err);
showToast("获取数据失败: " + (err.message || '网络错误'), true);
state.items = [];
state.total = 0;
return { items: [], total: 0 };
}
}
// 辅助函数:给td增加title悬浮完整内容(自动处理每个单元格)
function applyTitleToCells() {
const rows = tableBody.querySelectorAll('tr');
rows.forEach(row => {
const cells = row.querySelectorAll('td');
cells.forEach(cell => {
// 跳过按钮列(第三列WhatsApp按钮,第11列状态按钮,第13列操作按钮)避免title干扰
const isButtonCell = cell.querySelector('button') &&
(cell.previousElementSibling?.innerText?.includes('WhatsApp') ||
cell.querySelector('.status-btn') ||
cell.querySelector('[data-action="editNote"]'));
if (!isButtonCell && cell.innerText && cell.innerText.trim() !== '') {
const rawText = cell.innerText;
if (!cell.hasAttribute('data-has-title')) {
cell.setAttribute('title', rawText);
cell.setAttribute('data-has-title', 'true');
} else if (cell.getAttribute('title') !== rawText) {
cell.setAttribute('title', rawText);
}
} else if (!isButtonCell && cell.innerText === '') {
cell.removeAttribute('title');
}
});
});
}
// 渲染表格(带溢出省略 + 悬浮显示完整内容)
function renderTable() {
const startIndex = (state.currentPage - 1) * state.pageSize;
const items = state.items || [];
tableBody.innerHTML = items.map((item, idx) => {
const serial = startIndex + idx + 1;
const statusClass = item.isRelated ? "status-1" : "status-0";
const statusText = item.isRelated ? "已联系" : "未联系";
// 反馈类型文字转换
const feedbackTypeText = formatFeedbackType(item.feedback_type);
// 构建WhatsApp链接 (清理+号)
const cleanCode = (item.code || '').replace(/\+/g, '');
const whatsappPhone = cleanCode + (item.telephone || '');
const whatsappUrl = `https://api.whatsapp.com/send?phone=${encodeURIComponent(whatsappPhone)}&text=${encodeURIComponent('hello欢迎来到Adam说港股')}`;
// 安全转义
const name = escapeHtml(item.name || "");
const code = escapeHtml(item.code || "");
const telephone = escapeHtml(item.telephone || "");
const wechat = escapeHtml(item.wechat || "");
const email = escapeHtml(item.email || "");
const feedbackContent = escapeHtml(item.feedback_content || "");
const createdAt = escapeHtml(item.createdAt || "");
const note = escapeHtml(item.note || "");
// 注意:表格结构保持13列,反馈类型用转换后的文字
return `
<tr>
<td title="${serial}">${serial}</td>
<td title="${name}">${name}</td>
<td style="overflow: visible; white-space: normal;">
<button class="btn whatsapp" data-action="whatsapp" data-id="${item.id}">💬 WhatsApp</button>
</td>
<td title="${code}">${code}</td>
<td title="${telephone}">${telephone}</td>
<td title="${wechat}">${wechat}</td>
<td title="${email}">${email}</td>
<td title="${feedbackContent}">${feedbackContent}</td>
<td title="${feedbackTypeText}">${feedbackTypeText}</td>
<td title="${createdAt}">${createdAt}</td>
<td style="white-space: normal;">
<button class="status-btn ${statusClass}" data-action="toggle" data-id="${item.id}">${statusText}</button>
</td>
<td title="${note}">${note}</td>
<td>
<button class="btn" data-action="editNote" data-id="${item.id}" style="font-size:12px;">✎ 备注</button>
</td>
</tr>
`;
}).join("");
// 为所有普通单元格添加完整文本悬浮(动态渲染后)
const rows = tableBody.querySelectorAll('tr');
rows.forEach(row => {
const cells = row.querySelectorAll('td');
cells.forEach(cell => {
// 跳过按钮占位列(第三列、操作列以及状态列,这些列已经有点击元素,不干扰title)
const hasImportantBtn = cell.querySelector('[data-action="whatsapp"]') ||
cell.querySelector('[data-action="toggle"]') ||
cell.querySelector('[data-action="editNote"]');
if (!hasImportantBtn) {
const txt = cell.innerText.trim();
if (txt) cell.setAttribute('title', txt);
else cell.removeAttribute('title');
} else if (cell.querySelector('[data-action="toggle"]')) {
// 状态按钮列保留其自身文字悬浮展示状态文字
const statusBtn = cell.querySelector('.status-btn');
if (statusBtn) cell.setAttribute('title', statusBtn.innerText);
} else if (cell.querySelector('[data-action="editNote"]')) {
// 操作列一般不需要悬浮,但为了统一,展示当前按钮文字
const btnText = cell.innerText.trim();
if (btnText) cell.setAttribute('title', btnText);
}
});
});
totalCountEl.textContent = state.total;
}
// 事件监听(委托)
tableBody.addEventListener("click", async (e) => {
if (!requireAuth()) return;
const whatsappBtn = e.target.closest('[data-action="whatsapp"]');
if (whatsappBtn) {
const id = whatsappBtn.getAttribute("data-id");
handleWhatsApp(id);
return;
}
const toggler = e.target.closest('[data-action="toggle"]');
if (toggler) {
const id = toggler.getAttribute("data-id");
await handleToggle(id, toggler);
return;
}
const editBtn = e.target.closest('[data-action="editNote"]');
if (editBtn) {
const id = editBtn.getAttribute("data-id");
openNoteModal(id);
return;
}
});
function handleWhatsApp(id) {
const item = state.items.find((it) => String(it.id) === String(id));
if (!item) return;
const cleanCode = (item.code || '').replace(/\+/g, '');
const whatsappPhone = cleanCode + (item.telephone || '');
if (!whatsappPhone) {
showToast("电话号码无效", true);
return;
}
const whatsappUrl = `https://api.whatsapp.com/send?phone=${encodeURIComponent(whatsappPhone)}&text=${encodeURIComponent('hello欢迎来到赢在美股')}`;
window.open(whatsappUrl, '_blank');
}
async function handleToggle(id, btnEl) {
const item = state.items.find((it) => String(it.id) === String(id));
if (!item) return;
const prev = item.isRelated;
const newVal = prev ? 0 : 1;
// 乐观更新UI
item.isRelated = newVal;
btnEl.textContent = newVal ? "已联系" : "未联系";
btnEl.classList.toggle("status-1", !!newVal);
btnEl.classList.toggle("status-0", !newVal);
try {
const res = await updateMemberStateApi({ id: item.id, state: newVal });
if (res && typeof res.code !== "undefined" && res.code !== 200) {
throw new Error(res.msg || "更新失败");
}
showToast("状态已更新");
} catch (err) {
// 回滚
item.isRelated = prev;
btnEl.textContent = prev ? "已联系" : "未联系";
btnEl.classList.toggle("status-1", !!prev);
btnEl.classList.toggle("status-0", !prev);
showToast("更新失败: " + (err.message || '网络错误'), true);
}
}
function openNoteModal(id) {
if (!requireAuth()) return;
const item = state.items.find((it) => String(it.id) === String(id));
if (!item) return;
editingRowId = id;
noteTextarea.value = item.note || "";
noteModal.style.display = "flex";
noteTextarea.focus();
}
function closeNoteModal() {
editingRowId = null;
noteTextarea.value = "";
noteModal.style.display = "none";
}
noteCancelBtn.addEventListener("click", closeNoteModal);
noteSaveBtn.addEventListener("click", async () => {
if (!requireAuth()) return;
if (!editingRowId) return closeNoteModal();
const newNote = noteTextarea.value.trim();
const item = state.items.find((it) => String(it.id) === String(editingRowId));
if (!item) return closeNoteModal();
const oldNote = item.note;
item.note = newNote;
// 乐观刷新当前行备注显示 (可局部更新但简单重新渲染)
renderTable();
try {
const res = await editMemberNoteApi({ id: item.id, note: newNote });
if (res && typeof res.code !== "undefined" && res.code !== 200) {
throw new Error(res.msg || "保存失败");
}
showToast("备注保存成功");
} catch (err) {
item.note = oldNote;
renderTable();
showToast("保存备注失败: " + (err.message || '接口错误'), true);
} finally {
closeNoteModal();
}
});
// 分页渲染
function renderPagination() {
const totalPages = Math.max(1, Math.ceil(state.total / state.pageSize));
let current = Math.min(Math.max(1, state.currentPage), totalPages);
state.currentPage = current;
const pages = buildPageList(current, totalPages, 2);
let html = '';
html += `<button class="btn" data-action="prev" ${current === 1 ? 'disabled' : ''}>◀ 上一页</button>`;
pages.forEach(p => {
if (p === '...') {
html += `<span class="small" style="padding:0 6px;">...</span>`;
} else {
html += `<button class="btn ${p === current ? 'active' : ''}" data-page="${p}">${p}</button>`;
}
});
html += `<button class="btn" data-action="next" ${current === totalPages ? 'disabled' : ''}>下一页 ▶</button>`;
paginationEl.innerHTML = html;
}
function buildPageList(current, total, delta) {
const pages = [];
const left = Math.max(1, current - delta);
const right = Math.min(total, current + delta);
if (left > 1) {
pages.push(1);
if (left > 2) pages.push('...');
}
for (let i = left; i <= right; i++) pages.push(i);
if (right < total) {
if (right < total - 1) pages.push('...');
pages.push(total);
}
return pages;
}
paginationEl.addEventListener("click", (e) => {
if (!requireAuth()) return;
const btn = e.target.closest("button");
if (!btn) return;
const action = btn.getAttribute("data-action");
if (action === "prev") {
if (state.currentPage > 1) state.currentPage--;
} else if (action === "next") {
const totalPages = Math.max(1, Math.ceil(state.total / state.pageSize));
if (state.currentPage < totalPages) state.currentPage++;
} else {
const p = Number(btn.getAttribute("data-page"));
if (!isNaN(p) && p > 0) state.currentPage = p;
}
update();
});
pageSizeSelect.addEventListener("change", () => {
if (!requireAuth()) return;
const newSize = parseInt(pageSizeSelect.value, 10);
state.pageSize = newSize;
state.currentPage = 1;
update();
});
async function update() {
if (!requireAuth()) return;
await fetchPage(state.currentPage, state.pageSize);
renderTable();
renderPagination();
}
function escapeHtml(s) {
if (s === undefined || s === null) return '';
return String(s).replace(/[&<>]/g, function (m) {
if (m === '&') return '&amp;';
if (m === '<') return '&lt;';
if (m === '>') return '&gt;';
return m;
}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function (c) {
return c;
});
}
// 初始化:如果已登录则加载,否则展示登录遮罩
if (checkLoginStatus()) {
update();
} else {
showLoginCheckModal();
}
// 监听localStorage变化或者其他页面可能登录跳转后刷新(简单处理)
window.addEventListener('focus', () => {
if (checkLoginStatus() && document.getElementById('loginCheckModal')?.style.display === 'flex') {
hideLoginCheckModal();
update();
} else if (!checkLoginStatus() && document.getElementById('loginCheckModal')?.style.display !== 'flex') {
showLoginCheckModal();
}
});
</script>
</body>
</html>

47
src/api/hkmember.js

@ -0,0 +1,47 @@
// 用户内容相关接口配置文件
import { request } from "/src/utils/request.js";
// 正确的 Vite 环境变量用法
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL;
export function registerMemberApi(data) {
return request({
url: `${API_BASE_URL}/api/hk/member/insert`,
// url: `http://192.168.1.103:8000/api/hk/member/insert`,
method: "post",
data: data,
});
}
export function getImageApi(data) {
return request({
url: `${API_BASE_URL}/api/hk/config/get`,
// url:'http://g8ec6e97.natappfree.cc/api/config/get',
method: "post",
data: data,
});
}
export function getMemberListApi(data) {
return request({
url: `${API_BASE_URL}/api/hk/member/getList`,
// url: `http://g8ec6e97.natappfree.cc/api/member/getList`,
method: "post",
data: data,
})
}
export function updateMemberStateApi(data) {
return request({
url: `${API_BASE_URL}/api/hk/member/updateState`,
method: "post",
data: data,
})
}
export function editMemberNoteApi(data) {
return request({
url: `${API_BASE_URL}/api/hk/member/editNote`,
method: "post",
data: data,
})
}

2
src/api/member.js

@ -6,7 +6,7 @@ const API_BASE_URL = import.meta.env.VITE_API_BASE_URL;
export function registerMemberApi(data) { export function registerMemberApi(data) {
return request({ return request({
url: `${API_BASE_URL}/api/member/insert`,
url: `${API_BASE_URL}/api/hk/member/insert`,
// url: `http://g8ec6e97.natappfree.cc/api/member/insert`, // url: `http://g8ec6e97.natappfree.cc/api/member/insert`,
method: "post", method: "post",
data: data, data: data,

11
vite.config.js

@ -35,7 +35,16 @@ export default defineConfig(({ mode, command }) => {
loginManagement: './login-management.html', loginManagement: './login-management.html',
management: './hcdbqb-management.html', management: './hcdbqb-management.html',
deepchart: './deepchart-management.html', deepchart: './deepchart-management.html',
content: './content-config.html'
content: './content-config.html',
hkRegister: './hkRegister.html',//港股市场注册页面
hkRegisterTip: './hkRegisterTip.html',//港股市场注册提示跳转弹窗
hkRegisterSuccess: './hkRegisterSuccess.html',//港股市场注册成功
hkhcdbqbGuide: './hkhcdbqbGuide.html',//港股市场操作指南
hkhcdbqbDownload: './hkhcdbqbDownload.html',//港股市场软件下载
hkhcdbqb: './hkhcdbqb.html',//港股市场首页
hkfeedback: './hkfeedback.html',//港股市场意见反馈
hkhcdbqbManagement: './hkhcdbqbManagement.html',//港股市场管理后台
hkLogiManagement: './hkLogiManagement.html',//港股市场管理后台
}, },
output: { output: {
entryFileNames: '[name].js', // 入口文件命名 entryFileNames: '[name].js', // 入口文件命名

Loading…
Cancel
Save