Преглед изворни кода

首页内容调整及菜单图标调整

yawuga пре 3 месеци
родитељ
комит
02799d610f

+ 3 - 3
pages.json

@@ -331,12 +331,12 @@
 				"pagePath": "pages/knowledge/ai-chat/index",
 				"iconPath": "static/icons/ai.png",
 				"selectedIconPath": "static/icons/ai.png",
-				"text": "ai农小禹"
+				//"text": "ai农小禹"
 			},
 			{
 				"pagePath": "pages/service/mall",
-				"iconPath": "static/icons/mall.svg",
-				"selectedIconPath": "static/icons/mall.svg",
+				"iconPath": "static/icons/mall.png",
+				"selectedIconPath": "static/icons/mall-active.png",
 				"text": "农资"
 			},
 			// {

+ 944 - 6
pages/dashboard/index.vue

@@ -1,13 +1,951 @@
 <template>
-	<view>
-		首页
-	</view>
+  <view class="dashboard-container">
+    <!-- 顶部 TopBar -->
+    <view class="top-bar">
+      <text class="greeting">农事有序,心里有数</text>
+      <text class="top-sub-guide">从今天的田间环境开始</text>
+    </view>
+
+    <!-- 田间环境/天气区域 (降级为扁平状态块) -->
+    <view class="environmental-status-block" @click="showWeatherDetail">
+      <view class="status-main">
+        <view class="main-info">
+          <text class="main-text">{{ weatherData.infos.temperature }}° · {{ weatherData.infos.weather }}</text>
+          <text class="fixed-subtitle">田间环境概览</text>
+        </view>
+      </view>
+
+      <view class="metrics-row">
+        <view class="metric-item">
+          <text class="label">湿度</text>
+          <text class="value">{{ weatherData.infos.humidity }}%</text>
+        </view>
+        <view class="metric-item">
+          <text class="label">风力</text>
+          <text class="value">{{ weatherData.infos.wind_power_v2 }}</text>
+        </view>
+        <view class="metric-item">
+          <text class="label">气压</text>
+          <text class="value">{{ weatherData.infos.air_pressure }} hPa</text>
+        </view>
+      </view>
+    </view>
+
+    <!-- AI 主卡 -->
+    <view class="card ai-card">
+      <view class="ai-header">
+        <view class="ai-pill">AI 农小禹</view>
+        <text class="ai-subtitle">今天安排从这里开始</text>
+      </view>
+      <view class="ai-body">
+        <text class="ai-title">{{ aiQuestion.title }}</text>
+        <text class="ai-desc">问问 AI 农小禹,给你具体建议</text>
+      </view>
+      <view class="ai-footer">
+        <view class="ai-cta">
+          <u-button 
+            type="primary" 
+            color="#2F7D32"
+            shape="round"
+            :custom-style="{
+              height: '60rpx',
+              width: 'auto',
+              minWidth: '200rpx',
+              borderRadius: '30rpx',
+              padding: '0 32rpx',
+              fontSize: '28rpx',
+              fontWeight: '600',
+              margin: '0'
+            }"
+            @click="goToAI"
+          >
+            立即提问
+            <u-icon name="arrow-right" color="white" size="16" style="margin-left: 8rpx;"></u-icon>
+          </u-button>
+        </view>
+      </view>
+      <!-- 玻璃感噪点纹理 -->
+      <view class="ai-texture"></view>
+    </view>
+
+    <!-- 农资精选 -->
+    <view class="card">
+      <view class="card-header">
+        <view class="title-section">
+          <view class="title-line"></view>
+          <text class="card-title">农资精选</text>
+        </view>
+        <view class="more-btn" @click="goToMall">
+          <text>去农资</text>
+          <u-icon name="arrow-right" color="#3BB44A" size="14"></u-icon>
+        </view>
+      </view>
+      <view class="products-grid">
+        <view 
+          class="product-card" 
+          v-for="(product, index) in products" 
+          :key="index"
+          @click="showProductDetail(product)"
+        >
+          <image 
+            :src="product.image" 
+            mode="aspectFill" 
+            class="product-image"
+            lazy-load
+          ></image>
+          <view class="product-info">
+            <text class="product-title">{{ product.title }}</text>
+            <text class="product-desc">{{ product.desc }}</text>
+            <view class="price-row">
+              <text class="price">¥{{ product.price }}</text>
+              <text class="unit">/{{ product.unit }}</text>
+            </view>
+            <u-button 
+              type="primary" 
+              color="linear-gradient(135deg, #3BB44A, #66CC6A)"
+              size="mini"
+              shape="round"
+            >
+              了解更多
+            </u-button>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <!-- 农技推荐 -->
+    <view class="card">
+      <view class="card-header">
+        <view class="title-section">
+          <view class="title-line"></view>
+          <text class="card-title">农技推荐</text>
+        </view>
+        <view class="more-btn" @click="goToKnowledge">
+          <text>更多</text>
+          <u-icon name="arrow-right" color="#3BB44A" size="14"></u-icon>
+        </view>
+      </view>
+      <view class="articles-list">
+        <view 
+          class="article-card" 
+          v-for="(article, index) in articles" 
+          :key="index"
+          @click="showArticleDetail(article)"
+        >
+          <view class="article-image-wrapper">
+            <image 
+              :src="article.image" 
+              mode="aspectFill" 
+              class="article-image"
+              lazy-load
+            ></image>
+            <view class="article-tag">文章</view>
+          </view>
+          <view class="article-info">
+            <text class="article-title">{{ article.title }}</text>
+            <text class="article-source">{{ article.source }}</text>
+            <view class="article-stats">
+              <u-icon name="eye" color="#999" size="12"></u-icon>
+              <text class="read-count">{{ article.readCount }}</text>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <!-- 天气详情弹窗 -->
+    <u-popup 
+      :show="showWeatherPopup" 
+      mode="bottom" 
+      round="20"
+      @close="showWeatherPopup = false"
+    >
+      <view class="popup-content">
+        <view class="popup-header">
+          <text class="popup-title">今日农事详情</text>
+          <u-icon name="close" color="#999" size="20" @click="showWeatherPopup = false"></u-icon>
+        </view>
+        <view class="weather-detail">
+          <view class="detail-item">
+            <text class="detail-label">天气状况</text>
+            <text class="detail-value">{{ weatherData.weatherText }}</text>
+          </view>
+          <view class="detail-item">
+            <text class="detail-label">当前温度</text>
+            <text class="detail-value">{{ weatherData.tempNow }}°C</text>
+          </view>
+          <view class="detail-item">
+            <text class="detail-label">湿度</text>
+            <text class="detail-value">{{ weatherData.humidity }}%</text>
+          </view>
+          <view class="detail-item">
+            <text class="detail-label">风力</text>
+            <text class="detail-value">{{ weatherData.windScale }}级</text>
+          </view>
+          <view class="detail-item">
+            <text class="detail-label">降水量</text>
+            <text class="detail-value">{{ weatherData.precipMm }}mm</text>
+          </view>
+          <view class="advice-detail">
+            <text class="advice-label">今日建议:</text>
+            <text class="advice-content">{{ weatherData.adviceText }}</text>
+          </view>
+        </view>
+        <u-button 
+          type="primary" 
+          color="linear-gradient(135deg, #3BB44A, #66CC6A)"
+          shape="round"
+          @click="askAIAboutWeather"
+        >
+          去问 AI
+        </u-button>
+      </view>
+    </u-popup>
+
+    <!-- 文章详情弹窗 -->
+    <u-popup 
+      :show="showArticlePopup" 
+      mode="bottom" 
+      round="20"
+      @close="showArticlePopup = false"
+    >
+      <view class="popup-content">
+        <view class="popup-header">
+          <text class="popup-title">文章详情</text>
+          <u-icon name="close" color="#999" size="20" @click="showArticlePopup = false"></u-icon>
+        </view>
+        <view class="article-detail" v-if="currentArticle">
+          <text class="article-detail-title">{{ currentArticle.title }}</text>
+          <text class="article-detail-time">{{ currentArticle.time }}</text>
+          <view class="article-detail-content">
+            <text class="content-paragraph">{{ currentArticle.content }}</text>
+            <text class="content-subtitle">主要要点:</text>
+            <view class="content-list">
+              <text class="list-item" v-for="(item, index) in currentArticle.points" :key="index">
+                • {{ item }}
+              </text>
+            </view>
+          </view>
+        </view>
+        <u-button 
+          type="primary" 
+          color="linear-gradient(135deg, #3BB44A, #66CC6A)"
+          shape="round"
+          @click="askAIAboutArticle"
+        >
+          去问 AI
+        </u-button>
+      </view>
+    </u-popup>
+  </view>
 </template>
 
 <script setup>
-	
+import { ref, reactive } from 'vue'
+
+// Mock 数据
+const weatherData = reactive({
+  infos: {
+    weather: "晴朗",
+    temperature: 28,
+    humidity: 65,
+    wind_power_v2: "3级",
+    air_pressure: 1008
+  },
+  update_time: "10:20" // 暗桩:保留字段供后续对接
+})
+
+const aiQuestions = [
+  {
+    title: '叶片发黄该从哪查?',
+    recommend: '最近阴雨天多,管理要点?'
+  },
+  {
+    title: '水稻分蘖期怎么管理?',
+    recommend: '如何提高分蘖成穗率?'
+  },
+  {
+    title: '玉米倒伏了怎么办?',
+    recommend: '预防玉米倒伏的措施?'
+  }
+]
+
+const aiQuestion = ref(aiQuestions[0])
+
+const products = ref([
+  {
+    title: '优质玉米种子',
+    desc: '高产抗病品种',
+    price: '68',
+    unit: '袋',
+    image: '/static/images/products/corn-seeds-new.jpg'
+  },
+  {
+    title: '有机肥料',
+    desc: '纯天然环保',
+    price: '128',
+    unit: '袋',
+    image: '/static/images/products/organic-fertilizer-new.jpg'
+  },
+  {
+    title: '杀虫剂',
+    desc: '广谱高效',
+    price: '45',
+    unit: '瓶',
+    image: '/static/images/products/insecticide.jpg'
+  },
+  {
+    title: '农用地膜',
+    desc: '保湿保温',
+    price: '89',
+    unit: '卷',
+    image: '/static/images/products/plastic-film.jpg'
+  }
+])
+
+const articles = ref([
+  {
+    title: '春季水稻种植技术要点',
+    source: '农技知识',
+    readCount: '1.2k',
+    image: '/static/images/rice-farming/rice-field1.jpg',
+    time: '2024-03-15',
+    content: '春季是水稻种植的关键时期,需要掌握以下技术要点:首先,选择适宜的品种,根据当地气候条件选择抗病性强、产量高的品种。其次,做好秧田准备,确保土壤肥力充足,排水良好。',
+    points: [
+      '选择适宜品种,抗病高产',
+      '秧田准备,土壤肥力充足',
+      '合理密植,通风透光',
+      '水肥管理,分蘖期关键'
+    ]
+  },
+  {
+    title: '玉米病虫害防治指南',
+    source: '植保技术',
+    readCount: '856',
+    image: '/static/images/rice-farming/rice-field2.jpg',
+    time: '2024-03-14',
+    content: '玉米病虫害防治是确保产量的重要环节。常见的病虫害包括玉米螟、蚜虫、叶斑病等。防治应遵循"预防为主,综合防治"的原则。',
+    points: [
+      '定期巡查,早发现早处理',
+      '生物防治与化学防治结合',
+      '合理轮作,减少病虫害发生',
+      '选择抗病品种,提高抗性'
+    ]
+  },
+  {
+    title: '现代农业机械化作业规范',
+    source: '农机管理',
+    readCount: '2.1k',
+    image: '/static/images/rice-farming/rice-field3.jpg',
+    time: '2024-03-13',
+    content: '提升农业机械化作业水平是现代农业发展的必然要求。本规范涵盖了整地、播种、植保及收获等环节的机械化操作标准。',
+    points: [
+      '机具调试,状态良好',
+      '标准化作业,保证质量',
+      '安全生产,预防事故',
+      '效率优化,降低成本'
+    ]
+  },
+  {
+    title: '土壤肥力提升与改良方案',
+    source: '土肥管理',
+    readCount: '1.5k',
+    image: '/static/images/rice-farming/rice-field4.jpg',
+    time: '2024-03-12',
+    content: '健康的土壤是丰收的基础。通过增施有机肥、秸秆还田以及科学轮作,可以有效改善土壤结构,提升肥力水平。',
+    points: [
+      '测土配方,科学施肥',
+      '增加有机质,改良结构',
+      '酸碱度调理,平衡养分',
+      '生态修复,持久肥力'
+    ]
+  }
+])
+
+// 弹窗控制
+const showWeatherPopup = ref(false)
+const showArticlePopup = ref(false)
+const currentArticle = ref(null)
+
+// 方法
+const showTip = () => {
+  uni.showToast({
+    title: '建议先看今日农事,再去问 AI',
+    icon: 'none',
+    duration: 2000
+  })
+}
+
+const showWeatherDetail = () => {
+  showWeatherPopup.value = true
+}
+
+const showArticleDetail = (article) => {
+  currentArticle.value = article
+  showArticlePopup.value = true
+}
+
+const showProductDetail = (product) => {
+  uni.showToast({
+    title: '后续接入商品详情',
+    icon: 'none',
+    duration: 2000
+  })
+}
+
+const goToAI = () => {
+  uni.navigateTo({
+    url: '/pages/knowledge/ai-chat/index'
+  })
+}
+
+
+const goToMall = () => {
+  uni.switchTab({
+    url: '/pages/service/mall'
+  })
+}
+
+const goToKnowledge = () => {
+  uni.switchTab({
+    url: '/pages/knowledge/index'
+  })
+}
+
+const askAIAboutWeather = () => {
+  showWeatherPopup.value = false
+  uni.navigateTo({
+    url: '/pages/knowledge/ai-chat/index?question=' + encodeURIComponent('今日天气适宜哪些农事活动?')
+  })
+}
+
+const askAIAboutArticle = () => {
+  showArticlePopup.value = false
+  if (currentArticle.value) {
+    uni.navigateTo({
+      url: '/pages/knowledge/ai-chat/index?question=' + encodeURIComponent('关于' + currentArticle.value.title + '有什么建议?')
+    })
+  }
+}
 </script>
 
-<style lang="less">
+<style lang="scss" scoped>
+.dashboard-container {
+  padding: 24rpx;
+  background-color: #F6FDF9;
+  min-height: 100vh;
+}
+
+// 顶部 TopBar
+.top-bar {
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-start;
+  align-items: flex-start;
+  margin-bottom: 12rpx;
+  padding: 0 8rpx;
+
+  .greeting {
+    font-size: 32rpx;
+    font-weight: 600;
+    color: #1A3026;
+    letter-spacing: 1rpx;
+    line-height: 1.4;
+  }
+
+  .top-sub-guide {
+    font-size: 24rpx;
+    color: rgba(0, 0, 0, 0.45);
+    margin-top: 4rpx;
+  }
+}
+
+// Card 基础样式(复用旧首页)
+.card {
+  background: white;
+  border-radius: 20rpx;
+  box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.04), 0 1rpx 4rpx rgba(0, 0, 0, 0.02);
+  margin-bottom: 24rpx;
+  overflow: hidden;
+
+  .card-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 24rpx 28rpx;
+    border-bottom: 1px solid rgba(0, 0, 0, 0.03);
+
+    .title-section {
+      display: flex;
+      align-items: center;
+
+      .title-line {
+        width: 4rpx;
+        height: 28rpx;
+        border-radius: 0;
+        background: linear-gradient(180deg, #3BB44A, #66CC6A);
+        margin-right: 16rpx;
+      }
+
+      .card-title {
+        font-size: 28rpx;
+        font-weight: 600;
+        color: #2C3E50;
+      }
+    }
+
+    .tag {
+      background: linear-gradient(135deg, #3BB44A, #66CC6A);
+      color: white;
+      font-size: 22rpx;
+      padding: 6rpx 16rpx;
+      border-radius: 16rpx;
+    }
+
+    .more-btn {
+      display: flex;
+      align-items: center;
+      color: #3BB44A;
+      font-size: 24rpx;
+
+      text {
+        margin-right: 6rpx;
+      }
+    }
+  }
+}
+
+// 田间环境状态块 (降级为扁平化背景块)
+.environmental-status-block {
+  position: relative;
+  padding: 24rpx 28rpx;
+  background: linear-gradient(135deg, #FFFFFF 0%, #F4FAF7 100%);
+  border: 1rpx solid rgba(59, 180, 74, 0.08);
+  border-radius: 24rpx;
+  margin-bottom: 24rpx;
+  overflow: hidden;
+
+  .status-main {
+    display: flex;
+    justify-content: space-between;
+    align-items: flex-end;
+    margin-bottom: 20rpx;
+
+    .main-info {
+      display: flex;
+      flex-direction: column;
+
+      .main-text {
+        font-size: 48rpx;
+        font-weight: 800;
+        color: #1A3026;
+        line-height: 1;
+      }
+
+      .fixed-subtitle {
+        font-size: 24rpx;
+        color: #7A9086;
+        margin-top: 8rpx;
+      }
+    }
+  }
+
+  .metrics-row {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding-top: 16rpx;
+    border-top: 1rpx solid rgba(0, 0, 0, 0.03);
+
+    .metric-item {
+      flex: 1;
+      display: flex;
+      align-items: center;
+      gap: 8rpx;
+
+      .label {
+        font-size: 22rpx;
+        color: #8EAC9D;
+      }
+
+      .value {
+        font-size: 24rpx;
+        font-weight: 600;
+        color: #2D4035;
+      }
+    }
+  }
+}
+
+// AI 主卡
+.ai-card {
+  position: relative;
+  background: linear-gradient(135deg, rgba(59, 180, 74, 0.18), rgba(102, 204, 106, 0.10));
+  border: 1rpx solid rgba(59, 180, 74, 0.08);
+  border-radius: 20rpx;
+  box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.04), 0 1rpx 4rpx rgba(0, 0, 0, 0.02);
+  margin-bottom: 24rpx;
+  overflow: hidden;
+  transition: transform 0.2s ease, box-shadow 0.2s ease;
+
+  &:active {
+    transform: scale(0.99);
+    box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.03);
+  }
+
+  // 多层背景光斑效果 (底层氛围)
+  &::before {
+    content: '';
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background: 
+      radial-gradient(circle at 85% 25%, rgba(59, 180, 74, 0.22), transparent 60%),
+      radial-gradient(circle at 20% 80%, rgba(76, 175, 80, 0.14), transparent 55%);
+    pointer-events: none;
+    z-index: 1;
+  }
+
+  // 抽象 AI 设计母题层 (右侧增强设计感)
+  &::after {
+    content: '';
+    position: absolute;
+    top: -20%;
+    right: -10%;
+    width: 80%;
+    height: 140%;
+    background: 
+      radial-gradient(circle at 75% 35%, rgba(59, 180, 74, 0.06) 0%, transparent 45%),
+      radial-gradient(circle at 85% 65%, rgba(76, 175, 80, 0.04) 0%, transparent 40%),
+      radial-gradient(circle at 60% 85%, rgba(59, 180, 74, 0.03) 0%, transparent 50%);
+    filter: blur(30rpx);
+    pointer-events: none;
+    z-index: 2;
+  }
+
+  .ai-texture {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background: repeating-linear-gradient(
+      45deg,
+      transparent,
+      transparent 2rpx,
+      rgba(255, 255, 255, 0.03) 2rpx,
+      rgba(255, 255, 255, 0.03) 4rpx
+    );
+    pointer-events: none;
+    z-index: 2;
+    opacity: 0.5;
+  }
+
+  .ai-header {
+    position: relative;
+    z-index: 3;
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    padding: 32rpx 28rpx 16rpx;
+
+    .ai-pill {
+      background: #FFFFFF;
+      color: #3BB44A;
+      font-size: 24rpx;
+      font-weight: 600;
+      padding: 8rpx 24rpx;
+      border-radius: 40rpx;
+      margin-right: 20rpx;
+      margin-bottom: 0;
+    }
+
+    .ai-subtitle {
+      font-size: 28rpx;
+      color: #5C6A70;
+      font-weight: 500;
+    }
+  }
+
+  .ai-body {
+    position: relative;
+    z-index: 3;
+    padding: 12rpx 28rpx 20rpx;
+
+    .ai-title {
+      font-size: 40rpx;
+      font-weight: 700;
+      color: #2C3E50;
+      line-height: 1.3;
+      margin-bottom: 12rpx;
+      display: block;
+    }
+
+    .ai-desc {
+      font-size: 26rpx;
+      color: rgba(44, 62, 80, 0.6);
+      line-height: 1.4;
+      display: block;
+    }
+  }
+
+  .ai-footer {
+    position: relative;
+    z-index: 3;
+    display: flex;
+    justify-content: flex-start;
+    padding: 16rpx 28rpx 24rpx;
+
+    .ai-cta {
+      display: flex;
+      align-items: center;
+    }
+  }
+}
+
+// 农资精选
+.products-grid {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 16rpx;
+  padding: 16rpx;
+
+  .product-card {
+    background: white;
+    border-radius: 16rpx;
+    overflow: hidden;
+    box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
+    border: 1px solid rgba(0, 0, 0, 0.02);
+
+    .product-image {
+      width: 100%;
+      height: 160rpx;
+      background: #f5f5f5;
+    }
+
+    .product-info {
+      padding: 16rpx;
+
+      .product-title {
+        font-size: 26rpx;
+        font-weight: 600;
+        color: #2C3E50;
+        margin-bottom: 6rpx;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+
+      .product-desc {
+        font-size: 22rpx;
+        color: #8C9396;
+        margin-bottom: 12rpx;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+
+      .price-row {
+        display: flex;
+        align-items: baseline;
+        margin-bottom: 12rpx;
+
+        .price {
+          font-size: 32rpx;
+          font-weight: 700;
+          color: #3BB44A;
+        }
+
+        .unit {
+          font-size: 22rpx;
+          color: #8C9396;
+          margin-left: 4rpx;
+        }
+      }
+    }
+  }
+}
+
+// 农技推荐
+.articles-list {
+  padding: 16rpx;
+
+  .article-card {
+    display: flex;
+    background: white;
+    border-radius: 16rpx;
+    overflow: hidden;
+    box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
+    border: 1px solid rgba(0, 0, 0, 0.02);
+    margin-bottom: 16rpx;
+
+    .article-image-wrapper {
+      position: relative;
+      width: 200rpx;
+      height: 140rpx;
+      flex-shrink: 0;
+
+      .article-image {
+        width: 100%;
+        height: 100%;
+        background: #f5f5f5;
+      }
+
+      .article-tag {
+        position: absolute;
+        top: 8rpx;
+        left: 8rpx;
+        background: #2196F3;
+        color: white;
+        font-size: 20rpx;
+        padding: 4rpx 8rpx;
+        border-radius: 6rpx;
+      }
+    }
+
+    .article-info {
+      flex: 1;
+      padding: 16rpx;
+      display: flex;
+      flex-direction: column;
+      justify-content: space-between;
+
+      .article-title {
+        font-size: 26rpx;
+        font-weight: 600;
+        color: #2C3E50;
+        margin-bottom: 6rpx;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        display: -webkit-box;
+        -webkit-line-clamp: 2;
+        -webkit-box-orient: vertical;
+      }
+
+      .article-source {
+        font-size: 22rpx;
+        color: #8C9396;
+        margin-bottom: 8rpx;
+      }
+
+      .article-stats {
+        display: flex;
+        align-items: center;
+
+        .read-count {
+          font-size: 22rpx;
+          color: #999;
+          margin-left: 6rpx;
+        }
+      }
+    }
+  }
+}
+
+// 弹窗样式
+.popup-content {
+  padding: 32rpx;
+  max-height: 80vh;
+  overflow-y: auto;
+
+  .popup-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 24rpx;
+
+    .popup-title {
+      font-size: 32rpx;
+      font-weight: 600;
+      color: #2C3E50;
+    }
+  }
+
+  .weather-detail {
+    margin-bottom: 32rpx;
+
+    .detail-item {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 16rpx 0;
+      border-bottom: 1px solid rgba(0, 0, 0, 0.03);
+
+      .detail-label {
+        font-size: 26rpx;
+        color: #8C9396;
+      }
+
+      .detail-value {
+        font-size: 26rpx;
+        font-weight: 600;
+        color: #2C3E50;
+      }
+    }
+
+    .advice-detail {
+      margin-top: 24rpx;
+      padding: 20rpx;
+      background: rgba(59, 180, 74, 0.05);
+      border-radius: 16rpx;
+
+      .advice-label {
+        font-size: 26rpx;
+        font-weight: 600;
+        color: #2C3E50;
+        margin-bottom: 8rpx;
+      }
+
+      .advice-content {
+        font-size: 26rpx;
+        color: #2C3E50;
+        line-height: 1.4;
+      }
+    }
+  }
+
+  .article-detail {
+    margin-bottom: 32rpx;
+
+    .article-detail-title {
+      font-size: 32rpx;
+      font-weight: 700;
+      color: #2C3E50;
+      margin-bottom: 12rpx;
+    }
+
+    .article-detail-time {
+      font-size: 22rpx;
+      color: #8C9396;
+      margin-bottom: 24rpx;
+    }
+
+    .article-detail-content {
+      .content-paragraph {
+        font-size: 26rpx;
+        color: #2C3E50;
+        line-height: 1.6;
+        margin-bottom: 20rpx;
+      }
+
+      .content-subtitle {
+        font-size: 28rpx;
+        font-weight: 600;
+        color: #2C3E50;
+        margin-bottom: 12rpx;
+      }
 
-</style>
+      .content-list {
+        .list-item {
+          font-size: 26rpx;
+          color: #2C3E50;
+          line-height: 1.5;
+          margin-bottom: 8rpx;
+        }
+      }
+    }
+  }
+}
+</style>

BIN
static/icons/ai-1.png


BIN
static/icons/ai.png


BIN
static/icons/mall-1.png


BIN
static/icons/mall-active.png


BIN
static/icons/mall.png


+ 0 - 8
static/icons/mall.svg

@@ -1,8 +0,0 @@
-<svg width="88" height="88" viewBox="0 0 88 88" fill="none" xmlns="http://www.w3.org/2000/svg">
-  <path d="M22 26H66L62 46H26L22 26Z" stroke="#4CAF50" stroke-width="4"/>
-  <path d="M28 46V62" stroke="#4CAF50" stroke-width="4"/>
-  <path d="M60 46V62" stroke="#4CAF50" stroke-width="4"/>
-  <path d="M22 26L18 18H14" stroke="#4CAF50" stroke-width="4"/>
-  <circle cx="32" cy="66" r="4" fill="#4CAF50"/>
-  <circle cx="56" cy="66" r="4" fill="#4CAF50"/>
-</svg>