Compare commits
merge into: qimaohong:master
qimaohong:dev
qimaohong:heads/milestone-20251128-获客渠道
qimaohong:master
qimaohong:milestone-20251013-宣传夺宝奇兵
qimaohong:milestone-20251107-后台登录页面
pull from: qimaohong:milestone-20251107-后台登录页面
qimaohong:dev
qimaohong:heads/milestone-20251128-获客渠道
qimaohong:master
qimaohong:milestone-20251013-宣传夺宝奇兵
qimaohong:milestone-20251107-后台登录页面
12 Commits
master
...
milestone-
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
8b2522ceee |
修改打包文件
|
2 months ago |
|
|
d08f006680 |
登录页面
|
2 months ago |
|
|
1067f220c3 |
Merge branch 'milestone-20251013-宣传夺宝奇兵' into dev
|
2 months ago |
|
|
e21a563222 |
后台添加whatsapp字段实现动态跳转
|
2 months ago |
|
|
02d0308cde |
Merge branch 'milestone-20251013-宣传夺宝奇兵' into dev
|
2 months ago |
|
|
35688a94e3 |
后台添加whatsapp字段实现动态跳转
|
2 months ago |
|
|
2968989607 |
网太卡直接提交了样式
|
3 months ago |
|
|
b3abd03f66 |
添加定位
|
3 months ago |
|
|
419b7e964e |
修改定位
|
3 months ago |
|
|
e910b5b01c |
修改图片
|
3 months ago |
|
|
708f6c2008 |
修改字体
|
3 months ago |
|
|
c6eac6807e |
修改背景图片即文字
|
3 months ago |
10 changed files with 1162 additions and 501 deletions
-
2dist-test/hcdbqb-download.html
-
2dist-test/hcdbqb-guide.html
-
135dist-test/index.html
-
2dist-test/main.js
-
1027hcdbqb-management.html
-
126index.html
-
351login-management.html
-
10node_modules/.vite/deps/_metadata.json
-
7node_modules/.vue-global-types/vue_3.5_0.d.ts
-
1vite.config.js
@ -1 +1 @@ |
|||||
import{g as E,r as h}from"./member.js";const I=50,L=100,B=20,u=document.getElementById("registrationForm"),l=document.getElementById("successModal"),p=document.getElementById("closeModal"),a=document.getElementById("submitBtn"),g=document.getElementById("loadingOverlay"),i=document.getElementById("lectureImage");let r=!1;async function v(){console.log("开始加载讲座图片...");try{const e={id:1};console.log("调用getImageApi,参数:",e);const t=await E(e);console.log("接口返回:",t),t.code===200&&t.data?(i.src=t.data,console.log("讲座图片加载成功:",t.data)):(console.warn("获取图片失败:",t.msg),i.src="https://hc.homilychart.com/hc/250121/img/kecheng.jpg")}catch(e){console.error("加载讲座图片失败:",e),i.src="https://hc.homilychart.com/hc/250121/img/kecheng.jpg"}}function w(){g.style.display="flex",a.disabled=!0,a.textContent="提交中...",r=!0}function M(){g.style.display="none",a.disabled=!1,a.textContent="提交注册",r=!1}function s(e){alert(e)}function b(e){const{name:t,tel:o,email:n}=e;return!t||t.length>I?(s("请输入有效的姓名(最多50个字符)"),document.getElementById("userNameInfo").focus(),!1):!o||o.length>B?(s("请输入有效的电话号码"),document.getElementById("userMobile").focus(),!1):!n||n.length>L?(s("请输入电子邮箱"),document.getElementById("userEmail").focus(),!1):/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)?!0:(s("请输入有效的电子邮箱地址"),document.getElementById("userEmail").focus(),!1)}async function A(e){if(e.preventDefault(),r)return;const t=document.getElementById("userNameInfo").value.trim(),o=document.getElementById("countryInfo").value,n=document.getElementById("userMobile").value.trim(),d=document.getElementById("userWechat").value.trim(),y=document.getElementById("userEmail").value.trim(),m={name:t,code:o,tel:n,wechat:d,email:y};if(b(m))try{w();const c=await h(m);c.code===200?(l.classList.remove("hidden"),u.reset()):s("注册失败: "+(c.msg||"未知错误"))}catch(c){console.error("请求失败:",c),s("网络错误,请稍后重试")}finally{M()}}function N(){document.getElementById("mobileMenu").classList.toggle("hidden");const t=document.getElementById("menuBtn").querySelector("i");t.classList.contains("fa-bars")?t.classList.replace("fa-bars","fa-times"):t.classList.replace("fa-times","fa-bars")}function H(){const e=document.querySelector("header");window.scrollY>50?(e.classList.add("py-2","shadow"),e.classList.remove("py-3")):(e.classList.add("py-3"),e.classList.remove("py-2","shadow"))}function f(){document.querySelectorAll(".animate-fade-in").forEach(t=>{const o=t.getBoundingClientRect().top,n=window.innerHeight;o<n-100&&(t.style.opacity="1",t.style.transform="translateY(0)")})}window.addEventListener("load",()=>{console.log("页面加载完成,开始调用loadLectureImage..."),v(),f(),document.getElementById("loadingOverlay").style.display="none"});u.addEventListener("submit",A);p.addEventListener("click",()=>{l.classList.add("hidden")});l.addEventListener("click",e=>{e.target===l&&l.classList.add("hidden")});document.getElementById("menuBtn").addEventListener("click",N);window.addEventListener("scroll",H);window.addEventListener("scroll",f); |
|
||||
|
import{g as h,r as E}from"./member.js";const I=50,L=100,B=20,u=document.getElementById("registrationForm"),c=document.getElementById("successModal"),v=document.getElementById("closeModal"),a=document.getElementById("submitBtn"),g=document.getElementById("loadingOverlay"),i=document.getElementById("lectureImage");let r=!1;function p(){document.documentElement.style.scrollBehavior="auto";const e=document.getElementById("register");if(e){const t=document.querySelector("header").offsetHeight,n=e.offsetTop-t-20;window.scrollTo(0,n)}setTimeout(()=>{document.documentElement.style.scrollBehavior="smooth"},100)}async function w(){console.log("开始加载讲座图片...");try{const e={id:1};console.log("调用getImageApi,参数:",e);const t=await h(e);console.log("接口返回:",t),t.code===200&&t.data?(i.src=t.data,console.log("讲座图片加载成功:",t.data)):(console.warn("获取图片失败:",t.msg),i.src="https://hc.homilychart.com/hc/250121/img/kecheng.jpg")}catch(e){console.error("加载讲座图片失败:",e),i.src="https://hc.homilychart.com/hc/250121/img/kecheng.jpg"}}function b(){g.style.display="flex",a.disabled=!0,a.textContent="提交中...",r=!0}function M(){g.style.display="none",a.disabled=!1,a.textContent="提交注册",r=!1}function s(e){alert(e)}function A(e){const{name:t,tel:n,email:o}=e;return!t||t.length>I?(s("请输入有效的姓名(最多50个字符)"),document.getElementById("userNameInfo").focus(),!1):!n||n.length>B?(s("请输入有效的电话号码"),document.getElementById("userMobile").focus(),!1):!o||o.length>L?(s("请输入电子邮箱"),document.getElementById("userEmail").focus(),!1):/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o)?!0:(s("请输入有效的电子邮箱地址"),document.getElementById("userEmail").focus(),!1)}async function H(e){if(e.preventDefault(),r)return;const t=document.getElementById("userNameInfo").value.trim(),n=document.getElementById("countryInfo").value,o=document.getElementById("userMobile").value.trim(),d=document.getElementById("userWechat").value.trim(),y=document.getElementById("userEmail").value.trim(),m={name:t,code:n,tel:o,wechat:d,email:y};if(A(m))try{b();const l=await E(m);l.code===200?(c.classList.remove("hidden"),u.reset()):s("注册失败: "+(l.msg||"未知错误"))}catch(l){console.error("请求失败:",l),s("网络错误,请稍后重试")}finally{M()}}function S(){document.getElementById("mobileMenu").classList.toggle("hidden");const t=document.getElementById("menuBtn").querySelector("i");t.classList.contains("fa-bars")?t.classList.replace("fa-bars","fa-times"):t.classList.replace("fa-times","fa-bars")}function N(){const e=document.querySelector("header");window.scrollY>50?(e.classList.add("py-2","shadow"),e.classList.remove("py-3")):(e.classList.add("py-3"),e.classList.remove("py-2","shadow"))}function f(){document.querySelectorAll(".animate-fade-in").forEach(t=>{const n=t.getBoundingClientRect().top,o=window.innerHeight;n<o-100&&(t.style.opacity="1",t.style.transform="translateY(0)")})}document.addEventListener("DOMContentLoaded",function(){p(),setTimeout(()=>{document.body.classList.add("content-visible")},50)});window.addEventListener("load",()=>{console.log("页面加载完成,开始调用loadLectureImage..."),w(),f(),document.getElementById("loadingOverlay").style.display="none"});u.addEventListener("submit",H);v.addEventListener("click",()=>{c.classList.add("hidden")});c.addEventListener("click",e=>{e.target===c&&c.classList.add("hidden")});document.getElementById("menuBtn").addEventListener("click",S);window.addEventListener("scroll",N);window.addEventListener("scroll",f); |
||||
1027
hcdbqb-management.html
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -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, #6a11cb 0%, #2575fc 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 = '20251107'; |
||||
|
|
||||
|
// 表单提交事件 |
||||
|
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 = 'hcdbqb-management.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> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue