| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>公海池 - 轻量 CRM</title>
- <script src="https://cdn.tailwindcss.com"></script>
- <style>
- @media (max-width: 640px) {
- .mobile-stack { flex-direction: column !important; }
- .mobile-full { width: 100% !important; }
- }
- </style>
- </head>
- <body class="bg-gray-50 min-h-screen">
- <!-- 顶部导航 -->
- <nav class="bg-indigo-600 text-white shadow-lg">
- <div class="container mx-auto px-4 py-4">
- <div class="flex justify-between items-center">
- <div class="flex items-center space-x-3">
- <span class="text-2xl">📊</span>
- <h1 class="text-xl font-bold">轻量 CRM</h1>
- </div>
- <div class="flex space-x-4">
- <a href="/" class="hover:bg-indigo-500 px-3 py-2 rounded">首页</a>
- <a href="/customers" class="hover:bg-indigo-500 px-3 py-2 rounded">客户</a>
- <a href="/leads" class="hover:bg-indigo-500 px-3 py-2 rounded">线索</a>
- <a href="/public-pool" class="bg-indigo-500 px-3 py-2 rounded">公海池</a>
- </div>
- </div>
- </div>
- </nav>
-
- <!-- 主内容区 -->
- <main class="container mx-auto px-4 py-8">
- <!-- 页面标题 -->
- <div class="mb-8">
- <h2 class="text-3xl font-bold text-gray-800">🌊 公海池</h2>
- <p class="text-gray-600 mt-2">无人跟进的客户资源,领取后成为您的专属客户</p>
- </div>
-
- <!-- 统计卡片 -->
- <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
- <div class="bg-white rounded-lg shadow p-6">
- <div class="flex items-center justify-between">
- <div>
- <p class="text-gray-500 text-sm">公海客户数</p>
- <p id="poolCount" class="text-3xl font-bold text-blue-600">-</p>
- </div>
- <div class="text-4xl">🌊</div>
- </div>
- </div>
- <div class="bg-white rounded-lg shadow p-6">
- <div class="flex items-center justify-between">
- <div>
- <p class="text-gray-500 text-sm">本周领取</p>
- <p id="weekClaimed" class="text-3xl font-bold text-green-600">-</p>
- </div>
- <div class="text-4xl">📥</div>
- </div>
- </div>
- <div class="bg-white rounded-lg shadow p-6">
- <div class="flex items-center justify-between">
- <div>
- <p class="text-gray-500 text-sm">本周释放</p>
- <p id="weekReleased" class="text-3xl font-bold text-orange-600">-</p>
- </div>
- <div class="text-4xl">📤</div>
- </div>
- </div>
- </div>
-
- <!-- 公海池列表 -->
- <div class="bg-white rounded-lg shadow overflow-hidden">
- <div class="px-6 py-4 bg-gray-50 border-b">
- <h3 class="text-lg font-semibold">可领取客户</h3>
- </div>
- <div id="poolList" class="divide-y divide-gray-200">
- <div class="px-6 py-8 text-center text-gray-500">加载中...</div>
- </div>
- </div>
- </main>
-
- <script>
- const API_BASE = '';
-
- // 加载公海池列表
- async function loadPool() {
- try {
- const res = await fetch(`${API_BASE}/api/public-pool`);
- const data = await res.json();
- if (data.success) {
- document.getElementById('poolCount').textContent = data.data.length;
- renderPool(data.data);
- }
- } catch (error) {
- console.error('加载失败:', error);
- }
- }
-
- // 渲染公海池列表
- function renderPool(pool) {
- const container = document.getElementById('poolList');
- if (pool.length === 0) {
- container.innerHTML = '<div class="px-6 py-8 text-center text-gray-500">公海池空空如也 ~</div>';
- return;
- }
-
- container.innerHTML = pool.map(p => `
- <div class="px-6 py-4 hover:bg-gray-50 flex items-center justify-between">
- <div class="flex-1">
- <div class="flex items-center space-x-3">
- <h4 class="font-medium text-gray-900">${p.name}</h4>
- <span class="text-xs bg-blue-100 text-blue-700 px-2 py-1 rounded">公海客户</span>
- </div>
- <div class="mt-1 text-sm text-gray-600">
- ${p.company ? `<span>🏢 ${p.company}</span>` : ''}
- ${p.phone ? `<span class="ml-3">📱 ${p.phone}</span>` : ''}
- <span class="ml-3 text-gray-400">来源:${p.source || '-'}</span>
- </div>
- <div class="mt-1 text-xs text-gray-500">
- 释放原因:${p.reason || '无'} · 释放时间:${new Date(p.released_at).toLocaleString('zh-CN')}
- </div>
- </div>
- <button onclick="claimPool(${p.id}, '${p.name}')" class="ml-4 bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 transition">
- 📥 领取
- </button>
- </div>
- `).join('');
- }
-
- // 领取公海池客户
- async function claimPool(id, name) {
- if (!confirm(`确定要领取客户"${name}"吗?领取后将成为您的专属客户。`)) return;
-
- try {
- const res = await fetch(`${API_BASE}/api/public-pool/${id}/claim`, { method: 'POST' });
- const result = await res.json();
- if (result.success) {
- alert(`✅ 已成功领取客户"${name}"`);
- loadPool();
- } else {
- alert('❌ ' + result.error);
- }
- } catch (error) {
- alert('❌ 领取失败:' + error.message);
- }
- }
-
- // 页面加载
- document.addEventListener('DOMContentLoaded', loadPool);
- </script>
- </body>
- </html>
|