Files
Neo-ZQYY/docs/h5_ui/rendered/task-list.html

666 lines
34 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>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<link href="../css/banner.css" rel="stylesheet">
<link href="../css/ai-icons.css" rel="stylesheet">
<style>
body {
font-family: 'Noto Sans SC', -apple-system, BlinkMacSystemFont, sans-serif;
padding-bottom: 70px;
}
/* 任务卡片边框颜色 */
.task-card {
position: relative;
border-left: 4px solid transparent;
}
.task-card.high-priority {
border-left-color: #f43f5e;
}
.task-card.priority {
border-left-color: #f97316;
}
.task-card.relationship {
border-left-color: #ec4899;
}
.task-card.callback {
border-left-color: #14b8a6;
}
/* 标签颜色 - 圆角矩形 */
.tag-high-priority {
background: linear-gradient(135deg, #dc2626 0%, #ef4444 100%);
border-radius: 4px;
}
.tag-priority {
background: linear-gradient(135deg, #ea580c 0%, #f97316 100%);
border-radius: 4px;
}
.tag-relationship {
background: linear-gradient(135deg, #db2777 0%, #ec4899 100%);
border-radius: 4px;
}
.tag-callback {
background: linear-gradient(135deg, #0d9488 0%, #14b8a6 100%);
border-radius: 4px;
}
/* 进度条动画 */
.progress-bar {
background: linear-gradient(90deg, #f59e0b 0%, #fbbf24 50%, #fcd34d 100%);
transition: width 0.6s ease-out;
}
/* 6段档位进度条 */
.tier-progress {
display: flex;
gap: 2px;
height: 8px;
}
.tier-segment {
border-radius: 2px;
background: rgba(255,255,255,0.25);
position: relative;
overflow: hidden;
}
.tier-segment.completed {
background: linear-gradient(135deg, #34d399 0%, #10b981 100%);
}
.tier-segment.current {
background: linear-gradient(90deg, rgba(255,255,255,0.25) 0%, rgba(255,255,255,0.25) 50%, rgba(255,255,255,0.25) 100%);
overflow: hidden;
}
.tier-segment.current .tier-fill {
height: 100%;
background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);
border-radius: 2px;
}
/* 红戳样式 - 透明印章风格 */
.red-stamp {
position: relative;
display: inline-flex;
flex-direction: column;
align-items: center;
}
.stamp-badge {
position: absolute;
top: -2px;
right: -28px;
transform: rotate(-12deg) scale(0);
width: 52px;
height: 52px;
border: 3px solid rgb(239, 68, 68);
border-radius: 50%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: transparent;
pointer-events: none;
opacity: 0;
box-shadow:
inset 0 0 0 2px rgba(255, 255, 255, 0.95),
inset 0 0 10px 2px rgba(255, 255, 255, 0.7),
inset 0 0 20px 4px rgba(255, 255, 255, 0.4);
}
/* 盖戳动画 */
@keyframes stampDown {
0% {
transform: rotate(-12deg) scale(3);
opacity: 0;
}
50% {
transform: rotate(-12deg) scale(0.9);
opacity: 0.9;
}
70% {
transform: rotate(-12deg) scale(1.05);
opacity: 0.85;
}
100% {
transform: rotate(-12deg) scale(1);
opacity: 0.8;
}
}
.stamp-badge.stamp-animate {
animation: stampDown 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}
.stamp-badge .thumb {
font-size: 18px;
line-height: 1;
}
.stamp-badge .stamp-text {
font-size: 11px;
color: rgb(220, 38, 38);
font-weight: bold;
margin-top: 1px;
text-shadow:
0 0 2px rgba(255,255,255,1),
0 0 4px rgba(255,255,255,0.9),
1px 1px 0 rgba(255,255,255,0.9),
-1px -1px 0 rgba(255,255,255,0.9),
1px -1px 0 rgba(255,255,255,0.9),
-1px 1px 0 rgba(255,255,255,0.9);
}
/* 进度条按比例宽度0-100(45.45%), 100-130(13.64%), 130-160(13.64%), 160-190(13.64%), 190-220(13.64%) */
.tier-segment-0 { flex: 100; }
.tier-segment-1 { flex: 30; }
.tier-segment-2 { flex: 30; }
.tier-segment-3 { flex: 30; }
.tier-segment-4 { flex: 30; }
/* 下降趋势样式 */
.trend-down {
color: rgba(255,255,255,0.5);
font-size: 12px;
}
/* 业绩卡片文字样式 */
.stat-value {
color: #ffffff;
text-shadow: 0 1px 3px rgba(0,0,0,0.25);
}
.stat-highlight {
color: #6ee7b7;
text-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
.stat-label {
color: rgba(255,255,255,0.9);
text-shadow: 0 1px 2px rgba(0,0,0,0.15);
}
.stat-secondary {
color: rgba(255,255,255,0.7);
}
.stat-accent {
color: #fcd34d;
text-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
/* 奖金金额突出样式 */
.bonus-amount {
text-shadow:
0 2px 4px rgba(0, 0, 0, 0.35),
0 0 12px rgba(251, 191, 36, 0.5);
}
/* === 任务分区 === */
.section-label {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: 13px;
font-weight: 500;
padding: 3px 10px;
border-radius: 4px;
}
/* 置顶卡片微亮边框 */
.task-card.pinned {
box-shadow: 0 1px 4px rgba(245, 158, 11, 0.12), 0 0 0 1px rgba(245, 158, 11, 0.08);
}
/* 放弃任务 */
.task-card.abandoned {
border-left-color: #d1d5db !important;
opacity: 0.55;
}
.task-card.abandoned .task-name {
color: #9ca3af;
}
.task-card.abandoned .task-desc {
color: #c5c5c5;
}
.task-card.abandoned .task-tag-wrap > span:first-child {
background: #d1d5db !important;
}
/* 备注指示器 */
.note-indicator {
font-size: 12px;
margin-left: 2px;
}
/* === 长按上下文菜单 === */
.context-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.35);
z-index: 100;
opacity: 0;
pointer-events: none;
transition: opacity 0.2s ease;
}
.context-overlay.active {
opacity: 1;
pointer-events: all;
}
.context-menu {
position: fixed;
z-index: 101;
background: #fff;
border-radius: 14px;
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.18);
min-width: 192px;
padding: 6px 0;
opacity: 0;
transform: scale(0.88);
pointer-events: none;
transition: opacity 0.15s ease, transform 0.15s ease;
transform-origin: top left;
}
.context-menu.active {
opacity: 1;
transform: scale(1);
pointer-events: all;
}
.ctx-item {
display: flex;
align-items: center;
gap: 10px;
padding: 13px 18px;
font-size: 14px;
color: #393939;
cursor: pointer;
transition: background 0.12s;
user-select: none;
}
.ctx-item:active {
background: #f3f3f3;
}
.ctx-item + .ctx-item {
border-top: 1px solid #f3f3f3;
}
/* === 备注 / 放弃弹窗 === */
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 200;
display: flex;
align-items: flex-start;
justify-content: center;
padding-top: 18vh;
padding-bottom: 40vh;
opacity: 0;
pointer-events: none;
transition: opacity 0.2s ease;
}
.modal-overlay.active {
opacity: 1;
pointer-events: all;
}
.modal-card {
background: #fff;
border-radius: 16px;
width: 88%;
max-width: 360px;
padding: 24px 20px 20px;
transform: translateY(24px);
transition: transform 0.25s ease;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
}
.modal-overlay.active .modal-card {
transform: translateY(0);
}
.modal-card textarea {
width: 100%;
border: 1.5px solid #e7e7e7;
border-radius: 10px;
padding: 12px 14px;
font-size: 14px;
line-height: 1.6;
resize: none;
outline: none;
font-family: inherit;
color: #2c2c2c;
transition: border-color 0.2s;
box-sizing: border-box;
}
.modal-card textarea:focus {
border-color: #0052d9;
}
.modal-card textarea.error-border {
border-color: #e34d59;
}
.modal-error {
color: #e34d59;
font-size: 12px;
margin-top: 6px;
display: none;
}
.modal-error.show {
display: block;
}
.modal-submit-btn {
width: 100%;
padding: 12px;
border: none;
border-radius: 10px;
font-size: 15px;
font-weight: 500;
cursor: pointer;
margin-top: 14px;
transition: background 0.2s, opacity 0.2s;
font-family: inherit;
}
.modal-submit-btn.primary {
background: #0052d9;
color: #fff;
}
.modal-submit-btn.primary:active {
background: #003eb3;
}
.modal-submit-btn.danger {
background: #e34d59;
color: #fff;
}
.modal-submit-btn.danger:active {
background: #c9363f;
}
</style>
</head>
<body class="bg-gray-1 min-h-screen">
<!-- 顶部区域 - 用户信息和业绩卡片 -->
<div class="banner-bg theme-blue texture-aurora text-white pb-4">
<!-- 用户信息 -->
<div class="px-5 pt-10 pb-3">
<div class="flex items-center gap-4">
<div class="w-14 h-14 rounded-2xl bg-white/20 backdrop-blur-sm flex items-center justify-center shadow-lg overflow-hidden">
<img src="../img/zjtx.png" class="w-full h-full object-cover" alt="助教头像">
</div>
<div class="flex-1">
<div class="flex items-center gap-2 mb-1">
<span class="text-xl font-semibold">小燕</span>
<span class="px-2 py-0.5 bg-white/20 rounded-full text-xs">助教</span>
</div>
<p class="text-white/70 text-sm">广州朗朗桌球</p>
</div>
</div>
</div>
<!-- 业绩进度卡片 -->
<div class="mx-4">
<div class="bg-white/15 backdrop-blur-md rounded-2xl px-4 py-3 border border-white/20">
<!-- 第一层:标题行 -->
<div class="flex items-center justify-between mb-2">
<div class="flex items-baseline gap-2">
<span class="stat-label text-sm font-medium">距离100小时仅剩</span>
<span class="stat-accent text-xl font-bold">12.5小时</span>
</div>
<a href="performance.html" class="stat-secondary text-xs flex items-center gap-1 hover:text-white transition-colors">
查看详情
<svg class="w-3 h-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 18 15 12 9 6"/>
</svg>
</a>
</div>
<!-- 第二层5段档位进度条 + 边界小时数(按比例宽度) -->
<div class="relative mb-6">
<div class="tier-progress">
<div class="tier-segment tier-segment-0 completed" title="0档 <100h"></div>
<div class="tier-segment tier-segment-1 current" title="1档 100-130h">
<div class="tier-fill" style="width: 58%"></div>
</div>
<div class="tier-segment tier-segment-2" title="2档 130-160h"></div>
<div class="tier-segment tier-segment-3" title="3档 160-190h"></div>
<div class="tier-segment tier-segment-4" title="4档 190-220h"></div>
</div>
<!-- 档位边界小时数按比例定位0, 100/220≈45.45%, 130/220≈59.09%, 160/220≈72.73%, 190/220≈86.36%, 220/220=100% -->
<div class="absolute w-full top-full mt-1.5 flex text-[9px]" style="left: 0;">
<span class="text-white/60" style="position:absolute; left:0; transform:translateX(0);">0</span>
<span class="text-white/60" style="position:absolute; left:45.45%; transform:translateX(-50%);">100</span>
<span class="text-white/80 font-medium" style="position:absolute; left:59.09%; transform:translateX(-50%);">130</span>
<span class="text-white/60" style="position:absolute; left:72.73%; transform:translateX(-50%);">160</span>
<span class="text-white/60" style="position:absolute; left:86.36%; transform:translateX(-50%);">190</span>
<span class="text-white/60" style="position:absolute; right:0; transform:translateX(0);">220</span>
</div>
</div>
<!-- 第三层:核心数据 - 两列布局(左宽右窄) -->
<div class="flex items-stretch mb-2.5">
<!-- 左侧:课时数据 + 红戳占60% -->
<div class="pr-4 border-r border-white/25 flex justify-center items-center" style="flex: 3;">
<!-- 自动宽度容器:包含课时数据和红戳,居中显示 -->
<div class="red-stamp inline-block relative" style="padding-right: 35px;">
<div class="text-center">
<div class="flex items-baseline justify-center gap-1.5">
<span class="stat-highlight text-xl font-bold">77.5</span>
<span class="stat-secondary text-sm">|</span>
<span class="stat-accent text-xl font-bold">12</span>
<span class="stat-secondary text-sm">|</span>
<span class="stat-value text-xl font-bold">87.5</span>
</div>
<p class="stat-label text-xs mt-1.5">基础课 | 激励课 | 全部</p>
</div>
<!-- 红戳徽章 -->
<div class="stamp-badge" style="right: -5px; top: 5px;">
<span class="thumb">👍</span>
<span class="stamp-text">已完成</span>
</div>
</div>
</div>
<!-- 右侧奖金激励占40% -->
<div class="pl-3 text-center flex flex-col justify-center" style="flex: 2;">
<div class="bonus-amount">
<span class="text-3xl font-bold text-amber-300">800</span>
<span class="text-base text-amber-300/80"></span>
</div>
<p class="stat-label text-xs mt-1.5">达100h即得</p>
</div>
</div>
<!-- 第四层:预计收入 -->
<div class="flex items-center justify-between pt-2 border-t border-white/25">
<span class="stat-label text-xs">2月预计收入 | 比1月同期</span>
<a href="performance.html" class="flex items-center gap-1.5 group">
<span class="stat-value text-lg font-bold">¥6,206</span>
<span class="trend-down">↓368</span>
<svg class="w-3.5 h-3.5 stat-secondary group-hover:text-white transition-colors" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 18 15 12 9 6"/>
</svg>
</a>
</div>
</div>
</div>
</div>
<!-- 待办任务列表 -->
<div class="px-4 py-5">
<!-- 标题 -->
<div class="flex items-center justify-between mb-4">
<h2 class="text-base font-semibold text-gray-13">今日 客户维护</h2>
<span class="text-sm text-gray-6">共 7 项</span>
</div>
<!-- 📌 置顶区域 -->
<div class="mb-5">
<div class="flex items-center gap-1.5 mb-2.5">
<span class="section-label text-amber-700 bg-amber-50">📌 置顶</span>
<span class="text-sm text-gray-6">2项</span>
</div>
<div class="space-y-3">
<!-- 置顶: 王先生 -->
<div class="task-card high-priority pinned block bg-white rounded-xl p-4 shadow-sm cursor-pointer" data-task-id="1" data-task-name="王先生" data-task-type="high-priority">
<div class="flex items-start justify-between">
<div class="flex-1">
<div class="flex items-center gap-2 mb-1.5 task-tag-wrap">
<span class="tag-high-priority px-2 py-0.5 text-white text-xs font-medium">高优先召回</span>
<span class="text-base font-semibold text-gray-13 task-name">王先生</span>
<span class="text-sm">💖</span>
<span class="note-indicator" title="有备注">📝</span>
</div>
<p class="text-sm text-gray-7 leading-relaxed task-desc">最近到店15天前 · 余额:非常多</p>
<p class="text-sm text-gray-6 leading-relaxed task-desc"><span class="ai-inline-icon"><svg viewBox="0 0 24 24" fill="none"><rect x="5" y="7" width="14" height="12" rx="4" fill="white"/><path d="M12 7V4" stroke="white" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="3" r="1.5" fill="white"/><circle cx="9" cy="11.5" r="2" fill="#667eea"/><circle cx="15" cy="11.5" r="2" fill="#667eea"/><circle cx="9.5" cy="11" r="0.7" fill="white"/><circle cx="15.5" cy="11" r="0.7" fill="white"/><path d="M9.5 15C10 16 14 16 14.5 15" stroke="#667eea" stroke-width="1.5" stroke-linecap="round"/><circle cx="7" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><circle cx="17" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><rect x="3" y="10" width="2" height="4" rx="1" fill="white"/><rect x="19" y="10" width="2" height="4" rx="1" fill="white"/></svg></span>高流失风险,建议尽快联系</p>
</div>
<svg class="w-5 h-5 text-gray-5 flex-shrink-0 ml-2 mt-1" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 18 15 12 9 6"/>
</svg>
</div>
</div>
<!-- 置顶: 李女士 -->
<div class="task-card high-priority pinned block bg-white rounded-xl p-4 shadow-sm cursor-pointer" data-task-id="2" data-task-name="李女士" data-task-type="high-priority">
<div class="flex items-start justify-between">
<div class="flex-1">
<div class="flex items-center gap-2 mb-1.5 task-tag-wrap">
<span class="tag-high-priority px-2 py-0.5 text-white text-xs font-medium">高优先召回</span>
<span class="text-base font-semibold text-gray-13 task-name">李女士</span>
<span class="text-sm">🧡</span>
</div>
<p class="text-sm text-gray-7 leading-relaxed task-desc">最近到店20天前 · 余额:非常多</p>
<p class="text-sm text-gray-6 leading-relaxed task-desc"><span class="ai-inline-icon"><svg viewBox="0 0 24 24" fill="none"><rect x="5" y="7" width="14" height="12" rx="4" fill="white"/><path d="M12 7V4" stroke="white" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="3" r="1.5" fill="white"/><circle cx="9" cy="11.5" r="2" fill="#667eea"/><circle cx="15" cy="11.5" r="2" fill="#667eea"/><circle cx="9.5" cy="11" r="0.7" fill="white"/><circle cx="15.5" cy="11" r="0.7" fill="white"/><path d="M9.5 15C10 16 14 16 14.5 15" stroke="#667eea" stroke-width="1.5" stroke-linecap="round"/><circle cx="7" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><circle cx="17" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><rect x="3" y="10" width="2" height="4" rx="1" fill="white"/><rect x="19" y="10" width="2" height="4" rx="1" fill="white"/></svg></span>VIP客户储值余额较多</p>
</div>
<svg class="w-5 h-5 text-gray-5 flex-shrink-0 ml-2 mt-1" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 18 15 12 9 6"/>
</svg>
</div>
</div>
</div>
</div>
<!-- 一般任务区域 -->
<div class="mb-5">
<div class="flex items-center gap-1.5 mb-2.5">
<span class="section-label text-gray-9 bg-gray-2">一般任务</span>
<span class="text-sm text-gray-6">3项</span>
</div>
<div class="space-y-3">
<!-- 张先生 -->
<div class="task-card priority block bg-white rounded-xl p-4 shadow-sm cursor-pointer" data-task-id="3" data-task-name="张先生" data-task-type="priority">
<div class="flex items-start justify-between">
<div class="flex-1">
<div class="flex items-center gap-2 mb-1.5 task-tag-wrap">
<span class="tag-priority px-2 py-0.5 text-white text-xs font-medium">优先召回</span>
<span class="text-base font-semibold text-gray-13 task-name">张先生</span>
<span class="text-sm">💛</span>
<span class="note-indicator" title="有备注">📝</span>
</div>
<p class="text-sm text-gray-7 leading-relaxed task-desc">最近到店10天前 · 余额:一般</p>
<p class="text-sm text-gray-6 leading-relaxed task-desc"><span class="ai-inline-icon"><svg viewBox="0 0 24 24" fill="none"><rect x="5" y="7" width="14" height="12" rx="4" fill="white"/><path d="M12 7V4" stroke="white" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="3" r="1.5" fill="white"/><circle cx="9" cy="11.5" r="2" fill="#667eea"/><circle cx="15" cy="11.5" r="2" fill="#667eea"/><circle cx="9.5" cy="11" r="0.7" fill="white"/><circle cx="15.5" cy="11" r="0.7" fill="white"/><path d="M9.5 15C10 16 14 16 14.5 15" stroke="#667eea" stroke-width="1.5" stroke-linecap="round"/><circle cx="7" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><circle cx="17" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><rect x="3" y="10" width="2" height="4" rx="1" fill="white"/><rect x="19" y="10" width="2" height="4" rx="1" fill="white"/></svg></span>消费频率下降,需关注</p>
</div>
<svg class="w-5 h-5 text-gray-5 flex-shrink-0 ml-2 mt-1" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 18 15 12 9 6"/>
</svg>
</div>
</div>
<!-- 刘先生 -->
<div class="task-card priority block bg-white rounded-xl p-4 shadow-sm cursor-pointer" data-task-id="4" data-task-name="刘先生" data-task-type="priority">
<div class="flex items-start justify-between">
<div class="flex-1">
<div class="flex items-center gap-2 mb-1.5 task-tag-wrap">
<span class="tag-priority px-2 py-0.5 text-white text-xs font-medium">优先召回</span>
<span class="text-base font-semibold text-gray-13 task-name">刘先生</span>
<span class="text-sm">💙</span>
</div>
<p class="text-sm text-gray-7 leading-relaxed task-desc">最近到店8天前 · 余额:一般</p>
<p class="text-sm text-gray-6 leading-relaxed task-desc"><span class="ai-inline-icon"><svg viewBox="0 0 24 24" fill="none"><rect x="5" y="7" width="14" height="12" rx="4" fill="white"/><path d="M12 7V4" stroke="white" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="3" r="1.5" fill="white"/><circle cx="9" cy="11.5" r="2" fill="#667eea"/><circle cx="15" cy="11.5" r="2" fill="#667eea"/><circle cx="9.5" cy="11" r="0.7" fill="white"/><circle cx="15.5" cy="11" r="0.7" fill="white"/><path d="M9.5 15C10 16 14 16 14.5 15" stroke="#667eea" stroke-width="1.5" stroke-linecap="round"/><circle cx="7" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><circle cx="17" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><rect x="3" y="10" width="2" height="4" rx="1" fill="white"/><rect x="19" y="10" width="2" height="4" rx="1" fill="white"/></svg></span>偏好晚间时段,可推荐夜场套餐</p>
</div>
<svg class="w-5 h-5 text-gray-5 flex-shrink-0 ml-2 mt-1" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 18 15 12 9 6"/>
</svg>
</div>
</div>
<!-- 陈先生 -->
<div class="task-card relationship block bg-white rounded-xl p-4 shadow-sm cursor-pointer" data-task-id="5" data-task-name="陈先生" data-task-type="relationship">
<div class="flex items-start justify-between">
<div class="flex-1">
<div class="flex items-center gap-2 mb-1.5 task-tag-wrap">
<span class="tag-relationship px-2 py-0.5 text-white text-xs font-medium">关系构建</span>
<span class="text-base font-semibold text-gray-13 task-name">陈先生</span>
<span class="text-sm">💙</span>
</div>
<p class="text-sm text-gray-7 leading-relaxed task-desc">最近到店5天前 · 余额:无</p>
<p class="text-sm text-gray-6 leading-relaxed task-desc"><span class="ai-inline-icon"><svg viewBox="0 0 24 24" fill="none"><rect x="5" y="7" width="14" height="12" rx="4" fill="white"/><path d="M12 7V4" stroke="white" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="3" r="1.5" fill="white"/><circle cx="9" cy="11.5" r="2" fill="#667eea"/><circle cx="15" cy="11.5" r="2" fill="#667eea"/><circle cx="9.5" cy="11" r="0.7" fill="white"/><circle cx="15.5" cy="11" r="0.7" fill="white"/><path d="M9.5 15C10 16 14 16 14.5 15" stroke="#667eea" stroke-width="1.5" stroke-linecap="round"/><circle cx="7" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><circle cx="17" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/><rect x="3" y="10" width="2" height="4" rx="1" fill="white"/><rect x="19" y="10" width="2" height="4" rx="1" fill="white"/></svg></span>潜力客户,建议加强互动</p>
</div>
<svg class="w-5 h-5 text-gray-5 flex-shrink-0 ml-2 mt-1" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 18 15 12 9 6"/>
</svg>
</div>
</div>
</div>
</div>
<!-- ❌ 放弃的任务区域 -->
<div class="mb-2">
<div class="flex items-center gap-1.5 mb-2.5">
<span class="section-label text-gray-6 bg-gray-2">已放弃</span>
<span class="text-sm text-gray-6">2项</span>
</div>
<div class="space-y-3">
<!-- 放弃: 赵女士 -->
<div class="task-card callback abandoned block bg-white rounded-xl p-4 shadow-sm" data-task-id="6" data-task-name="赵女士" data-task-type="callback">
<div class="flex items-start justify-between">
<div class="flex-1">
<div class="flex items-center gap-2 mb-1.5 task-tag-wrap">
<span class="tag-callback px-2 py-0.5 text-white text-xs font-medium">客户回访</span>
<span class="text-base font-semibold text-gray-13 task-name">赵女士</span>
<span class="text-sm">🧡</span>
<span class="note-indicator" title="有备注">📝</span>
</div>
<p class="text-sm text-gray-7 leading-relaxed task-desc">最近到店3天前 · 余额:非常多</p>
<p class="text-sm text-gray-6 leading-relaxed task-desc">放弃原因:客户已转会至其他球房</p>
</div>
</div>
</div>
<!-- 放弃: 周先生 -->
<div class="task-card callback abandoned block bg-white rounded-xl p-4 shadow-sm" data-task-id="7" data-task-name="周先生" data-task-type="callback">
<div class="flex items-start justify-between">
<div class="flex-1">
<div class="flex items-center gap-2 mb-1.5 task-tag-wrap">
<span class="tag-callback px-2 py-0.5 text-white text-xs font-medium">客户回访</span>
<span class="text-base font-semibold text-gray-13 task-name">周先生</span>
<span class="text-sm">💛</span>
<span class="note-indicator" title="有备注">📝</span>
</div>
<p class="text-sm text-gray-7 leading-relaxed task-desc">最近到店5天前 · 余额:一般</p>
<p class="text-sm text-gray-6 leading-relaxed task-desc">放弃原因:联系方式失效,无法触达</p>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 长按上下文菜单 -->
<div class="context-overlay" id="contextOverlay"></div>
<div class="context-menu" id="contextMenu">
<div class="ctx-item" data-action="pin">
<span>📌</span><span>置顶任务</span>
</div>
<div class="ctx-item" data-action="abandon">
<span></span><span>放弃任务</span>
</div>
<div class="ctx-item" data-action="ai">
<span>🤖</span><span>问问AI助手</span>
</div>
<div class="ctx-item" data-action="remark">
<span>📝</span><span>备注</span>
</div>
</div>
<!-- 备注 / 放弃 弹窗(可复用组件) -->
<div class="modal-overlay" id="remarkModal">
<div class="modal-card">
<h3 class="text-base font-semibold text-gray-13 mb-1" id="modalTitle">添加备注</h3>
<p class="text-xs text-gray-6 mb-3" id="modalSubtitle">为该客户的维护任务添加备注</p>
<textarea id="remarkInput" rows="4" placeholder="请输入备注内容..."></textarea>
<div class="modal-error" id="remarkError">请填写放弃原因,不能为空</div>
<button class="modal-submit-btn primary" id="modalSubmitBtn">保存备注</button>
<button class="mt-2 w-full text-center text-sm text-gray-6 py-2 bg-transparent border-0 cursor-pointer" id="modalCancelBtn">取消</button>
</div>
</div>
<!-- AI 标识配色 -->
<!-- 悬浮助手按钮 -->
<!-- 通用底部导航 -->
<!-- 盖戳动画 -->
<!-- 长按菜单 + 备注弹窗 交互 -->
</body>