tasks.html 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  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>本周待办事项 - 映三色项目报告</title>
  7. <link href="https://cdn.bootcdn.net/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
  8. <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
  9. <link href="https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.min.css" rel="stylesheet">
  10. <style>
  11. :root {
  12. --primary-color: #00d4ff;
  13. --secondary-color: #0099cc;
  14. --dark-bg: #0a0a0a;
  15. --card-bg: #1a1a1a;
  16. --text-primary: #ffffff;
  17. --text-secondary: #cccccc;
  18. --success-color: #28a745;
  19. --warning-color: #ffc107;
  20. --danger-color: #dc3545;
  21. --info-color: #17a2b8;
  22. }
  23. body {
  24. background: var(--dark-bg);
  25. color: var(--text-primary);
  26. font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  27. }
  28. .header {
  29. background: linear-gradient(135deg, #1a1a1a 0%, #2a2a2a 100%);
  30. padding: 20px 0;
  31. border-bottom: 2px solid var(--primary-color);
  32. }
  33. .breadcrumb {
  34. background: transparent;
  35. margin-bottom: 0;
  36. }
  37. .breadcrumb-item a {
  38. color: var(--primary-color);
  39. text-decoration: none;
  40. }
  41. .tasks-container {
  42. max-width: 1400px;
  43. margin: 0 auto;
  44. padding: 40px 20px;
  45. }
  46. .task-category {
  47. background: rgba(26, 26, 26, 0.9);
  48. border-radius: 15px;
  49. margin-bottom: 30px;
  50. overflow: hidden;
  51. border: 1px solid rgba(0, 212, 255, 0.2);
  52. transition: all 0.3s ease;
  53. }
  54. .task-category:hover {
  55. transform: translateY(-5px);
  56. box-shadow: 0 15px 30px rgba(0, 212, 255, 0.1);
  57. border-color: var(--primary-color);
  58. }
  59. .category-header {
  60. background: linear-gradient(135deg, var(--primary-color) 0%, #667eea 100%);
  61. color: white;
  62. padding: 20px 30px;
  63. display: flex;
  64. justify-content: between;
  65. align-items: center;
  66. }
  67. .category-header h3 {
  68. margin: 0;
  69. font-size: 1.5rem;
  70. display: flex;
  71. align-items: center;
  72. flex: 1;
  73. }
  74. .category-header i {
  75. margin-right: 10px;
  76. }
  77. .priority-badge {
  78. padding: 5px 12px;
  79. border-radius: 20px;
  80. font-size: 0.8rem;
  81. font-weight: bold;
  82. }
  83. .priority-high {
  84. background: var(--danger-color);
  85. color: white;
  86. }
  87. .priority-medium {
  88. background: var(--warning-color);
  89. color: #000;
  90. }
  91. .priority-low {
  92. background: var(--success-color);
  93. color: white;
  94. }
  95. .category-content {
  96. padding: 30px;
  97. }
  98. .task-grid {
  99. display: grid;
  100. grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
  101. gap: 20px;
  102. }
  103. .task-item {
  104. background: rgba(0, 212, 255, 0.1);
  105. border-radius: 10px;
  106. padding: 20px;
  107. border-left: 4px solid var(--primary-color);
  108. transition: all 0.3s ease;
  109. position: relative;
  110. }
  111. .task-item:hover {
  112. background: rgba(0, 212, 255, 0.2);
  113. transform: translateX(5px);
  114. }
  115. .task-title {
  116. font-weight: bold;
  117. color: var(--primary-color);
  118. margin-bottom: 10px;
  119. display: flex;
  120. justify-content: between;
  121. align-items: center;
  122. }
  123. .task-desc {
  124. color: var(--text-secondary);
  125. line-height: 1.6;
  126. margin-bottom: 15px;
  127. }
  128. .task-details {
  129. background: rgba(0, 0, 0, 0.3);
  130. border-radius: 8px;
  131. padding: 15px;
  132. margin: 15px 0;
  133. }
  134. .task-details h6 {
  135. color: var(--secondary-color);
  136. margin-bottom: 10px;
  137. }
  138. .task-list {
  139. list-style: none;
  140. padding: 0;
  141. }
  142. .task-list li {
  143. padding: 8px 0;
  144. border-bottom: 1px solid rgba(0, 212, 255, 0.2);
  145. position: relative;
  146. padding-left: 25px;
  147. }
  148. .task-list li:last-child {
  149. border-bottom: none;
  150. }
  151. .task-list li::before {
  152. content: '•';
  153. position: absolute;
  154. left: 0;
  155. color: var(--primary-color);
  156. font-weight: bold;
  157. font-size: 1.2rem;
  158. }
  159. .deadline {
  160. background: var(--danger-color);
  161. color: white;
  162. padding: 3px 8px;
  163. border-radius: 12px;
  164. font-size: 0.75rem;
  165. margin-left: 10px;
  166. }
  167. .progress-container {
  168. margin: 20px 0;
  169. }
  170. .progress-bar-custom {
  171. background: rgba(0, 212, 255, 0.2);
  172. height: 8px;
  173. border-radius: 4px;
  174. overflow: hidden;
  175. position: relative;
  176. }
  177. .progress-fill {
  178. height: 100%;
  179. background: linear-gradient(90deg, var(--primary-color), var(--secondary-color));
  180. border-radius: 4px;
  181. transition: width 1s ease;
  182. }
  183. .progress-text {
  184. font-size: 0.9rem;
  185. color: var(--text-secondary);
  186. margin-top: 5px;
  187. }
  188. .back-btn {
  189. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  190. border: none;
  191. color: white;
  192. padding: 10px 20px;
  193. border-radius: 25px;
  194. text-decoration: none;
  195. display: inline-flex;
  196. align-items: center;
  197. transition: all 0.3s ease;
  198. }
  199. .back-btn:hover {
  200. transform: translateY(-2px);
  201. box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);
  202. color: white;
  203. }
  204. .stats-overview {
  205. display: grid;
  206. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  207. gap: 20px;
  208. margin-bottom: 40px;
  209. }
  210. .stat-card {
  211. background: rgba(26, 26, 26, 0.8);
  212. border-radius: 10px;
  213. padding: 25px;
  214. text-align: center;
  215. border: 1px solid rgba(0, 212, 255, 0.3);
  216. transition: all 0.3s ease;
  217. }
  218. .stat-card:hover {
  219. transform: translateY(-5px);
  220. box-shadow: 0 10px 25px rgba(0, 212, 255, 0.2);
  221. }
  222. .stat-number {
  223. font-size: 2.5rem;
  224. font-weight: bold;
  225. background: linear-gradient(45deg, var(--primary-color), #667eea);
  226. -webkit-background-clip: text;
  227. -webkit-text-fill-color: transparent;
  228. display: block;
  229. margin-bottom: 10px;
  230. }
  231. .stat-label {
  232. color: var(--text-secondary);
  233. font-size: 0.9rem;
  234. }
  235. .timeline-marker {
  236. position: absolute;
  237. right: 15px;
  238. top: 15px;
  239. width: 12px;
  240. height: 12px;
  241. border-radius: 50%;
  242. background: var(--warning-color);
  243. }
  244. .timeline-marker.completed {
  245. background: var(--success-color);
  246. }
  247. .timeline-marker.urgent {
  248. background: var(--danger-color);
  249. animation: pulse 2s infinite;
  250. }
  251. @keyframes pulse {
  252. 0%, 100% { opacity: 1; }
  253. 50% { opacity: 0.5; }
  254. }
  255. .responsible-person {
  256. background: rgba(102, 126, 234, 0.1);
  257. color: #667eea;
  258. padding: 3px 8px;
  259. border-radius: 12px;
  260. font-size: 0.75rem;
  261. margin-left: auto;
  262. }
  263. @media (max-width: 768px) {
  264. .tasks-container {
  265. padding: 20px 10px;
  266. }
  267. .category-header {
  268. padding: 15px 20px;
  269. flex-direction: column;
  270. gap: 10px;
  271. }
  272. .category-content {
  273. padding: 20px;
  274. }
  275. .task-grid {
  276. grid-template-columns: 1fr;
  277. }
  278. .stats-overview {
  279. grid-template-columns: repeat(2, 1fr);
  280. }
  281. }
  282. </style>
  283. </head>
  284. <body>
  285. <header class="header">
  286. <div class="container">
  287. <nav class="breadcrumb">
  288. <a class="breadcrumb-item" href="index.html">
  289. <i class="fas fa-home me-2"></i>首页
  290. </a>
  291. <span class="breadcrumb-item active">本周待办事项</span>
  292. </nav>
  293. <div class="d-flex justify-content-between align-items-center mt-3">
  294. <h1 class="mb-0">
  295. <i class="fas fa-tasks me-2"></i>本周待办事项
  296. </h1>
  297. <a href="index.html" class="back-btn">
  298. <i class="fas fa-arrow-left me-2"></i>返回首页
  299. </a>
  300. </div>
  301. </div>
  302. </header>
  303. <div class="tasks-container">
  304. <!-- 统计概览 -->
  305. <div class="stats-overview animate__animated animate__fadeIn">
  306. <div class="stat-card">
  307. <span class="stat-number">3</span>
  308. <div class="stat-label">主要类别</div>
  309. </div>
  310. <div class="stat-card">
  311. <span class="stat-number">20+</span>
  312. <div class="stat-label">待办事项</div>
  313. </div>
  314. <div class="stat-card">
  315. <span class="stat-number">7</span>
  316. <div class="stat-label">天期限</div>
  317. </div>
  318. <div class="stat-card">
  319. <span class="stat-number">85%</span>
  320. <div class="stat-label">完成进度</div>
  321. </div>
  322. </div>
  323. <!-- 项目流程评估标准 -->
  324. <div class="task-category animate__animated animate__fadeInUp">
  325. <div class="category-header">
  326. <h3><i class="fas fa-clipboard-check"></i>项目流程评估标准</h3>
  327. <span class="priority-badge priority-high">高优先级</span>
  328. </div>
  329. <div class="category-content">
  330. <div class="progress-container">
  331. <div class="progress-bar-custom">
  332. <div class="progress-fill" style="width: 60%"></div>
  333. </div>
  334. <div class="progress-text">整体进度: 60% 完成</div>
  335. </div>
  336. <div class="task-grid">
  337. <div class="task-item">
  338. <div class="timeline-marker urgent"></div>
  339. <div class="task-title">
  340. 需求确认评价维度
  341. <span class="deadline">本周四</span>
  342. </div>
  343. <div class="task-desc">
  344. 制定客户下单时需求确认的评价维度和具体要求标准
  345. </div>
  346. <div class="task-details">
  347. <h6>具体要求:</h6>
  348. <ul class="task-list">
  349. <li>基础信息完整性检查标准</li>
  350. <li>扩展需求补充评判标准</li>
  351. <li>需求可执行性评估方法</li>
  352. <li>时间节点合理性判断</li>
  353. </ul>
  354. </div>
  355. <div class="responsible-person">负责人: 项目组长</div>
  356. </div>
  357. <div class="task-item">
  358. <div class="timeline-marker urgent"></div>
  359. <div class="task-title">
  360. 建模阶段评价标准
  361. <span class="deadline">本周五</span>
  362. </div>
  363. <div class="task-desc">
  364. 定义建模阶段的质量评价维度和验收要求
  365. </div>
  366. <div class="task-details">
  367. <h6>评价维度:</h6>
  368. <ul class="task-list">
  369. <li>空间准确性:尺寸比例符合CAD</li>
  370. <li>结构完整性:造型结构合理</li>
  371. <li>形状准确性:细节形状到位</li>
  372. <li>优化程度:便于后续处理</li>
  373. </ul>
  374. </div>
  375. <div class="responsible-person">负责人: 技术负责人</div>
  376. </div>
  377. <div class="task-item">
  378. <div class="timeline-marker urgent"></div>
  379. <div class="task-title">
  380. 渲染质量评价标准
  381. <span class="deadline">本周五</span>
  382. </div>
  383. <div class="task-desc">
  384. 建立小图和大图渲染的质量评价体系
  385. </div>
  386. <div class="task-details">
  387. <h6>小图评价:</h6>
  388. <ul class="task-list">
  389. <li>氛围效果:灯光氛围是否到位</li>
  390. <li>细节表现:材质细节是否精致</li>
  391. <li>软装效果:摆放选品调性统一</li>
  392. </ul>
  393. <h6>大图评价:</h6>
  394. <ul class="task-list">
  395. <li>分辨率标准:4000像素以上</li>
  396. <li>细节清晰度:放大后清楚可见</li>
  397. <li>打印适用性:满足工地需求</li>
  398. </ul>
  399. </div>
  400. <div class="responsible-person">负责人: 质量主管</div>
  401. </div>
  402. <div class="task-item">
  403. <div class="timeline-marker"></div>
  404. <div class="task-title">
  405. 效果图综合评估
  406. <span class="deadline">本周三</span>
  407. </div>
  408. <div class="task-desc">
  409. 建立基于原始需求、效果图、评审维度的综合评估体系
  410. </div>
  411. <div class="task-details">
  412. <h6>评估案例:</h6>
  413. <ul class="task-list">
  414. <li>收集典型项目案例</li>
  415. <li>分析原始需求与最终效果</li>
  416. <li>建立评审维度模板</li>
  417. <li>制定评分标准</li>
  418. </ul>
  419. </div>
  420. <div class="responsible-person">负责人: 项目经理</div>
  421. </div>
  422. </div>
  423. </div>
  424. </div>
  425. <!-- 财务核心流程补充 -->
  426. <div class="task-category animate__animated animate__fadeInUp animate__delay-1s">
  427. <div class="category-header">
  428. <h3><i class="fas fa-calculator"></i>财务核心流程补充</h3>
  429. <span class="priority-badge priority-high">高优先级</span>
  430. </div>
  431. <div class="category-content">
  432. <div class="progress-container">
  433. <div class="progress-bar-custom">
  434. <div class="progress-fill" style="width: 45%"></div>
  435. </div>
  436. <div class="progress-text">整体进度: 45% 完成</div>
  437. </div>
  438. <div class="task-grid">
  439. <div class="task-item">
  440. <div class="timeline-marker urgent"></div>
  441. <div class="task-title">
  442. 项目收入分配标准
  443. <span class="deadline">本周三</span>
  444. </div>
  445. <div class="task-desc">
  446. 制定项目收入的具体分配标准和计算方法
  447. </div>
  448. <div class="task-details">
  449. <h6>分配维度:</h6>
  450. <ul class="task-list">
  451. <li>收入:项目总收入计算</li>
  452. <li>毛利:扣除直接成本后利润</li>
  453. <li>成本:人工、素材、设备成本</li>
  454. <li>分成:设计师、组长、公司分成比例</li>
  455. </ul>
  456. </div>
  457. <div class="responsible-person">负责人: 财务经理</div>
  458. </div>
  459. <div class="task-item">
  460. <div class="timeline-marker urgent"></div>
  461. <div class="task-title">
  462. 月度成本均摊方案
  463. <span class="deadline">本周四</span>
  464. </div>
  465. <div class="task-desc">
  466. 建立整体月度成本均摊体系,特别是素材库成本分摊
  467. </div>
  468. <div class="task-details">
  469. <h6>成本类别:</h6>
  470. <ul class="task-list">
  471. <li>素材库每月消费统计</li>
  472. <li>按项目数量分摊方法</li>
  473. <li>按设计师使用量分摊</li>
  474. <li>固定成本均摊方案</li>
  475. </ul>
  476. </div>
  477. <div class="responsible-person">负责人: 财务主管</div>
  478. </div>
  479. <div class="task-item">
  480. <div class="timeline-marker"></div>
  481. <div class="task-title">
  482. 付款对账优化
  483. <span class="deadline">本周四</span>
  484. </div>
  485. <div class="task-desc">
  486. 优化项目财务管理信息上传流程,参考之前财务表格
  487. </div>
  488. <div class="task-details">
  489. <h6>优化重点:</h6>
  490. <ul class="task-list">
  491. <li>简化客服上传流程</li>
  492. <li>自动化对账功能</li>
  493. <li>异常提醒机制</li>
  494. <li>报表生成优化</li>
  495. </ul>
  496. </div>
  497. <div class="responsible-person">负责人: 系统开发</div>
  498. </div>
  499. </div>
  500. </div>
  501. </div>
  502. <!-- 人事招聘评判维度 -->
  503. <div class="task-category animate__animated animate__fadeInUp animate__delay-2s">
  504. <div class="category-header">
  505. <h3><i class="fas fa-user-friends"></i>人事招聘评判维度</h3>
  506. <span class="priority-badge priority-medium">中优先级</span>
  507. </div>
  508. <div class="category-content">
  509. <div class="progress-container">
  510. <div class="progress-bar-custom">
  511. <div class="progress-fill" style="width: 30%"></div>
  512. </div>
  513. <div class="progress-text">整体进度: 30% 完成</div>
  514. </div>
  515. <div class="task-grid">
  516. <div class="task-item">
  517. <div class="timeline-marker"></div>
  518. <div class="task-title">
  519. 简历初筛标准
  520. <span class="deadline">本周三</span>
  521. </div>
  522. <div class="task-desc">
  523. 建立简历初筛的评判标准和反馈记录要求
  524. </div>
  525. <div class="task-details">
  526. <h6>筛选维度:</h6>
  527. <ul class="task-list">
  528. <li>技能匹配度评估</li>
  529. <li>经验年限要求</li>
  530. <li>作品质量评判</li>
  531. <li>学历背景权重</li>
  532. <li>反馈信息记录模板</li>
  533. </ul>
  534. </div>
  535. <div class="responsible-person">负责人: 人事经理</div>
  536. </div>
  537. <div class="task-item">
  538. <div class="timeline-marker"></div>
  539. <div class="task-title">
  540. 入职评定标准
  541. <span class="deadline">本周四</span>
  542. </div>
  543. <div class="task-desc">
  544. 制定达到入职要求的具体评价标准
  545. </div>
  546. <div class="task-details">
  547. <h6>评定要素:</h6>
  548. <ul class="task-list">
  549. <li>技能测试合格线</li>
  550. <li>团队协作能力</li>
  551. <li>学习能力评估</li>
  552. <li>责任心和态度</li>
  553. <li>试用期表现标准</li>
  554. </ul>
  555. </div>
  556. <div class="responsible-person">负责人: 技术主管</div>
  557. </div>
  558. <div class="task-item">
  559. <div class="timeline-marker"></div>
  560. <div class="task-title">
  561. 晋升因素分析
  562. <span class="deadline">本周五</span>
  563. </div>
  564. <div class="task-desc">
  565. 总结晋升常见因素和评判标准
  566. </div>
  567. <div class="task-details">
  568. <h6>晋升维度:</h6>
  569. <ul class="task-list">
  570. <li>项目完成质量</li>
  571. <li>客户满意度</li>
  572. <li>团队贡献度</li>
  573. <li>创新能力表现</li>
  574. <li>领导力潜质</li>
  575. </ul>
  576. </div>
  577. <div class="responsible-person">负责人: 部门经理</div>
  578. </div>
  579. <div class="task-item">
  580. <div class="timeline-marker"></div>
  581. <div class="task-title">
  582. 离职原因档案
  583. <span class="deadline">本周五</span>
  584. </div>
  585. <div class="task-desc">
  586. 建立离职原因档案,区分不同能力和场景
  587. </div>
  588. <div class="task-details">
  589. <h6>分类统计:</h6>
  590. <ul class="task-list">
  591. <li>新人离职:面聊问题总结</li>
  592. <li>有经验者:深层原因分析</li>
  593. <li>客户冲突:处理方式改进</li>
  594. <li>方案认可:能力提升方案</li>
  595. </ul>
  596. </div>
  597. <div class="responsible-person">负责人: 人事专员</div>
  598. </div>
  599. <div class="task-item">
  600. <div class="timeline-marker"></div>
  601. <div class="task-title">
  602. 数据整理表格
  603. <span class="deadline">本周三</span>
  604. </div>
  605. <div class="task-desc">
  606. 整理人事常用数据表格并建立标准模板
  607. </div>
  608. <div class="task-details">
  609. <h6>表格类型:</h6>
  610. <ul class="task-list">
  611. <li>人员档案管理表</li>
  612. <li>客服绩效每日填报表</li>
  613. <li>企业微信聊天统计表</li>
  614. <li>主动对接客户统计表</li>
  615. </ul>
  616. </div>
  617. <div class="responsible-person">负责人: 数据分析师</div>
  618. </div>
  619. </div>
  620. </div>
  621. </div>
  622. </div>
  623. <script src="https://cdn.bootcdn.net/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
  624. <script>
  625. // 动画初始化
  626. document.addEventListener('DOMContentLoaded', function() {
  627. // 统计数字动画
  628. animateNumbers();
  629. // 进度条动画
  630. animateProgressBars();
  631. // 标记动画
  632. animateMarkers();
  633. });
  634. function animateNumbers() {
  635. const numbers = document.querySelectorAll('.stat-number');
  636. numbers.forEach(num => {
  637. const text = num.textContent;
  638. const hasPercent = text.includes('%');
  639. const hasPlus = text.includes('+');
  640. const finalNumber = parseInt(text);
  641. if (!isNaN(finalNumber)) {
  642. let current = 0;
  643. const increment = finalNumber / 50;
  644. const timer = setInterval(() => {
  645. current += increment;
  646. if (current >= finalNumber) {
  647. num.textContent = finalNumber + (hasPercent ? '%' : '') + (hasPlus ? '+' : '');
  648. clearInterval(timer);
  649. } else {
  650. num.textContent = Math.floor(current) + (hasPercent ? '%' : '') + (hasPlus ? '+' : '');
  651. }
  652. }, 40);
  653. }
  654. });
  655. }
  656. function animateProgressBars() {
  657. const progressBars = document.querySelectorAll('.progress-fill');
  658. progressBars.forEach((bar, index) => {
  659. setTimeout(() => {
  660. const width = bar.style.width;
  661. bar.style.width = '0%';
  662. setTimeout(() => {
  663. bar.style.width = width;
  664. }, 100);
  665. }, index * 500);
  666. });
  667. }
  668. function animateMarkers() {
  669. const markers = document.querySelectorAll('.timeline-marker');
  670. markers.forEach((marker, index) => {
  671. setTimeout(() => {
  672. marker.style.transform = 'scale(1.2)';
  673. setTimeout(() => {
  674. marker.style.transform = 'scale(1)';
  675. }, 200);
  676. }, index * 200);
  677. });
  678. }
  679. // 任务项悬停效果
  680. document.querySelectorAll('.task-item').forEach(item => {
  681. item.addEventListener('mouseenter', function() {
  682. this.style.transform = 'translateX(10px) translateY(-5px)';
  683. });
  684. item.addEventListener('mouseleave', function() {
  685. this.style.transform = 'translateX(5px) translateY(0)';
  686. });
  687. });
  688. // 滚动视差效果
  689. window.addEventListener('scroll', function() {
  690. const scrolled = window.pageYOffset;
  691. const parallaxElements = document.querySelectorAll('.task-category');
  692. parallaxElements.forEach((element, index) => {
  693. const speed = 0.1 + (index * 0.05);
  694. const yPos = -(scrolled * speed);
  695. element.style.transform = `translateY(${yPos}px)`;
  696. });
  697. });
  698. </script>
  699. </body>
  700. </html>