123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>婚庆行业客户全生命周期AI管理系统 - 日历</title>
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
- <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
- <style>
- * {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
- font-family: 'Noto Sans SC', sans-serif;
- }
-
- body {
- background: linear-gradient(135deg, #fdf2f8 0%, #f0f9ff 100%);
- color: #333;
- min-height: 100vh;
- padding: 20px;
- }
-
- .container {
- max-width: 1600px;
- margin: 0 auto;
- display: flex;
- flex-direction: column;
- gap: 25px;
- }
-
- header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 15px 25px;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 16px;
- box-shadow: 0 8px 20px rgba(186, 47, 142, 0.1);
- }
-
- .logo {
- display: flex;
- align-items: center;
- gap: 15px;
- }
-
- .logo h1 {
- font-size: 26px;
- font-weight: 700;
- background: linear-gradient(135deg, #d6336c, #a61e4d);
- -webkit-background-clip: text;
- background-clip: text;
- color: transparent;
- }
-
- .logo i {
- font-size: 28px;
- color: #d6336c;
- }
-
- .nav-links {
- display: flex;
- gap: 25px;
- }
-
- .nav-links a {
- text-decoration: none;
- font-weight: 500;
- color: #555;
- padding: 10px 15px;
- border-radius: 12px;
- transition: all 0.3s ease;
- position: relative;
- }
-
- .nav-links a:hover, .nav-links a.active {
- color: #d6336c;
- background: rgba(214, 51, 108, 0.08);
- }
-
- .nav-links a.active:after {
- content: "";
- position: absolute;
- bottom: 0;
- left: 15px;
- right: 15px;
- height: 3px;
- background: #d6336c;
- border-radius: 3px;
- }
-
- .main-content {
- display: flex;
- gap: 25px;
- }
-
- .calendar-section {
- flex: 1;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 16px;
- padding: 25px;
- box-shadow: 0 8px 20px rgba(186, 47, 142, 0.08);
- }
-
- .section-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 25px;
- }
-
- .section-header h2 {
- font-size: 22px;
- font-weight: 600;
- color: #d6336c;
- }
-
- .controls {
- display: flex;
- gap: 15px;
- align-items: center;
- }
-
- .date-controls {
- display: flex;
- align-items: center;
- gap: 10px;
- }
-
- .date-display {
- font-size: 18px;
- font-weight: 500;
- color: #555;
- min-width: 220px;
- }
-
- .btn {
- padding: 8px 18px;
- border-radius: 12px;
- border: none;
- font-weight: 500;
- cursor: pointer;
- transition: all 0.3s ease;
- display: flex;
- align-items: center;
- gap: 8px;
- }
-
- .btn-primary {
- background: linear-gradient(135deg, #d6336c, #a61e4d);
- color: white;
- }
-
- .btn-outline {
- background: transparent;
- border: 1px solid #d6336c;
- color: #d6336c;
- }
-
- .btn:hover {
- transform: translateY(-2px);
- box-shadow: 0 4px 10px rgba(214, 51, 108, 0.2);
- }
-
- .calendar {
- display: grid;
- grid-template-columns: repeat(7, 1fr);
- gap: 12px;
- margin-bottom: 25px;
- }
-
- .weekdays {
- display: grid;
- grid-template-columns: repeat(7, 1fr);
- text-align: center;
- margin-bottom: 15px;
- font-weight: 500;
- color: #777;
- }
-
- .calendar-day {
- height: 110px;
- background: #fff;
- border-radius: 12px;
- padding: 12px;
- position: relative;
- box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05);
- transition: all 0.3s ease;
- border: 1px solid #eee;
- overflow: hidden;
- }
-
- .calendar-day:hover {
- transform: translateY(-3px);
- box-shadow: 0 5px 15px rgba(214, 51, 108, 0.15);
- }
-
- .day-header {
- display: flex;
- justify-content: space-between;
- font-size: 14px;
- margin-bottom: 8px;
- }
-
- .day-num {
- font-weight: 700;
- font-size: 18px;
- }
-
- .lunar-date {
- color: #999;
- font-size: 12px;
- }
-
- .day-events {
- font-size: 12px;
- }
-
- .event-tag {
- display: inline-block;
- padding: 3px 8px;
- border-radius: 20px;
- font-size: 11px;
- margin-top: 5px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- max-width: 100%;
- }
-
- .event-booked {
- background: rgba(214, 51, 108, 0.1);
- color: #d6336c;
- border-left: 3px solid #d6336c;
- }
-
- .event-available {
- background: rgba(40, 167, 69, 0.1);
- color: #28a745;
- border-left: 3px solid #28a745;
- }
-
- .event-consult {
- background: rgba(23, 162, 184, 0.1);
- color: #17a2b8;
- border-left: 3px solid #17a2b8;
- }
-
- .today {
- background: rgba(255, 228, 230, 0.5);
- border: 2px solid #d6336c;
- }
-
- .day-header .today-label {
- background: #d6336c;
- color: white;
- padding: 2px 6px;
- border-radius: 4px;
- font-size: 11px;
- margin-left: 5px;
- }
-
- .venue-section {
- width: 400px;
- background: rgba(255, 255, 255, 0.95);
- border-radius: 16px;
- padding: 25px;
- box-shadow: 0 8px 20px rgba(186, 47, 142, 0.08);
- }
-
- .venue-list {
- margin-top: 20px;
- max-height: 600px;
- overflow-y: auto;
- padding-right: 10px;
- }
-
- .venue-list::-webkit-scrollbar {
- width: 6px;
- }
-
- .venue-list::-webkit-scrollbar-thumb {
- background: rgba(214, 51, 108, 0.3);
- border-radius: 4px;
- }
-
- .venue-item {
- padding: 15px;
- margin-bottom: 12px;
- border-radius: 12px;
- background: #fff;
- display: flex;
- justify-content: space-between;
- align-items: center;
- box-shadow: 0 3px 8px rgba(0, 0, 0, 0.05);
- transition: all 0.3s ease;
- border-left: 4px solid #d6336c;
- }
-
- .venue-item:hover {
- transform: translateX(5px);
- box-shadow: 0 5px 15px rgba(214, 51, 108, 0.15);
- }
-
- .venue-info {
- flex: 1;
- }
-
- .venue-name {
- font-weight: 600;
- margin-bottom: 5px;
- color: #333;
- }
-
- .venue-status {
- font-size: 13px;
- padding: 3px 10px;
- border-radius: 20px;
- display: inline-block;
- }
-
- .status-available {
- background: rgba(40, 167, 69, 0.15);
- color: #28a745;
- }
-
- .status-booked {
- background: rgba(214, 51, 108, 0.15);
- color: #d6336c;
- }
-
- .status-hold {
- background: rgba(255, 193, 7, 0.15);
- color: #fd7e14;
- }
-
- .venue-actions {
- display: flex;
- gap: 10px;
- }
-
- .action-btn {
- width: 30px;
- height: 30px;
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- background: #f8f9fa;
- color: #777;
- cursor: pointer;
- transition: all 0.3s ease;
- }
-
- .action-btn:hover {
- background: #d6336c;
- color: white;
- }
-
- .ai-section {
- background: rgba(255, 255, 255, 0.95);
- border-radius: 16px;
- padding: 25px;
- margin-top: 10px;
- box-shadow: 0 8px 20px rgba(186, 47, 142, 0.08);
- }
-
- .ai-header {
- display: flex;
- align-items: center;
- gap: 10px;
- margin-bottom: 20px;
- }
-
- .ai-header h3 {
- font-size: 20px;
- color: #d6336c;
- }
-
- .ai-header i {
- font-size: 24px;
- color: #d6336c;
- }
-
- .ai-recommendation {
- background: linear-gradient(135deg, #fdf2f8, #f0f9ff);
- border-radius: 12px;
- padding: 20px;
- margin-bottom: 20px;
- }
-
- .ai-title {
- font-weight: 600;
- margin-bottom: 10px;
- color: #d6336c;
- display: flex;
- align-items: center;
- gap: 8px;
- }
-
- .ai-content {
- font-size: 14px;
- line-height: 1.6;
- color: #555;
- }
-
- .ai-content ul {
- padding-left: 20px;
- margin: 10px 0;
- }
-
- .ai-content li {
- margin-bottom: 8px;
- }
-
- .stats-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 15px;
- margin-top: 25px;
- }
-
- .stat-card {
- background: #fff;
- border-radius: 12px;
- padding: 18px;
- text-align: center;
- box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05);
- }
-
- .stat-value {
- font-size: 28px;
- font-weight: 700;
- color: #d6336c;
- margin: 10px 0;
- }
-
- .stat-label {
- font-size: 14px;
- color: #777;
- }
-
- .view-more {
- display: block;
- text-align: center;
- margin-top: 25px;
- padding: 12px;
- background: rgba(214, 51, 108, 0.08);
- color: #d6336c;
- border-radius: 12px;
- text-decoration: none;
- font-weight: 500;
- transition: all 0.3s ease;
- }
-
- .view-more:hover {
- background: rgba(214, 51, 108, 0.15);
- }
-
- @media (max-width: 1200px) {
- .main-content {
- flex-direction: column;
- }
-
- .venue-section {
- width: 100%;
- }
- }
- </style>
- </head>
- <body>
- <div class="container">
- <header>
- <div class="logo">
- <i class="fas fa-heart"></i>
- <h1>婚庆行业客户全生命周期AI管理系统</h1>
- </div>
- <div class="nav-links">
- <a href="#" class="active">日历</a>
- <a href="#">每日工作</a>
- <a href="#">订单总览</a>
- <a href="#">访客视图</a>
- <a href="#">房间安排</a>
- </div>
- </header>
-
- <div class="main-content">
- <div class="calendar-section">
- <div class="section-header">
- <h2>场地档期日历</h2>
- <div class="controls">
- <div class="date-controls">
- <button class="btn btn-outline"><i class="fas fa-chevron-left"></i></button>
- <div class="date-display">2025年6月</div>
- <button class="btn btn-outline"><i class="fas fa-chevron-right"></i></button>
- </div>
- <button class="btn btn-primary"><i class="fas fa-search"></i> 查询日期</button>
- </div>
- </div>
-
- <div class="weekdays">
- <div>周日</div>
- <div>周一</div>
- <div>周二</div>
- <div>周三</div>
- <div>周四</div>
- <div>周五</div>
- <div>周六</div>
- </div>
-
- <div class="calendar">
- <!-- 日历日期将通过JavaScript动态生成 -->
- <!-- 这里仅展示静态示例 -->
- <div class="calendar-day">
- <div class="day-header">
- <div class="day-num">28</div>
- <div class="lunar-date">六月初四 周六</div>
- </div>
- <div class="day-events">
- <div class="event-tag event-booked">九州厅: 张先生婚礼</div>
- <div class="event-tag event-consult">海洋之心: 咨询</div>
- </div>
- </div>
-
- <div class="calendar-day">
- <div class="day-header">
- <div class="day-num">29</div>
- <div class="lunar-date">六月初五 周日</div>
- </div>
- <div class="day-events">
- <div class="event-tag event-booked">月光礼堂: 李小姐婚礼</div>
- <div class="event-tag event-booked">冰雪奇缘: 王先生婚礼</div>
- </div>
- </div>
-
- <div class="calendar-day today">
- <div class="day-header">
- <div class="day-num">30 <span class="today-label">今日</span></div>
- <div class="lunar-date">六月初六 周一</div>
- </div>
- <div class="day-events">
- <div class="event-tag event-consult">九州厅: 咨询</div>
- <div class="event-tag event-available">星空之镜: 空闲</div>
- <div class="event-tag event-available">塞纳花园: 空闲</div>
- </div>
- </div>
-
- <!-- 更多日期省略 -->
- </div>
-
- <div class="ai-section">
- <div class="ai-header">
- <i class="fas fa-robot"></i>
- <h3>AI智能档期助手</h3>
- </div>
-
- <div class="ai-recommendation">
- <div class="ai-title">
- <i class="fas fa-lightbulb"></i>
- <span>今日智能建议</span>
- </div>
- <div class="ai-content">
- <p>根据历史数据分析,本周末(7月5日-6日)为婚礼高峰期,建议:</p>
- <ul>
- <li>优先安排资深策划师处理九州厅、月光礼堂的咨询客户</li>
- <li>星空之镜、海洋之心场地有较高意向客户,可主动跟进</li>
- <li>塞纳花园连续3个周末空闲,建议推出限时优惠活动</li>
- </ul>
- <p><strong>预测:</strong>7月婚礼预订量预计增长25%,建议增加临时服务人员</p>
- </div>
- </div>
-
- <div class="stats-grid">
- <div class="stat-card">
- <div class="stat-value">78%</div>
- <div class="stat-label">本月场地利用率</div>
- </div>
- <div class="stat-card">
- <div class="stat-value">42</div>
- <div class="stat-label">待处理咨询</div>
- </div>
- <div class="stat-card">
- <div class="stat-value">15</div>
- <div class="stat-label">本周婚礼活动</div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="venue-section">
- <div class="section-header">
- <h2>场地状态</h2>
- <button class="btn btn-outline"><i class="fas fa-filter"></i> 筛选</button>
- </div>
-
- <div class="venue-list">
- <div class="venue-item">
- <div class="venue-info">
- <div class="venue-name">九州厅</div>
- <div class="venue-status status-booked">已预订 (7月5日)</div>
- </div>
- <div class="venue-actions">
- <div class="action-btn"><i class="fas fa-eye"></i></div>
- <div class="action-btn"><i class="fas fa-edit"></i></div>
- </div>
- </div>
-
- <div class="venue-item">
- <div class="venue-info">
- <div class="venue-name">奥斯卡厅</div>
- <div class="venue-status status-available">空闲</div>
- </div>
- <div class="venue-actions">
- <div class="action-btn"><i class="fas fa-eye"></i></div>
- <div class="action-btn"><i class="fas fa-edit"></i></div>
- </div>
- </div>
-
- <div class="venue-item">
- <div class="venue-info">
- <div class="venue-name">星空之镜</div>
- <div class="venue-status status-available">空闲</div>
- </div>
- <div class="venue-actions">
- <div class="action-btn"><i class="fas fa-eye"></i></div>
- <div class="action-btn"><i class="fas fa-edit"></i></div>
- </div>
- </div>
-
- <div class="venue-item">
- <div class="venue-info">
- <div class="venue-name">塞纳花园</div>
- <div class="venue-status status-available">空闲</div>
- </div>
- <div class="venue-actions">
- <div class="action-btn"><i class="fas fa-eye"></i></div>
- <div class="action-btn"><i class="fas fa-edit"></i></div>
- </div>
- </div>
-
- <div class="venue-item">
- <div class="venue-info">
- <div class="venue-name">海洋之心</div>
- <div class="venue-status status-hold">意向沟通中</div>
- </div>
- <div class="venue-actions">
- <div class="action-btn"><i class="fas fa-eye"></i></div>
- <div class="action-btn"><i class="fas fa-edit"></i></div>
- </div>
- </div>
-
- <div class="venue-item">
- <div class="venue-info">
- <div class="venue-name">冰雪奇缘</div>
- <div class="venue-status status-booked">已预订 (7月12日)</div>
- </div>
- <div class="venue-actions">
- <div class="action-btn"><i class="fas fa-eye"></i></div>
- <div class="action-btn"><i class="fas fa-edit"></i></div>
- </div>
- </div>
-
- <div class="venue-item">
- <div class="venue-info">
- <div class="venue-name">暮光之城</div>
- <div class="venue-status status-booked">已预订 (7月19日)</div>
- </div>
- <div class="venue-actions">
- <div class="action-btn"><i class="fas fa-eye"></i></div>
- <div class="action-btn"><i class="fas fa-edit"></i></div>
- </div>
- </div>
-
- <div class="venue-item">
- <div class="venue-info">
- <div class="venue-name">月光礼堂</div>
- <div class="venue-status status-booked">已预订 (7月26日)</div>
- </div>
- <div class="venue-actions">
- <div class="action-btn"><i class="fas fa-eye"></i></div>
- <div class="action-btn"><i class="fas fa-edit"></i></div>
- </div>
- </div>
-
- <a href="#" class="view-more">
- <i class="fas fa-chevron-down"></i> 查看42个场地/日期未定的客户
- </a>
- </div>
- </div>
- </div>
- </div>
-
- <script>
- // 简单的日历生成逻辑(简化版)
- document.addEventListener('DOMContentLoaded', function() {
- const calendar = document.querySelector('.calendar');
- const daysInMonth = 30; // 假设6月有30天
- const firstDay = 6; // 2025年6月1日是星期日(0=周日,1=周一...)
-
- // 生成空白日期
- for (let i = 0; i < firstDay; i++) {
- const emptyDay = document.createElement('div');
- emptyDay.classList.add('calendar-day', 'empty');
- calendar.appendChild(emptyDay);
- }
-
- // 生成日期
- for (let day = 1; day <= daysInMonth; day++) {
- const dayElement = document.createElement('div');
- dayElement.classList.add('calendar-day');
-
- // 日期头
- const dayHeader = document.createElement('div');
- dayHeader.classList.add('day-header');
-
- const dayNum = document.createElement('div');
- dayNum.classList.add('day-num');
- dayNum.textContent = day;
-
- const lunarDate = document.createElement('div');
- lunarDate.classList.add('lunar-date');
- lunarDate.textContent = getLunarDate(day);
-
- dayHeader.appendChild(dayNum);
- dayHeader.appendChild(lunarDate);
-
- // 事件区域
- const dayEvents = document.createElement('div');
- dayEvents.classList.add('day-events');
-
- // 随机生成事件
- if (Math.random() > 0.3) {
- const eventCount = Math.floor(Math.random() * 2) + 1;
- for (let i = 0; i < eventCount; i++) {
- const event = document.createElement('div');
- event.classList.add('event-tag');
-
- const venues = ['九州厅', '奥斯卡', '星空之镜', '塞纳花园', '海洋之心', '冰雪奇缘', '暮光之城', '月光礼堂'];
- const venue = venues[Math.floor(Math.random() * venues.length)];
-
- const status = Math.random() > 0.5 ? 'event-booked' :
- Math.random() > 0.5 ? 'event-consult' : 'event-available';
-
- event.classList.add(status);
-
- if (status === 'event-booked') {
- const names = ['张', '王', '李', '赵', '陈', '刘'];
- event.textContent = `${venue}: ${names[Math.floor(Math.random() * names.length)]}${Math.random() > 0.5 ? '先生' : '小姐'}婚礼`;
- } else if (status === 'event-consult') {
- event.textContent = `${venue}: 咨询`;
- } else {
- event.textContent = `${venue}: 空闲`;
- }
-
- dayEvents.appendChild(event);
- }
- }
-
- dayElement.appendChild(dayHeader);
- dayElement.appendChild(dayEvents);
-
- // 标记今天
- if (day === 30) {
- dayElement.classList.add('today');
- const todayLabel = document.createElement('span');
- todayLabel.classList.add('today-label');
- todayLabel.textContent = '今日';
- dayNum.appendChild(todayLabel);
- }
-
- calendar.appendChild(dayElement);
- }
-
- function getLunarDate(day) {
- // 简化版的农历日期生成
- const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
- const weekday = (firstDay + day - 1) % 7;
-
- if (day === 28) return '六月初四 周六';
- if (day === 29) return '六月初五 周日';
- if (day === 30) return '六月初六 周一';
-
- return `六月初${day} ${weekdays[weekday]}`;
- }
- });
- </script>
- </body>
- </html>
|