浏览代码

Merge branch 'master' of http://git.fmode.cn:3000/19870581353/travel-flatform

HK 1 月之前
父节点
当前提交
21c9c4a0eb

+ 0 - 0
travel-platform-web/travel-web/src/assets/fonts/ganfeng.ttf → travel-platform-web/travel-web/public/assets/fonts/ganfeng.ttf


二进制
travel-platform-web/travel-web/public/assets/images/co-creation1.webp


二进制
travel-platform-web/travel-web/public/assets/images/co-creation2.webp


二进制
travel-platform-web/travel-web/public/assets/images/co-creation3.webp


二进制
travel-platform-web/travel-web/public/assets/images/co-creation4.webp


二进制
travel-platform-web/travel-web/public/assets/images/cultural-map.webp


二进制
travel-platform-web/travel-web/public/assets/images/digital-heritage.webp


二进制
travel-platform-web/travel-web/public/assets/images/jiangxi-landspace.webp


+ 0 - 0
travel-platform-web/travel-web/src/assets/images/paper-texture.webp → travel-platform-web/travel-web/public/assets/images/paper-texture.webp


二进制
travel-platform-web/travel-web/public/assets/images/smart-tourism.webp


二进制
travel-platform-web/travel-web/src/assets/images/jiangxi-landspace.webp


+ 130 - 454
travel-platform-web/travel-web/src/crm/mobile/page-crm-home/page-crm-home.html

@@ -1,475 +1,151 @@
-<div class="crm-home">
-  <!-- 水墨背景层 -->
-  <div class="ink-background">
-    <div class="ink-particle" style="top:15%;left:20%"></div>
-    <div class="ink-particle" style="top:40%;left:70%"></div>
-    <div class="ink-particle" style="top:70%;left:30%"></div>
+<!-- 智能Banner系统 -->
+<section class="banner" id="home">
+  <div class="banner-content">
+    <h1 class="banner-title">三色映赣鄱,水墨链古今</h1>
+    <p class="banner-subtitle">江西省文化和旅游研究推广协会,以数字科技传承赣派文化,用创新设计演绎江西山水,打造虚实共生的文旅新体验。</p>
+    <a href="#platform" class="banner-btn">探索数智平台</a>
   </div>
+  <div class="banner-bg"></div>
+</section>
 
-  <!-- 智能Banner系统 -->
-  <section class="banner-section">
-    <div class="section-mountain-bg"></div>
-    <div class="banner-container">
-      <!-- 轮播广告 -->
-      <div class="carousel">
-        <div class="carousel-inner">
-          <div class="carousel-item active" style="background-image: url('assets/images/banner-1.jpg')">
-            <div class="ink-overlay"></div>
-            <div class="carousel-caption">
-              <h3 data-text="江西风景独好">江西风景独好</h3>
-              <p>探索赣鄱大地的自然与人文之美</p>
-              <div class="brush-stroke"></div>
-            </div>
-          </div>
-          <div class="carousel-item" style="background-image: url('assets/images/banner-2.jpg')">
-            <div class="ink-overlay"></div>
-            <div class="carousel-caption">
-              <h3 data-text="数字文旅新时代">数字文旅新时代</h3>
-              <p>科技赋能传统文化创新</p>
-              <div class="brush-stroke"></div>
-            </div>
-          </div>
-        </div>
-        <button class="carousel-control prev"><i class="icon-arrow-left"></i></button>
-        <button class="carousel-control next"><i class="icon-arrow-right"></i></button>
-        <div class="carousel-indicators">
-          <span class="active"></span>
-          <span></span>
-        </div>
+<!-- 数智动态区 -->
+<section class="dynamic-section" id="platform">
+  <h2 class="section-title">数智动态</h2>
+  <div class="dynamic-grid">
+    <div class="dynamic-card">
+      <div class="card-img" style="background-image: url('digital-heritage.jpg');"></div>
+      <div class="card-content">
+        <h3 class="card-title">数字非遗保护工程</h3>
+        <p class="card-desc">运用3D扫描与VR技术,对江西传统手工艺进行数字化存档与展示,让非遗文化永续传承。</p>
+        <a href="#" class="card-link">了解更多 →</a>
       </div>
-      
-      <!-- 快速入口 -->
-      <div class="quick-access">
-        <div class="quick-item ceramic-disk" routerLink="/mobile/platform">
-          <div class="disk-border"></div>
-          <i class="icon-platform"></i>
-          <span>会员申报</span>
-          <div class="disk-shadow"></div>
-        </div>
-        <div class="quick-item ceramic-disk" routerLink="/mobile/member">
-          <div class="disk-border"></div>
-          <i class="icon-member"></i>
-          <span>共创平台</span>
-          <div class="disk-shadow"></div>
-        </div>
-        <div class="quick-item ceramic-disk" routerLink="/mobile/business">
-          <div class="disk-border"></div>
-          <i class="icon-activity"></i>
-          <span>活动报名</span>
-          <div class="disk-shadow"></div>
-        </div>
+    </div>
+    <div class="dynamic-card">
+      <div class="card-img" style="background-image: url('cultural-map.jpg');"></div>
+      <div class="card-content">
+        <h3 class="card-title">江西文化基因图谱</h3>
+        <p class="card-desc">通过大数据分析,绘制江西文化元素关联网络,揭示赣鄱文化的深层结构与演变脉络。</p>
+        <a href="#" class="card-link">了解更多 →</a>
+      </div>
+    </div>
+    <div class="dynamic-card">
+      <div class="card-img" style="background-image: url('smart-tourism.jpg');"></div>
+      <div class="card-content">
+        <h3 class="card-title">智慧旅游解决方案</h3>
+        <p class="card-desc">整合AI导览、AR实景增强等技术,为江西景区提供全方位的数字化升级方案。</p>
+        <a href="#" class="card-link">了解更多 →</a>
       </div>
     </div>
-  </section>
+  </div>
+</section>
 
-  <!-- 数智动态区 -->
-  <section class="dynamic-section">
-    <div class="section-water-bg"></div>
-    <div class="section-header">
-      <h2><i class="icon-dynamic"></i> <span class="title-ink">数智动态</span></h2>
-      <a routerLink="/mobile/platform" class="more-link ink-button">更多 <i class="icon-ink-arrow"></i></a>
+<!-- 共创展示区 -->
+<section class="co-creation-section" id="business">
+  <h2 class="section-title">共创成果展示</h2>
+  <div class="co-creation-slider">
+    <div class="co-creation-item">
+      <div class="cc-img" style="background-image: url('co-creation1.jpg');"></div>
+      <div class="cc-content">
+        <h3 class="cc-title">滕王阁AR诗词体验</h3>
+        <p class="cc-author">作者: 南昌文旅数字实验室</p>
+        <p>通过手机扫描实景,触发《滕王阁序》动态书法展示与语音朗诵,让游客沉浸式感受千年文脉。</p>
+      </div>
     </div>
-    
-    <div class="dynamic-grid">
-      <!-- 新闻动态 -->
-      <div class="dynamic-card news-card scroll-fade">
-        <div class="card-header">
-          <div class="title-container">
-            <i class="icon-news"></i>
-            <h3>新闻动态</h3>
-          </div>
-          <span class="ai-tag">AI智能抓取</span>
-          <div class="ink-splash"></div>
-        </div>
-        <div class="card-content">
-          <ul class="news-list">
-            <li class="news-item">
-              <div class="news-dot"></div>
-              <span class="news-title">2023江西数字文旅发展峰会圆满举行</span>
-              <span class="news-date">07-15</span>
-            </li>
-            <li class="news-item">
-              <div class="news-dot"></div>
-              <span class="news-title">赣鄱非遗数字化保护工程启动</span>
-              <span class="news-date">07-10</span>
-            </li>
-            <li class="news-item">
-              <div class="news-dot"></div>
-              <span class="news-title">景德镇陶瓷数字博物馆上线</span>
-              <span class="news-date">07-05</span>
-            </li>
-          </ul>
-          <div class="news-chart">
-            <div class="echarts-container" #newsTrendChart></div>
-          </div>
-        </div>
+    <div class="co-creation-item">
+      <div class="cc-img" style="background-image: url('co-creation2.jpg');"></div>
+      <div class="cc-content">
+        <h3 class="cc-title">景德镇虚拟制瓷</h3>
+        <p class="cc-author">作者: 瓷都数字工匠团队</p>
+        <p>交互式模拟青花瓷制作全流程,从拉坯到绘彩,体验传统工艺的数字化演绎。</p>
       </div>
-      
-      <!-- 文件传达 -->
-      <div class="dynamic-card document-card scroll-fade">
-        <div class="card-header">
-          <div class="title-container">
-            <i class="icon-document"></i>
-            <h3>文件传达</h3>
-          </div>
-          <span class="blockchain-tag">区块链存证</span>
-          <div class="ink-splash"></div>
-        </div>
-        <div class="card-content">
-          <div class="document-item">
-            <div class="document-icon">
-              <i class="icon-pdf"></i>
-              <div class="gold-border"></div>
-            </div>
-            <div class="document-info">
-              <span class="document-title">关于数字文旅创新项目的申报通知</span>
-              <span class="document-meta">
-                <span class="document-size">PDF 2.4MB</span>
-                <span class="document-hash">#a3f8e2...</span>
-              </span>
-            </div>
-          </div>
-          <div class="document-item">
-            <div class="document-icon">
-              <i class="icon-pdf"></i>
-              <div class="gold-border"></div>
-            </div>
-            <div class="document-info">
-              <span class="document-title">2023年度会员管理办法</span>
-              <span class="document-meta">
-                <span class="document-size">PDF 1.8MB</span>
-                <span class="document-hash">#b5d7c1...</span>
-              </span>
-            </div>
-          </div>
-          <div class="blockchain-visual">
-            <div class="echarts-container" #blockchainChart></div>
-          </div>
-        </div>
+    </div>
+    <div class="co-creation-item">
+      <div class="cc-img" style="background-image: url('co-creation3.jpg');"></div>
+      <div class="cc-content">
+        <h3 class="cc-title">井冈山红色记忆</h3>
+        <p class="cc-author">作者: 赣南数媒创新中心</p>
+        <p>基于地理位置的革命故事推送系统,在实景中叠加历史影像与互动问答。</p>
       </div>
-      
-      <!-- 学术前沿 -->
-      <div class="dynamic-card academic-card scroll-fade">
-        <div class="card-header">
-          <div class="title-container">
-            <i class="icon-academic"></i>
-            <h3>学术前沿</h3>
-          </div>
-          <span class="kg-tag">知识图谱</span>
-          <div class="ink-splash"></div>
-        </div>
-        <div class="card-content">
-          <div class="knowledge-poem">
-            <p class="poem-line">落霞与孤鹜齐飞</p>
-            <p class="poem-line">秋水共长天一色</p>
-            <div class="poem-author">— 王勃《滕王阁序》</div>
-          </div>
-          <div class="knowledge-graph">
-            <div class="echarts-container" #knowledgeGraphChart></div>
-            <div class="graph-legend">
-              <span class="legend-item"><i class="legend-dot cultural"></i>文化遗产</span>
-              <span class="legend-item"><i class="legend-dot scenic"></i>景区景点</span>
-              <span class="legend-item"><i class="legend-dot figure"></i>历史人物</span>
-            </div>
-          </div>
-        </div>
+    </div>
+    <div class="co-creation-item">
+      <div class="cc-img" style="background-image: url('co-creation4.jpg');"></div>
+      <div class="cc-content">
+        <h3 class="cc-title">婺源四季农事历</h3>
+        <p class="cc-author">作者: 乡村数字复兴小组</p>
+        <p>可视化呈现传统农耕节律,结合气象数据提供农事活动建议与民俗体验预约。</p>
       </div>
     </div>
-  </section>
+  </div>
+</section>
 
-  <!-- 共创展示区 -->
-  <section class="showcase-section">
-    <div class="section-rice-bg"></div>
-    <div class="section-header">
-      <h2><i class="icon-showcase"></i> <span class="title-ink">共创展示</span></h2>
-      <a routerLink="/mobile/business" class="more-link ink-button">更多 <i class="icon-ink-arrow"></i></a>
-    </div>
-    
-    <div class="showcase-tabs">
-      <button class="tab-btn active ink-tab">
-        <span class="tab-ink">数字文创展廊</span>
-        <div class="ink-underline"></div>
-      </button>
-      <button class="tab-btn ink-tab">
-        <span class="tab-ink">文旅IP孵化榜</span>
-        <div class="ink-underline"></div>
-      </button>
-      <button class="tab-btn ink-tab">
-        <span class="tab-ink">XR云展厅</span>
-        <div class="ink-underline"></div>
-      </button>
-    </div>
+<!-- 协会智能体 -->
+<section class="ai-section" id="service">
+  <div class="ai-container">
+    <h2 class="ai-title">协会智能体</h2>
+    <p class="ai-desc">我们开发的AI文化助手"赣小文",集成了江西历史文化大数据,可提供智能问答、个性化推荐、文创设计辅助等服务,是您探索赣鄱文化的数字向导。</p>
+    <a href="#" class="banner-btn">体验智能服务</a>
     
-    <div class="showcase-content">
-      <!-- 数字文创展廊 -->
-      <div class="showcase-panel active">
-        <div class="aigc-gallery">
-          <div class="gallery-item scroll-fade">
-            <div class="gallery-ink"></div>
-            <img src="assets/images/aigc-1.jpg" alt="AIGC作品">
-            <div class="gallery-caption">
-              <h4>滕王阁数字艺术</h4>
-              <p>AI生成 · 赣派建筑风格</p>
-              <div class="caption-border"></div>
-            </div>
-            <button class="gallery-view">全景欣赏</button>
-          </div>
-          <div class="gallery-item scroll-fade">
-            <div class="gallery-ink"></div>
-            <img src="assets/images/aigc-2.jpg" alt="AIGC作品">
-            <div class="gallery-caption">
-              <h4>庐山云雾诗画</h4>
-              <p>AI生成 · 水墨风格</p>
-              <div class="caption-border"></div>
-            </div>
-            <button class="gallery-view">全景欣赏</button>
-          </div>
-          <div class="gallery-item scroll-fade">
-            <div class="gallery-ink"></div>
-            <img src="assets/images/aigc-3.jpg" alt="AIGC作品">
-            <div class="gallery-caption">
-              <h4>景德镇青花瓷</h4>
-              <p>AI生成 · 数字釉彩</p>
-              <div class="caption-border"></div>
-            </div>
-            <button class="gallery-view">全景欣赏</button>
-          </div>
-        </div>
+    <div class="ai-features">
+      <div class="ai-feature">
+        <div class="ai-icon">✍️</div>
+        <h3 class="ai-feature-title">文化问答</h3>
+        <p>解答江西历史、民俗、非遗等各类文化问题</p>
       </div>
-      
-      <!-- 文旅IP孵化榜 -->
-      <div class="showcase-panel">
-        <div class="ip-ranking scroll-fade">
-          <div class="ip-header">
-            <h3>江西文旅IP影响力榜单</h3>
-            <div class="ip-filter">
-              <span class="filter-active">全部</span>
-              <span>非遗类</span>
-              <span>助农类</span>
-              <span>景区类</span>
-            </div>
-          </div>
-          <div class="ip-list">
-            <div class="ip-item">
-              <span class="ip-rank">1</span>
-              <div class="ip-avatar" style="background-image:url('assets/images/ip-1.jpg')"></div>
-              <div class="ip-info">
-                <h4>赣南脐橙仙子</h4>
-                <p class="ip-desc">助农IP · 累计曝光1.2亿</p>
-                <div class="ip-stats">
-                  <div class="stat-item">
-                    <i class="icon-eye"></i>
-                    <span>320万</span>
-                  </div>
-                  <div class="stat-item">
-                    <i class="icon-like"></i>
-                    <span>45万</span>
-                  </div>
-                </div>
-              </div>
-              <div class="ip-chart">
-                <div class="mini-echarts" #ipTrendChart></div>
-              </div>
-            </div>
-            <div class="ip-item">
-              <span class="ip-rank">2</span>
-              <div class="ip-avatar" style="background-image:url('assets/images/ip-2.jpg')"></div>
-              <div class="ip-info">
-                <h4>景德镇瓷语</h4>
-                <p class="ip-desc">非遗IP · 合作品牌32家</p>
-                <div class="ip-stats">
-                  <div class="stat-item">
-                    <i class="icon-eye"></i>
-                    <span>280万</span>
-                  </div>
-                  <div class="stat-item">
-                    <i class="icon-like"></i>
-                    <span>38万</span>
-                  </div>
-                </div>
-              </div>
-              <div class="ip-chart">
-                <div class="mini-echarts" #ipTrendChart2></div>
-              </div>
-            </div>
-          </div>
-          <div class="ip-map">
-            <div class="echarts-container" #ipMapChart></div>
-          </div>
-        </div>
+      <div class="ai-feature">
+        <div class="ai-icon">🗺️</div>
+        <h3 class="ai-feature-title">行程规划</h3>
+        <p>根据兴趣定制个性化文旅路线与活动推荐</p>
       </div>
-      
-      <!-- XR云展厅 -->
-      <div class="showcase-panel">
-        <div class="xr-showroom scroll-fade">
-          <div class="xr-header">
-            <h3>江西非遗数字展厅</h3>
-            <div class="xr-controls">
-              <button class="xr-btn"><i class="icon-vr"></i> VR模式</button>
-              <button class="xr-btn"><i class="icon-ar"></i> AR体验</button>
-            </div>
-          </div>
-          <div class="webgl-container">
-            <div class="xr-placeholder">
-              <img src="assets/images/xr-preview.jpg" alt="XR云展厅预览">
-              <div class="xr-loading">
-                <div class="tea-leaf"></div>
-                <span>加载中 78%</span>
-              </div>
-            </div>
-            <div class="xr-exhibits">
-              <div class="exhibit-item active">
-                <div class="exhibit-icon" style="background-image:url('assets/images/exhibit-1.jpg')"></div>
-                <span>景德镇瓷器</span>
-              </div>
-              <div class="exhibit-item">
-                <div class="exhibit-icon" style="background-image:url('assets/images/exhibit-2.jpg')"></div>
-                <span>赣绣工艺</span>
-              </div>
-              <div class="exhibit-item">
-                <div class="exhibit-icon" style="background-image:url('assets/images/exhibit-3.jpg')"></div>
-                <span>客家围屋</span>
-              </div>
-            </div>
-            <button class="enter-btn gold-button">
-              <span>进入展厅</span>
-              <div class="gold-effect"></div>
-            </button>
-          </div>
-        </div>
+      <div class="ai-feature">
+        <div class="ai-icon">🎨</div>
+        <h3 class="ai-feature-title">创意辅助</h3>
+        <p>提供文创设计灵感与赣派元素数字化素材</p>
       </div>
     </div>
-  </section>
+  </div>
+</section>
 
-  <!-- 协会智能体 -->
-  <section class="ai-agent-section">
-    <div class="section-cloud-bg"></div>
-    <div class="section-header">
-      <h2><i class="icon-ai"></i> <span class="title-ink">协会智能体</span></h2>
+<!-- 页脚 -->
+<footer class="footer">
+  <div class="footer-grid">
+    <div class="footer-col">
+      <h3>关于协会</h3>
+      <ul class="footer-links">
+        <li><a href="#">协会简介</a></li>
+        <li><a href="#">组织架构</a></li>
+        <li><a href="#">发展历程</a></li>
+        <li><a href="#">联系我们</a></li>
+      </ul>
     </div>
-    
-    <div class="ai-agent-grid">
-      <!-- AI客服 -->
-      <div class="ai-card chatbot-card scroll-fade">
-        <div class="card-header">
-          <div class="title-container">
-            <i class="icon-chatbot"></i>
-            <h3>AI客服</h3>
-          </div>
-          <span class="online-status">在线</span>
-          <div class="ink-splash"></div>
-        </div>
-        <div class="card-content">
-          <div class="chat-preview">
-            <div class="chat-message ai-message">
-              <div class="message-avatar">
-                <img src="assets/images/ai-avatar.jpg" alt="AI客服">
-                <div class="wave-animation"></div>
-              </div>
-              <div class="message-content">
-                <p>您好,我是赣鄱文旅AI助手,有什么可以帮您?</p>
-                <div class="message-time">10:25</div>
-              </div>
-            </div>
-            <div class="quick-questions">
-              <button class="quick-question">会员如何注册?</button>
-              <button class="quick-question">近期有哪些活动?</button>
-              <button class="quick-question">项目申报流程</button>
-            </div>
-          </div>
-          <button class="chat-btn ink-button">
-            <i class="icon-ink-brush"></i>
-            <span>开始咨询</span>
-          </button>
-        </div>
-      </div>
-      
-      <!-- 数据看板 -->
-      <div class="ai-card dashboard-card scroll-fade">
-        <div class="card-header">
-          <div class="title-container">
-            <i class="icon-dashboard"></i>
-            <h3>数据看板</h3>
-          </div>
-          <span class="update-time">实时更新</span>
-          <div class="ink-splash"></div>
-        </div>
-        <div class="card-content">
-          <div class="stats-grid">
-            <div class="stat-item">
-              <div class="stat-icon"><i class="icon-member"></i></div>
-              <div class="stat-value">1,286</div>
-              <div class="stat-label">会员单位</div>
-              <div class="mini-echarts" #memberChart></div>
-            </div>
-            <div class="stat-item">
-              <div class="stat-icon"><i class="icon-project"></i></div>
-              <div class="stat-value">328</div>
-              <div class="stat-label">在营项目</div>
-              <div class="mini-echarts" #projectChart></div>
-            </div>
-            <div class="stat-item">
-              <div class="stat-icon"><i class="icon-resource"></i></div>
-              <div class="stat-value">5,642</div>
-              <div class="stat-label">资源对接</div>
-              <div class="mini-echarts" #resourceChart></div>
-            </div>
-          </div>
-          <div class="data-timeline">
-            <div class="echarts-container" #timelineChart></div>
-          </div>
-        </div>
-      </div>
+    <div class="footer-col">
+      <h3>会员服务</h3>
+      <ul class="footer-links">
+        <li><a href="#">会员权益</a></li>
+        <li><a href="#">入会申请</a></li>
+        <li><a href="#">会员动态</a></li>
+        <li><a href="#">资源中心</a></li>
+      </ul>
     </div>
-  </section>
-
-    <!-- 新增的页脚部分 -->
-  <footer class="footer">
-    <div class="footer-container">
-      <div class="footer-grid">
-        <div class="footer-col">
-          <h3>关于协会</h3>
-          <ul class="footer-links">
-            <li><a href="#">协会简介</a></li>
-            <li><a href="#">组织架构</a></li>
-            <li><a href="#">发展历程</a></li>
-            <li><a href="#">联系我们</a></li>
-          </ul>
-        </div>
-        <div class="footer-col">
-          <h3>会员服务</h3>
-          <ul class="footer-links">
-            <li><a href="#">会员权益</a></li>
-            <li><a href="#">入会申请</a></li>
-            <li><a href="#">会员动态</a></li>
-            <li><a href="#">资源中心</a></li>
-          </ul>
-        </div>
-        <div class="footer-col">
-          <h3>项目合作</h3>
-          <ul class="footer-links">
-            <li><a href="#">共创计划</a></li>
-            <li><a href="#">技术支持</a></li>
-            <li><a href="#">案例展示</a></li>
-            <li><a href="#">合作申请</a></li>
-          </ul>
-        </div>
-        <div class="footer-col">
-          <h3>关注我们</h3>
-          <ul class="footer-links">
-            <li><a href="#">微信公众号</a></li>
-            <li><a href="#">微博</a></li>
-            <li><a href="#">抖音</a></li>
-            <li><a href="#">Bilibili</a></li>
-          </ul>
-        </div>
-      </div>
-      <div class="footer-bottom">
-        <p>© 2023 江西省文化和旅游研究推广协会 | 赣ICP备XXXXXXXX号 | 设计遵循"三色映赣鄱,水墨链古今"理念</p>
-      </div>
+    <div class="footer-col">
+      <h3>项目合作</h3>
+      <ul class="footer-links">
+        <li><a href="#">共创计划</a></li>
+        <li><a href="#">技术支持</a></li>
+        <li><a href="#">案例展示</a></li>
+        <li><a href="#">合作申请</a></li>
+      </ul>
     </div>
-  </footer>
-
-  <!-- 水墨过渡效果 -->
-  <div class="ink-transition"></div>
-</div>
+    <div class="footer-col">
+      <h3>关注我们</h3>
+      <ul class="footer-links">
+        <li><a href="#">微信公众号</a></li>
+        <li><a href="#">微博</a></li>
+        <li><a href="#">抖音</a></li>
+        <li><a href="#">Bilibili</a></li>
+      </ul>
+    </div>
+  </div>
+  <div class="footer-bottom">
+    <p>© 2023 江西省文化和旅游研究推广协会 | 赣ICP备XXXXXXXX号 | 设计遵循"三色映赣鄱,水墨链古今"理念</p>
+  </div>
+</footer>

+ 326 - 1782
travel-platform-web/travel-web/src/crm/mobile/page-crm-home/page-crm-home.scss

@@ -1,1863 +1,407 @@
-/* 基础样式与水墨效果 */
-.crm-home {
-  font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
-  color: #333;
-  padding-bottom: 40px;
-  position: relative;
-  background-color: #f9f5f0;
-  //  background-image: url('../src/assets/images/paper-texture.webp');
-  background-attachment: fixed;
-}
-
-.ink-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  pointer-events: none;
-  z-index: 0;
-  opacity: 0.1;
-}
-
-.ink-particle {
-  position: absolute;
-  width: 300px;
-  height: 300px;
-  background: radial-gradient(circle, rgba(47,125,173,0.3) 0%, rgba(255,255,255,0) 70%);
-  border-radius: 50%;
-  filter: blur(10px);
-  animation: float 15s infinite ease-in-out;
-  
-  &:nth-child(2) {
-    animation-delay: 5s;
-    background: radial-gradient(circle, rgba(91,140,90,0.3) 0%, rgba(255,255,255,0) 70%);
+/* 全局样式 */
+:host {
+  * {
+    margin: 0;
+    padding: 0;
+    box-sizing: border-box;
+    font-family: "阿里巴巴普惠体", sans-serif;
   }
   
-  &:nth-child(3) {
-    animation-delay: 8s;
-    background: radial-gradient(circle, rgba(212,177,106,0.3) 0%, rgba(255,255,255,0) 70%);
+  body {
+    background-color: #f8f4e8;
+    background-image: url('/assets/images/paper-texture.webp');
+    color: #333;
+    line-height: 1.6;
   }
 }
 
-@keyframes float {
-  0%, 100% { transform: translate(0, 0); }
-  25% { transform: translate(20px, 20px); }
-  50% { transform: translate(-20px, 10px); }
-  75% { transform: translate(10px, -20px); }
+/* 自定义字体 - 修正路径 */
+@font-face {
+  font-family: "赣锋体";
+  src: url('/assets/fonts/ganfeng.ttf') format('truetype');
+  font-weight: normal;
+  font-style: normal;
 }
 
-/* 区块背景 */
-.section-mountain-bg {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  // background: url('assets/images/mountain-silhouette.png') bottom center repeat-x;
-  opacity: 0.05;
-  z-index: 0;
+/* 主色调定义 */
+:root {
+  --primary-blue: #2F7DAD;  /* 天青瓷 */
+  --primary-green: #5B8C5A; /* 香樟绿 */
+  --primary-gold: #D4B16A; /* 庐金 */
+  --secondary-gray: #6D6D6D; /* 婺源黛瓦灰 */
+  --secondary-red: #C53D43;  /* 井冈山鹃红 */
+  --secondary-white: #F0F0F0; /* 鄱阳湖银白 */
 }
 
-.section-water-bg {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  // background: url('assets/images/water-ink.png') center no-repeat;
-  opacity: 0.08;
-  z-index: 0;
-}
-
-.section-rice-bg {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  // background: url('assets/images/rice-pattern.png') center repeat;
-  opacity: 0.1;
-  z-index: 0;
-}
-
-.section-cloud-bg {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  // background: url('assets/images/cloud-ink.png') center no-repeat;
-  opacity: 0.08;
-  z-index: 0;
-}
-
-/* 标题样式 */
-.section-header {
+/* 智能Banner区域 */
+.banner {
+  height: 500px;
   position: relative;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin: 40px 5% 25px;
-  padding-bottom: 15px;
-  z-index: 1;
+  overflow: hidden;
+  background: linear-gradient(to bottom, #f8f4e8, #e8e0d0);
   
-  h2 {
-    font-size: 1.8rem;
-    color: #2F7DAD;
-    display: flex;
-    align-items: center;
+  .banner-content {
+    position: absolute;
+    top: 50%;
+    left: 10%;
+    transform: translateY(-50%);
+    z-index: 3;
+    max-width: 40%;
+  }
+  
+  .banner-title {
     font-family: "赣锋体", serif;
-    text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
-    
-    i {
-      margin-right: 12px;
-      color: #D4B16A;
-      font-size: 1.5rem;
-    }
+    font-size: 3rem;
+    color: var(--primary-blue);
+    margin-bottom: 1rem;
+    text-shadow: 2px 2px 4px rgba(0,0,0,0.1);
   }
   
-  .title-ink {
-    position: relative;
-    
-    &::after {
-      content: "";
-      position: absolute;
-      bottom: -5px;
-      left: 0;
-      width: 100%;
-      height: 3px;
-      background: linear-gradient(90deg, #2F7DAD, #5B8C5A);
-      border-radius: 3px;
-    }
+  .banner-subtitle {
+    font-size: 1.2rem;
+    color: var(--secondary-gray);
+    margin-bottom: 2rem;
+    line-height: 1.8;
   }
-}
-
-.more-link {
-  color: #5B8C5A;
-  text-decoration: none;
-  font-size: 0.95rem;
-  display: flex;
-  align-items: center;
-  transition: all 0.3s;
   
-  &:hover {
-    color: #2F7DAD;
+  .banner-btn {
+    display: inline-block;
+    padding: 0.8rem 2rem;
+    background-color: var(--primary-gold);
+    color: white;
+    text-decoration: none;
+    border-radius: 30px;
+    font-weight: bold;
+    transition: all 0.3s ease;
+    box-shadow: 0 4px 8px rgba(0,0,0,0.1);
     
-    i {
-      transform: translateX(3px);
+    &:hover {
+      background-color: #c9a055;
+      transform: translateY(-3px);
+      box-shadow: 0 6px 12px rgba(0,0,0,0.15);
     }
   }
   
-  i {
-    margin-left: 5px;
-    transition: all 0.3s;
-  }
-}
-
-/* 水墨按钮样式 */
-.ink-button {
-  position: relative;
-  background: none;
-  border: none;
-  color: #2F7DAD;
-  padding: 8px 15px;
-  font-size: 0.9rem;
-  cursor: pointer;
-  overflow: hidden;
-  display: inline-flex;
-  align-items: center;
-  transition: all 0.3s;
-  
-  &::before {
-    content: "";
+  .banner-bg {
     position: absolute;
-    bottom: 0;
-    left: 0;
-    width: 100%;
-    height: 1px;
-    background: #D4B16A;
-    transform: scaleX(0);
-    transform-origin: right;
-    transition: transform 0.3s;
-  }
-  
-  &:hover {
-    color: #5B8C5A;
-    
-    &::before {
-      transform: scaleX(1);
-      transform-origin: left;
-    }
+    top: 0;
+    right: 0;
+    height: 100%;
+    width: 60%;
+    background: url('/assets/images/jiangxi-landscape.webp') center right no-repeat;
+    background-size: contain;
+    opacity: 0.9;
     
-    i {
-      transform: translateX(3px);
+    &::after {
+      content: "";
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      background: radial-gradient(circle at 70% 50%, transparent 30%, rgba(248,244,232,0.8));
     }
   }
-  
-  i {
-    margin-left: 5px;
-    transition: all 0.3s;
-  }
-}
-
-/* 智能Banner系统 */
-.banner-section {
-  position: relative;
-  padding: 30px 0 40px;
-  background: linear-gradient(135deg, rgba(245,247,250,0.8) 0%, rgba(195,207,226,0.6) 100%);
-  overflow: hidden;
-}
-
-.banner-container {
-  max-width: 1200px;
-  margin: 0 auto;
-  padding: 0 5%;
-  position: relative;
-  z-index: 2;
 }
 
-.carousel {
-  position: relative;
-  border-radius: 12px;
-  overflow: hidden;
-  box-shadow: 0 8px 25px rgba(0,0,0,0.15);
-  height: 350px;
-}
-
-.carousel-inner {
-  height: 100%;
+/* 数智动态区 */
+.dynamic-section {
+  padding: 4rem 10%;
+  background-color: white;
   position: relative;
-}
-
-.carousel-item {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  background-size: cover;
-  background-position: center;
-  opacity: 0;
-  transition: opacity 1s ease;
   
-  &.active {
-    opacity: 1;
-  }
-}
-
-.ink-overlay {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  background: linear-gradient(90deg, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.1) 100%);
-}
-
-.carousel-caption {
-  position: absolute;
-  bottom: 80px;
-  left: 60px;
-  color: white;
-  text-shadow: 2px 2px 5px rgba(0,0,0,0.5);
-  max-width: 600px;
-  
-  h3 {
-    font-size: 2.5rem;
-    margin-bottom: 15px;
+  .section-title {
     font-family: "赣锋体", serif;
+    font-size: 2.2rem;
+    color: var(--primary-blue);
+    text-align: center;
+    margin-bottom: 3rem;
     position: relative;
-    display: inline-block;
     
-    &::before {
-      content: attr(data-text);
-      position: absolute;
-      top: 0;
-      left: 0;
-      color: transparent;
-      -webkit-text-stroke: 1px white;
-      z-index: 1;
+    &::after {
+      content: "";
+      display: block;
+      width: 80px;
+      height: 3px;
+      background: linear-gradient(to right, var(--primary-blue), var(--primary-green));
+      margin: 1rem auto 0;
     }
   }
   
-  p {
-    font-size: 1.3rem;
-    margin-bottom: 20px;
-  }
-}
-
-.brush-stroke {
-  position: absolute;
-  bottom: -15px;
-  left: 0;
-  width: 150px;
-  height: 8px;
-  background: #D4B16A;
-  border-radius: 4px;
-  opacity: 0.8;
-}
-
-.carousel-control {
-  position: absolute;
-  top: 50%;
-  transform: translateY(-50%);
-  background: rgba(255,255,255,0.3);
-  border: none;
-  width: 50px;
-  height: 50px;
-  border-radius: 50%;
-  color: white;
-  font-size: 1.5rem;
-  cursor: pointer;
-  transition: all 0.3s;
-  z-index: 3;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  backdrop-filter: blur(5px);
-  
-  &:hover {
-    background: rgba(255,255,255,0.5);
-    transform: translateY(-50%) scale(1.1);
-  }
-  
-  &.prev {
-    left: 30px;
-  }
-  
-  &.next {
-    right: 30px;
-  }
-}
-
-.carousel-indicators {
-  position: absolute;
-  bottom: 20px;
-  left: 50%;
-  transform: translateX(-50%);
-  display: flex;
-  gap: 10px;
-  z-index: 3;
-  
-  span {
-    width: 12px;
-    height: 12px;
-    border-radius: 50%;
-    background: rgba(255,255,255,0.5);
-    cursor: pointer;
-    transition: all 0.3s;
+  .dynamic-grid {
+    display: grid;
+    grid-template-columns: repeat(3, 1fr);
+    gap: 2rem;
     
-    &.active {
-      background: #D4B16A;
-      transform: scale(1.2);
+    .dynamic-card {
+      background-color: white;
+      border-radius: 8px;
+      overflow: hidden;
+      box-shadow: 0 4px 12px rgba(0,0,0,0.08);
+      transition: all 0.3s ease;
+      position: relative;
+      
+      &:hover {
+        transform: translateY(-10px);
+        box-shadow: 0 12px 24px rgba(0,0,0,0.12);
+      }
+      
+      .card-img {
+        height: 200px;
+        background-size: cover;
+        background-position: center;
+        position: relative;
+        
+        &::after {
+          content: "";
+          position: absolute;
+          top: 0;
+          left: 0;
+          right: 0;
+          bottom: 0;
+          background: linear-gradient(to bottom, transparent 60%, rgba(0,0,0,0.6));
+        }
+      }
+      
+      .card-content {
+        padding: 1.5rem;
+        
+        .card-title {
+          font-size: 1.3rem;
+          color: var(--primary-blue);
+          margin-bottom: 0.8rem;
+        }
+        
+        .card-desc {
+          color: var(--secondary-gray);
+          margin-bottom: 1.5rem;
+          font-size: 0.95rem;
+        }
+        
+        .card-link {
+          display: inline-block;
+          color: var(--primary-gold);
+          text-decoration: none;
+          font-weight: bold;
+          position: relative;
+          
+          &::after {
+            content: "";
+            position: absolute;
+            bottom: -2px;
+            left: 0;
+            width: 100%;
+            height: 1px;
+            background-color: var(--primary-gold);
+            transition: transform 0.3s ease;
+            transform-origin: right;
+            transform: scaleX(0);
+          }
+          
+          &:hover::after {
+            transform-origin: left;
+            transform: scaleX(1);
+          }
+        }
+      }
     }
   }
 }
 
-/* 快速入口 */
-.quick-access {
-  display: flex;
-  justify-content: center;
-  margin-top: 30px;
-  gap: 25px;
-}
-
-.quick-item {
+/* 共创展示区 */
+.co-creation-section {
+  padding: 4rem 10%;
+  background-color: #f5f9f5;
   position: relative;
-  width: 120px;
-  height: 120px;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  cursor: pointer;
-  transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-  
-  i {
-    font-size: 2.5rem;
-    color: white;
-    margin-bottom: 10px;
-    transition: all 0.3s;
-    position: relative;
-    z-index: 2;
-  }
   
-  span {
-    font-size: 1rem;
-    color: white;
-    position: relative;
-    z-index: 2;
-    text-align: center;
-    transition: all 0.3s;
+  .co-creation-slider {
+    display: flex;
+    gap: 2rem;
+    overflow-x: auto;
+    padding: 1rem 0;
+    scroll-snap-type: x mandatory;
+    
+    .co-creation-item {
+      min-width: 300px;
+      scroll-snap-align: start;
+      background-color: white;
+      border-radius: 8px;
+      overflow: hidden;
+      box-shadow: 0 4px 12px rgba(0,0,0,0.08);
+      
+      .cc-img {
+        height: 180px;
+        background-size: cover;
+        background-position: center;
+      }
+      
+      .cc-content {
+        padding: 1.5rem;
+        
+        .cc-title {
+          font-size: 1.2rem;
+          color: var(--primary-green);
+          margin-bottom: 0.5rem;
+        }
+        
+        .cc-author {
+          color: var(--secondary-gray);
+          font-size: 0.9rem;
+          margin-bottom: 1rem;
+        }
+      }
+    }
   }
 }
 
-.ceramic-disk {
-  &::before {
-    content: "";
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-    background: linear-gradient(135deg, #2F7DAD, #5B8C5A);
-    border-radius: 50%;
-    z-index: 1;
-    transition: all 0.5s;
-  }
+/* 协会智能体 */
+.ai-section {
+  padding: 4rem 10%;
+  background: linear-gradient(135deg, var(--primary-blue), var(--primary-green));
+  color: white;
+  text-align: center;
   
-  &:hover {
-    transform: translateY(-10px) rotate(5deg);
+  .ai-container {
+    max-width: 800px;
+    margin: 0 auto;
     
-    &::before {
-      transform: scale(1.05);
-      box-shadow: 0 10px 25px rgba(47,125,173,0.4);
+    .ai-title {
+      font-family: "赣锋体", serif;
+      font-size: 2.5rem;
+      margin-bottom: 1.5rem;
     }
     
-    .disk-border {
-      opacity: 0.8;
-    }
-    
-    i {
-      transform: scale(1.1);
+    .ai-desc {
+      margin-bottom: 2rem;
+      font-size: 1.1rem;
+      line-height: 1.8;
     }
-  }
-}
-
-.disk-border {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  border-radius: 50%;
-  border: 2px solid rgba(212,177,106,0.5);
-  opacity: 0;
-  transition: all 0.5s;
-  z-index: 2;
-}
-
-.disk-shadow {
-  position: absolute;
-  bottom: -10px;
-  left: 10%;
-  width: 80%;
-  height: 20px;
-  background: radial-gradient(ellipse at center, rgba(0,0,0,0.4) 0%, rgba(0,0,0,0) 80%);
-  filter: blur(5px);
-  z-index: 0;
-  transition: all 0.5s;
-}
-
-/* 数智动态区 */
-.dynamic-section {
-  position: relative;
-  padding: 40px 0;
-  background: rgba(255,255,255,0.7);
-  backdrop-filter: blur(5px);
-  margin: 30px 0;
-  border-top: 1px solid rgba(212,177,106,0.2);
-  border-bottom: 1px solid rgba(212,177,106,0.2);
-}
-
-.dynamic-grid {
-  display: grid;
-  grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
-  gap: 25px;
-  margin: 0 5%;
-  position: relative;
-  z-index: 1;
-}
-
-.dynamic-card {
-  background: white;
-  border-radius: 12px;
-  overflow: hidden;
-  box-shadow: 0 5px 20px rgba(0,0,0,0.08);
-  transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.1);
-  position: relative;
-  border: 1px solid rgba(212,177,106,0.1);
-  
-  &:hover {
-    transform: translateY(-10px);
-    box-shadow: 0 15px 30px rgba(0,0,0,0.15);
     
-    .card-header {
-      background-size: 120%;
+    .ai-features {
+      display: grid;
+      grid-template-columns: repeat(3, 1fr);
+      gap: 2rem;
+      margin-top: 3rem;
+      
+      .ai-feature {
+        background-color: rgba(255,255,255,0.1);
+        padding: 1.5rem;
+        border-radius: 8px;
+        backdrop-filter: blur(5px);
+        transition: all 0.3s ease;
+        
+        &:hover {
+          background-color: rgba(255,255,255,0.2);
+          transform: translateY(-5px);
+        }
+        
+        .ai-icon {
+          font-size: 2.5rem;
+          margin-bottom: 1rem;
+          color: var(--primary-gold);
+        }
+        
+        .ai-feature-title {
+          font-size: 1.2rem;
+          margin-bottom: 0.5rem;
+        }
+      }
     }
   }
 }
 
-.scroll-fade {
-  opacity: 0;
-  transform: translateY(30px);
-  transition: all 0.6s ease-out;
-  
-  &.visible {
-    opacity: 1;
-    transform: translateY(0);
-  }
-}
-
-.card-header {
-  padding: 18px 25px;
-  background: linear-gradient(90deg, #2F7DAD, #5B8C5A);
+/* 页脚 */
+.footer {
+  background-color: #2a2a2a;
   color: white;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  position: relative;
-  overflow: hidden;
-  transition: all 0.5s;
-  
-  h3 {
-    margin: 0;
-    font-size: 1.3rem;
-    display: flex;
-    align-items: center;
-    position: relative;
-    z-index: 2;
-  }
-  
-  i {
-    margin-right: 10px;
-    font-size: 1.3rem;
-  }
-}
-
-.title-container {
-  display: flex;
-  align-items: center;
-}
-
-.ink-splash {
-  position: absolute;
-  top: -50px;
-  right: -50px;
-  width: 150px;
-  height: 150px;
-  background: radial-gradient(circle, rgba(212,177,106,0.3) 0%, rgba(212,177,106,0) 70%);
-  border-radius: 50%;
-  z-index: 1;
-}
-
-.tag {
-  padding: 5px 10px;
-  border-radius: 20px;
-  font-size: 0.75rem;
-  font-weight: bold;
-  position: relative;
-  z-index: 2;
+  padding: 4rem 10% 2rem;
   
-  &.ai-tag {
-    background: rgba(227,242,253,0.9);
-    color: #1976D2;
-  }
-  
-  &.blockchain-tag {
-    background: rgba(232,245,233,0.9);
-    color: #388E3C;
+  .footer-grid {
+    display: grid;
+    grid-template-columns: repeat(4, 1fr);
+    gap: 3rem;
+    margin-bottom: 3rem;
+    
+    .footer-col {
+      h3 {
+        font-size: 1.3rem;
+        margin-bottom: 1.5rem;
+        color: var(--primary-gold);
+      }
+      
+      .footer-links {
+        list-style: none;
+        
+        li {
+          margin-bottom: 0.8rem;
+          
+          a {
+            color: #ccc;
+            text-decoration: none;
+            transition: color 0.3s ease;
+            
+            &:hover {
+              color: var(--primary-gold);
+            }
+          }
+        }
+      }
+    }
   }
   
-  &.kg-tag {
-    background: rgba(243,229,245,0.9);
-    color: #8E24AA;
+  .footer-bottom {
+    text-align: center;
+    padding-top: 2rem;
+    border-top: 1px solid #444;
+    color: #999;
+    font-size: 0.9rem;
   }
 }
 
-.card-content {
-  padding: 20px 25px;
-}
-
-/* 新闻动态卡片 */
-.news-list {
-  list-style: none;
-  padding: 0;
-  margin: 0 0 20px;
-}
-
-.news-item {
-  padding: 12px 0;
-  border-bottom: 1px solid #eee;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  transition: all 0.3s;
-  
-  &:last-child {
-    border-bottom: none;
+/* 响应式设计 */
+@media (max-width: 1024px) {
+  .dynamic-grid {
+    grid-template-columns: repeat(2, 1fr) !important;
   }
   
-  &:hover {
-    background: rgba(245,247,250,0.5);
-    
-    .news-title {
-      color: #2F7DAD;
-    }
-    
-    .news-dot {
-      transform: scale(1.2);
-      background: #D4B16A;
-    }
+  .ai-features {
+    grid-template-columns: repeat(2, 1fr) !important;
   }
-}
-
-.news-dot {
-  width: 8px;
-  height: 8px;
-  border-radius: 50%;
-  background: #5B8C5A;
-  margin-right: 12px;
-  transition: all 0.3s;
-}
-
-.news-title {
-  flex: 1;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  font-size: 0.95rem;
-  transition: all 0.3s;
-}
-
-.news-date {
-  color: #888;
-  margin-left: 10px;
-  font-size: 0.85rem;
-  min-width: 50px;
-  text-align: right;
-}
-
-.news-chart {
-  height: 180px;
-  margin-top: 15px;
-  position: relative;
   
-  .echarts-container {
-    width: 100%;
-    height: 100%;
+  .footer-grid {
+    grid-template-columns: repeat(2, 1fr) !important;
   }
 }
 
-/* 文件传达卡片 */
-.document-item {
-  display: flex;
-  align-items: center;
-  padding: 12px 0;
-  cursor: pointer;
-  transition: all 0.3s;
-  
-  &:hover {
-    background: rgba(245,247,250,0.5);
+@media (max-width: 768px) {
+  .banner {
+    height: auto !important;
+    padding: 3rem 1rem !important;
     
-    .document-title {
-      color: #2F7DAD;
+    .banner-content {
+      position: static !important;
+      transform: none !important;
+      max-width: 100% !important;
+      text-align: center !important;
     }
     
-    .gold-border {
-      opacity: 1;
-      transform: scale(1.05);
+    .banner-bg {
+      position: relative !important;
+      width: 100% !important;
+      height: 300px !important;
+      margin-top: 2rem !important;
     }
   }
-}
-
-.document-icon {
-  width: 40px;
-  height: 40px;
-  border-radius: 8px;
-  background: #f5f5f5;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  margin-right: 15px;
-  position: relative;
-  
-  i {
-    color: #D4B16A;
-    font-size: 1.3rem;
-  }
-}
-
-.gold-border {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  border: 1px solid #D4B16A;
-  border-radius: 8px;
-  opacity: 0;
-  transition: all 0.3s;
-}
-
-.document-info {
-  flex: 1;
-  min-width: 0;
-}
-
-.document-title {
-  display: block;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  font-size: 0.95rem;
-  margin-bottom: 3px;
-  transition: all 0.3s;
-}
-
-.document-meta {
-  display: flex;
-  font-size: 0.8rem;
-  color: #888;
-  
-  .document-size {
-    margin-right: 10px;
-  }
-  
-  .document-hash {
-    font-family: monospace;
-    background: #f5f5f5;
-    padding: 2px 5px;
-    border-radius: 3px;
-  }
-}
-
-.blockchain-visual {
-  height: 150px;
-  margin-top: 15px;
-  background: #f9f9f9;
-  border-radius: 8px;
-  overflow: hidden;
-  
-  .echarts-container {
-    width: 100%;
-    height: 100%;
-  }
-}
-
-/* 学术前沿卡片 */
-.knowledge-poem {
-  text-align: center;
-  margin-bottom: 20px;
-  font-family: "赣锋体", serif;
-  
-  .poem-line {
-    font-size: 1.3rem;
-    color: #2F7DAD;
-    margin: 5px 0;
-    line-height: 1.6;
-  }
   
-  .poem-author {
-    font-size: 0.9rem;
-    color: #888;
-    margin-top: 10px;
-    font-style: italic;
-  }
-}
-
-.knowledge-graph {
-  height: 250px;
-  position: relative;
-  
-  .echarts-container {
-    width: 100%;
-    height: 100%;
+  .dynamic-grid {
+    grid-template-columns: 1fr !important;
   }
-}
-
-.graph-legend {
-  position: absolute;
-  bottom: 10px;
-  left: 10px;
-  display: flex;
-  gap: 15px;
-  background: rgba(255,255,255,0.8);
-  padding: 5px 10px;
-  border-radius: 20px;
-  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
   
-  .legend-item {
-    font-size: 0.8rem;
-    color: #555;
-    display: flex;
-    align-items: center;
-  }
-  
-  .legend-dot {
-    width: 10px;
-    height: 10px;
-    border-radius: 50%;
-    margin-right: 5px;
-    
-    &.cultural {
-      background: #2F7DAD;
-    }
-    
-    &.scenic {
-      background: #5B8C5A;
-    }
-    
-    &.figure {
-      background: #D4B16A;
-    }
-  }
-}
-
-/* 共创展示区 */
-.showcase-section {
-  position: relative;
-  padding: 40px 0;
-  background: rgba(249,245,240,0.7);
-  backdrop-filter: blur(3px);
-}
-
-.showcase-tabs {
-  display: flex;
-  margin: 0 5% 25px;
-  border-bottom: 1px solid rgba(212,177,106,0.3);
-  position: relative;
-  z-index: 1;
-}
-
-.tab-btn {
-  padding: 12px 25px;
-  background: none;
-  border: none;
-  position: relative;
-  cursor: pointer;
-  font-size: 1rem;
-  color: #666;
-  transition: all 0.3s;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  
-  &.active {
-    color: #2F7DAD;
-    
-    .tab-ink {
-      transform: translateY(0);
-    }
-    
-    .ink-underline {
-      width: 100%;
-      opacity: 1;
-    }
-  }
-}
-
-.ink-tab {
-  overflow: hidden;
-  
-  .tab-ink {
-    display: inline-block;
-    transition: all 0.3s;
-    transform: translateY(100%);
-  }
-  
-  .ink-underline {
-    width: 0;
-    height: 3px;
-    background: #D4B16A;
-    border-radius: 3px;
-    margin-top: 5px;
-    opacity: 0;
-    transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-  }
-}
-
-.showcase-content {
-  margin: 0 5%;
-}
-
-.showcase-panel {
-  display: none;
-  
-  &.active {
-    display: block;
-    animation: fadeIn 0.5s ease-out;
-  }
-}
-
-@keyframes fadeIn {
-  from { opacity: 0; transform: translateY(20px); }
-  to { opacity: 1; transform: translateY(0); }
-}
-
-/* 数字文创展廊 */
-.aigc-gallery {
-  display: grid;
-  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
-  gap: 25px;
-}
-
-.gallery-item {
-  position: relative;
-  border-radius: 12px;
-  overflow: hidden;
-  box-shadow: 0 5px 15px rgba(0,0,0,0.1);
-  transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.1);
-  height: 350px;
-  
-  &:hover {
-    transform: translateY(-10px);
-    box-shadow: 0 15px 30px rgba(0,0,0,0.2);
-    
-    .gallery-caption {
-      transform: translateY(0);
-    }
-    
-    .gallery-view {
-      opacity: 1;
-      transform: translateY(0);
-    }
-    
-    .gallery-ink {
-      opacity: 0.3;
-    }
-  }
-}
-
-.gallery-ink {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  background: radial-gradient(circle at center, rgba(47,125,173,0.5) 0%, rgba(47,125,173,0) 70%);
-  opacity: 0;
-  transition: all 0.5s;
-  z-index: 1;
-}
-
-.gallery-item img {
-  width: 100%;
-  height: 100%;
-  object-fit: cover;
-  display: block;
-}
-
-.gallery-caption {
-  position: absolute;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  background: linear-gradient(to top, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0) 100%);
-  color: white;
-  padding: 20px;
-  transform: translateY(30px);
-  transition: all 0.5s;
-  z-index: 2;
-  
-  h4 {
-    margin: 0 0 5px;
-    font-size: 1.3rem;
-  }
-  
-  p {
-    margin: 0;
-    font-size: 0.9rem;
-    color: rgba(255,255,255,0.8);
-  }
-}
-
-.caption-border {
-  position: absolute;
-  bottom: 15px;
-  left: 20px;
-  width: 50px;
-  height: 2px;
-  background: #D4B16A;
-}
-
-.gallery-view {
-  position: absolute;
-  top: 20px;
-  right: 20px;
-  background: rgba(212,177,106,0.9);
-  color: white;
-  border: none;
-  padding: 8px 15px;
-  border-radius: 20px;
-  font-size: 0.9rem;
-  cursor: pointer;
-  opacity: 0;
-  transform: translateY(-20px);
-  transition: all 0.5s;
-  z-index: 3;
-  display: flex;
-  align-items: center;
-  
-  &:hover {
-    background: #2F7DAD;
-  }
-  
-  i {
-    margin-left: 5px;
-  }
-}
-
-/* 文旅IP孵化榜 */
-.ip-ranking {
-  background: white;
-  border-radius: 12px;
-  padding: 25px;
-  box-shadow: 0 5px 20px rgba(0,0,0,0.08);
-}
-
-.ip-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 20px;
-  
-  h3 {
-    margin: 0;
-    color: #2F7DAD;
-    font-size: 1.4rem;
-  }
-}
-
-.ip-filter {
-  display: flex;
-  gap: 10px;
-  
-  span {
-    padding: 5px 12px;
-    border-radius: 15px;
-    font-size: 0.85rem;
-    cursor: pointer;
-    transition: all 0.3s;
-    
-    &.filter-active {
-      background: #5B8C5A;
-      color: white;
-    }
-    
-    &:not(.filter-active):hover {
-      background: #f5f5f5;
-      color: #2F7DAD;
-    }
-  }
-}
-
-.ip-list {
-  margin-bottom: 25px;
-}
-
-.ip-item {
-  display: flex;
-  align-items: center;
-  padding: 15px 0;
-  border-bottom: 1px solid #eee;
-  
-  &:last-child {
-    border-bottom: none;
-  }
-}
-
-.ip-rank {
-  width: 30px;
-  height: 30px;
-  background: #D4B16A;
-  color: white;
-  border-radius: 50%;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  margin-right: 15px;
-  font-weight: bold;
-  flex-shrink: 0;
-}
-
-.ip-avatar {
-  width: 50px;
-  height: 50px;
-  border-radius: 50%;
-  background-size: cover;
-  background-position: center;
-  margin-right: 15px;
-  border: 2px solid #f5f5f5;
-  flex-shrink: 0;
-}
-
-.ip-info {
-  flex: 1;
-  min-width: 0;
-  
-  h4 {
-    margin: 0 0 5px;
-    color: #2F7DAD;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-  }
-  
-  .ip-desc {
-    margin: 0;
-    color: #666;
-    font-size: 0.85rem;
-  }
-}
-
-.ip-stats {
-  display: flex;
-  gap: 15px;
-  margin-top: 8px;
-  
-  .stat-item {
-    display: flex;
-    align-items: center;
-    font-size: 0.8rem;
-    color: #888;
-    
-    i {
-      margin-right: 5px;
-      color: #5B8C5A;
-    }
-  }
-}
-
-.ip-chart {
-  width: 80px;
-  height: 40px;
-  flex-shrink: 0;
-  
-  .mini-echarts {
-    width: 100%;
-    height: 100%;
-  }
-}
-
-.ip-map {
-  height: 250px;
-  background: #f9f9f9;
-  border-radius: 8px;
-  overflow: hidden;
-  
-  .echarts-container {
-    width: 100%;
-    height: 100%;
-  }
-}
-
-/* XR云展厅 */
-.xr-showroom {
-  background: white;
-  border-radius: 12px;
-  padding: 25px;
-  box-shadow: 0 5px 20px rgba(0,0,0,0.08);
-}
-
-.xr-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 20px;
-  
-  h3 {
-    margin: 0;
-    color: #2F7DAD;
-    font-size: 1.4rem;
-  }
-}
-
-.xr-controls {
-  display: flex;
-  gap: 10px;
-}
-
-.xr-btn {
-  background: rgba(91,140,90,0.1);
-  border: 1px solid rgba(91,140,90,0.3);
-  color: #5B8C5A;
-  padding: 8px 15px;
-  border-radius: 20px;
-  font-size: 0.9rem;
-  cursor: pointer;
-  transition: all 0.3s;
-  display: flex;
-  align-items: center;
-  
-  &:hover {
-    background: rgba(91,140,90,0.2);
-  }
-  
-  i {
-    margin-right: 5px;
-  }
-}
-
-.webgl-container {
-  position: relative;
-  height: 400px;
-  background: #f5f5f5;
-  border-radius: 8px;
-  overflow: hidden;
-}
-
-.xr-placeholder {
-  width: 100%;
-  height: 100%;
-  position: relative;
-  
-  img {
-    width: 100%;
-    height: 100%;
-    object-fit: cover;
-  }
-}
-
-.xr-loading {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  transform: translate(-50%, -50%);
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  color: white;
-  text-shadow: 1px 1px 3px rgba(0,0,0,0.5);
-  
-  .tea-leaf {
-    width: 40px;
-    height: 40px;
-    // background: url('assets/images/tea-leaf.png') center no-repeat;
-    background-size: contain;
-    animation: float 2s infinite ease-in-out;
-    margin-bottom: 10px;
-  }
-}
-
-.xr-exhibits {
-  position: absolute;
-  bottom: 20px;
-  left: 20px;
-  display: flex;
-  gap: 10px;
-  z-index: 2;
-}
-
-.exhibit-item {
-  width: 60px;
-  height: 60px;
-  border-radius: 8px;
-  background: white;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  cursor: pointer;
-  transition: all 0.3s;
-  overflow: hidden;
-  position: relative;
-  
-  &.active {
-    box-shadow: 0 0 0 2px #D4B16A;
-    
-    &::after {
-      content: "";
-      position: absolute;
-      top: 0;
-      left: 0;
-      width: 100%;
-      height: 100%;
-      background: rgba(212,177,106,0.1);
-    }
-  }
-  
-  &:hover {
-    transform: translateY(-5px);
-  }
-}
-
-.exhibit-icon {
-  width: 40px;
-  height: 40px;
-  border-radius: 4px;
-  background-size: cover;
-  background-position: center;
-}
-
-.exhibit-item span {
-  font-size: 0.7rem;
-  margin-top: 2px;
-  color: #333;
-}
-
-.enter-btn {
-  position: absolute;
-  bottom: 30px;
-  left: 50%;
-  transform: translateX(-50%);
-  background: linear-gradient(to right, #2F7DAD, #5B8C5A);
-  color: white;
-  border: none;
-  padding: 12px 30px;
-  border-radius: 30px;
-  font-size: 1rem;
-  cursor: pointer;
-  transition: all 0.3s;
-  overflow: hidden;
-  z-index: 2;
-  display: flex;
-  align-items: center;
-  
-  &:hover {
-    transform: translateX(-50%) scale(1.05);
-    box-shadow: 0 5px 15px rgba(47,125,173,0.4);
-  }
-}
-
-.gold-button {
-  background: linear-gradient(to right, #D4B16A, #E8C878);
-  position: relative;
-  
-  .gold-effect {
-    position: absolute;
-    top: -50%;
-    left: -50%;
-    width: 200%;
-    height: 200%;
-    background: linear-gradient(
-      to bottom right,
-      rgba(255,255,255,0) 45%,
-      rgba(255,255,255,0.8) 50%,
-      rgba(255,255,255,0) 55%
-    );
-    transform: rotate(30deg);
-    transition: all 0.5s;
-    opacity: 0;
-  }
-  
-  &:hover .gold-effect {
-    opacity: 1;
-    animation: shine 1.5s;
-  }
-}
-
-@keyframes shine {
-  0% { left: -50%; top: -50%; }
-  100% { left: 150%; top: 150%; }
-}
-
-/* 协会智能体 */
-.ai-agent-section {
-  position: relative;
-  padding: 40px 0 60px;
-  background: rgba(255,255,255,0.7);
-  backdrop-filter: blur(5px);
-  margin-top: 30px;
-}
-
-.ai-agent-grid {
-  display: grid;
-  grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
-  gap: 25px;
-  margin: 0 5%;
-  position: relative;
-  z-index: 1;
-}
-
-.ai-card {
-  background: white;
-  border-radius: 12px;
-  overflow: hidden;
-  box-shadow: 0 5px 20px rgba(0,0,0,0.08);
-  transition: all 0.5s;
-  border: 1px solid rgba(212,177,106,0.1);
-  
-  &:hover {
-    transform: translateY(-10px);
-    box-shadow: 0 15px 30px rgba(0,0,0,0.15);
-  }
-}
-
-.chatbot-card .card-header {
-  background: linear-gradient(90deg, #5B8C5A, #8BC34A);
-}
-
-.dashboard-card .card-header {
-  background: linear-gradient(90deg, #2F7DAD, #64B5F6);
-}
-
-.online-status {
-  background: #4CAF50;
-  padding: 5px 10px;
-  border-radius: 15px;
-  font-size: 0.75rem;
-  color: white;
-  display: flex;
-  align-items: center;
-  
-  &::before {
-    content: "";
-    width: 8px;
-    height: 8px;
-    background: white;
-    border-radius: 50%;
-    margin-right: 5px;
-    animation: pulse 1.5s infinite;
-  }
-}
-
-@keyframes pulse {
-  0% { opacity: 1; }
-  50% { opacity: 0.5; }
-  100% { opacity: 1; }
-}
-
-.update-time {
-  color: rgba(255,255,255,0.8);
-  font-size: 0.8rem;
-}
-
-.chat-preview {
-  background: #f9f9f9;
-  border-radius: 8px;
-  padding: 20px;
-  margin-bottom: 20px;
-}
-
-.chat-message {
-  display: flex;
-  margin-bottom: 15px;
-  
-  &.ai-message {
-    .message-content {
-      background: white;
-      border: 1px solid #eee;
-      
-      &::before {
-        border-right-color: white;
-      }
-    }
-  }
-}
-
-.message-avatar {
-  width: 40px;
-  height: 40px;
-  border-radius: 50%;
-  margin-right: 10px;
-  flex-shrink: 0;
-  position: relative;
-  
-  img {
-    width: 100%;
-    height: 100%;
-    border-radius: 50%;
-    object-fit: cover;
-    position: relative;
-    z-index: 1;
-  }
-  
-  .wave-animation {
-    position: absolute;
-    top: -5px;
-    left: -5px;
-    right: -5px;
-    bottom: -5px;
-    border: 2px solid rgba(91,140,90,0.3);
-    border-radius: 50%;
-    animation: wave 2s infinite;
-    opacity: 0;
-  }
-}
-
-@keyframes wave {
-  0% { transform: scale(0.8); opacity: 0; }
-  50% { opacity: 0.8; }
-  100% { transform: scale(1.2); opacity: 0; }
-}
-
-.message-content {
-  background: #5B8C5A;
-  color: white;
-  padding: 12px 15px;
-  border-radius: 18px;
-  position: relative;
-  max-width: 80%;
-  
-  &::before {
-    content: "";
-    position: absolute;
-    left: -8px;
-    top: 15px;
-    border-width: 8px 8px 8px 0;
-    border-style: solid;
-    border-color: transparent #5B8C5A transparent transparent;
-  }
-  
-  p {
-    margin: 0;
-    font-size: 0.95rem;
-  }
-  
-  .message-time {
-    font-size: 0.7rem;
-    color: rgba(255,255,255,0.7);
-    text-align: right;
-    margin-top: 5px;
-  }
-}
-
-.quick-questions {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 8px;
-}
-
-.quick-question {
-  background: rgba(91,140,90,0.1);
-  border: none;
-  color: #5B8C5A;
-  padding: 6px 12px;
-  border-radius: 15px;
-  font-size: 0.8rem;
-  cursor: pointer;
-  transition: all 0.3s;
-  
-  &:hover {
-    background: rgba(91,140,90,0.2);
-  }
-}
-
-.chat-btn {
-  width: 100%;
-  padding: 12px;
-  background: linear-gradient(to right, #5B8C5A, #8BC34A);
-  color: white;
-  border: none;
-  border-radius: 8px;
-  font-size: 1rem;
-  cursor: pointer;
-  transition: all 0.3s;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  
-  &:hover {
-    background: linear-gradient(to right, #4a7a49, #7ab239);
-    box-shadow: 0 5px 15px rgba(91,140,90,0.3);
-  }
-  
-  i {
-    margin-right: 8px;
-    font-size: 1.2rem;
-  }
-}
-
-/* 数据看板卡片 */
-.stats-grid {
-  display: grid;
-  grid-template-columns: repeat(3, 1fr);
-  gap: 15px;
-  margin-bottom: 20px;
-}
-
-.stat-item {
-  background: #f9f9f9;
-  border-radius: 8px;
-  padding: 15px;
-  text-align: center;
-  position: relative;
-}
-
-.stat-icon {
-  width: 40px;
-  height: 40px;
-  background: rgba(47,125,173,0.1);
-  border-radius: 50%;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  margin: 0 auto 10px;
-  
-  i {
-    color: #2F7DAD;
-    font-size: 1.2rem;
-  }
-}
-
-.stat-value {
-  font-size: 1.8rem;
-  font-weight: bold;
-  color: #2F7DAD;
-  margin-bottom: 5px;
-}
-
-.stat-label {
-  font-size: 0.9rem;
-  color: #666;
-}
-
-.mini-echarts {
-  width: 100%;
-  height: 40px;
-  margin-top: 10px;
-}
-
-.data-timeline {
-  height: 200px;
-  background: #f9f9f9;
-  border-radius: 8px;
-  
-  .echarts-container {
-    width: 100%;
-    height: 100%;
-  }
-}
-
-/* 水墨过渡效果 */
-.ink-transition {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  // background: url('assets/images/ink-transition.png') center no-repeat;
-  background-size: cover;
-  pointer-events: none;
-  z-index: 1000;
-  opacity: 0;
-  transition: opacity 0.8s;
-  
-  &.active {
-    opacity: 1;
-  }
-}
-
-/* 响应式设计 */
-@media (max-width: 992px) {
-  .dynamic-grid, .ai-agent-grid {
-    grid-template-columns: 1fr;
-  }
-  
-  .aigc-gallery {
-    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
-  }
-}
-
-@media (max-width: 768px) {
-  .carousel {
-    height: 250px;
-  }
-  
-  .carousel-caption {
-    bottom: 50px;
-    left: 30px;
-    
-    h3 {
-      font-size: 1.8rem;
-    }
-    
-    p {
-      font-size: 1.1rem;
-    }
-  }
-  
-  .quick-access {
-    flex-wrap: wrap;
-    justify-content: center;
-  }
-  
-  .quick-item {
-    width: 100px;
-    height: 100px;
-  }
-  
-  .showcase-tabs {
-    overflow-x: auto;
-    white-space: nowrap;
-    padding-bottom: 5px;
-    
-    &::-webkit-scrollbar {
-      display: none;
-    }
-  }
-  
-  .tab-btn {
-    padding: 10px 15px;
-    font-size: 0.9rem;
-  }
-  
-  .webgl-container {
-    height: 300px;
-  }
-}
-
-@media (max-width: 576px) {
-  .section-header h2 {
-    font-size: 1.5rem;
-  }
-  
-  .carousel {
-    height: 200px;
-  }
-  
-  .carousel-caption {
-    bottom: 30px;
-    left: 20px;
-    
-    h3 {
-      font-size: 1.5rem;
-    }
-    
-    p {
-      font-size: 1rem;
-    }
-  }
-  
-  .quick-item {
-    width: 80px;
-    height: 80px;
-    
-    i {
-      font-size: 2rem;
-    }
-    
-    span {
-      font-size: 0.9rem;
-    }
-  }
-}
-
-/* 新增的页脚样式 */
-.footer {
-  background: linear-gradient(135deg, #2F7DAD, #1a4b6b);
-  color: white;
-  padding: 60px 0 30px;
-  position: relative;
-  margin-top: 60px;
-  
-  &::before {
-    content: "";
-    position: absolute;
-    top: -50px;
-    left: 0;
-    width: 100%;
-    height: 50px;
-    background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(47,125,173,0.3));
-  }
-}
-
-.footer-container {
-  max-width: 1200px;
-  margin: 0 auto;
-  padding: 0 5%;
-}
-
-.footer-grid {
-  display: grid;
-  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
-  gap: 40px;
-  margin-bottom: 40px;
-}
-
-.footer-col {
-  h3 {
-    font-size: 1.2rem;
-    margin-bottom: 20px;
-    position: relative;
-    padding-bottom: 10px;
-    font-family: "赣锋体", serif;
-    
-    &::after {
-      content: "";
-      position: absolute;
-      bottom: 0;
-      left: 0;
-      width: 40px;
-      height: 2px;
-      background: #D4B16A;
-    }
-  }
-}
-
-.footer-links {
-  list-style: none;
-  padding: 0;
-  margin: 0;
-  
-  li {
-    margin-bottom: 12px;
-  }
-  
-  a {
-    color: rgba(255,255,255,0.8);
-    text-decoration: none;
-    transition: all 0.3s;
-    font-size: 0.95rem;
-    display: inline-block;
-    position: relative;
-    
-    &::after {
-      content: "";
-      position: absolute;
-      bottom: -2px;
-      left: 0;
-      width: 0;
-      height: 1px;
-      background: #D4B16A;
-      transition: width 0.3s;
-    }
-    
-    &:hover {
-      color: white;
-      transform: translateX(5px);
-      
-      &::after {
-        width: 100%;
-      }
-    }
-  }
-}
-
-.footer-bottom {
-  border-top: 1px solid rgba(255,255,255,0.1);
-  padding-top: 30px;
-  text-align: center;
-  font-size: 0.9rem;
-  color: rgba(255,255,255,0.6);
-  
-  p {
-    margin: 0;
-  }
-}
-
-/* 响应式设计 */
-@media (max-width: 768px) {
-  .footer {
-    padding: 40px 0 20px;
+  .ai-features {
+    grid-template-columns: 1fr !important;
   }
   
   .footer-grid {
-    grid-template-columns: 1fr 1fr;
-    gap: 30px;
-  }
-}
-
-@media (max-width: 480px) {
-  .footer-grid {
-    grid-template-columns: 1fr;
-    gap: 25px;
-  }
-  
-  .footer-col {
-    h3 {
-      font-size: 1.1rem;
-      margin-bottom: 15px;
-    }
-  }
-  
-  .footer-links a {
-    font-size: 0.9rem;
-  }
-  
-  .footer-bottom {
-    font-size: 0.8rem;
+    grid-template-columns: 1fr !important;
   }
 }

+ 1 - 1
travel-platform-web/travel-web/src/crm/mobile/page-crm-member/page-crm-member.scss

@@ -21,7 +21,7 @@ body {
 /* 自定义字体 */
 @font-face {
     font-family: "赣锋体";
-    src: url("../../../assets/fonts/ganfeng.ttf"); /* 修改为正确的相对路径 */
+    src: url("/assets/fonts/ganfeng.ttf"); /* 修改为正确的相对路径 */
 }
 
 /* 主色调定义 */

+ 431 - 0
travel-platform-web/travel-web/src/lib/ncloud.ts

@@ -0,0 +1,431 @@
+// CloudObject.ts
+
+let serverURL = `https://dev.fmode.cn/parse`;
+if (location.protocol == "http:") {
+    serverURL = `http://dev.fmode.cn:1337/parse`;
+}
+
+export class CloudObject {
+    className: string;
+    id: string | undefined = undefined;
+    createdAt: any;
+    updatedAt: any;
+    data: Record<string, any> = {};
+
+    constructor(className: string) {
+        this.className = className;
+    }
+
+    toPointer() {
+        return { "__type": "Pointer", "className": this.className, "objectId": this.id };
+    }
+
+    set(json: Record<string, any>) {
+        Object.keys(json).forEach(key => {
+            if (["objectId", "id", "createdAt", "updatedAt"].indexOf(key) > -1) {
+                return;
+            }
+            this.data[key] = json[key];
+        });
+    }
+
+    get(key: string) {
+        return this.data[key] || null;
+    }
+
+    async save() {
+        let method = "POST";
+        let url = serverURL + `/classes/${this.className}`;
+
+        // 更新
+        if (this.id) {
+            url += `/${this.id}`;
+            method = "PUT";
+        }
+
+        const body = JSON.stringify(this.data);
+        const response = await fetch(url, {
+            headers: {
+                "content-type": "application/json;charset=UTF-8",
+                "x-parse-application-id": "dev"
+            },
+            body: body,
+            method: method,
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const result = await response?.json();
+        if (result?.error) {
+            console.error(result?.error);
+        }
+        if (result?.objectId) {
+            this.id = result?.objectId;
+        }
+        return this;
+    }
+
+    async destroy() {
+        if (!this.id) return;
+        const response = await fetch(serverURL + `/classes/${this.className}/${this.id}`, {
+            headers: {
+                "x-parse-application-id": "dev"
+            },
+            body: null,
+            method: "DELETE",
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const result = await response?.json();
+        if (result) {
+            this.id = undefined;
+        }
+        return true;
+    }
+}
+
+// CloudQuery.ts
+export class CloudQuery {
+    className: string;
+    queryParams: Record<string, any> = { where: {} };
+
+    constructor(className: string) {
+        this.className = className;
+    }
+
+    include(...fileds: string[]) {
+        this.queryParams["include"] = fileds;
+    }
+    greaterThan(key: string, value: any) {
+        if (!this.queryParams["where"][key]) this.queryParams["where"][key] = {};
+        this.queryParams["where"][key]["$gt"] = value;
+    }
+
+    greaterThanAndEqualTo(key: string, value: any) {
+        if (!this.queryParams["where"][key]) this.queryParams["where"][key] = {};
+        this.queryParams["where"][key]["$gte"] = value;
+    }
+
+    lessThan(key: string, value: any) {
+        if (!this.queryParams["where"][key]) this.queryParams["where"][key] = {};
+        this.queryParams["where"][key]["$lt"] = value;
+    }
+
+    lessThanAndEqualTo(key: string, value: any) {
+        if (!this.queryParams["where"][key]) this.queryParams["where"][key] = {};
+        this.queryParams["where"][key]["$lte"] = value;
+    }
+
+    equalTo(key: string, value: any) {
+        if (!this.queryParams["where"]) this.queryParams["where"] = {};
+        this.queryParams["where"][key] = value;
+    }
+
+    async get(id: string) {
+        const url = serverURL + `/classes/${this.className}/${id}?`;
+
+        const response = await fetch(url, {
+            headers: {
+                "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
+                "x-parse-application-id": "dev"
+            },
+            body: null,
+            method: "GET",
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const json = await response?.json();
+        if (json) {
+            let existsObject = this.dataToObj(json)
+            return existsObject;
+        }
+        return null
+    }
+
+    async find(): Promise<Array<CloudObject>> {
+        let url = serverURL + `/classes/${this.className}?`;
+
+        let queryStr = ``
+        Object.keys(this.queryParams).forEach(key => {
+            let paramStr = JSON.stringify(this.queryParams[key]);
+            if (key == "include") {
+                paramStr = this.queryParams[key]?.join(",")
+            }
+            if (queryStr) {
+                url += `${key}=${paramStr}`;
+            } else {
+                url += `&${key}=${paramStr}`;
+            }
+        })
+        // if (Object.keys(this.queryParams["where"]).length) {
+
+        // }
+
+        const response = await fetch(url, {
+            headers: {
+                "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
+                "x-parse-application-id": "dev"
+            },
+            body: null,
+            method: "GET",
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const json = await response?.json();
+        let list = json?.results || []
+        let objList = list.map((item: any) => this.dataToObj(item))
+        return objList || [];
+    }
+
+
+    async first() {
+        let url = serverURL + `/classes/${this.className}?`;
+
+        if (Object.keys(this.queryParams["where"]).length) {
+            const whereStr = JSON.stringify(this.queryParams["where"]);
+            url += `where=${whereStr}&limit=1`;
+        }
+
+        const response = await fetch(url, {
+            headers: {
+                "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
+                "x-parse-application-id": "dev"
+            },
+            body: null,
+            method: "GET",
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const json = await response?.json();
+        const exists = json?.results?.[0] || null;
+        if (exists) {
+            let existsObject = this.dataToObj(exists)
+            return existsObject;
+        }
+        return null
+    }
+
+    dataToObj(exists: any): CloudObject {
+        let existsObject = new CloudObject(this.className);
+        Object.keys(exists).forEach(key => {
+            if (exists[key]?.__type == "Object") {
+                exists[key] = this.dataToObj(exists[key])
+            }
+        })
+        existsObject.set(exists);
+        existsObject.id = exists.objectId;
+        existsObject.createdAt = exists.createdAt;
+        existsObject.updatedAt = exists.updatedAt;
+        return existsObject;
+    }
+}
+
+// CloudUser.ts
+export class CloudUser extends CloudObject {
+    constructor() {
+        super("_User"); // 假设用户类在Parse中是"_User"
+        // 读取用户缓存信息
+        let userCacheStr = localStorage.getItem("NCloud/dev/User")
+        if (userCacheStr) {
+            let userData = JSON.parse(userCacheStr)
+            // 设置用户信息
+            this.id = userData?.objectId;
+            this.sessionToken = userData?.sessionToken;
+            this.data = userData; // 保存用户数据
+        }
+    }
+
+    sessionToken: string | null = ""
+    /** 获取当前用户信息 */
+    async current() {
+        if (!this.sessionToken) {
+            console.error("用户未登录");
+            return null;
+        }
+        return this;
+        // const response = await fetch(serverURL + `/users/me`, {
+        //     headers: {
+        //         "x-parse-application-id": "dev",
+        //         "x-parse-session-token": this.sessionToken // 使用sessionToken进行身份验证
+        //     },
+        //     method: "GET"
+        // });
+
+        // const result = await response?.json();
+        // if (result?.error) {
+        //     console.error(result?.error);
+        //     return null;
+        // }
+        // return result;
+    }
+
+    /** 登录 */
+    async login(username: string, password: string): Promise<CloudUser | null> {
+        const response = await fetch(serverURL + `/login`, {
+            headers: {
+                "x-parse-application-id": "dev",
+                "Content-Type": "application/json"
+            },
+            body: JSON.stringify({ username, password }),
+            method: "POST"
+        });
+
+        const result = await response?.json();
+        if (result?.error) {
+            console.error(result?.error);
+            return null;
+        }
+
+        // 设置用户信息
+        this.id = result?.objectId;
+        this.sessionToken = result?.sessionToken;
+        this.data = result; // 保存用户数据
+        // 缓存用户信息
+        console.log(result)
+        localStorage.setItem("NCloud/dev/User", JSON.stringify(result))
+        return this;
+    }
+
+    /** 登出 */
+    async logout() {
+        if (!this.sessionToken) {
+            console.error("用户未登录");
+            return;
+        }
+
+        const response = await fetch(serverURL + `/logout`, {
+            headers: {
+                "x-parse-application-id": "dev",
+                "x-parse-session-token": this.sessionToken
+            },
+            method: "POST"
+        });
+
+        let result = await response?.json();
+
+        if (result?.error) {
+            console.error(result?.error);
+            if (result?.error == "Invalid session token") {
+                this.clearUserCache()
+                return true;
+            }
+            return false;
+        }
+
+        this.clearUserCache()
+        return true;
+    }
+    clearUserCache() {
+        // 清除用户信息
+        localStorage.removeItem("NCloud/dev/User")
+        this.id = undefined;
+        this.sessionToken = null;
+        this.data = {};
+    }
+
+    /** 注册 */
+    async signUp(username: string, password: string, additionalData: Record<string, any> = {}) {
+        const userData = {
+            username,
+            password,
+            ...additionalData // 合并额外的用户数据
+        };
+
+        const response = await fetch(serverURL + `/users`, {
+            headers: {
+                "x-parse-application-id": "dev",
+                "Content-Type": "application/json"
+            },
+            body: JSON.stringify(userData),
+            method: "POST"
+        });
+
+        const result = await response?.json();
+        if (result?.error) {
+            console.error(result?.error);
+            return null;
+        }
+
+        // 设置用户信息
+        // 缓存用户信息
+        console.log(result)
+        localStorage.setItem("NCloud/dev/User", JSON.stringify(result))
+        this.id = result?.objectId;
+        this.sessionToken = result?.sessionToken;
+        this.data = result; // 保存用户数据
+        return this;
+    }
+
+    override async save() {
+        let method = "POST";
+        let url = serverURL + `/users`;
+
+        // 更新用户信息
+        if (this.id) {
+            url += `/${this.id}`;
+            method = "PUT";
+        }
+
+        let data: any = JSON.parse(JSON.stringify(this.data))
+        delete data.createdAt
+        delete data.updatedAt
+        delete data.ACL
+        delete data.objectId
+        const body = JSON.stringify(data);
+        let headersOptions: any = {
+            "content-type": "application/json;charset=UTF-8",
+            "x-parse-application-id": "dev",
+            "x-parse-session-token": this.sessionToken, // 添加sessionToken以进行身份验证
+        }
+        const response = await fetch(url, {
+            headers: headersOptions,
+            body: body,
+            method: method,
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const result = await response?.json();
+        if (result?.error) {
+            console.error(result?.error);
+        }
+        if (result?.objectId) {
+            this.id = result?.objectId;
+        }
+        localStorage.setItem("NCloud/dev/User", JSON.stringify(this.data))
+        return this;
+    }
+}
+
+export class CloudApi {
+    async fetch(path: string, body: any, options?: {
+        method: string
+        body: any
+    }) {
+
+        let reqOpts: any = {
+            headers: {
+                "x-parse-application-id": "dev",
+                "Content-Type": "application/json"
+            },
+            method: options?.method || "POST",
+            mode: "cors",
+            credentials: "omit"
+        }
+        if (body || options?.body) {
+            reqOpts.body = JSON.stringify(body || options?.body);
+            reqOpts.json = true;
+        }
+        let host = `https://dev.fmode.cn`
+        // host = `http://127.0.0.1:1337`
+        let url = `${host}/api/` + path
+        console.log(url, reqOpts)
+        const response = await fetch(url, reqOpts);
+        let json = await response.json();
+        return json
+    }
+}