Files
TakeoutSaaS.Prototypes/pages/mkt-new-customer.html

397 lines
21 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.
<!-- 新客有礼页 -->
<style>
.page-nc { max-width:960px; }
.nc-toolbar { display:flex; align-items:center; gap:12px; margin-bottom:16px; box-shadow:var(--g-shadow-sm); border-radius:10px; padding:10px 14px; background:#fff; }
.nc-toolbar select { height:34px; padding:0 10px; border:1px solid #e5e7eb; border-radius:8px; font-size:13px; outline:none; background:#fff; transition:var(--g-transition); }
.nc-toolbar select:focus { border-color:var(--primary); box-shadow:0 0 0 3px color-mix(in srgb, var(--primary) 12%, transparent); }
.nc-banner { display:flex; align-items:center; gap:12px; padding:14px 18px; background:linear-gradient(135deg, color-mix(in srgb, var(--primary) 8%, #fff), color-mix(in srgb, var(--primary) 3%, #fff)); border:1px solid color-mix(in srgb, var(--primary) 15%, #fff); border-radius:10px; margin-bottom:16px; }
.nc-banner-icon { width:40px; height:40px; border-radius:10px; background:color-mix(in srgb, var(--primary) 12%, #fff); display:flex; align-items:center; justify-content:center; color:var(--primary); flex-shrink:0; }
.nc-banner-text { font-size:13px; color:var(--g-text-secondary); line-height:1.6; }
.nc-banner-text strong { color:var(--g-text); font-weight:600; }
.nc-stats { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-bottom:16px; }
.nc-stat-card { background:#fff; border:1px solid var(--g-border); border-radius:10px; padding:18px 20px; transition:box-shadow var(--g-transition); }
.nc-stat-card:hover { box-shadow:var(--g-shadow-md); }
.nc-stat-label { font-size:12px; color:var(--g-text-muted); margin-bottom:8px; display:flex; align-items:center; gap:6px; }
.nc-stat-val { font-size:28px; font-weight:700; color:var(--g-text); display:flex; align-items:baseline; gap:8px; }
.nc-stat-unit { font-size:13px; font-weight:400; color:var(--g-text-muted); }
.nc-stat-trend { font-size:12px; font-weight:500; display:inline-flex; align-items:center; gap:2px; }
.nc-stat-trend.up { color:var(--g-success); }
.nc-stat-sub { font-size:11px; color:var(--g-text-muted); margin-top:4px; }
.nc-section-hd { font-size:15px; font-weight:600; color:var(--g-text); padding-left:10px; border-left:3px solid var(--primary); margin-bottom:16px; }
.nc-row { display:flex; align-items:flex-start; gap:16px; padding:14px 0; border-bottom:1px solid #f3f4f6; }
.nc-row:last-child { border-bottom:none; }
.nc-row-label { width:120px; flex-shrink:0; font-size:13px; font-weight:500; color:var(--g-text); line-height:22px; padding-top:5px; }
.nc-row-ctrl { flex:1; display:flex; flex-direction:column; gap:6px; }
.nc-row-ctrl-inline { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.nc-row-hint { font-size:11px; color:var(--g-text-muted); }
.nc-coupon-list { display:flex; flex-direction:column; gap:10px; }
.nc-coupon-item { display:flex; align-items:center; gap:12px; padding:12px 14px; background:#fff; border:1px solid var(--g-border); border-radius:8px; border-left:3px solid var(--primary); transition:box-shadow var(--g-transition); }
.nc-coupon-item:nth-child(2) { border-left-color:var(--g-success); }
.nc-coupon-item:nth-child(3) { border-left-color:var(--g-warning); }
.nc-coupon-item:hover { box-shadow:var(--g-shadow); }
.nc-coupon-info { flex:1; }
.nc-coupon-name { font-size:14px; font-weight:600; color:var(--g-text); }
.nc-coupon-desc { font-size:11px; color:var(--g-text-muted); margin-top:2px; }
.nc-coupon-validity { font-size:12px; color:var(--g-text-secondary); display:flex; align-items:center; gap:4px; }
.nc-add-coupon-btn { display:flex; align-items:center; justify-content:center; gap:6px; padding:12px; border:2px dashed #d9d9d9; border-radius:8px; color:var(--g-text-muted); font-size:13px; cursor:pointer; transition:all var(--g-transition); background:none; width:100%; }
.nc-add-coupon-btn:hover { border-color:var(--primary); color:var(--primary); background:color-mix(in srgb, var(--primary) 3%, #fff); }
.nc-direct-panel { display:flex; flex-direction:column; gap:12px; }
.nc-share-url { display:flex; align-items:center; gap:8px; }
.nc-share-url input { flex:1; }
.nc-invite-table { margin-top:8px; }
.nc-save-bar { margin-top:20px; display:flex; justify-content:flex-end; gap:8px; }
.nc-num-input { width:100px; height:34px; padding:0 10px; border:1px solid #e5e7eb; border-radius:8px; font-size:13px; outline:none; transition:var(--g-transition); }
.nc-num-input:focus { border-color:var(--primary); box-shadow:0 0 0 3px color-mix(in srgb, var(--primary) 12%, transparent); }
.nc-suffix { font-size:13px; color:var(--g-text-secondary); white-space:nowrap; }
</style>
<div class="page-nc">
<!-- 顶部工具栏 -->
<div class="nc-toolbar">
<select style="width:200px;">
<option>老三家外卖(朝阳店)</option>
<option>老三家外卖(海淀店)</option>
<option>老三家外卖(望京店)</option>
<option>老三家外卖(通州店)</option>
<option>老三家外卖(丰台店)</option>
</select>
<div style="flex:1;"></div>
</div>
<!-- 说明横幅 -->
<div class="nc-banner">
<div class="nc-banner-icon"><i data-lucide="gift" style="width:20px;height:20px;"></i></div>
<div class="nc-banner-text"><strong>新客有礼</strong> — 新用户首次下单自动发放优惠礼包,提升新客转化率。开启后,每位新注册用户将自动收到您配置的欢迎礼包。</div>
</div>
<!-- 统计卡片 -->
<div class="nc-stats">
<div class="nc-stat-card">
<div class="nc-stat-label"><i data-lucide="user-plus" style="width:14px;height:14px;color:var(--primary);"></i>本月新客</div>
<div class="nc-stat-val">86<span class="nc-stat-unit"></span><span class="nc-stat-trend up"><i data-lucide="trending-up" style="width:14px;height:14px;"></i>+23%</span></div>
<div class="nc-stat-sub">较上月增长 16 人</div>
</div>
<div class="nc-stat-card">
<div class="nc-stat-label"><i data-lucide="ticket" style="width:14px;height:14px;color:var(--g-warning);"></i>礼包领取率</div>
<div class="nc-stat-val">92.4<span class="nc-stat-unit">%</span></div>
<div class="nc-stat-sub">86 人中 80 人已领取</div>
</div>
<div class="nc-stat-card">
<div class="nc-stat-label"><i data-lucide="shopping-bag" style="width:14px;height:14px;color:var(--g-success);"></i>新客转化率</div>
<div class="nc-stat-val">68.5<span class="nc-stat-unit">%</span></div>
<div class="nc-stat-sub">首单完成率59 人已下单</div>
</div>
</div>
<!-- 新客礼包配置 -->
<div class="g-card" style="padding:0; margin-bottom:16px;">
<div style="padding:18px 18px 0;">
<div class="nc-section-hd">新客礼包配置</div>
</div>
<div style="padding:0 18px 18px;">
<!-- 启用状态 -->
<div class="nc-row">
<div class="nc-row-label">启用状态</div>
<div class="nc-row-ctrl">
<div class="nc-row-ctrl-inline">
<div class="g-toggle on" onclick="toggleSwitch(this)"></div>
<span class="g-toggle-label">开启后新用户注册即发放礼包</span>
</div>
</div>
</div>
<!-- 礼包类型 -->
<div class="nc-row">
<div class="nc-row-label">礼包类型</div>
<div class="nc-row-ctrl">
<div class="nc-row-ctrl-inline">
<span class="g-pill checked" onclick="selectNcType('coupon',this)">优惠券包</span>
<span class="g-pill" onclick="selectNcType('direct',this)">首单直减</span>
</div>
</div>
</div>
<!-- 优惠券包内容 -->
<div id="ncTypeCoupon">
<div class="nc-row" style="flex-direction:column; gap:12px;">
<div class="nc-row-label" style="width:auto;">券包内容</div>
<div class="nc-coupon-list" id="ncCouponList">
<div class="nc-coupon-item" data-idx="0">
<div class="nc-coupon-info">
<div class="nc-coupon-name">满30减5</div>
<div class="nc-coupon-desc">订单满 30 元可用</div>
</div>
<div class="nc-coupon-validity"><i data-lucide="clock" style="width:12px;height:12px;"></i>领取后7天</div>
<button class="g-btn g-btn-sm g-btn-danger" onclick="removeNcCoupon(this)"><i data-lucide="trash-2" style="width:12px;height:12px;"></i></button>
</div>
<div class="nc-coupon-item" data-idx="1">
<div class="nc-coupon-info">
<div class="nc-coupon-name">满50享8折</div>
<div class="nc-coupon-desc">订单满 50 元可用</div>
</div>
<div class="nc-coupon-validity"><i data-lucide="clock" style="width:12px;height:12px;"></i>领取后7天</div>
<button class="g-btn g-btn-sm g-btn-danger" onclick="removeNcCoupon(this)"><i data-lucide="trash-2" style="width:12px;height:12px;"></i></button>
</div>
<div class="nc-coupon-item" data-idx="2">
<div class="nc-coupon-info">
<div class="nc-coupon-name">免配送费</div>
<div class="nc-coupon-desc">无门槛,减免配送费</div>
</div>
<div class="nc-coupon-validity"><i data-lucide="clock" style="width:12px;height:12px;"></i>领取后7天</div>
<button class="g-btn g-btn-sm g-btn-danger" onclick="removeNcCoupon(this)"><i data-lucide="trash-2" style="width:12px;height:12px;"></i></button>
</div>
</div>
<button class="nc-add-coupon-btn" onclick="openNcDrawer()"><i data-lucide="plus" style="width:14px;height:14px;"></i>添加优惠券</button>
</div>
</div>
<!-- 首单直减 -->
<div id="ncTypeDirect" style="display:none;">
<div class="nc-row">
<div class="nc-row-label">直减金额</div>
<div class="nc-row-ctrl">
<div class="nc-row-ctrl-inline">
<span class="nc-suffix">¥</span>
<input type="number" class="nc-num-input" placeholder="如10" value="10" />
</div>
<div class="nc-row-hint">新用户首单自动减免的金额</div>
</div>
</div>
<div class="nc-row">
<div class="nc-row-label">使用门槛</div>
<div class="nc-row-ctrl">
<div class="nc-row-ctrl-inline">
<span class="nc-suffix">订单满</span>
<input type="number" class="nc-num-input" placeholder="如30" value="30" />
<span class="nc-suffix">元可用</span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 老带新分享 -->
<div class="g-card" style="padding:0; margin-bottom:16px;">
<div style="padding:18px 18px 0;">
<div class="nc-section-hd">老带新分享</div>
</div>
<div style="padding:0 18px 18px;">
<div class="nc-row">
<div class="nc-row-label">启用状态</div>
<div class="nc-row-ctrl">
<div class="nc-row-ctrl-inline">
<div class="g-toggle on" onclick="toggleSwitch(this)"></div>
<span class="g-toggle-label">开启后顾客可在小程序内分享邀请好友</span>
</div>
</div>
</div>
<div class="nc-row" style="flex-direction:column; gap:12px;">
<div class="nc-row-label" style="width:auto;">邀请人奖励 <span style="font-weight:400;color:var(--g-text-muted);font-size:12px;">成功邀请新用户下单后发放</span></div>
<div class="nc-coupon-list" id="ncInviterList">
<div class="nc-coupon-item">
<div class="nc-coupon-info">
<div class="nc-coupon-name">满30减5</div>
<div class="nc-coupon-desc">订单满 30 元可用</div>
</div>
<div class="nc-coupon-validity"><i data-lucide="clock" style="width:12px;height:12px;"></i>领取后7天</div>
<button class="g-btn g-btn-sm g-btn-danger" onclick="removeNcCoupon(this)"><i data-lucide="trash-2" style="width:12px;height:12px;"></i></button>
</div>
</div>
<button class="nc-add-coupon-btn" onclick="openNcDrawer('inviter')"><i data-lucide="plus" style="width:14px;height:14px;"></i>添加奖励券</button>
</div>
<div class="nc-row" style="flex-direction:column; gap:12px;">
<div class="nc-row-label" style="width:auto;">被邀请人奖励 <span style="font-weight:400;color:var(--g-text-muted);font-size:12px;">新用户通过邀请注册后额外获得,叠加新客礼包</span></div>
<div class="nc-coupon-list" id="ncInviteeList">
<div class="nc-coupon-item">
<div class="nc-coupon-info">
<div class="nc-coupon-name">满20减3</div>
<div class="nc-coupon-desc">订单满 20 元可用</div>
</div>
<div class="nc-coupon-validity"><i data-lucide="clock" style="width:12px;height:12px;"></i>领取后7天</div>
<button class="g-btn g-btn-sm g-btn-danger" onclick="removeNcCoupon(this)"><i data-lucide="trash-2" style="width:12px;height:12px;"></i></button>
</div>
<div class="nc-coupon-item">
<div class="nc-coupon-info">
<div class="nc-coupon-name">免配送费</div>
<div class="nc-coupon-desc">无门槛,减免配送费</div>
</div>
<div class="nc-coupon-validity"><i data-lucide="clock" style="width:12px;height:12px;"></i>领取后7天</div>
<button class="g-btn g-btn-sm g-btn-danger" onclick="removeNcCoupon(this)"><i data-lucide="trash-2" style="width:12px;height:12px;"></i></button>
</div>
</div>
<button class="nc-add-coupon-btn" onclick="openNcDrawer('invitee')"><i data-lucide="plus" style="width:14px;height:14px;"></i>添加奖励券</button>
</div>
<div class="nc-row">
<div class="nc-row-label">分享渠道</div>
<div class="nc-row-ctrl">
<div style="display:flex;gap:8px;">
<span class="g-pill checked" onclick="this.classList.toggle('checked')">微信好友</span>
<span class="g-pill checked" onclick="this.classList.toggle('checked')">朋友圈</span>
<span class="g-pill" onclick="this.classList.toggle('checked')">短信</span>
</div>
<div class="nc-row-hint">顾客在小程序内可通过以上渠道分享邀请</div>
</div>
</div>
<div class="nc-row" style="flex-direction:column; gap:12px;">
<div class="nc-row-label" style="width:auto;">邀请记录(近期)</div>
<div class="nc-invite-table" style="width:100%;">
<table class="g-table">
<thead>
<tr>
<th>邀请人</th>
<th>被邀请人</th>
<th>邀请时间</th>
<th>状态</th>
<th>奖励发放</th>
</tr>
</thead>
<tbody>
<tr>
<td>张**</td>
<td>李**</td>
<td>2025-02-10 14:32</td>
<td><span class="g-tag g-tag-green">已下单</span></td>
<td><span class="g-tag g-tag-green">已发放</span></td>
</tr>
<tr>
<td>王**</td>
<td>赵**</td>
<td>2025-02-09 09:15</td>
<td><span class="g-tag g-tag-orange">待下单</span></td>
<td><span class="g-tag g-tag-gray">待触发</span></td>
</tr>
<tr>
<td>张**</td>
<td>孙**</td>
<td>2025-02-08 18:47</td>
<td><span class="g-tag g-tag-green">已下单</span></td>
<td><span class="g-tag g-tag-green">已发放</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- 底部保存 -->
<div class="g-card" style="padding:14px 18px;">
<div style="display:flex; justify-content:flex-end; gap:8px;">
<button class="g-btn"><i data-lucide="rotate-ccw" style="width:14px;height:14px;"></i>重置</button>
<button class="g-btn g-btn-primary"><i data-lucide="save" style="width:14px;height:14px;"></i>保存设置</button>
</div>
</div>
</div>
<!-- 添加优惠券抽屉 -->
<div class="g-drawer-mask" id="ncDrawerMask" onclick="closeNcDrawer()"></div>
<div class="g-drawer" id="ncDrawer" style="width:480px;">
<div class="g-drawer-hd">
<span class="g-drawer-title">添加优惠券</span>
<button class="g-drawer-close" onclick="closeNcDrawer()"><i data-lucide="x" style="width:18px;height:18px;"></i></button>
</div>
<div class="g-drawer-bd">
<div class="g-form-group">
<label class="g-form-label required">券类型</label>
<div style="display:flex; gap:8px;">
<span class="g-pill checked" onclick="selectNcCouponType('reduce',this)">满减券</span>
<span class="g-pill" onclick="selectNcCouponType('discount',this)">折扣券</span>
<span class="g-pill" onclick="selectNcCouponType('shipping',this)">免配送费</span>
</div>
</div>
<!-- 满减券面额 -->
<div id="ncCouponReduce">
<div class="g-form-group">
<label class="g-form-label required">减免金额</label>
<div style="display:flex; align-items:center; gap:8px;">
<span style="font-size:13px; color:var(--g-text-secondary);">¥</span>
<input class="g-input" type="number" placeholder="如5" style="width:120px;" />
</div>
</div>
</div>
<!-- 折扣券面额 -->
<div id="ncCouponDiscount" style="display:none;">
<div class="g-form-group">
<label class="g-form-label required">折扣</label>
<div style="display:flex; align-items:center; gap:8px;">
<input class="g-input" type="number" placeholder="如8即8折" style="width:160px;" />
<span style="font-size:13px; color:var(--g-text-secondary);"></span>
</div>
</div>
</div>
<!-- 免配送费无额外字段 -->
<div id="ncCouponShipping" style="display:none;">
<div class="g-form-group">
<div style="padding:16px; background:#f8f9fb; border-radius:8px; font-size:13px; color:var(--g-text-secondary); text-align:center;">
<i data-lucide="truck" style="width:20px;height:20px;color:var(--g-text-muted);display:block;margin:0 auto 6px;"></i>
免配送费券无需设置面额
</div>
</div>
</div>
<div class="g-form-group">
<label class="g-form-label">使用门槛</label>
<div style="display:flex; align-items:center; gap:8px;">
<span style="font-size:13px; color:var(--g-text-secondary);">订单满</span>
<input class="g-input" type="number" placeholder="如30" style="width:120px;" />
<span style="font-size:13px; color:var(--g-text-secondary);">元可用</span>
</div>
<div class="g-hint">留空或填 0 表示无门槛</div>
</div>
<div class="g-form-group">
<label class="g-form-label required">有效期</label>
<div style="display:flex; align-items:center; gap:8px;">
<span style="font-size:13px; color:var(--g-text-secondary);">领取后</span>
<input class="g-input" type="number" placeholder="如7" style="width:100px;" value="7" />
<span style="font-size:13px; color:var(--g-text-secondary);"></span>
</div>
</div>
</div>
<div class="g-drawer-ft">
<button class="g-btn" onclick="closeNcDrawer()">取消</button>
<button class="g-btn g-btn-primary" onclick="closeNcDrawer()">添加</button>
</div>
</div>
<script>
function toggleSwitch(el) {
el.classList.toggle('on');
}
function selectNcType(type, el) {
el.parentElement.querySelectorAll('.g-pill').forEach(function(p) { p.classList.remove('checked'); });
el.classList.add('checked');
document.getElementById('ncTypeCoupon').style.display = type === 'coupon' ? '' : 'none';
document.getElementById('ncTypeDirect').style.display = type === 'direct' ? '' : 'none';
}
function openNcDrawer() {
document.getElementById('ncDrawerMask').classList.add('open');
document.getElementById('ncDrawer').classList.add('open');
if (typeof lucide !== 'undefined') lucide.createIcons();
}
function closeNcDrawer() {
document.getElementById('ncDrawerMask').classList.remove('open');
document.getElementById('ncDrawer').classList.remove('open');
}
function removeNcCoupon(btn) {
var item = btn.closest('.nc-coupon-item');
if (item) { item.style.transition = 'opacity 200ms, transform 200ms'; item.style.opacity = '0'; item.style.transform = 'translateX(20px)'; setTimeout(function() { item.remove(); }, 200); }
}
function selectNcCouponType(type, el) {
el.parentElement.querySelectorAll('.g-pill').forEach(function(p) { p.classList.remove('checked'); });
el.classList.add('checked');
document.getElementById('ncCouponReduce').style.display = type === 'reduce' ? '' : 'none';
document.getElementById('ncCouponDiscount').style.display = type === 'discount' ? '' : 'none';
document.getElementById('ncCouponShipping').style.display = type === 'shipping' ? '' : 'none';
}
function copyNcLink() {
var input = document.querySelector('.nc-share-url input');
input.select();
document.execCommand('copy');
}
if (typeof lucide !== 'undefined') { lucide.createIcons(); }
</script>