diff --git a/admin/auth.php b/admin/auth.php new file mode 100644 index 0000000..58357f6 --- /dev/null +++ b/admin/auth.php @@ -0,0 +1,13 @@ + diff --git a/admin/categories.php b/admin/categories.php new file mode 100644 index 0000000..9ce9bd2 --- /dev/null +++ b/admin/categories.php @@ -0,0 +1,118 @@ +prepare("DELETE FROM categories WHERE id = ?"); + $stmt->execute([$_GET['delete']]); + header("Location: categories.php"); + exit; +} + +// Handle Add/Edit +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $id = $_POST['id'] ?? null; + $name = $_POST['name']; + $icon = $_POST['icon']; + + if ($id) { + $stmt = $db->prepare("UPDATE categories SET name=?, icon=? WHERE id=?"); + $stmt->execute([$name, $icon, $id]); + } else { + $stmt = $db->prepare("INSERT INTO categories (name, icon) VALUES (?, ?)"); + $stmt->execute([$name, $icon]); + } + header("Location: categories.php"); + exit; +} + +$categories = $db->query("SELECT * FROM categories ORDER BY id ASC")->fetchAll(); + +$edit_cat = null; +if (isset($_GET['edit'])) { + $stmt = $db->prepare("SELECT * FROM categories WHERE id = ?"); + $stmt->execute([$_GET['edit']]); + $edit_cat = $stmt->fetch(); +} +?> + + + + + 分类管理 - 豪软后台 + + + + + +
+
+ +
+
+

+
+ +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+
+
+ +
+ + + + + + + + + + + + + + + + + +
图标分类名称操作
+ 编辑 + 删除 +
+
+
+
+
+ + diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..d77b1be --- /dev/null +++ b/admin/index.php @@ -0,0 +1,107 @@ +query("SELECT COUNT(*) FROM orders")->fetchColumn(); +$stats['total_sales'] = $db->query("SELECT SUM(total_amount) FROM orders WHERE status = 'completed'")->fetchColumn() ?: 0; +$stats['products_count'] = $db->query("SELECT COUNT(*) FROM products")->fetchColumn(); +$stats['users_count'] = $db->query("SELECT COUNT(*) FROM users")->fetchColumn(); + +$recent_orders = $db->query("SELECT * FROM orders ORDER BY id DESC LIMIT 5")->fetchAll(); +?> + + + + + 管理后台 - 豪软世界 + + + + + +
+
+ +
+

数据总览

+
+
+
+
累计订单
+
+
+
+
+
+
完成交易 (USDT)
+
+
+
+
+
+
在售商品
+
+
+
+
+
+
注册用户
+
+
+
+
+ +
+
最新订单
+ + + + + + + + + + + + + + + + + + + + + + + +
订单号联系方式金额状态日期操作
USDT + + + + 查看
+
+
+
+
+ + + diff --git a/admin/orders.php b/admin/orders.php new file mode 100644 index 0000000..b2eeb17 --- /dev/null +++ b/admin/orders.php @@ -0,0 +1,158 @@ +prepare("UPDATE orders SET status = ? WHERE id = ?"); + $stmt->execute([$_POST['status'], $_POST['order_id']]); + header("Location: orders.php" . (isset($_GET['id']) ? "?id=".$_POST['order_id'] : "")); + exit; +} + +$view_order = null; +if (isset($_GET['id'])) { + $stmt = $db->prepare("SELECT * FROM orders WHERE id = ?"); + $stmt->execute([$_GET['id']]); + $view_order = $stmt->fetch(); + + if ($view_order) { + $stmt = $db->prepare("SELECT oi.*, p.name FROM order_items oi JOIN products p ON oi.product_id = p.id WHERE oi.order_id = ?"); + $stmt->execute([$view_order['id']]); + $view_order['items'] = $stmt->fetchAll(); + } +} + +$orders = $db->query("SELECT * FROM orders ORDER BY id DESC")->fetchAll(); +?> + + + + + 订单管理 - 豪软后台 + + + + + +
+
+ +
+ +
+

订单详情:

+ 返回列表 +
+ +
+
+
+
商品列表
+ + + + + + + + + + + + + + + + + + + + + + + + + +
商品单价数量小计
USDT USDT
合计金额 USDT
+
+
+
+
+
订单状态
+
+ +
+ + +
+ +
+
+
+
客户信息
+

联系方式:

+

下单时间:

+

支付方式:

+
+
+
+ + +

订单管理

+
+ + + + + + + + + + + + + + + + + + + + + + + +
订单号联系方式金额状态日期操作
USDT + + + + 查看详情
+
+ +
+
+
+ + diff --git a/admin/products.php b/admin/products.php new file mode 100644 index 0000000..640c732 --- /dev/null +++ b/admin/products.php @@ -0,0 +1,176 @@ +prepare("DELETE FROM products WHERE id = ?"); + $stmt->execute([$_GET['delete']]); + header("Location: products.php"); + exit; +} + +// Handle Add/Edit +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $id = $_POST['id'] ?? null; + $name = $_POST['name']; + $cat_id = $_POST['category_id']; + $desc = $_POST['description']; + $content = $_POST['content']; + $price = $_POST['price_usdt']; + $stock = $_POST['stock']; + $img = $_POST['image_url']; + $is_hot = isset($_POST['is_hot']) ? 1 : 0; + + if ($id) { + $stmt = $db->prepare("UPDATE products SET name=?, category_id=?, description=?, content=?, price_usdt=?, stock=?, image_url=?, is_hot=? WHERE id=?"); + $stmt->execute([$name, $cat_id, $desc, $content, $price, $stock, $img, $is_hot, $id]); + } else { + $stmt = $db->prepare("INSERT INTO products (name, category_id, description, content, price_usdt, stock, image_url, is_hot) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); + $stmt->execute([$name, $cat_id, $desc, $content, $price, $stock, $img, $is_hot]); + } + header("Location: products.php"); + exit; +} + +$categories = $db->query("SELECT * FROM categories")->fetchAll(); +$products = $db->query("SELECT p.*, c.name as cat_name FROM products p JOIN categories c ON p.category_id = c.id ORDER BY p.id DESC")->fetchAll(); + +$edit_product = null; +if (isset($_GET['edit'])) { + $stmt = $db->prepare("SELECT * FROM products WHERE id = ?"); + $stmt->execute([$_GET['edit']]); + $edit_product = $stmt->fetch(); +} +?> + + + + + 商品管理 - 管理后台 + + + + + +
+
+ +
+
+

+ + 添加新商品 + +
+ +
+
+
+ + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ > + +
+
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID商品分类价格库存状态操作
+
+ + +
+
USDT + + 热门 + + + 编辑 + 删除 +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/admin/settings.php b/admin/settings.php new file mode 100644 index 0000000..ed1eab9 --- /dev/null +++ b/admin/settings.php @@ -0,0 +1,72 @@ + $value) { + $stmt = $db->prepare("UPDATE settings SET key_value = ? WHERE key_name = ?"); + $stmt->execute([$value, $key]); + } + $message = '设置已更新'; +} + +$settings = db()->query("SELECT * FROM settings")->fetchAll(); +?> + + + + + 系统设置 - 管理后台 + + + + + +
+
+ +
+

系统设置

+ + +
+ + +
+
+
+ +
+ + + + + + +
+ + +
+
+
+
+
+
+ + diff --git a/admin/sidebar.php b/admin/sidebar.php new file mode 100644 index 0000000..e4e8b5c --- /dev/null +++ b/admin/sidebar.php @@ -0,0 +1,36 @@ +
+
+ Logo +
豪软后台
+
+
+ \ No newline at end of file diff --git a/assets/css/custom.css b/assets/css/custom.css index 65a1626..9ae9ff3 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -1,346 +1,190 @@ :root { - --color-bg: #ffffff; - --color-text: #1a1a1a; - --color-primary: #2563EB; /* Vibrant Blue */ - --color-secondary: #000000; - --color-accent: #A3E635; /* Lime Green */ - --color-surface: #f8f9fa; - --font-heading: 'Space Grotesk', sans-serif; - --font-body: 'Inter', sans-serif; - --border-width: 2px; - --shadow-hard: 5px 5px 0px #000; - --shadow-hover: 8px 8px 0px #000; - --radius-pill: 50rem; - --radius-card: 1rem; + --primary-color: #ff3399; + --secondary-color: #ff66b2; + --accent-color: #0088cc; + --bg-light: #fff5f7; + --card-bg: #ffffff; + --glass-border: rgba(255, 51, 153, 0.1); + --text-dark: #334155; + --text-muted: #64748b; } body { - font-family: var(--font-body); - background-color: var(--color-bg); - color: var(--color-text); - overflow-x: hidden; + background-color: var(--bg-light); + color: var(--text-dark); + font-family: 'Inter', sans-serif; + background-image: + radial-gradient(at 0% 0%, rgba(255, 0, 122, 0.05) 0px, transparent 50%), + radial-gradient(at 100% 100%, rgba(255, 51, 153, 0.05) 0px, transparent 50%); + background-attachment: fixed; } -h1, h2, h3, h4, h5, h6, .navbar-brand { - font-family: var(--font-heading); - letter-spacing: -0.03em; +.glass-card { + background: var(--card-bg); + border: 1px solid var(--glass-border); + border-radius: 1rem; + transition: all 0.3s ease; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03); } -/* Utilities */ -.text-primary { color: var(--color-primary) !important; } -.bg-black { background-color: #000 !important; } -.text-white { color: #fff !important; } -.shadow-hard { box-shadow: var(--shadow-hard); } -.border-2-black { border: var(--border-width) solid #000; } -.py-section { padding-top: 5rem; padding-bottom: 5rem; } - -/* Navbar */ .navbar { background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(10px); - border-bottom: var(--border-width) solid transparent; - transition: all 0.3s; - padding-top: 1rem; - padding-bottom: 1rem; + border-bottom: 1px solid var(--glass-border); + box-shadow: 0 1px 3px rgba(0,0,0,0.05); } -.navbar.scrolled { - border-bottom-color: #000; - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.brand-text { - font-size: 1.5rem; +.navbar-brand { font-weight: 800; + letter-spacing: -0.025em; + text-transform: uppercase; + color: var(--primary-color) !important; } .nav-link { - font-weight: 500; - color: var(--color-text); - margin-left: 1rem; - position: relative; + font-weight: 600; + font-size: 0.95rem; + color: var(--text-dark) !important; + transition: color 0.3s ease; } -.nav-link:hover, .nav-link.active { - color: var(--color-primary); -} - -/* Buttons */ -.btn { - font-weight: 700; - font-family: var(--font-heading); - padding: 0.8rem 2rem; - border-radius: var(--radius-pill); - border: var(--border-width) solid #000; - transition: all 0.2s cubic-bezier(0.25, 1, 0.5, 1); - box-shadow: var(--shadow-hard); -} - -.btn:hover { - transform: translate(-2px, -2px); - box-shadow: var(--shadow-hover); -} - -.btn:active { - transform: translate(2px, 2px); - box-shadow: 0 0 0 #000; +.nav-link:hover { + color: var(--primary-color) !important; } .btn-primary { - background-color: var(--color-primary); - border-color: #000; - color: #fff; + background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%); + border: none; + color: white; + font-weight: 700; } .btn-primary:hover { - background-color: #1d4ed8; - border-color: #000; - color: #fff; + background: linear-gradient(135deg, var(--secondary-color) 0%, var(--primary-color) 100%); + transform: translateY(-2px); + box-shadow: 0 10px 20px rgba(255, 51, 153, 0.2); } -.btn-outline-dark { - background-color: #fff; - color: #000; -} - -.btn-cta { - background-color: var(--color-accent); - color: #000; -} - -.btn-cta:hover { - background-color: #8cc629; - color: #000; -} - -/* Hero Section */ -.hero-section { - min-height: 100vh; - padding-top: 80px; -} - -.background-blob { - position: absolute; - border-radius: 50%; - filter: blur(80px); - opacity: 0.6; - z-index: 1; -} - -.blob-1 { - top: -10%; - right: -10%; - width: 600px; - height: 600px; - background: radial-gradient(circle, var(--color-accent), transparent); -} - -.blob-2 { - bottom: 10%; - left: -10%; - width: 500px; - height: 500px; - background: radial-gradient(circle, var(--color-primary), transparent); -} - -.highlight-text { - background: linear-gradient(120deg, transparent 0%, transparent 40%, var(--color-accent) 40%, var(--color-accent) 100%); - background-repeat: no-repeat; - background-size: 100% 40%; - background-position: 0 88%; - padding: 0 5px; -} - -.dot { color: var(--color-primary); } - -.badge-pill { - display: inline-block; - padding: 0.5rem 1rem; - border: 2px solid #000; - border-radius: 50px; - font-weight: 700; - background: #fff; - box-shadow: 4px 4px 0 #000; - font-family: var(--font-heading); - font-size: 0.9rem; -} - -/* Marquee */ -.marquee-container { +.product-card { overflow: hidden; - white-space: nowrap; - border-top: 2px solid #000; - border-bottom: 2px solid #000; } -.rotate-divider { - transform: rotate(-2deg) scale(1.05); - z-index: 10; +.product-card:hover { + transform: translateY(-5px); + border-color: var(--primary-color); + box-shadow: 0 10px 25px rgba(255, 51, 153, 0.1); +} + +.product-img-container { + aspect-ratio: 1/1; + overflow: hidden; + border-radius: 0.75rem; position: relative; - margin-top: -50px; - margin-bottom: 30px; + background: #f8fafc; } -.marquee-content { - display: inline-block; - animation: marquee 20s linear infinite; - font-family: var(--font-heading); - font-weight: 700; - font-size: 1.5rem; - letter-spacing: 2px; -} - -@keyframes marquee { - 0% { transform: translateX(0); } - 100% { transform: translateX(-50%); } -} - -/* Portfolio Cards */ -.project-card { - border: 2px solid #000; - border-radius: var(--radius-card); - overflow: hidden; - background: #fff; - transition: transform 0.3s ease; - box-shadow: var(--shadow-hard); +.product-img { + width: 100%; height: 100%; - display: flex; - flex-direction: column; + object-fit: contain; + padding: 15px; + transition: transform 0.5s ease; } -.project-card:hover { - transform: translateY(-10px); - box-shadow: 8px 8px 0 #000; +.product-card:hover .product-img { + transform: scale(1.1); } -.card-img-holder { - height: 250px; +.badge-hot { + position: absolute; + top: 10px; + right: 10px; + background: var(--primary-color); + color: white; + font-size: 0.7rem; + font-weight: 800; + padding: 4px 8px; + border-radius: 4px; + z-index: 2; +} + +.price-tag { + font-size: 1.25rem; + font-weight: 800; + color: var(--primary-color); +} + +.footer-link { + color: var(--text-muted); + text-decoration: none; + transition: all 0.3s ease; + display: block; + margin-bottom: 0.5rem; +} + +.footer-link:hover { + color: var(--primary-color); + padding-left: 5px; +} + +/* Carousel Custom Styles */ +.carousel-item { + transition: transform 0.6s ease-in-out, opacity 0.6s ease-in-out; +} + +.category-hover-card { + cursor: pointer; +} + +.category-hover-card:hover { + background: rgba(255, 51, 153, 0.05) !important; + border-color: var(--primary-color); +} + +.category-accent { + width: 4px; + height: 24px; + background: var(--primary-color); + border-radius: 2px; + display: inline-block; +} + +.hover-primary:hover { + color: var(--primary-color) !important; +} + +.floating-tg { + position: fixed; + bottom: 30px; + right: 30px; + z-index: 1000; + width: 60px; + height: 60px; + background: #0088cc; + color: white; + border-radius: 50%; display: flex; align-items: center; justify-content: center; - border-bottom: 2px solid #000; - position: relative; - font-size: 4rem; -} - -.placeholder-art { - transition: transform 0.3s ease; -} - -.project-card:hover .placeholder-art { - transform: scale(1.2) rotate(10deg); -} - -.bg-soft-blue { background-color: #e0f2fe; } -.bg-soft-green { background-color: #dcfce7; } -.bg-soft-purple { background-color: #f3e8ff; } -.bg-soft-yellow { background-color: #fef9c3; } - -.category-tag { - position: absolute; - top: 15px; - right: 15px; - background: #000; - color: #fff; - padding: 5px 12px; - border-radius: 20px; - font-size: 0.75rem; - font-weight: 700; -} - -.card-body { padding: 1.5rem; } - -.link-arrow { + font-size: 30px; + box-shadow: 0 5px 15px rgba(0,0,0,0.1); + transition: all 0.3s ease; text-decoration: none; - color: #000; - font-weight: 700; - display: inline-flex; - align-items: center; - margin-top: auto; } -.link-arrow i { transition: transform 0.2s; margin-left: 5px; } -.link-arrow:hover i { transform: translateX(5px); } - -/* About */ -.about-image-stack { - position: relative; - height: 400px; - width: 100%; +.floating-tg:hover { + transform: scale(1.1) rotate(10deg); + color: white; } -.stack-card { - position: absolute; - width: 80%; - height: 100%; - border-radius: var(--radius-card); - border: 2px solid #000; - box-shadow: var(--shadow-hard); - left: 10%; - transform: rotate(-3deg); - background-size: cover; +.alert.glass-card { + background: white; + color: var(--text-dark) !important; } -/* Forms */ -.form-control { - border: 2px solid #000; - border-radius: 0.5rem; - padding: 1rem; - font-weight: 500; - background: #f8f9fa; +.text-white { + color: var(--text-dark) !important; } - -.form-control:focus { - box-shadow: 4px 4px 0 var(--color-primary); - border-color: #000; - background: #fff; -} - -/* Animations */ -.animate-up { - opacity: 0; - transform: translateY(30px); - animation: fadeUp 0.8s ease forwards; -} - -.delay-100 { animation-delay: 0.1s; } -.delay-200 { animation-delay: 0.2s; } - -@keyframes fadeUp { - to { - opacity: 1; - transform: translateY(0); - } -} - -/* Social */ -.social-links a { - transition: transform 0.2s; - display: inline-block; -} -.social-links a:hover { - transform: scale(1.2) rotate(10deg); - color: var(--color-accent) !important; -} - -/* Responsive */ -@media (max-width: 991px) { - .rotate-divider { - transform: rotate(0); - margin-top: 0; - margin-bottom: 2rem; - } - - .hero-section { - padding-top: 120px; - text-align: center; - min-height: auto; - padding-bottom: 100px; - } - - .display-1 { font-size: 3.5rem; } - - .blob-1 { width: 300px; height: 300px; right: -20%; } - .blob-2 { width: 300px; height: 300px; left: -20%; } +.text-white-50 { + color: var(--text-muted) !important; } diff --git a/assets/js/main.js b/assets/js/main.js index fdf2cfd..b4069a6 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -1,73 +1,103 @@ -document.addEventListener('DOMContentLoaded', () => { +// Cart Management +function addToCart(id, name, price, img) { + let cart = JSON.parse(localStorage.getItem('cart') || '[]'); + let found = cart.find(item => item.id === id); - // Smooth scrolling for navigation links + if (found) { + found.qty++; + } else { + cart.push({ id, name, price, qty: 1, img }); + } + + localStorage.setItem('cart', JSON.stringify(cart)); + updateCartBadge(); + showToast(`${name} 已加入购物车`); +} + +function updateCartBadge() { + let cart = JSON.parse(localStorage.getItem('cart') || '[]'); + let count = cart.reduce((acc, item) => acc + item.qty, 0); + let badge = document.getElementById('cart-badge'); + + if (badge) { + if (count > 0) { + badge.textContent = count; + badge.classList.remove('d-none'); + } else { + badge.classList.add('d-none'); + } + } +} + +// Toast Notification +function showToast(message) { + let toastContainer = document.getElementById('toast-container'); + if (!toastContainer) { + toastContainer = document.createElement('div'); + toastContainer.id = 'toast-container'; + toastContainer.className = 'position-fixed bottom-0 end-0 p-3'; + toastContainer.style.zIndex = '9999'; + document.body.appendChild(toastContainer); + } + + const toastId = 'toast-' + Date.now(); + const toastHtml = ` + + `; + + toastContainer.insertAdjacentHTML('beforeend', toastHtml); + const toastElement = document.getElementById(toastId); + const toast = new bootstrap.Toast(toastElement, { delay: 3000 }); + toast.show(); + + toastElement.addEventListener('hidden.bs.toast', () => { + toastElement.remove(); + }); +} + +// Initialize on load +document.addEventListener('DOMContentLoaded', function() { + updateCartBadge(); + + // Smooth scrolling for anchor links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { + if (this.getAttribute('href') === '#') return; e.preventDefault(); - const targetId = this.getAttribute('href'); - if (targetId === '#') return; - - const targetElement = document.querySelector(targetId); - if (targetElement) { - // Close mobile menu if open - const navbarToggler = document.querySelector('.navbar-toggler'); - const navbarCollapse = document.querySelector('.navbar-collapse'); - if (navbarCollapse.classList.contains('show')) { - navbarToggler.click(); - } - - // Scroll with offset - const offset = 80; - const elementPosition = targetElement.getBoundingClientRect().top; - const offsetPosition = elementPosition + window.pageYOffset - offset; - - window.scrollTo({ - top: offsetPosition, - behavior: "smooth" + const target = document.querySelector(this.getAttribute('href')); + if (target) { + target.scrollIntoView({ + behavior: 'smooth' }); } }); }); - // Navbar scroll effect - const navbar = document.querySelector('.navbar'); - window.addEventListener('scroll', () => { - if (window.scrollY > 50) { - navbar.classList.add('scrolled', 'shadow-sm', 'bg-white'); - navbar.classList.remove('bg-transparent'); - } else { - navbar.classList.remove('scrolled', 'shadow-sm', 'bg-white'); - navbar.classList.add('bg-transparent'); - } - }); - - // Intersection Observer for fade-up animations + // Add animation to cards on scroll const observerOptions = { - threshold: 0.1, - rootMargin: "0px 0px -50px 0px" + threshold: 0.1 }; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { - entry.target.classList.add('animate-up'); - entry.target.style.opacity = "1"; - observer.unobserve(entry.target); // Only animate once + entry.target.style.opacity = '1'; + entry.target.style.transform = 'translateY(0)'; } }); }, observerOptions); - // Select elements to animate (add a class 'reveal' to them in HTML if not already handled by CSS animation) - // For now, let's just make sure the hero animations run. - // If we want scroll animations, we'd add opacity: 0 to elements in CSS and reveal them here. - // Given the request, the CSS animation I added runs on load for Hero. - // Let's make the project cards animate in. - - const projectCards = document.querySelectorAll('.project-card'); - projectCards.forEach((card, index) => { - card.style.opacity = "0"; - card.style.animationDelay = `${index * 0.1}s`; + document.querySelectorAll('.glass-card').forEach(card => { + card.style.opacity = '0'; + card.style.transform = 'translateY(20px)'; + card.style.transition = 'all 0.6s cubic-bezier(0.23, 1, 0.32, 1)'; observer.observe(card); }); - }); \ No newline at end of file diff --git a/assets/pasted-20260208-082111-302e08e2.png b/assets/pasted-20260208-082111-302e08e2.png new file mode 100644 index 0000000..cb96302 Binary files /dev/null and b/assets/pasted-20260208-082111-302e08e2.png differ diff --git a/cart.php b/cart.php new file mode 100644 index 0000000..a0c8d20 --- /dev/null +++ b/cart.php @@ -0,0 +1,153 @@ + + +
+
+

+ 您的购物车 +

+ +
+
+
+
+ + + + + + + + + + + + + +
商品信息单价数量小计操作
+
+ +
+
+ +
+
+
订单摘要
+
+ 商品总数 + 0 +
+
+ 支付币种 + USDT (TRC20) +
+
+
+ 应付总额 +
+
0.00
+
含支付手续费 0.00
+
+
+ + + 立即下单 + +
+ Trusted +
+
+
+
+
+
+ + + + diff --git a/category.php b/category.php new file mode 100644 index 0000000..e9fc19e --- /dev/null +++ b/category.php @@ -0,0 +1,57 @@ +prepare("SELECT * FROM categories WHERE id = ?"); +$stmt->execute([$id]); +$cat = $stmt->fetch(); + +if (!$cat) { + header("Location: index.php"); + exit; +} + +// Fetch products for this category +$stmt = db()->prepare("SELECT p.*, c.name as category_name FROM products p JOIN categories c ON p.category_id = c.id WHERE p.category_id = ? ORDER BY p.id DESC"); +$stmt->execute([$id]); +$cat_products = $stmt->fetchAll(); +?> + +
+
+ +

+ + +

+
+
+ 个商品 +
+
+ +
+ +
+
+ +

暂无相关商品

+

我们正在紧急补货中,请稍后再来。

+ 返回首页 +
+
+ + +
+ +
+ + +
+ + \ No newline at end of file diff --git a/checkout.php b/checkout.php new file mode 100644 index 0000000..dd0d66c --- /dev/null +++ b/checkout.php @@ -0,0 +1,136 @@ +prepare("INSERT INTO orders (order_no, total_amount, payment_method, contact_info, status) VALUES (?, ?, ?, '', 'pending')"); + $stmt->execute([$order_no, $total, $payment_method]); + $order_id = $db->lastInsertId(); + + // Create order items + foreach ($cart_data as $item) { + $stmt = $db->prepare("INSERT INTO order_items (order_id, product_id, quantity, price_usdt) VALUES (?, ?, ?, ?)"); + $stmt->execute([$order_id, $item['id'], $item['qty'], $item['price']]); + } + + // Redirect to payment + header("Location: payment.php?order_no=" . $order_no); + exit; +} +?> + +
+
+
+
+
+

确认订单信息

+

请核对您的订单商品,确认无误后点击下方按钮进入支付页面。

+ +
+ + +
+ +
+
+
+ +
+
USDT (TRC20)
+
推荐使用,区块链自动确认
+
+ +
+ +
+
+
+ +
+
订单详情
+
+ +
+
+
+ 应付总额 + 0.00 USDT +
+
+ + +
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/db/migrations/20260208_seed_data.sql b/db/migrations/20260208_seed_data.sql new file mode 100644 index 0000000..ee9ebaf --- /dev/null +++ b/db/migrations/20260208_seed_data.sql @@ -0,0 +1,31 @@ +-- Clean up existing data to avoid duplicates if re-run +DELETE FROM products; +DELETE FROM categories; + +-- Categories +INSERT INTO categories (id, name, icon) VALUES +(1, '社交账号', 'bi-people-fill'), +(2, '海外社交', 'bi-globe-central-south-asia'), +(3, 'AI办公', 'bi-cpu-fill'), +(4, '邮箱工具', 'bi-envelope-at-fill'), +(5, '游戏专区', 'bi-controller'); + +-- Products +INSERT INTO products (name, category_id, description, content, price_usdt, stock, image_url, is_hot) VALUES +('Discord 满月老号', 2, '高权重/已过验证', 'Discord 满月老号,纯手工注册,权重极高。已绑定海外手机号并完成邮箱验证。适合加入各种大群、使用各种机器人,不容易被封。发货格式:账号----密码----Token', 5.00, 999, 'https://cdn-icons-png.flaticon.com/512/3670/3670157.png', 1), +('TikTok 权重号', 2, '千粉/直播权限', 'TikTok 优质权重老号,拥有1000+真实粉丝,已开通直播权限。适合引流、卖货。包含注册邮箱原始密码。发货格式:账号----密码----邮箱----邮箱密码', 15.00, 50, 'https://cdn-icons-png.flaticon.com/512/3046/3046121.png', 1), +('ChatGPT Plus 共享号', 3, 'GPT-4o/稳定独享', 'ChatGPT Plus 会员共享号,支持最新的 GPT-4o 模型,DALL-E 3 生成图片。稳定不掉线,封号包赔。发货格式:邮箱----密码----Token', 10.00, 100, 'https://cdn-icons-png.flaticon.com/512/12222/12222588.png', 1), +('小红书 优质老号', 1, '带粉/无违规', '小红书优质权重账号,注册时间长,无任何违规记录。适合做博主、引流。', 8.00, 200, 'https://placehold.co/400x400/ff2442/ffffff?text=Xiaohongshu', 1), +('抖音 权重老号', 1, '实名/可直播', '抖音实名优质号,高权重,搜索排名靠前。', 12.00, 100, 'https://placehold.co/400x400/000000/ffffff?text=Douyin', 1), +('Instagram 极品老号', 2, '带粉丝/发帖稳', 'Instagram 2-5年老号,带少量粉丝,权重极高,发帖不容易被屏蔽。', 6.00, 300, 'https://cdn-icons-png.flaticon.com/512/174/174855.png', 0), +('Telegram 协议号', 2, 'API/Hash格式', 'TG 协议号,支持各路协议软件登录。', 3.00, 5000, 'https://cdn-icons-png.flaticon.com/512/2111/2111646.png', 1), +('WhatsApp 活跃号', 2, '直登号/耐用', 'WhatsApp 长期活跃号,不容易封禁。', 4.50, 1000, 'https://cdn-icons-png.flaticon.com/512/733/733585.png', 0), +('WeChat 微信老号', 1, '稳定/不封号', '微信老号,已过实名,朋友圈活跃。', 25.00, 20, 'https://cdn-icons-png.flaticon.com/512/733/733585.png', 1), +('QQ 极品老号', 1, '等级高/带Q币', 'QQ 10年老号,皇冠等级,适合收藏。', 18.00, 10, 'https://cdn-icons-png.flaticon.com/512/3536/3536647.png', 0), +('Gmail 优质新号', 4, '独享/带辅助', 'Gmail 全新号,独享注册,带辅助邮箱。', 1.50, 2000, 'https://cdn-icons-png.flaticon.com/512/281/281769.png', 0), +('Outlook 混合号', 4, '便宜/量大', 'Outlook 邮箱,适合批量注册。', 0.50, 10000, 'https://cdn-icons-png.flaticon.com/512/732/732200.png', 0), +('Snapchat 满月号', 2, '高权重/耐封', 'Snapchat 满月账号,高权重。', 4.00, 500, 'https://cdn-icons-png.flaticon.com/512/3670/3670174.png', 0), +('LINE 台湾/日本号', 2, '已验证/直登', 'LINE 账号,已完成手机验证。', 7.00, 100, 'https://cdn-icons-png.flaticon.com/512/124/124025.png', 0), +('知乎 权重号', 1, '高质量/老号', '知乎高质量账号,适合引流。', 5.50, 200, 'https://placehold.co/400x400/0084ff/ffffff?text=Zhihu', 0), +('豆瓣小组 进群号', 1, '免审/高活跃', '豆瓣老号,已进各种大组,权重高。', 6.50, 150, 'https://placehold.co/400x400/00b51d/ffffff?text=Douban', 0), +('Amino 活跃号', 2, '全球版/稳定', 'Amino 账号,稳定耐用。', 4.00, 300, 'https://placehold.co/400x400/121212/ffffff?text=Amino', 0); diff --git a/faq.php b/faq.php new file mode 100644 index 0000000..1786ceb --- /dev/null +++ b/faq.php @@ -0,0 +1,77 @@ + + +
+
+
+

常见问题

+

您可能遇到的一些疑问,我们在这里为您解答

+
+ +
+
+ +
+

+ +

+
+
+ 支付成功后,系统会自动跳转到订单详情页显示卡密。如果您不小心关闭了页面,可以通过页面顶部的“订单查询”功能,输入您的订单号随时找回卡密。 +
+
+
+ +
+

+ +

+
+
+ 通常是因为区块链确认延迟或者支付金额不匹配。请确保您支付的是精确的金额。如果 10 分钟后仍未发货,请截图您的支付记录联系我们的 Telegram 客服。 +
+
+
+ +
+

+ +

+
+
+ 首先请检查您的网络环境(是否使用了干净的代理 IP)。如果确认是账号问题,请在购买后 24 小时内联系客服进行更换。请勿在同一个 IP 下大量登录账号,这会触发官方风控。 +
+
+
+ +
+

+ +

+
+
+ 可以。如果您有大批量、长期稳定的供货需求,请直接联系我们的 TG 商务,我们将为您提供更具竞争力的批发价格和定制化服务。 +
+
+
+ +
+ +
+

没找到您要的答案?

+ 咨询在线客服 +
+
+
+
+ + \ No newline at end of file diff --git a/help.php b/help.php new file mode 100644 index 0000000..793a499 --- /dev/null +++ b/help.php @@ -0,0 +1,53 @@ + + +
+
+
+

帮助中心

+

手把手教您如何高效、安全地使用我们的服务

+
+ +
+
+
+
+ +

新手入门

+
+
    +
  • 环境准备: 使用账号前请确保代理 IP 纯净。
  • +
  • 购买流程: 选择商品 -> 填写联系方式 -> 扫码支付。
  • +
  • 提取卡密: 支付后网页自动弹出,或使用订单查询。
  • +
+
+
+
+
+
+ +

安全建议

+
+
    +
  • 即买即改: 拿到账号后请第一时间修改密码和密保。
  • +
  • 指纹浏览器: 批量登录建议使用 AdsPower 或比特浏览器。
  • +
  • 避免并发: 刚登录的老号请勿立即群发信息。
  • +
+
+
+
+
+

关于发货

+

我们的平台采用 API 直连支付系统全自动库存发货系统。无论是在深夜还是凌晨,只要您完成支付,系统都会在确认到账后的 30 秒内通过页面展示和后台记录双向交付。如果您在支付过程中遇到断网、浏览器崩溃,也不必担心,只需记录下您的订单号,通过“订单查询”即可找回。

+
+ + 提示:如果长时间未收到卡密,请检查您的钱包是否已经完成区块确认,或直接联系右侧客服咨询。 +
+
+
+
+
+
+ + diff --git a/includes/footer.php b/includes/footer.php new file mode 100644 index 0000000..ea1d9db --- /dev/null +++ b/includes/footer.php @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/includes/header.php b/includes/header.php new file mode 100644 index 0000000..273f12c --- /dev/null +++ b/includes/header.php @@ -0,0 +1,105 @@ +query("SELECT key_name, key_value FROM settings"); + $settings = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); +} catch (Exception $e) { + $settings = [ + 'site_name' => '豪软世界', + 'tg_support' => 'https://t.me/zhangshihao818' + ]; +} + +$site_name = $settings['site_name'] ?? '豪软世界'; +$tg_link = $settings['tg_support'] ?? 'https://t.me/zhangshihao818'; +?> + + + + + + <?php echo $site_name; ?> - 全球专业软件服务商 + + + + + + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/includes/header.php_logo_style_temp b/includes/header.php_logo_style_temp new file mode 100644 index 0000000..75aa26e --- /dev/null +++ b/includes/header.php_logo_style_temp @@ -0,0 +1,25 @@ + .site-logo { + width: 40px; + height: 40px; + background: linear-gradient(135deg, #ff3399, #ff007a); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + margin-right: 10px; + position: relative; + box-shadow: 0 0 10px rgba(255, 51, 153, 0.5); + } + .site-logo .bi-globe-americas { + color: white; + font-size: 22px; + } + .site-logo .bi-airplane-fill { + color: #00f2ff; + font-size: 14px; + position: absolute; + top: 5px; + right: 5px; + transform: rotate(45deg); + text-shadow: 0 0 5px rgba(0, 242, 255, 0.8); + } diff --git a/includes/product_card.php b/includes/product_card.php new file mode 100644 index 0000000..d6728ef --- /dev/null +++ b/includes/product_card.php @@ -0,0 +1,24 @@ +
+ +
+ +
+ + + +
+
+ USDT + +
+
+
\ No newline at end of file diff --git a/index.php b/index.php index 7205f3d..e0fa1ad 100644 --- a/index.php +++ b/index.php @@ -1,150 +1,200 @@ query("SELECT p.*, c.name as category_name FROM products p JOIN categories c ON p.category_id = c.id WHERE p.is_hot = 1 LIMIT 8")->fetchAll(); + +// Function to fetch products by category ID with limit +function getProductsByCategory($db, $cat_id, $limit) { + $stmt = $db->prepare("SELECT p.*, c.name as category_name FROM products p JOIN categories c ON p.category_id = c.id WHERE p.category_id = :cat_id LIMIT :limit"); + $stmt->bindValue(':cat_id', $cat_id, PDO::PARAM_INT); + $stmt->bindValue(':limit', $limit, PDO::PARAM_INT); + $stmt->execute(); + return $stmt->fetchAll(); +} + +$social_accounts = getProductsByCategory($db, 1, 8); +$overseas_social = getProductsByCategory($db, 2, 8); +$ai_office = getProductsByCategory($db, 3, 4); +$email_tools = getProductsByCategory($db, 4, 4); + +$categories = $db->query("SELECT * FROM categories")->fetchAll(); ?> - - - - - - New Style - - - - - - - - - - - - - - - - - - - - - -
-
-

Analyzing your requirements and generating your website…

-
- Loading… -
-

AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

+ +
+ + +
- - - + + + +
+ +
+ + +
+ + + +
+ +
+ +
+
+
+

热门推荐

+

当前最畅销的高质量软件账号

+
+ 查看全部 +
+
+ +
+ +
+ +
+
+ + +
+

社交账号

+
+ +
+ +
+ +
+
+ + +
+

海外社交

+
+ +
+ +
+ +
+
+ + +
+

AI 办公

+
+ +
+ +
+ +
+
+ + +
+

邮箱工具

+
+ +
+ +
+ +
+
+
+ + +
+
+
+
+ +
+

秒速发货

+

系统自动处理订单,即买即用无需等待。

+
+
+
+
+
+ +
+

质量保障

+

所有账号均通过质保测试,安全稳定可靠。

+
+
+
+
+
+ +
+

优质售后

+

7x24小时专业客服团队,为您排忧解难。

+
+
+
+
+
+ +
+

USDT 支付

+

支持主流加密货币支付,隐私安全有保障。

+
+
+
+ + \ No newline at end of file diff --git a/login.php b/login.php new file mode 100644 index 0000000..66ac155 --- /dev/null +++ b/login.php @@ -0,0 +1,77 @@ +prepare("SELECT * FROM users WHERE username = ?"); + $stmt->execute([$username]); + $user = $stmt->fetch(); + + if ($user && password_verify($password, $user['password'])) { + $_SESSION['user_id'] = $user['id']; + $_SESSION['username'] = $user['username']; + $_SESSION['role'] = $user['role']; + + if ($user['role'] === 'admin') { + header("Location: admin/index.php"); + } else { + header("Location: index.php"); + } + exit; + } else { + $error = '用户名或密码错误'; + } +} + +$page_title = '登录 - 豪软世界'; +require_once 'includes/header.php'; +?> + +
+
+
+
+
+
+
H
+

欢迎回来

+

登录以管理您的订单和账户

+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+ +
+ 还没有账号? 立即注册 +
+
+
+
+
+ 测试账号: admin / admin123 +
+
+
+
+
+
+ + diff --git a/logout.php b/logout.php new file mode 100644 index 0000000..15e4700 --- /dev/null +++ b/logout.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/orders.php b/orders.php new file mode 100644 index 0000000..22d078c --- /dev/null +++ b/orders.php @@ -0,0 +1,125 @@ +prepare("SELECT * FROM orders WHERE order_no = ?"); + $stmt->execute([$_GET['order_no']]); + $search_order = $stmt->fetch(); + + if (!$search_order) { + $error = '未找到该订单,请检查订单号是否正确'; + } else { + $stmt = db()->prepare("SELECT oi.*, p.name FROM order_items oi JOIN products p ON oi.product_id = p.id WHERE oi.order_id = ?"); + $stmt->execute([$search_order['id']]); + $search_order['items'] = $stmt->fetchAll(); + } +} +?> + +
+
+
+

订单查询

+

输入您的订单号实时追踪订单状态与交付进度

+
+ +
+
+
+ +
+
+ +
+
+
+ + +
+ + +
+ + + +
+
+
+ 订单编号 +
+
+
+ 订单状态 + + + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
商品名称数量小计
USDT
订单总额 USDT
+
+ +
+
+
+ 联系信息 +
+
+
+
+
+ 下单时间 +
+
+
+
+ + + + + +
+

如果您对订单有任何疑问,请随时联系我们的客服。

+ + 联系客服 + +
+
+
+ +
+
+ + diff --git a/payment.php b/payment.php new file mode 100644 index 0000000..74fc0c0 --- /dev/null +++ b/payment.php @@ -0,0 +1,146 @@ +prepare("SELECT * FROM orders WHERE order_no = ?"); +$stmt->execute([$order_no]); +$order = $stmt->fetch(); + +if (!$order) { + echo "

订单不存在

请检查您的订单号是否正确或联系客服。

返回首页
"; + include 'includes/footer.php'; + exit; +} + +// Fetch total quantity +$stmt = $db->prepare("SELECT SUM(quantity) as total_qty FROM order_items WHERE order_id = ?"); +$stmt->execute([$order['id']]); +$qty_data = $stmt->fetch(); +$total_qty = $qty_data['total_qty'] ?? 1; + +$usdt_address = $settings['usdt_address'] ?? 'Txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; +?> + +
+
+
+
+

安全支付收银台

+
USDT - TRC20
+
+ +
+
+
+
+ QR Code +
+
+ +
60:00
+
+

请在倒计时结束前完成支付以保证订单有效

+
+ +
+
+
订单信息
+
+ 订单编号: + +
+
+ 商品数量: + +
+
+ 应付金额: + USDT +
+
+ +
+
收款地址 (TRC20)
+
+ + +
+
+ +
+
支付说明:
+
    +
  • 请务必使用 TRC20 (波场网络) 进行转账,暂不支持其他网络。
  • +
  • 支付金额必须与订单金额 完全一致 ( USDT),否则系统无法自动识别。
  • +
  • 转账完成后,请点击下方的“已完成支付”按钮,联系客服确认发货。
  • +
  • 区块确认通常需要 1-3 分钟,请耐心等待。
  • +
  • 如需帮助,请提供订单号 给在线客服。
  • +
+
+ +
+ + + 返回首页 + +
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/policy.php b/policy.php new file mode 100644 index 0000000..15d26bc --- /dev/null +++ b/policy.php @@ -0,0 +1,83 @@ + + +
+
+
+

+ + +

+ + +
+

为什么选择 USDT 支付?

+

USDT (Tether) 是一种与美元挂钩的加密货币,具有交易快、手续费低、全球通用等特点。通过 USDT 支付,可以确保您的资金安全和隐私,同时实现全自动化的即时发货。

+
+ +
+

支付流程

+
+
+
+
1. 选择商品
+

将您需要的软件或账号加入购物车并提交订单。

+
+
+
+
+
2. 转账支付
+

复制收款地址或扫码,使用您的钱包转入精确金额。

+
+
+
+
+
3. 自动交付
+

区块链确认后,系统将自动跳转并提供您的卡密信息。

+
+
+
+
+ +
+

注意事项

+
    +
  • 请务必使用 TRC20 (Tron) 网络,使用其他网络(如 ERC20, BEP20)将导致资金丢失。
  • +
  • 请确保转账金额与订单显示的金额 完全一致
  • +
  • 支付完成后请保留交易哈希 (TXID) 以备售后查询。
  • +
  • 订单有效期为 60 分钟,请在倒计时结束前完成转账。
  • +
+
+ +
+

质保范围

+

我们对所有售出的账号提供首登质保。即在购买后 24 小时内,如出现无法登录、账号密码错误等非人为操作问题,我们将为您免费更换。

+
+ +
+

非质保情况

+
    +
  • 登录后因发布违规信息、频繁切换 IP 导致的封号。
  • +
  • 因使用劣质代理 (VPN) 导致的登录异常。
  • +
  • 购买后超过 24 小时未登录核对的订单。
  • +
  • 由于官方政策调整导致的系统性风控。
  • +
+
+ +
+

售后申请流程

+

如遇问题,请准备好您的 订单号异常截图,联系我们的 Telegram 在线客服。客服将在 1-12 小时内处理您的请求。

+ +
+ +
+
+
+ + \ No newline at end of file diff --git a/product.php b/product.php new file mode 100644 index 0000000..cb97055 --- /dev/null +++ b/product.php @@ -0,0 +1,95 @@ +prepare("SELECT p.*, c.name as category_name FROM products p JOIN categories c ON p.category_id = c.id WHERE p.id = ?"); +$stmt->execute([$id]); +$product = $stmt->fetch(); + +if (!$product) { + echo "
商品不存在。
"; + include 'includes/footer.php'; + exit; +} +?> + +
+
+
+ <?php echo $product['name']; ?> +
+
+
+
+ +

+
+ +

+
+ +
+
+ 建议零售价 + USDT +
+
+ 库存状态 + + 0 ? '现货供应 ('.$product['stock'].')' : '缺货中'; ?> + +
+
+ +
+ + + 立即购买 + +
+ + + +
+
服务承诺
+
+
+ + 安全支付 +
+
+ + 自动发货 +
+
+ + 售后保障 +
+
+
+
+
+
+ +
+
+

详细描述

+
+ +
+
+
+ + \ No newline at end of file diff --git a/register.php b/register.php new file mode 100644 index 0000000..a71ad56 --- /dev/null +++ b/register.php @@ -0,0 +1,82 @@ +prepare("INSERT INTO users (username, password, email, role) VALUES (?, ?, ?, 'user')"); + $stmt->execute([$username, $hashed, $email]); + $success = '注册成功,请登录'; + } catch (PDOException $e) { + $error = '用户名或邮箱已存在'; + } + } +} + +$page_title = '注册 - 豪软世界'; +require_once 'includes/header.php'; +?> + +
+
+
+
+
+
+

加入我们

+

开启您的软件选购之旅

+
+ + +
+ +
+ + + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ 已有账号? 立即登录 +
+
+
+
+
+
+
+ + diff --git a/search.php b/search.php new file mode 100644 index 0000000..a96335a --- /dev/null +++ b/search.php @@ -0,0 +1,65 @@ +prepare("SELECT p.*, c.name as cat_name FROM products p JOIN categories c ON p.category_id = c.id WHERE p.name LIKE ? OR p.description LIKE ? OR c.name LIKE ? ORDER BY p.id DESC"); + $stmt->execute(['%'.$q.'%', '%'.$q.'%', '%'.$q.'%']); + $results = $stmt->fetchAll(); +} +?> + +
+
+

搜索结果

+

关键词: ""

+
+
+ 个相关结果 +
+
+ + +
+
+ +

未找到相关结果

+

换个关键词试试,或者联系客服定制您需要的软件。

+ 返回商城首页 +
+
+ +
+ +
+
+ +
+ +
+ + + +
+
+ USDT + +
+
+
+
+ +
+ + + \ No newline at end of file