date.html 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>婚庆行业客户全生命周期AI管理系统 - 日历</title>
  7. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
  8. <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
  9. <style>
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. box-sizing: border-box;
  14. font-family: 'Noto Sans SC', sans-serif;
  15. }
  16. body {
  17. background: linear-gradient(135deg, #fdf2f8 0%, #f0f9ff 100%);
  18. color: #333;
  19. min-height: 100vh;
  20. padding: 20px;
  21. }
  22. .container {
  23. max-width: 1600px;
  24. margin: 0 auto;
  25. display: flex;
  26. flex-direction: column;
  27. gap: 25px;
  28. }
  29. header {
  30. display: flex;
  31. justify-content: space-between;
  32. align-items: center;
  33. padding: 15px 25px;
  34. background: rgba(255, 255, 255, 0.95);
  35. border-radius: 16px;
  36. box-shadow: 0 8px 20px rgba(186, 47, 142, 0.1);
  37. }
  38. .logo {
  39. display: flex;
  40. align-items: center;
  41. gap: 15px;
  42. }
  43. .logo h1 {
  44. font-size: 26px;
  45. font-weight: 700;
  46. background: linear-gradient(135deg, #d6336c, #a61e4d);
  47. -webkit-background-clip: text;
  48. background-clip: text;
  49. color: transparent;
  50. }
  51. .logo i {
  52. font-size: 28px;
  53. color: #d6336c;
  54. }
  55. .nav-links {
  56. display: flex;
  57. gap: 25px;
  58. }
  59. .nav-links a {
  60. text-decoration: none;
  61. font-weight: 500;
  62. color: #555;
  63. padding: 10px 15px;
  64. border-radius: 12px;
  65. transition: all 0.3s ease;
  66. position: relative;
  67. }
  68. .nav-links a:hover, .nav-links a.active {
  69. color: #d6336c;
  70. background: rgba(214, 51, 108, 0.08);
  71. }
  72. .nav-links a.active:after {
  73. content: "";
  74. position: absolute;
  75. bottom: 0;
  76. left: 15px;
  77. right: 15px;
  78. height: 3px;
  79. background: #d6336c;
  80. border-radius: 3px;
  81. }
  82. .main-content {
  83. display: flex;
  84. gap: 25px;
  85. }
  86. .calendar-section {
  87. flex: 1;
  88. background: rgba(255, 255, 255, 0.95);
  89. border-radius: 16px;
  90. padding: 25px;
  91. box-shadow: 0 8px 20px rgba(186, 47, 142, 0.08);
  92. }
  93. .section-header {
  94. display: flex;
  95. justify-content: space-between;
  96. align-items: center;
  97. margin-bottom: 25px;
  98. }
  99. .section-header h2 {
  100. font-size: 22px;
  101. font-weight: 600;
  102. color: #d6336c;
  103. }
  104. .controls {
  105. display: flex;
  106. gap: 15px;
  107. align-items: center;
  108. }
  109. .date-controls {
  110. display: flex;
  111. align-items: center;
  112. gap: 10px;
  113. }
  114. .date-display {
  115. font-size: 18px;
  116. font-weight: 500;
  117. color: #555;
  118. min-width: 220px;
  119. }
  120. .btn {
  121. padding: 8px 18px;
  122. border-radius: 12px;
  123. border: none;
  124. font-weight: 500;
  125. cursor: pointer;
  126. transition: all 0.3s ease;
  127. display: flex;
  128. align-items: center;
  129. gap: 8px;
  130. }
  131. .btn-primary {
  132. background: linear-gradient(135deg, #d6336c, #a61e4d);
  133. color: white;
  134. }
  135. .btn-outline {
  136. background: transparent;
  137. border: 1px solid #d6336c;
  138. color: #d6336c;
  139. }
  140. .btn:hover {
  141. transform: translateY(-2px);
  142. box-shadow: 0 4px 10px rgba(214, 51, 108, 0.2);
  143. }
  144. .calendar {
  145. display: grid;
  146. grid-template-columns: repeat(7, 1fr);
  147. gap: 12px;
  148. margin-bottom: 25px;
  149. }
  150. .weekdays {
  151. display: grid;
  152. grid-template-columns: repeat(7, 1fr);
  153. text-align: center;
  154. margin-bottom: 15px;
  155. font-weight: 500;
  156. color: #777;
  157. }
  158. .calendar-day {
  159. height: 110px;
  160. background: #fff;
  161. border-radius: 12px;
  162. padding: 12px;
  163. position: relative;
  164. box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05);
  165. transition: all 0.3s ease;
  166. border: 1px solid #eee;
  167. overflow: hidden;
  168. }
  169. .calendar-day:hover {
  170. transform: translateY(-3px);
  171. box-shadow: 0 5px 15px rgba(214, 51, 108, 0.15);
  172. }
  173. .day-header {
  174. display: flex;
  175. justify-content: space-between;
  176. font-size: 14px;
  177. margin-bottom: 8px;
  178. }
  179. .day-num {
  180. font-weight: 700;
  181. font-size: 18px;
  182. }
  183. .lunar-date {
  184. color: #999;
  185. font-size: 12px;
  186. }
  187. .day-events {
  188. font-size: 12px;
  189. }
  190. .event-tag {
  191. display: inline-block;
  192. padding: 3px 8px;
  193. border-radius: 20px;
  194. font-size: 11px;
  195. margin-top: 5px;
  196. white-space: nowrap;
  197. overflow: hidden;
  198. text-overflow: ellipsis;
  199. max-width: 100%;
  200. }
  201. .event-booked {
  202. background: rgba(214, 51, 108, 0.1);
  203. color: #d6336c;
  204. border-left: 3px solid #d6336c;
  205. }
  206. .event-available {
  207. background: rgba(40, 167, 69, 0.1);
  208. color: #28a745;
  209. border-left: 3px solid #28a745;
  210. }
  211. .event-consult {
  212. background: rgba(23, 162, 184, 0.1);
  213. color: #17a2b8;
  214. border-left: 3px solid #17a2b8;
  215. }
  216. .today {
  217. background: rgba(255, 228, 230, 0.5);
  218. border: 2px solid #d6336c;
  219. }
  220. .day-header .today-label {
  221. background: #d6336c;
  222. color: white;
  223. padding: 2px 6px;
  224. border-radius: 4px;
  225. font-size: 11px;
  226. margin-left: 5px;
  227. }
  228. .venue-section {
  229. width: 400px;
  230. background: rgba(255, 255, 255, 0.95);
  231. border-radius: 16px;
  232. padding: 25px;
  233. box-shadow: 0 8px 20px rgba(186, 47, 142, 0.08);
  234. }
  235. .venue-list {
  236. margin-top: 20px;
  237. max-height: 600px;
  238. overflow-y: auto;
  239. padding-right: 10px;
  240. }
  241. .venue-list::-webkit-scrollbar {
  242. width: 6px;
  243. }
  244. .venue-list::-webkit-scrollbar-thumb {
  245. background: rgba(214, 51, 108, 0.3);
  246. border-radius: 4px;
  247. }
  248. .venue-item {
  249. padding: 15px;
  250. margin-bottom: 12px;
  251. border-radius: 12px;
  252. background: #fff;
  253. display: flex;
  254. justify-content: space-between;
  255. align-items: center;
  256. box-shadow: 0 3px 8px rgba(0, 0, 0, 0.05);
  257. transition: all 0.3s ease;
  258. border-left: 4px solid #d6336c;
  259. }
  260. .venue-item:hover {
  261. transform: translateX(5px);
  262. box-shadow: 0 5px 15px rgba(214, 51, 108, 0.15);
  263. }
  264. .venue-info {
  265. flex: 1;
  266. }
  267. .venue-name {
  268. font-weight: 600;
  269. margin-bottom: 5px;
  270. color: #333;
  271. }
  272. .venue-status {
  273. font-size: 13px;
  274. padding: 3px 10px;
  275. border-radius: 20px;
  276. display: inline-block;
  277. }
  278. .status-available {
  279. background: rgba(40, 167, 69, 0.15);
  280. color: #28a745;
  281. }
  282. .status-booked {
  283. background: rgba(214, 51, 108, 0.15);
  284. color: #d6336c;
  285. }
  286. .status-hold {
  287. background: rgba(255, 193, 7, 0.15);
  288. color: #fd7e14;
  289. }
  290. .venue-actions {
  291. display: flex;
  292. gap: 10px;
  293. }
  294. .action-btn {
  295. width: 30px;
  296. height: 30px;
  297. border-radius: 50%;
  298. display: flex;
  299. align-items: center;
  300. justify-content: center;
  301. background: #f8f9fa;
  302. color: #777;
  303. cursor: pointer;
  304. transition: all 0.3s ease;
  305. }
  306. .action-btn:hover {
  307. background: #d6336c;
  308. color: white;
  309. }
  310. .ai-section {
  311. background: rgba(255, 255, 255, 0.95);
  312. border-radius: 16px;
  313. padding: 25px;
  314. margin-top: 10px;
  315. box-shadow: 0 8px 20px rgba(186, 47, 142, 0.08);
  316. }
  317. .ai-header {
  318. display: flex;
  319. align-items: center;
  320. gap: 10px;
  321. margin-bottom: 20px;
  322. }
  323. .ai-header h3 {
  324. font-size: 20px;
  325. color: #d6336c;
  326. }
  327. .ai-header i {
  328. font-size: 24px;
  329. color: #d6336c;
  330. }
  331. .ai-recommendation {
  332. background: linear-gradient(135deg, #fdf2f8, #f0f9ff);
  333. border-radius: 12px;
  334. padding: 20px;
  335. margin-bottom: 20px;
  336. }
  337. .ai-title {
  338. font-weight: 600;
  339. margin-bottom: 10px;
  340. color: #d6336c;
  341. display: flex;
  342. align-items: center;
  343. gap: 8px;
  344. }
  345. .ai-content {
  346. font-size: 14px;
  347. line-height: 1.6;
  348. color: #555;
  349. }
  350. .ai-content ul {
  351. padding-left: 20px;
  352. margin: 10px 0;
  353. }
  354. .ai-content li {
  355. margin-bottom: 8px;
  356. }
  357. .stats-grid {
  358. display: grid;
  359. grid-template-columns: repeat(3, 1fr);
  360. gap: 15px;
  361. margin-top: 25px;
  362. }
  363. .stat-card {
  364. background: #fff;
  365. border-radius: 12px;
  366. padding: 18px;
  367. text-align: center;
  368. box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05);
  369. }
  370. .stat-value {
  371. font-size: 28px;
  372. font-weight: 700;
  373. color: #d6336c;
  374. margin: 10px 0;
  375. }
  376. .stat-label {
  377. font-size: 14px;
  378. color: #777;
  379. }
  380. .view-more {
  381. display: block;
  382. text-align: center;
  383. margin-top: 25px;
  384. padding: 12px;
  385. background: rgba(214, 51, 108, 0.08);
  386. color: #d6336c;
  387. border-radius: 12px;
  388. text-decoration: none;
  389. font-weight: 500;
  390. transition: all 0.3s ease;
  391. }
  392. .view-more:hover {
  393. background: rgba(214, 51, 108, 0.15);
  394. }
  395. @media (max-width: 1200px) {
  396. .main-content {
  397. flex-direction: column;
  398. }
  399. .venue-section {
  400. width: 100%;
  401. }
  402. }
  403. </style>
  404. </head>
  405. <body>
  406. <div class="container">
  407. <header>
  408. <div class="logo">
  409. <i class="fas fa-heart"></i>
  410. <h1>婚庆行业客户全生命周期AI管理系统</h1>
  411. </div>
  412. <div class="nav-links">
  413. <a href="#" class="active">日历</a>
  414. <a href="#">每日工作</a>
  415. <a href="#">订单总览</a>
  416. <a href="#">访客视图</a>
  417. <a href="#">房间安排</a>
  418. </div>
  419. </header>
  420. <div class="main-content">
  421. <div class="calendar-section">
  422. <div class="section-header">
  423. <h2>场地档期日历</h2>
  424. <div class="controls">
  425. <div class="date-controls">
  426. <button class="btn btn-outline"><i class="fas fa-chevron-left"></i></button>
  427. <div class="date-display">2025年6月</div>
  428. <button class="btn btn-outline"><i class="fas fa-chevron-right"></i></button>
  429. </div>
  430. <button class="btn btn-primary"><i class="fas fa-search"></i> 查询日期</button>
  431. </div>
  432. </div>
  433. <div class="weekdays">
  434. <div>周日</div>
  435. <div>周一</div>
  436. <div>周二</div>
  437. <div>周三</div>
  438. <div>周四</div>
  439. <div>周五</div>
  440. <div>周六</div>
  441. </div>
  442. <div class="calendar">
  443. <!-- 日历日期将通过JavaScript动态生成 -->
  444. <!-- 这里仅展示静态示例 -->
  445. <div class="calendar-day">
  446. <div class="day-header">
  447. <div class="day-num">28</div>
  448. <div class="lunar-date">六月初四 周六</div>
  449. </div>
  450. <div class="day-events">
  451. <div class="event-tag event-booked">九州厅: 张先生婚礼</div>
  452. <div class="event-tag event-consult">海洋之心: 咨询</div>
  453. </div>
  454. </div>
  455. <div class="calendar-day">
  456. <div class="day-header">
  457. <div class="day-num">29</div>
  458. <div class="lunar-date">六月初五 周日</div>
  459. </div>
  460. <div class="day-events">
  461. <div class="event-tag event-booked">月光礼堂: 李小姐婚礼</div>
  462. <div class="event-tag event-booked">冰雪奇缘: 王先生婚礼</div>
  463. </div>
  464. </div>
  465. <div class="calendar-day today">
  466. <div class="day-header">
  467. <div class="day-num">30 <span class="today-label">今日</span></div>
  468. <div class="lunar-date">六月初六 周一</div>
  469. </div>
  470. <div class="day-events">
  471. <div class="event-tag event-consult">九州厅: 咨询</div>
  472. <div class="event-tag event-available">星空之镜: 空闲</div>
  473. <div class="event-tag event-available">塞纳花园: 空闲</div>
  474. </div>
  475. </div>
  476. <!-- 更多日期省略 -->
  477. </div>
  478. <div class="ai-section">
  479. <div class="ai-header">
  480. <i class="fas fa-robot"></i>
  481. <h3>AI智能档期助手</h3>
  482. </div>
  483. <div class="ai-recommendation">
  484. <div class="ai-title">
  485. <i class="fas fa-lightbulb"></i>
  486. <span>今日智能建议</span>
  487. </div>
  488. <div class="ai-content">
  489. <p>根据历史数据分析,本周末(7月5日-6日)为婚礼高峰期,建议:</p>
  490. <ul>
  491. <li>优先安排资深策划师处理九州厅、月光礼堂的咨询客户</li>
  492. <li>星空之镜、海洋之心场地有较高意向客户,可主动跟进</li>
  493. <li>塞纳花园连续3个周末空闲,建议推出限时优惠活动</li>
  494. </ul>
  495. <p><strong>预测:</strong>7月婚礼预订量预计增长25%,建议增加临时服务人员</p>
  496. </div>
  497. </div>
  498. <div class="stats-grid">
  499. <div class="stat-card">
  500. <div class="stat-value">78%</div>
  501. <div class="stat-label">本月场地利用率</div>
  502. </div>
  503. <div class="stat-card">
  504. <div class="stat-value">42</div>
  505. <div class="stat-label">待处理咨询</div>
  506. </div>
  507. <div class="stat-card">
  508. <div class="stat-value">15</div>
  509. <div class="stat-label">本周婚礼活动</div>
  510. </div>
  511. </div>
  512. </div>
  513. </div>
  514. <div class="venue-section">
  515. <div class="section-header">
  516. <h2>场地状态</h2>
  517. <button class="btn btn-outline"><i class="fas fa-filter"></i> 筛选</button>
  518. </div>
  519. <div class="venue-list">
  520. <div class="venue-item">
  521. <div class="venue-info">
  522. <div class="venue-name">九州厅</div>
  523. <div class="venue-status status-booked">已预订 (7月5日)</div>
  524. </div>
  525. <div class="venue-actions">
  526. <div class="action-btn"><i class="fas fa-eye"></i></div>
  527. <div class="action-btn"><i class="fas fa-edit"></i></div>
  528. </div>
  529. </div>
  530. <div class="venue-item">
  531. <div class="venue-info">
  532. <div class="venue-name">奥斯卡厅</div>
  533. <div class="venue-status status-available">空闲</div>
  534. </div>
  535. <div class="venue-actions">
  536. <div class="action-btn"><i class="fas fa-eye"></i></div>
  537. <div class="action-btn"><i class="fas fa-edit"></i></div>
  538. </div>
  539. </div>
  540. <div class="venue-item">
  541. <div class="venue-info">
  542. <div class="venue-name">星空之镜</div>
  543. <div class="venue-status status-available">空闲</div>
  544. </div>
  545. <div class="venue-actions">
  546. <div class="action-btn"><i class="fas fa-eye"></i></div>
  547. <div class="action-btn"><i class="fas fa-edit"></i></div>
  548. </div>
  549. </div>
  550. <div class="venue-item">
  551. <div class="venue-info">
  552. <div class="venue-name">塞纳花园</div>
  553. <div class="venue-status status-available">空闲</div>
  554. </div>
  555. <div class="venue-actions">
  556. <div class="action-btn"><i class="fas fa-eye"></i></div>
  557. <div class="action-btn"><i class="fas fa-edit"></i></div>
  558. </div>
  559. </div>
  560. <div class="venue-item">
  561. <div class="venue-info">
  562. <div class="venue-name">海洋之心</div>
  563. <div class="venue-status status-hold">意向沟通中</div>
  564. </div>
  565. <div class="venue-actions">
  566. <div class="action-btn"><i class="fas fa-eye"></i></div>
  567. <div class="action-btn"><i class="fas fa-edit"></i></div>
  568. </div>
  569. </div>
  570. <div class="venue-item">
  571. <div class="venue-info">
  572. <div class="venue-name">冰雪奇缘</div>
  573. <div class="venue-status status-booked">已预订 (7月12日)</div>
  574. </div>
  575. <div class="venue-actions">
  576. <div class="action-btn"><i class="fas fa-eye"></i></div>
  577. <div class="action-btn"><i class="fas fa-edit"></i></div>
  578. </div>
  579. </div>
  580. <div class="venue-item">
  581. <div class="venue-info">
  582. <div class="venue-name">暮光之城</div>
  583. <div class="venue-status status-booked">已预订 (7月19日)</div>
  584. </div>
  585. <div class="venue-actions">
  586. <div class="action-btn"><i class="fas fa-eye"></i></div>
  587. <div class="action-btn"><i class="fas fa-edit"></i></div>
  588. </div>
  589. </div>
  590. <div class="venue-item">
  591. <div class="venue-info">
  592. <div class="venue-name">月光礼堂</div>
  593. <div class="venue-status status-booked">已预订 (7月26日)</div>
  594. </div>
  595. <div class="venue-actions">
  596. <div class="action-btn"><i class="fas fa-eye"></i></div>
  597. <div class="action-btn"><i class="fas fa-edit"></i></div>
  598. </div>
  599. </div>
  600. <a href="#" class="view-more">
  601. <i class="fas fa-chevron-down"></i> 查看42个场地/日期未定的客户
  602. </a>
  603. </div>
  604. </div>
  605. </div>
  606. </div>
  607. <script>
  608. // 简单的日历生成逻辑(简化版)
  609. document.addEventListener('DOMContentLoaded', function() {
  610. const calendar = document.querySelector('.calendar');
  611. const daysInMonth = 30; // 假设6月有30天
  612. const firstDay = 6; // 2025年6月1日是星期日(0=周日,1=周一...)
  613. // 生成空白日期
  614. for (let i = 0; i < firstDay; i++) {
  615. const emptyDay = document.createElement('div');
  616. emptyDay.classList.add('calendar-day', 'empty');
  617. calendar.appendChild(emptyDay);
  618. }
  619. // 生成日期
  620. for (let day = 1; day <= daysInMonth; day++) {
  621. const dayElement = document.createElement('div');
  622. dayElement.classList.add('calendar-day');
  623. // 日期头
  624. const dayHeader = document.createElement('div');
  625. dayHeader.classList.add('day-header');
  626. const dayNum = document.createElement('div');
  627. dayNum.classList.add('day-num');
  628. dayNum.textContent = day;
  629. const lunarDate = document.createElement('div');
  630. lunarDate.classList.add('lunar-date');
  631. lunarDate.textContent = getLunarDate(day);
  632. dayHeader.appendChild(dayNum);
  633. dayHeader.appendChild(lunarDate);
  634. // 事件区域
  635. const dayEvents = document.createElement('div');
  636. dayEvents.classList.add('day-events');
  637. // 随机生成事件
  638. if (Math.random() > 0.3) {
  639. const eventCount = Math.floor(Math.random() * 2) + 1;
  640. for (let i = 0; i < eventCount; i++) {
  641. const event = document.createElement('div');
  642. event.classList.add('event-tag');
  643. const venues = ['九州厅', '奥斯卡', '星空之镜', '塞纳花园', '海洋之心', '冰雪奇缘', '暮光之城', '月光礼堂'];
  644. const venue = venues[Math.floor(Math.random() * venues.length)];
  645. const status = Math.random() > 0.5 ? 'event-booked' :
  646. Math.random() > 0.5 ? 'event-consult' : 'event-available';
  647. event.classList.add(status);
  648. if (status === 'event-booked') {
  649. const names = ['张', '王', '李', '赵', '陈', '刘'];
  650. event.textContent = `${venue}: ${names[Math.floor(Math.random() * names.length)]}${Math.random() > 0.5 ? '先生' : '小姐'}婚礼`;
  651. } else if (status === 'event-consult') {
  652. event.textContent = `${venue}: 咨询`;
  653. } else {
  654. event.textContent = `${venue}: 空闲`;
  655. }
  656. dayEvents.appendChild(event);
  657. }
  658. }
  659. dayElement.appendChild(dayHeader);
  660. dayElement.appendChild(dayEvents);
  661. // 标记今天
  662. if (day === 30) {
  663. dayElement.classList.add('today');
  664. const todayLabel = document.createElement('span');
  665. todayLabel.classList.add('today-label');
  666. todayLabel.textContent = '今日';
  667. dayNum.appendChild(todayLabel);
  668. }
  669. calendar.appendChild(dayElement);
  670. }
  671. function getLunarDate(day) {
  672. // 简化版的农历日期生成
  673. const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
  674. const weekday = (firstDay + day - 1) % 7;
  675. if (day === 28) return '六月初四 周六';
  676. if (day === 29) return '六月初五 周日';
  677. if (day === 30) return '六月初六 周一';
  678. return `六月初${day} ${weekdays[weekday]}`;
  679. }
  680. });
  681. </script>
  682. </body>
  683. </html>