dm-design/商家端APP/工作台/会员管理/1.1.2 会员列表/会员详情.html

559 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background-color: #f5f5f5;
color: #333;
line-height: 1.4;
}
.container {
max-width: 100%;
margin: 0 auto;
background: white;
min-height: 100vh;
}
/* Header Section */
.header {
padding: 20px 16px;
background: white;
border-bottom: 1px solid #e5e5e5;
}
.member-info {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px 20px;
margin-bottom: 20px;
}
.info-item {
display: flex;
align-items: center;
font-size: 14px;
}
.info-label {
color: #666;
margin-right: 8px;
min-width: 60px;
}
.info-value {
color: #333;
font-weight: 500;
}
/* Stats Cards */
.stats-container {
display: flex;
justify-content: space-around;
margin-top: 20px;
padding: 16px;
background: #f8f9fa;
border-radius: 8px;
}
.stat-item {
text-align: center;
flex: 1;
}
.stat-number {
font-size: 24px;
font-weight: bold;
color: #333;
margin-bottom: 4px;
}
.stat-label {
font-size: 12px;
color: #666;
}
/* Tab Navigation */
.tab-nav {
display: flex;
background: white;
border-bottom: 1px solid #e5e5e5;
overflow-x: auto;
}
.tab-item {
flex: 1;
padding: 16px 12px;
text-align: center;
font-size: 14px;
color: #666;
border-bottom: 2px solid transparent;
cursor: pointer;
transition: all 0.3s;
white-space: nowrap;
min-width: 120px;
}
.tab-item.active {
color: #1890ff;
border-bottom-color: #1890ff;
font-weight: 500;
}
/* Content Area */
.content {
padding: 0 16px 20px;
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
/* Table Styles */
.table-container {
background: white;
border-radius: 8px;
overflow: hidden;
margin-top: 16px;
}
.table-header {
display: grid;
background: #f8f9fa;
padding: 12px 8px;
font-size: 12px;
color: #666;
font-weight: 500;
border-bottom: 1px solid #e5e5e5;
}
.table-row {
display: grid;
padding: 12px 8px;
border-bottom: 1px solid #f0f0f0;
font-size: 13px;
align-items: center;
}
.table-row:last-child {
border-bottom: none;
}
/* Coupon Table */
.coupon-header {
grid-template-columns: 1fr 60px 60px 80px 60px;
}
.coupon-row {
grid-template-columns: 1fr 60px 60px 80px 60px;
}
/* Growth Table */
.growth-header {
grid-template-columns: 1fr 80px 1fr 60px;
}
.growth-row {
grid-template-columns: 1fr 80px 1fr 60px;
}
/* Points Table */
.points-header {
grid-template-columns: 1fr 60px 80px 1fr 60px;
}
.points-row {
grid-template-columns: 1fr 60px 80px 1fr 60px;
}
.status-available {
color: #52c41a;
font-size: 12px;
}
.status-expired {
color: #ff4d4f;
font-size: 12px;
}
.status-used {
color: #999;
font-size: 12px;
}
.points-positive {
color: #52c41a;
}
.points-negative {
color: #ff4d4f;
}
.detail-link {
color: #1890ff;
text-decoration: none;
font-size: 12px;
}
/* Pagination */
.pagination {
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
gap: 12px;
}
.pagination button {
padding: 8px 12px;
border: 1px solid #d9d9d9;
background: white;
color: #666;
border-radius: 4px;
font-size: 12px;
cursor: pointer;
}
.pagination button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.pagination .current-page {
color: #333;
font-weight: 500;
}
/* Mobile Optimizations */
@media (max-width: 480px) {
.member-info {
grid-template-columns: 1fr;
gap: 8px;
}
.stats-container {
padding: 12px;
}
.stat-number {
font-size: 20px;
}
.table-container {
font-size: 12px;
}
.table-header,
.table-row {
padding: 8px 4px;
}
/* Stack table cells vertically on very small screens */
.coupon-header,
.coupon-row {
grid-template-columns: 1fr;
gap: 4px;
}
.growth-header,
.growth-row {
grid-template-columns: 1fr;
gap: 4px;
}
.points-header,
.points-row {
grid-template-columns: 1fr;
gap: 4px;
}
.table-row {
padding: 12px 8px;
border-left: 3px solid #1890ff;
margin-bottom: 8px;
border-radius: 0 4px 4px 0;
}
}
/* Loading State */
.loading {
text-align: center;
padding: 40px;
color: #999;
}
/* Empty State */
.empty-state {
text-align: center;
padding: 40px;
color: #999;
}
</style>
</head>
<body>
<div class="container">
<!-- Header Section -->
<div class="header">
<div class="member-info">
<div class="info-item">
<span class="info-label">会员姓名:</span>
<span class="info-value">张三</span>
</div>
<div class="info-item">
<span class="info-label">系统编号:</span>
<span class="info-value">3</span>
</div>
<div class="info-item">
<span class="info-label">手机号:</span>
<span class="info-value">138****1234</span>
</div>
<div class="info-item">
<span class="info-label">生日:</span>
<span class="info-value">1990-05-15</span>
</div>
</div>
<div class="stats-container">
<div class="stat-item">
<div class="stat-number">1250</div>
<div class="stat-label">会员成长值</div>
</div>
<div class="stat-item">
<div class="stat-number">890</div>
<div class="stat-label">会员积分</div>
</div>
<div class="stat-item">
<div class="stat-number">5</div>
<div class="stat-label">会员优惠券</div>
</div>
</div>
</div>
<!-- Tab Navigation -->
<div class="tab-nav">
<div class="tab-item" onclick="switchTab('growth')">会员成长值明细</div>
<div class="tab-item" onclick="switchTab('points')">会员积分明细</div>
<div class="tab-item active" onclick="switchTab('coupons')">会员优惠券</div>
</div>
<!-- Content Area -->
<div class="content">
<!-- Coupons Tab -->
<div id="coupons" class="tab-content active">
<div class="table-container">
<div class="table-header coupon-header">
<div>优惠券名称</div>
<div>类型</div>
<div>面额</div>
<div>使用条件</div>
<div>状态</div>
</div>
<div class="table-row coupon-row">
<div>
<div style="font-weight: 500;">新用户专享券</div>
<div style="font-size: 11px; color: #999; margin-top: 2px;">获得时间: 2024-01-01 10:00:00</div>
<div style="font-size: 11px; color: #999;">有效期: 2024-02-01</div>
</div>
<div>满减券</div>
<div>¥20</div>
<div>满100元可用</div>
<div class="status-available">可使用</div>
</div>
<div class="table-row coupon-row">
<div>
<div style="font-weight: 500;">生日特惠券</div>
<div style="font-size: 11px; color: #999; margin-top: 2px;">获得时间: 2024-01-05 12:30:15</div>
<div style="font-size: 11px; color: #999;">有效期: 2024-02-05</div>
</div>
<div>折扣券</div>
<div>9折</div>
<div>全品类可用</div>
<div class="status-available">可使用</div>
</div>
<div class="table-row coupon-row">
<div>
<div style="font-weight: 500;">积分兑换券</div>
<div style="font-size: 11px; color: #999; margin-top: 2px;">获得时间: 2024-01-10 16:20:30</div>
<div style="font-size: 11px; color: #999;">有效期: 2024-03-10</div>
</div>
<div>满减券</div>
<div>¥50</div>
<div>满300元可用</div>
<div class="status-available">可使用</div>
</div>
<div class="table-row coupon-row">
<div>
<div style="font-weight: 500;">限时抢购券</div>
<div style="font-size: 11px; color: #999; margin-top: 2px;">获得时间: 2023-12-20 14:15:20</div>
<div style="font-size: 11px; color: #999;">有效期: 2024-01-20</div>
</div>
<div>满减券</div>
<div>¥10</div>
<div>满50元可用</div>
<div class="status-expired">已过期</div>
</div>
<div class="table-row coupon-row">
<div>
<div style="font-weight: 500;">会员专属券</div>
<div style="font-size: 11px; color: #999; margin-top: 2px;">获得时间: 2023-12-15 09:45:10</div>
<div style="font-size: 11px; color: #999;">有效期: 2024-01-15</div>
</div>
<div>满减券</div>
<div>¥30</div>
<div>满200元可用</div>
<div class="status-used">已使用</div>
</div>
</div>
</div>
<!-- Growth Tab -->
<div id="growth" class="tab-content">
<div class="table-container">
<div class="table-header growth-header">
<div>变化时间</div>
<div>成长值变动</div>
<div>关联订单</div>
<div>详情</div>
</div>
<div class="table-row growth-row">
<div>2024-01-15 14:30:25</div>
<div class="points-positive">+50</div>
<div>ORDER202401501</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
<div class="table-row growth-row">
<div>2024-01-10 09:15:10</div>
<div class="points-positive">+100</div>
<div>ORDER202401002</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
<div class="table-row growth-row">
<div>2024-01-05 16:45:33</div>
<div class="points-positive">+30</div>
<div>ORDER202401503</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
<div class="table-row growth-row">
<div>2024-01-02 11:20:15</div>
<div class="points-positive">+20</div>
<div>ORDER202401204</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
<div class="table-row growth-row">
<div>2023-12-28 13:55:40</div>
<div class="points-positive">+75</div>
<div>ORDER202312805</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
</div>
</div>
<!-- Points Tab -->
<div id="points" class="tab-content">
<div class="table-container">
<div class="table-header points-header">
<div>变化时间</div>
<div>积分变动</div>
<div>变动类型</div>
<div>关联订单</div>
<div>详情</div>
</div>
<div class="table-row points-row">
<div>2024-01-15 14:30:25</div>
<div class="points-positive">+100</div>
<div>购物获得</div>
<div>ORDER202401501</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
<div class="table-row points-row">
<div>2024-01-12 10:20:15</div>
<div class="points-negative">-50</div>
<div>积分抵扣</div>
<div>ORDER202401202</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
<div class="table-row points-row">
<div>2024-01-10 09:15:10</div>
<div class="points-positive">+200</div>
<div>购物获得</div>
<div>ORDER202401002</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
<div class="table-row points-row">
<div>2024-01-08 15:45:30</div>
<div class="points-positive">+10</div>
<div>签到奖励</div>
<div>-</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
<div class="table-row points-row">
<div>2024-01-05 16:45:33</div>
<div class="points-positive">+60</div>
<div>购物获得</div>
<div>ORDER202401503</div>
<div><a href="#" class="detail-link">查看详情</a></div>
</div>
</div>
</div>
<!-- Pagination -->
<div class="pagination">
<button disabled>上一页</button>
<span class="current-page">第1页共1页</span>
<button disabled>下一页</button>
</div>
</div>
</div>
<script>
function switchTab(tabName) {
// Remove active class from all tabs and content
document.querySelectorAll('.tab-item').forEach(tab => {
tab.classList.remove('active');
});
document.querySelectorAll('.tab-content').forEach(content => {
content.classList.remove('active');
});
// Add active class to clicked tab and corresponding content
event.target.classList.add('active');
document.getElementById(tabName).classList.add('active');
}
// Add touch feedback for better mobile experience
document.querySelectorAll('.tab-item, .detail-link').forEach(element => {
element.addEventListener('touchstart', function() {
this.style.opacity = '0.7';
});
element.addEventListener('touchend', function() {
this.style.opacity = '1';
});
});
// Prevent zoom on double tap for better mobile experience
let lastTouchEnd = 0;
document.addEventListener('touchend', function (event) {
const now = (new Date()).getTime();
if (now - lastTouchEnd <= 300) {
event.preventDefault();
}
lastTouchEnd = now;
}, false);
</script>
</body>
</html>