Преглед на файлове

新增数据看板,农技详情页面

yawuga преди 1 година
родител
ревизия
d48c1a5757
променени са 54 файла, в които са добавени 1767 реда и са изтрити 1426 реда
  1. BIN
      .DS_Store
  2. 1 1
      .gitignore
  3. 32 26
      pages/about/index.vue
  4. 549 458
      pages/dashboard/index.vue
  5. 4 2
      pages/privacy/index.vue
  6. 112 107
      pages/settings/index.vue
  7. BIN
      static/.DS_Store
  8. BIN
      static/icons/.DS_Store
  9. BIN
      static/icons/Pest_Alert.png
  10. BIN
      static/icons/activity-active.png
  11. BIN
      static/icons/activity.png
  12. BIN
      static/icons/device-active.png
  13. BIN
      static/icons/device.png
  14. BIN
      static/icons/home 1.png
  15. BIN
      static/icons/home-active 1.png
  16. BIN
      static/icons/home-active.png
  17. BIN
      static/icons/home.png
  18. BIN
      static/icons/knowledge-active.png
  19. BIN
      static/icons/knowledge.png
  20. BIN
      static/icons/offline.png
  21. BIN
      static/icons/task_delay.png
  22. BIN
      static/icons/user icon.png
  23. BIN
      static/icons/user-active.png
  24. BIN
      static/icons/user.png
  25. BIN
      static/icons/weather_risk.png
  26. 1 1
      unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map
  27. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  28. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/about/index.js.map
  29. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/dashboard/index.js.map
  30. 0 1
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/privacy/index.js.map
  31. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/settings/index.js.map
  32. 6 4
      unpackage/dist/dev/mp-weixin/common/assets.js
  33. 38 22
      unpackage/dist/dev/mp-weixin/common/vendor.js
  34. 24 18
      unpackage/dist/dev/mp-weixin/pages/about/index.js
  35. 1 1
      unpackage/dist/dev/mp-weixin/pages/ai-chat/index.js
  36. 355 328
      unpackage/dist/dev/mp-weixin/pages/dashboard/index.js
  37. 0 0
      unpackage/dist/dev/mp-weixin/pages/dashboard/index.wxml
  38. 556 384
      unpackage/dist/dev/mp-weixin/pages/dashboard/index.wxss
  39. 2 2
      unpackage/dist/dev/mp-weixin/pages/knowledge/index.js
  40. 7 7
      unpackage/dist/dev/mp-weixin/pages/privacy/index.js
  41. 78 63
      unpackage/dist/dev/mp-weixin/pages/settings/index.js
  42. 1 1
      unpackage/dist/dev/mp-weixin/pages/user/index.js
  43. BIN
      unpackage/dist/dev/mp-weixin/static/.DS_Store
  44. BIN
      unpackage/dist/dev/mp-weixin/static/icons/.DS_Store
  45. BIN
      unpackage/dist/dev/mp-weixin/static/icons/activity-active.png
  46. BIN
      unpackage/dist/dev/mp-weixin/static/icons/activity.png
  47. BIN
      unpackage/dist/dev/mp-weixin/static/icons/device-active.png
  48. BIN
      unpackage/dist/dev/mp-weixin/static/icons/device.png
  49. BIN
      unpackage/dist/dev/mp-weixin/static/icons/home-active.png
  50. BIN
      unpackage/dist/dev/mp-weixin/static/icons/home.png
  51. BIN
      unpackage/dist/dev/mp-weixin/static/icons/knowledge-active.png
  52. BIN
      unpackage/dist/dev/mp-weixin/static/icons/knowledge.png
  53. BIN
      unpackage/dist/dev/mp-weixin/static/icons/user-active.png
  54. BIN
      unpackage/dist/dev/mp-weixin/static/icons/user.png

BIN
.DS_Store


+ 1 - 1
.gitignore

@@ -7,5 +7,5 @@ node_modules/
 .idea/
 /idea/
 .vscode/
-/unpackage/**
+unpackage/
 .hbuilderx/launch.json

+ 32 - 26
pages/about/index.vue

@@ -48,33 +48,39 @@
   </view>
 </template>
 
-<script setup>
-import { ref } from 'vue'
-
-const version = ref('1.0.0')
-
-// 复制文本
-const copyText = (text) => {
-  uni.setClipboardData({
-    data: text,
-    success: () => {
-      uni.showToast({
-        title: '已复制到剪贴板',
-        icon: 'none'
-      })
+<script>
+export default {
+  data() {
+    return {
+      version: '1.0.0'
+    };
+  },
+  
+  methods: {
+    // 复制文本
+    copyText(text) {
+      uni.setClipboardData({
+        data: text,
+        success: () => {
+          uni.showToast({
+            title: '已复制到剪贴板',
+            icon: 'none'
+          });
+        }
+      });
+    },
+
+    // 拨打电话
+    makePhoneCall() {
+      uni.makePhoneCall({
+        phoneNumber: '400-xxx-xxxx',
+        fail: () => {
+          this.copyText('400-xxx-xxxx');
+        }
+      });
     }
-  })
-}
-
-// 拨打电话
-const makePhoneCall = () => {
-  uni.makePhoneCall({
-    phoneNumber: '400-xxx-xxxx',
-    fail: () => {
-      copyText('400-xxx-xxxx')
-    }
-  })
-}
+  }
+};
 </script>
 
 <style lang="scss">

Файловите разлики са ограничени, защото са твърде много
+ 549 - 458
pages/dashboard/index.vue


+ 4 - 2
pages/privacy/index.vue

@@ -84,8 +84,10 @@
   </view>
 </template>
 
-<script setup>
-// 无需特殊逻辑
+<script>
+export default {
+  // 隐私政策页面无需特殊逻辑,但仍需符合Vue 2格式
+};
 </script>
 
 <style lang="scss">

+ 112 - 107
pages/settings/index.vue

@@ -61,117 +61,122 @@
   </view>
 </template>
 
-<script setup>
-import { ref } from 'vue'
-import { onShow } from '@dcloudio/uni-app'
-
-// 通知设置状态
-const notifications = ref({
-  system: true,
-  crop: true,
-  weather: true
-})
-
-// 缓存大小
-const cacheSize = ref('0.00MB')
-
-// 版本号
-const version = ref('1.0.0')
-
-// 获取缓存大小
-const getCacheSize = () => {
-  // 实际项目中需要调用相关API获取缓存大小
-  uni.getStorageInfo({
-    success: (res) => {
-      const size = (res.currentSize / 1024).toFixed(2)
-      cacheSize.value = size + 'MB'
-    }
-  })
-}
-
-// 清除缓存
-const handleClearCache = () => {
-  uni.showModal({
-    title: '提示',
-    content: '确定要清除缓存吗?',
-    success: (res) => {
-      if (res.confirm) {
-        uni.clearStorage({
-          success: () => {
-            uni.showToast({
-              title: '清除成功',
-              icon: 'success'
-            })
-            getCacheSize()
+<script>
+export default {
+  data() {
+    return {
+      // 通知设置状态
+      notifications: {
+        system: true,
+        crop: true,
+        weather: true
+      },
+      
+      // 缓存大小
+      cacheSize: '0.00MB',
+      
+      // 版本号
+      version: '1.0.0'
+    };
+  },
+  
+  methods: {
+    // 获取缓存大小
+    getCacheSize() {
+      // 实际项目中需要调用相关API获取缓存大小
+      uni.getStorageInfo({
+        success: (res) => {
+          const size = (res.currentSize / 1024).toFixed(2);
+          this.cacheSize = size + 'MB';
+        }
+      });
+    },
+    
+    // 清除缓存
+    handleClearCache() {
+      uni.showModal({
+        title: '提示',
+        content: '确定要清除缓存吗?',
+        success: (res) => {
+          if (res.confirm) {
+            uni.clearStorage({
+              success: () => {
+                uni.showToast({
+                  title: '清除成功',
+                  icon: 'success'
+                });
+                this.getCacheSize();
+              }
+            });
           }
-        })
+        }
+      });
+    },
+    
+    // 检查更新
+    checkUpdate() {
+      // 实际项目中需要调用后端API检查更新
+      uni.showLoading({ title: '检查更新中...' });
+      setTimeout(() => {
+        uni.hideLoading();
+        uni.showToast({
+          title: '已是最新版本',
+          icon: 'none'
+        });
+      }, 1500);
+    },
+    
+    // 通知设置处理函数
+    handleSystemNotification(e) {
+      this.notifications.system = e.detail.value;
+      this.saveNotificationSettings();
+    },
+    
+    handleCropNotification(e) {
+      this.notifications.crop = e.detail.value;
+      this.saveNotificationSettings();
+    },
+    
+    handleWeatherNotification(e) {
+      this.notifications.weather = e.detail.value;
+      this.saveNotificationSettings();
+    },
+    
+    // 保存通知设置
+    saveNotificationSettings() {
+      uni.setStorageSync('notifications', this.notifications);
+    },
+    
+    // 加载通知设置
+    loadNotificationSettings() {
+      const savedSettings = uni.getStorageSync('notifications');
+      if (savedSettings) {
+        this.notifications = savedSettings;
       }
+    },
+    
+    // 页面跳转
+    navigateToAboutUs() {
+      uni.navigateTo({ url: '/pages/about/index' });
+    },
+    
+    navigateToPrivacy() {
+      uni.navigateTo({ url: '/pages/privacy/index' });
+    },
+    
+    handleContact() {
+      uni.makePhoneCall({
+        phoneNumber: '400-xxx-xxxx' // 替换为实际的客服电话
+      });
     }
-  })
-}
-
-// 检查更新
-const checkUpdate = () => {
-  // 实际项目中需要调用后端API检查更新
-  uni.showLoading({ title: '检查更新中...' })
-  setTimeout(() => {
-    uni.hideLoading()
-    uni.showToast({
-      title: '已是最新版本',
-      icon: 'none'
-    })
-  }, 1500)
-}
-
-// 通知设置处理函数
-const handleSystemNotification = (e) => {
-  notifications.value.system = e.detail.value
-  saveNotificationSettings()
-}
-
-const handleCropNotification = (e) => {
-  notifications.value.crop = e.detail.value
-  saveNotificationSettings()
-}
-
-const handleWeatherNotification = (e) => {
-  notifications.value.weather = e.detail.value
-  saveNotificationSettings()
-}
-
-// 保存通知设置
-const saveNotificationSettings = () => {
-  uni.setStorageSync('notifications', notifications.value)
-}
-
-// 加载通知设置
-const loadNotificationSettings = () => {
-  const savedSettings = uni.getStorageSync('notifications')
-  if (savedSettings) {
-    notifications.value = savedSettings
+  },
+  
+  // 页面显示时加载数据
+  onShow() {
+    this.getCacheSize();
+    this.loadNotificationSettings();
   }
-}
-
-// 页面跳转
-const navigateToAboutUs = () => {
-  uni.navigateTo({ url: '/pages/about/index' })
-}
-
-const navigateToPrivacy = () => {
-  uni.navigateTo({ url: '/pages/privacy/index' })
-}
-
-const handleContact = () => {
-  uni.makePhoneCall({
-    phoneNumber: '400-xxx-xxxx' // 替换为实际的客服电话
-  })
-}
-
-// 页面显示时加载数据
-onShow(() => {
-  getCacheSize()
-  loadNotificationSettings()
-})
+};
 </script>
 
 <style lang="scss">

BIN
static/.DS_Store


BIN
static/icons/.DS_Store


BIN
static/icons/Pest_Alert.png


BIN
static/icons/activity-active.png


BIN
static/icons/activity.png


BIN
static/icons/device-active.png


BIN
static/icons/device.png


BIN
static/icons/home 1.png


BIN
static/icons/home-active 1.png


BIN
static/icons/home-active.png


BIN
static/icons/home.png


BIN
static/icons/knowledge-active.png


BIN
static/icons/knowledge.png


BIN
static/icons/offline.png


BIN
static/icons/task_delay.png


BIN
static/icons/user icon.png


BIN
static/icons/user-active.png


BIN
static/icons/user.png


BIN
static/icons/weather_risk.png


+ 1 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map

@@ -1 +1 @@
-{"version":3,"file":"assets.js","sources":["../../../../../../../static/images/empty.png","static/icons/ai.png","../../../../../../../static/images/default-avatar.png","static/images/user-avatar.svg","../../../../../../../static/images/logo.png"],"sourcesContent":["export default \"/static/images/empty.png\"","export default \"__VITE_ASSET__0e731508__\"","export default \"/static/images/default-avatar.png\"","export default \"__VITE_ASSET__565b8f1d__\"","export default \"/static/images/logo.png\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;;;;;;"}
+{"version":3,"file":"assets.js","sources":["static/icons/user icon.png","../../../../../../../static/images/empty.png","static/icons/ai.png","../../../../../../../static/images/default-avatar.png","static/images/user-avatar.svg","../../../../../../../static/images/logo.png"],"sourcesContent":["export default \"__VITE_ASSET__c538aecf__\"","export default \"/static/images/empty.png\"","export default \"__VITE_ASSET__0e731508__\"","export default \"/static/images/default-avatar.png\"","export default \"__VITE_ASSET__565b8f1d__\"","export default \"/static/images/logo.png\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,eAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;;;;;;;"}

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/about/index.js.map


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/dashboard/index.js.map


Файловите разлики са ограничени, защото са твърде много
+ 0 - 1
unpackage/dist/dev/.sourcemap/mp-weixin/pages/privacy/index.js.map


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/settings/index.js.map


+ 6 - 4
unpackage/dist/dev/mp-weixin/common/assets.js

@@ -1,12 +1,14 @@
 "use strict";
+const _imports_0$4 = "/static/icons/user icon.png";
 const _imports_0$3 = "/static/images/empty.png";
 const _imports_0$2 = "/static/icons/ai.png";
 const _imports_0$1 = "/static/images/default-avatar.png";
 const _imports_1 = "/static/images/user-avatar.svg";
 const _imports_0 = "/static/images/logo.png";
-exports._imports_0 = _imports_0$2;
-exports._imports_0$1 = _imports_0$3;
-exports._imports_0$2 = _imports_0$1;
-exports._imports_0$3 = _imports_0;
+exports._imports_0 = _imports_0$4;
+exports._imports_0$1 = _imports_0$2;
+exports._imports_0$2 = _imports_0$3;
+exports._imports_0$3 = _imports_0$1;
+exports._imports_0$4 = _imports_0;
 exports._imports_1 = _imports_1;
 //# sourceMappingURL=../../.sourcemap/mp-weixin/common/assets.js.map

+ 38 - 22
unpackage/dist/dev/mp-weixin/common/vendor.js

@@ -85,8 +85,8 @@ const def = (obj, key, value) => {
   });
 };
 const looseToNumber = (val) => {
-  const n = parseFloat(val);
-  return isNaN(n) ? val : n;
+  const n2 = parseFloat(val);
+  return isNaN(n2) ? val : n2;
 };
 function normalizeStyle(value) {
   if (isArray(value)) {
@@ -118,6 +118,26 @@ function parseStringStyle(cssText) {
   });
   return ret;
 }
+function normalizeClass(value) {
+  let res = "";
+  if (isString(value)) {
+    res = value;
+  } else if (isArray(value)) {
+    for (let i = 0; i < value.length; i++) {
+      const normalized = normalizeClass(value[i]);
+      if (normalized) {
+        res += normalized + " ";
+      }
+    }
+  } else if (isObject(value)) {
+    for (const name in value) {
+      if (value[name]) {
+        res += name + " ";
+      }
+    }
+  }
+  return res.trim();
+}
 const toDisplayString = (val) => {
   return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);
 };
@@ -2624,21 +2644,21 @@ function injectHook(type, hook, target = currentInstance, prepend = false) {
     );
   }
 }
-const createHook$1 = (lifecycle) => (hook, target = currentInstance) => (
+const createHook = (lifecycle) => (hook, target = currentInstance) => (
   // post-create lifecycle registrations are noops during SSR (except for serverPrefetch)
   (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, (...args) => hook(...args), target)
 );
-const onBeforeMount = createHook$1("bm");
-const onMounted = createHook$1("m");
-const onBeforeUpdate = createHook$1("bu");
-const onUpdated = createHook$1("u");
-const onBeforeUnmount = createHook$1("bum");
-const onUnmounted = createHook$1("um");
-const onServerPrefetch = createHook$1("sp");
-const onRenderTriggered = createHook$1(
+const onBeforeMount = createHook("bm");
+const onMounted = createHook("m");
+const onBeforeUpdate = createHook("bu");
+const onUpdated = createHook("u");
+const onBeforeUnmount = createHook("bum");
+const onUnmounted = createHook("um");
+const onServerPrefetch = createHook("sp");
+const onRenderTriggered = createHook(
   "rtg"
 );
-const onRenderTracked = createHook$1(
+const onRenderTracked = createHook(
   "rtc"
 );
 function onErrorCaptured(hook, target = currentInstance) {
@@ -5193,6 +5213,7 @@ const o = (value, key) => vOn(value, key);
 const f = (source, renderItem) => vFor(source, renderItem);
 const s = (value) => stringifyStyle(value);
 const e = (target, ...sources) => extend(target, ...sources);
+const n = (value) => normalizeClass(value);
 const t = (val) => toDisplayString(val);
 const p = (props) => renderProps(props);
 function createApp$1(rootComponent, rootProps = null) {
@@ -5785,8 +5806,8 @@ const $once = defineSyncApi(API_ONCE, (name, callback) => {
 const $off = defineSyncApi(API_OFF, (name, callback) => {
   if (!isArray(name))
     name = name ? [name] : [];
-  name.forEach((n) => {
-    eventBus.off(n, callback);
+  name.forEach((n2) => {
+    eventBus.off(n2, callback);
   });
 }, OffProtocol);
 const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
@@ -7014,9 +7035,9 @@ function isConsoleWritable() {
   return isWritable;
 }
 function initRuntimeSocketService() {
-  const hosts = "127.0.0.1,192.168.0.114";
+  const hosts = "127.0.0.1,192.168.0.110";
   const port = "8090";
-  const id = "mp-weixin_pjnm_O";
+  const id = "mp-weixin__AUzZY";
   const lazy = typeof swan !== "undefined";
   let restoreError = lazy ? () => {
   } : initOnError();
@@ -7962,19 +7983,14 @@ const createSubpackageApp = initCreateSubpackageApp();
   wx.createPluginApp = global.createPluginApp = createPluginApp;
   wx.createSubpackageApp = global.createSubpackageApp = createSubpackageApp;
 }
-const createHook = (lifecycle) => (hook, target = getCurrentInstance()) => {
-  !isInSSRComponentSetup && injectHook(lifecycle, hook, target);
-};
-const onShow = /* @__PURE__ */ createHook(ON_SHOW);
 exports._export_sfc = _export_sfc;
-exports.computed = computed;
 exports.createSSRApp = createSSRApp;
 exports.e = e;
 exports.f = f;
 exports.index = index;
+exports.n = n;
 exports.o = o;
 exports.onMounted = onMounted;
-exports.onShow = onShow;
 exports.p = p;
 exports.ref = ref;
 exports.resolveComponent = resolveComponent;

+ 24 - 18
unpackage/dist/dev/mp-weixin/pages/about/index.js

@@ -2,10 +2,14 @@
 const common_vendor = require("../../common/vendor.js");
 const common_assets = require("../../common/assets.js");
 const _sfc_main = {
-  __name: "index",
-  setup(__props) {
-    const version = common_vendor.ref("1.0.0");
-    const copyText = (text) => {
+  data() {
+    return {
+      version: "1.0.0"
+    };
+  },
+  methods: {
+    // 复制文本
+    copyText(text) {
       common_vendor.index.setClipboardData({
         data: text,
         success: () => {
@@ -15,25 +19,27 @@ const _sfc_main = {
           });
         }
       });
-    };
-    const makePhoneCall = () => {
+    },
+    // 拨打电话
+    makePhoneCall() {
       common_vendor.index.makePhoneCall({
         phoneNumber: "400-xxx-xxxx",
         fail: () => {
-          copyText("400-xxx-xxxx");
+          this.copyText("400-xxx-xxxx");
         }
       });
-    };
-    return (_ctx, _cache) => {
-      return {
-        a: common_assets._imports_0$3,
-        b: common_vendor.t(version.value),
-        c: common_vendor.o(($event) => copyText("www.nongxiaoyu.com")),
-        d: common_vendor.o(makePhoneCall),
-        e: common_vendor.o(($event) => copyText("service@nongxiaoyu.com"))
-      };
-    };
+    }
   }
 };
-wx.createPage(_sfc_main);
+function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
+  return {
+    a: common_assets._imports_0$4,
+    b: common_vendor.t($data.version),
+    c: common_vendor.o(($event) => $options.copyText("www.nongxiaoyu.com")),
+    d: common_vendor.o((...args) => $options.makePhoneCall && $options.makePhoneCall(...args)),
+    e: common_vendor.o(($event) => $options.copyText("service@nongxiaoyu.com"))
+  };
+}
+const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
+wx.createPage(MiniProgramPage);
 //# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/about/index.js.map

+ 1 - 1
unpackage/dist/dev/mp-weixin/pages/ai-chat/index.js

@@ -196,7 +196,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
       return common_vendor.e({
         a: message.sender === "ai"
       }, message.sender === "ai" ? common_vendor.e({
-        b: common_assets._imports_0,
+        b: common_assets._imports_0$1,
         c: message.isTyping
       }, message.isTyping ? {} : {
         d: common_vendor.t(message.content),

+ 355 - 328
unpackage/dist/dev/mp-weixin/pages/dashboard/index.js

@@ -1,354 +1,381 @@
 "use strict";
 const common_vendor = require("../../common/vendor.js");
-if (!Array) {
-  const _component_u_icon = common_vendor.resolveComponent("u-icon");
-  const _component_circle = common_vendor.resolveComponent("circle");
-  const _component_path = common_vendor.resolveComponent("path");
-  const _component_svg = common_vendor.resolveComponent("svg");
-  const _component_line = common_vendor.resolveComponent("line");
-  (_component_u_icon + _component_circle + _component_path + _component_svg + _component_line)();
-}
+const common_assets = require("../../common/assets.js");
 const _sfc_main = {
-  __name: "index",
-  setup(__props) {
-    const userData = common_vendor.ref({
-      nickname: "张三",
-      selectedPlot: "南地块"
-    });
-    const showPlotSelector = common_vendor.ref(false);
-    common_vendor.ref([
-      { name: "南地块", id: 1 },
-      { name: "西北区域", id: 2 },
-      { name: "稻田", id: 3 },
-      { name: "东区试验田", id: 4 },
-      { name: "温室大棚", id: 5 }
-    ]);
-    const farmData = common_vendor.ref({
-      plotCount: 5,
-      deviceCount: 12,
-      deviceOnlineRate: 85,
-      taskCompletionRate: 76,
-      recentActivities: [
-        { title: "稻田水稻施肥", date: "2023-05-15", status: "pending", id: 1, executor: "李四" },
-        { title: "南地块除草", date: "2023-05-12", status: "completed", id: 2, executor: "王五" },
-        { title: "西北区域杀虫", date: "2023-05-08", status: "completed", id: 3, executor: "张三" }
-      ]
-    });
-    const coreStats = common_vendor.computed(() => [
-      {
-        label: "地块总数",
-        value: farmData.value.plotCount,
-        icon: "map",
-        bgColor: "linear-gradient(135deg, #4CAF50, #2E7D32)"
+  data() {
+    return {
+      // 用户数据
+      userData: {
+        nickname: "张三",
+        selectedPlot: "南地块"
       },
-      {
-        label: "设备数量",
-        value: farmData.value.deviceCount,
-        icon: "setting",
-        bgColor: "linear-gradient(135deg, #42A5F5, #1976D2)"
+      // 农场数据
+      farmData: {
+        plotCount: 5,
+        deviceCount: 12,
+        deviceOnlineRate: 85,
+        taskCompletionRate: 76,
+        recentActivities: [
+          { title: "稻田水稻施肥", date: "2023-05-15", status: "pending", id: 1, executor: "李四" },
+          { title: "南地块除草", date: "2023-05-12", status: "completed", id: 2, executor: "王五" },
+          { title: "西北区域杀虫", date: "2023-05-08", status: "completed", id: 3, executor: "张三" }
+        ]
       },
-      {
-        label: "设备在线率",
-        value: farmData.value.deviceOnlineRate + "%",
-        icon: "wifi",
-        bgColor: "linear-gradient(135deg, #26C6DA, #00838F)"
-      },
-      {
-        label: "农事完成率",
-        value: farmData.value.taskCompletionRate + "%",
-        icon: "checkmark-circle",
-        bgColor: "linear-gradient(135deg, #66BB6A, #388E3C)"
-      }
-    ]);
-    const weatherData = common_vendor.ref({
-      temperature: 28,
-      description: "晴朗",
-      humidity: 65,
-      windLevel: 3,
-      rainfall: 0,
-      advice: "今日适宜进行春玉米防虫作业,注意水分管理。"
-    });
-    common_vendor.ref({
-      operation: {
-        workCount: 36,
-        workArea: 128,
-        mainCrops: ["小麦", "玉米"]
+      // 天气数据
+      weatherData: {
+        temperature: 28,
+        description: "晴朗",
+        humidity: 65,
+        windLevel: 3,
+        rainfall: 0,
+        advice: "今日适宜进行春玉米防虫作业,注意水分管理。"
       },
-      machine: {
-        totalHours: 172,
-        mainEquipment: ["无人拖拉机", "播种机"]
+      // 作物数据
+      crops: [
+        { name: "水稻", area: 48, progress: 75, icon: "🌾", bgColor: "#4CAF50" },
+        { name: "小麦", area: 36, progress: 60, icon: "🌿", bgColor: "#66BB6A" },
+        { name: "玉米", area: 32, progress: 85, icon: "🌽", bgColor: "#43A047" },
+        { name: "大豆", area: 12, progress: 40, icon: "🫘", bgColor: "#388E3C" }
+      ],
+      // 监控设备指标
+      deviceMetrics: [
+        {
+          name: "在线设备",
+          value: "28",
+          icon: "wifi",
+          gradient: "linear-gradient(135deg, #26A69A, #00796B)",
+          trend: {
+            type: "up",
+            value: "5.2%"
+          }
+        },
+        {
+          name: "告警设备",
+          value: "3",
+          icon: "error-circle",
+          gradient: "linear-gradient(135deg, #FF7043, #E64A19)",
+          trend: {
+            type: "down",
+            value: "2.1%"
+          }
+        },
+        {
+          name: "离线设备",
+          value: "5",
+          icon: "close-circle",
+          gradient: "linear-gradient(135deg, #78909C, #455A64)",
+          trend: {
+            type: "down",
+            value: "1.8%"
+          }
+        },
+        {
+          name: "数据稳定性",
+          value: "96.3%",
+          icon: "checkmark-circle",
+          gradient: "linear-gradient(135deg, #66BB6A, #388E3C)",
+          trend: {
+            type: "up",
+            value: "0.5%"
+          }
+        }
+      ],
+      // 农业机械指标
+      machineryMetrics: [
+        {
+          name: "今日运行时长",
+          value: "36.5",
+          unit: "小时",
+          icon: "clock",
+          gradient: "linear-gradient(135deg, #42A5F5, #1976D2)"
+        },
+        {
+          name: "今日作业地块",
+          value: "8",
+          unit: "块",
+          icon: "map",
+          gradient: "linear-gradient(135deg, #66BB6A, #388E3C)"
+        },
+        {
+          name: "今日执行任务",
+          value: "12",
+          unit: "个",
+          icon: "calendar",
+          gradient: "linear-gradient(135deg, #FFA726, #F57C00)"
+        },
+        {
+          name: "使用率",
+          value: "78.2%",
+          icon: "star",
+          gradient: "linear-gradient(135deg, #5C6BC0, #3949AB)",
+          trend: {
+            type: "up",
+            value: "3.7%"
+          }
+        }
+      ],
+      // 当前选择的周期
+      currentPeriod: "month",
+      // 警报摘要数据
+      alertSummaries: [
+        {
+          title: "设备离线",
+          value: "3 台",
+          iconSrc: "/static/icons/offline.png",
+          description: "最长离线时长:26 小时",
+          type: "device-offline"
+        },
+        {
+          title: "虫害预警",
+          value: "稻飞虱|小地老虎",
+          iconSrc: "/static/icons/Pest_Alert.png",
+          description: "预警等级:中",
+          type: "pest-warning"
+        },
+        {
+          title: "气象预警",
+          value: "强风(8级)",
+          iconSrc: "/static/icons/weather_risk.png",
+          description: "预计:未来 12 小时内",
+          type: "weather-risk"
+        },
+        {
+          title: "作业延迟",
+          value: "5 项",
+          iconSrc: "/static/icons/task_delay.png",
+          description: "最长延迟:3 天",
+          type: "task-delay"
+        }
+      ],
+      // 农场绩效图表数据 - 月度数据
+      monthlyData: {
+        months: ["1月", "2月", "3月", "4月", "5月", "6月"],
+        thisYearValues: [2.8, 3.4, 2.9, 3.6, 3.8, 3.2],
+        lastYearValues: [2.5, 2.8, 2.4, 3, 3.2, 2.7]
       },
-      irrigation: {
-        irrigationArea: 85,
-        fertilizationCount: 12,
-        waterUsage: 230
+      // 季度数据
+      quarterlyData: {
+        months: ["Q1", "Q2", "Q3", "Q4"],
+        thisYearValues: [3.2, 3.7, 4, 3.5],
+        lastYearValues: [2.7, 3.3, 3.6, 3]
       },
-      pest: {
-        totalReports: 5,
-        handled: 4,
-        pending: 1
+      // 年度数据
+      yearlyData: {
+        months: ["2019", "2020", "2021", "2022", "2023"],
+        thisYearValues: [2.2, 2.5, 3, 3.5, 3.8],
+        lastYearValues: [2, 2.3, 2.7, 3.2, 3.4]
       }
-    });
-    const navigateToProfile = () => {
+    };
+  },
+  computed: {
+    // 核心统计数据
+    coreStats() {
+      return [
+        {
+          label: "地块",
+          value: this.farmData.plotCount,
+          icon: "map"
+        },
+        {
+          label: "设备",
+          value: this.farmData.deviceCount,
+          icon: "setting"
+        },
+        {
+          label: "设备在线",
+          value: this.farmData.deviceOnlineRate + "%",
+          icon: "wifi"
+        },
+        {
+          label: "任务完成",
+          value: this.farmData.taskCompletionRate + "%",
+          icon: "checkmark-circle"
+        }
+      ];
+    },
+    // 根据当前周期计算要显示的数据
+    farmPerformanceData() {
+      if (this.currentPeriod === "month") {
+        return this.monthlyData;
+      } else if (this.currentPeriod === "quarter") {
+        return this.quarterlyData;
+      } else {
+        return this.yearlyData;
+      }
+    }
+  },
+  methods: {
+    // 处理切换地块
+    handleSwitchPlot() {
+      common_vendor.index.showActionSheet({
+        itemList: ["南地块", "西北区域", "稻田", "东区试验田"],
+        success: (res) => {
+          this.userData.selectedPlot = ["南地块", "西北区域", "稻田", "东区试验田"][res.tapIndex];
+        }
+      });
+    },
+    // 导航到个人资料
+    navigateToProfile() {
       common_vendor.index.navigateTo({
         url: "/pages/profile/index"
       });
-    };
-    const handleSwitchPlot = () => {
-      showPlotSelector.value = true;
-    };
-    const navigateToActivity = (activity) => {
+    },
+    // 导航到活动详情
+    navigateToActivity(activity) {
       common_vendor.index.navigateTo({
         url: `/pages/activity/detail?id=${activity.id}`
       });
-    };
-    const navigateToAllActivities = () => {
-      common_vendor.index.navigateTo({
-        url: "/pages/activity/list"
-      });
-    };
-    const fetchStatsData = async () => {
-      try {
-        common_vendor.index.__f__("log", "at pages/dashboard/index.vue:429", "统计数据加载成功");
-      } catch (error) {
-        common_vendor.index.__f__("error", "at pages/dashboard/index.vue:431", "获取统计数据失败", error);
-        common_vendor.index.showToast({
-          title: "数据加载失败",
-          icon: "none"
-        });
-      }
-    };
-    common_vendor.onMounted(() => {
-      fetchStatsData();
-    });
-    return (_ctx, _cache) => {
+    },
+    // 导航到警报详情
+    navigateToAlertDetail(type) {
+      common_vendor.index.__f__("log", "at pages/dashboard/index.vue:482", `Navigating to alert detail for type: ${type}`);
+    },
+    // 切换周期
+    changePeriod(period) {
+      this.currentPeriod = period;
+    }
+  },
+  mounted() {
+  }
+};
+if (!Array) {
+  const _component_u_icon = common_vendor.resolveComponent("u-icon");
+  _component_u_icon();
+}
+function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
+  return common_vendor.e({
+    a: common_vendor.t($data.userData.nickname),
+    b: common_vendor.t($data.userData.selectedPlot),
+    c: common_vendor.o((...args) => $options.handleSwitchPlot && $options.handleSwitchPlot(...args)),
+    d: common_assets._imports_0,
+    e: common_vendor.o((...args) => $options.navigateToProfile && $options.navigateToProfile(...args)),
+    f: common_vendor.f($data.alertSummaries, (alert, index, i0) => {
       return {
-        a: common_vendor.t(userData.value.nickname),
-        b: common_vendor.t(userData.value.selectedPlot),
-        c: common_vendor.p({
-          name: "arrow-down-fill",
+        a: alert.iconSrc,
+        b: common_vendor.t(alert.title),
+        c: common_vendor.t(alert.value),
+        d: common_vendor.t(alert.description),
+        e: index,
+        f: common_vendor.o(($event) => $options.navigateToAlertDetail(alert.type), index)
+      };
+    }),
+    g: $data.weatherData.description === "晴朗"
+  }, $data.weatherData.description === "晴朗" ? {} : $data.weatherData.description.includes("雨") ? {} : $data.weatherData.description.includes("云") ? {} : {}, {
+    h: $data.weatherData.description.includes("雨"),
+    i: $data.weatherData.description.includes("云"),
+    j: common_vendor.t($data.weatherData.temperature),
+    k: common_vendor.t($data.weatherData.description),
+    l: common_vendor.t($data.weatherData.humidity),
+    m: common_vendor.t($data.weatherData.windLevel),
+    n: common_vendor.t($data.weatherData.rainfall),
+    o: common_vendor.p({
+      name: "info",
+      color: "#ffffff",
+      size: "14"
+    }),
+    p: common_vendor.t($data.weatherData.advice),
+    q: $data.currentPeriod === "month" ? 1 : "",
+    r: common_vendor.o(($event) => $options.changePeriod("month")),
+    s: $data.currentPeriod === "quarter" ? 1 : "",
+    t: common_vendor.o(($event) => $options.changePeriod("quarter")),
+    v: $data.currentPeriod === "year" ? 1 : "",
+    w: common_vendor.o(($event) => $options.changePeriod("year")),
+    x: common_vendor.p({
+      name: "arrow-upward",
+      color: "#3BB44A",
+      size: "12"
+    }),
+    y: common_vendor.p({
+      name: "arrow-upward",
+      color: "#3BB44A",
+      size: "12"
+    }),
+    z: common_vendor.f([4, 3, 2, 1, 0], (value, index, i0) => {
+      return {
+        a: common_vendor.t(value),
+        b: index
+      };
+    }),
+    A: common_vendor.f($options.farmPerformanceData.months, (month, index, i0) => {
+      return {
+        a: $options.farmPerformanceData.lastYearValues[index] / 4 * 100 + "%",
+        b: $options.farmPerformanceData.thisYearValues[index] / 4 * 100 + "%",
+        c: common_vendor.t(month),
+        d: index
+      };
+    }),
+    B: common_vendor.f($data.deviceMetrics, (metric, index, i0) => {
+      return {
+        a: "a869e244-3-" + i0,
+        b: common_vendor.p({
+          name: metric.icon,
           color: "#ffffff",
-          size: "14"
-        }),
-        d: common_vendor.o(handleSwitchPlot),
-        e: common_vendor.p({
-          cx: "45",
-          cy: "45",
-          r: "45",
-          fill: "#E1F5E9"
-        }),
-        f: common_vendor.p({
-          d: "M15 35C15 35 25 25 35 35C45 45 65 25 75 35",
-          stroke: "#4CAF50",
-          ["stroke-width"]: "2",
-          ["stroke-opacity"]: "0.3"
+          size: "18"
         }),
+        c: metric.gradient,
+        d: common_vendor.t(metric.name),
+        e: common_vendor.t(metric.value),
+        f: "a869e244-4-" + i0,
         g: common_vendor.p({
-          d: "M20 30L20 40",
-          stroke: "#4CAF50",
-          ["stroke-width"]: "2",
-          ["stroke-opacity"]: "0.3"
+          name: metric.trend.type === "up" ? "arrow-upward" : "arrow-downward",
+          color: metric.trend.type === "up" ? "#3BB44A" : "#FF5252",
+          size: "14"
         }),
+        h: common_vendor.t(metric.trend.value),
+        i: common_vendor.n(metric.trend.type),
+        j: index
+      };
+    }),
+    C: common_vendor.f($data.machineryMetrics, (metric, index, i0) => {
+      return common_vendor.e({
+        a: "a869e244-5-" + i0,
+        b: common_vendor.p({
+          name: metric.icon,
+          color: "#ffffff",
+          size: "18"
+        }),
+        c: metric.gradient,
+        d: common_vendor.t(metric.name),
+        e: common_vendor.t(metric.value),
+        f: metric.trend
+      }, metric.trend ? {
+        g: "a869e244-6-" + i0,
         h: common_vendor.p({
-          d: "M35 30L35 45",
-          stroke: "#4CAF50",
-          ["stroke-width"]: "2",
-          ["stroke-opacity"]: "0.3"
-        }),
-        i: common_vendor.p({
-          d: "M50 30L50 40",
-          stroke: "#4CAF50",
-          ["stroke-width"]: "2",
-          ["stroke-opacity"]: "0.3"
-        }),
-        j: common_vendor.p({
-          d: "M65 30L65 45",
-          stroke: "#4CAF50",
-          ["stroke-width"]: "2",
-          ["stroke-opacity"]: "0.3"
-        }),
-        k: common_vendor.p({
-          cx: "45",
-          cy: "35",
-          r: "15",
-          fill: "#4CAF50"
-        }),
-        l: common_vendor.p({
-          d: "M25 82C25 67 34 55 45 55C56 55 65 67 65 82H25Z",
-          fill: "#4CAF50"
-        }),
-        m: common_vendor.p({
-          d: "M25 30C25 30 35 20 45 20C55 20 65 30 65 30C65 30 55 25 45 25C35 25 25 30 25 30Z",
-          fill: "#8BC34A"
-        }),
-        n: common_vendor.p({
-          cx: "38",
-          cy: "32",
-          r: "2",
-          fill: "white",
-          ["fill-opacity"]: "0.7"
-        }),
-        o: common_vendor.p({
-          cx: "52",
-          cy: "32",
-          r: "2",
-          fill: "white",
-          ["fill-opacity"]: "0.7"
-        }),
-        p: common_vendor.p({
-          d: "M40 40C40 40 43 42 45 42C47 42 50 40 50 40",
-          stroke: "white",
-          ["stroke-width"]: "1.5",
-          ["stroke-linecap"]: "round"
-        }),
-        q: common_vendor.p({
-          d: "M70 15C70 15 75 20 75 25",
-          stroke: "#8BC34A",
-          ["stroke-width"]: "1.5",
-          ["stroke-linecap"]: "round"
-        }),
-        r: common_vendor.p({
-          d: "M73 18L77 20",
-          stroke: "#8BC34A",
-          ["stroke-width"]: "1.5",
-          ["stroke-linecap"]: "round"
-        }),
-        s: common_vendor.p({
-          d: "M72 22L76 24",
-          stroke: "#8BC34A",
-          ["stroke-width"]: "1.5",
-          ["stroke-linecap"]: "round"
-        }),
-        t: common_vendor.p({
-          d: "M20 15C20 15 15 20 15 25",
-          stroke: "#8BC34A",
-          ["stroke-width"]: "1.5",
-          ["stroke-linecap"]: "round"
-        }),
-        v: common_vendor.p({
-          d: "M17 18L13 20",
-          stroke: "#8BC34A",
-          ["stroke-width"]: "1.5",
-          ["stroke-linecap"]: "round"
-        }),
-        w: common_vendor.p({
-          d: "M18 22L14 24",
-          stroke: "#8BC34A",
-          ["stroke-width"]: "1.5",
-          ["stroke-linecap"]: "round"
-        }),
-        x: common_vendor.p({
-          width: "100%",
-          height: "100%",
-          viewBox: "0 0 90 90",
-          fill: "none",
-          xmlns: "http://www.w3.org/2000/svg"
-        }),
-        y: common_vendor.o(navigateToProfile),
-        z: common_vendor.f(coreStats.value, (stat, index, i0) => {
-          return {
-            a: common_vendor.t(stat.value),
-            b: common_vendor.t(stat.label),
-            c: index
-          };
-        }),
-        A: common_vendor.p({
-          name: "arrow-right",
-          color: "#4CAF50",
+          name: metric.trend.type === "up" ? "arrow-upward" : "arrow-downward",
+          color: metric.trend.type === "up" ? "#3BB44A" : "#FF5252",
           size: "14"
         }),
-        B: common_vendor.o(navigateToAllActivities),
-        C: common_vendor.f(farmData.value.recentActivities, (item, index, i0) => {
-          return {
-            a: common_vendor.t(item.title),
-            b: common_vendor.t(item.executor),
-            c: common_vendor.t(item.date),
-            d: "a869e244-21-" + i0,
-            e: index,
-            f: common_vendor.o(($event) => navigateToActivity(item), index)
-          };
-        }),
-        D: common_vendor.p({
-          name: "arrow-right",
-          color: "#CCCCCC",
-          size: "16"
-        }),
-        E: common_vendor.p({
-          cx: "100",
-          cy: "100",
-          r: "65",
-          fill: "rgba(255, 193, 7, 0.1)"
-        }),
-        F: common_vendor.p({
-          cx: "100",
-          cy: "100",
-          r: "45",
-          fill: "#FFC107"
-        }),
-        G: common_vendor.p({
-          x1: "100",
-          y1: "25",
-          x2: "100",
-          y2: "5",
-          stroke: "#FFC107",
-          ["stroke-width"]: "8",
-          ["stroke-linecap"]: "round"
-        }),
-        H: common_vendor.p({
-          x1: "100",
-          y1: "195",
-          x2: "100",
-          y2: "175",
-          stroke: "#FFC107",
-          ["stroke-width"]: "8",
-          ["stroke-linecap"]: "round"
-        }),
-        I: common_vendor.p({
-          x1: "25",
-          y1: "100",
-          x2: "5",
-          y2: "100",
-          stroke: "#FFC107",
-          ["stroke-width"]: "8",
-          ["stroke-linecap"]: "round"
-        }),
-        J: common_vendor.p({
-          x1: "195",
-          y1: "100",
-          x2: "175",
-          y2: "100",
-          stroke: "#FFC107",
-          ["stroke-width"]: "8",
-          ["stroke-linecap"]: "round"
-        }),
-        K: common_vendor.p({
-          cx: "100",
-          cy: "100",
-          r: "35",
-          fill: "#FF9800"
-        }),
-        L: common_vendor.p({
-          width: "48",
-          height: "48",
-          viewBox: "0 0 200 200",
-          fill: "none",
-          xmlns: "http://www.w3.org/2000/svg"
-        }),
-        M: common_vendor.t(weatherData.value.temperature),
-        N: common_vendor.t(weatherData.value.description),
-        O: common_vendor.p({
-          name: "account",
-          color: "#666666",
-          size: "32"
-        }),
-        P: common_vendor.t(weatherData.value.advice),
-        Q: common_vendor.t(weatherData.value.humidity),
-        R: common_vendor.t(weatherData.value.windLevel),
-        S: common_vendor.t(weatherData.value.rainfall)
+        i: common_vendor.t(metric.trend.value),
+        j: common_vendor.n(metric.trend.type)
+      } : {
+        k: common_vendor.t(metric.unit)
+      }, {
+        l: index
+      });
+    }),
+    D: common_vendor.p({
+      name: "arrow-right",
+      color: "#ffffff",
+      size: "14"
+    }),
+    E: common_vendor.f($data.farmData.recentActivities, (activity, index, i0) => {
+      return {
+        a: common_vendor.n(activity.status),
+        b: common_vendor.t(activity.title),
+        c: common_vendor.t(activity.date),
+        d: common_vendor.t(activity.executor),
+        e: "a869e244-8-" + i0,
+        f: common_vendor.o(($event) => $options.navigateToActivity(activity), index),
+        g: index
       };
-    };
-  }
-};
-const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-a869e244"]]);
+    }),
+    F: common_vendor.p({
+      name: "arrow-right",
+      color: "#3BB44A",
+      size: "14"
+    })
+  });
+}
+const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-a869e244"]]);
 wx.createPage(MiniProgramPage);
 //# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/dashboard/index.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/dashboard/index.wxml


+ 556 - 384
unpackage/dist/dev/mp-weixin/pages/dashboard/index.wxss

@@ -1,564 +1,736 @@
 .dashboard-container.data-v-a869e244 {
-  padding: 30rpx 20rpx;
-  background-color: #f8f9fa;
+  padding: 24rpx;
+  background-color: #F6FDF9;
   min-height: 100vh;
 }
-.header-card.data-v-a869e244 {
+.user-info-card.data-v-a869e244 {
   display: flex;
   justify-content: space-between;
   align-items: center;
-  padding: 30rpx;
-  background: linear-gradient(135deg, #4CAF50, #2E7D32);
+  background: white;
   border-radius: 20rpx;
+  padding: 24rpx 28rpx;
   margin-bottom: 24rpx;
-  box-shadow: 0 8rpx 16rpx rgba(76, 175, 80, 0.2);
+  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.04);
 }
-.header-card .header-left.data-v-a869e244 {
+.user-info-card .user-info.data-v-a869e244 {
   flex: 1;
 }
-.header-card .header-right.data-v-a869e244 {
+.user-info-card .user-info .greeting.data-v-a869e244 {
+  font-size: 32rpx;
+  font-weight: 600;
+  color: #2C3E50;
+  margin-bottom: 8rpx;
+}
+.user-info-card .user-info .plot-info.data-v-a869e244 {
   display: flex;
   align-items: center;
 }
-.header-card .user-avatar.data-v-a869e244 {
-  width: 90rpx;
-  height: 90rpx;
+.user-info-card .user-info .plot-info .plot-label.data-v-a869e244 {
+  font-size: 24rpx;
+  color: #8C9396;
+}
+.user-info-card .user-info .plot-info .plot-name.data-v-a869e244 {
+  font-size: 24rpx;
+  color: #2C3E50;
+  margin: 0 8rpx;
+}
+.user-info-card .user-info .plot-info .switch-plot-btn.data-v-a869e244 {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: linear-gradient(135deg, #3BB44A, #66CC6A);
+  border-radius: 16rpx;
+  padding: 4rpx 16rpx;
+  box-shadow: 0 2rpx 8rpx rgba(59, 180, 74, 0.25);
+}
+.user-info-card .user-info .plot-info .switch-plot-btn text.data-v-a869e244 {
+  font-size: 22rpx;
+  color: white;
+}
+.user-info-card .avatar-container .avatar.data-v-a869e244 {
+  width: 80rpx;
+  height: 80rpx;
   border-radius: 50%;
+  background-color: rgba(59, 180, 74, 0.1);
+  border: 2px solid rgba(255, 255, 255, 0.8);
+  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
   overflow: hidden;
-  background-color: #ffffff;
-  box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
 }
-.header-card .user-avatar .avatar-svg.data-v-a869e244 {
+.user-info-card .avatar-container .avatar image.data-v-a869e244 {
   width: 100%;
   height: 100%;
+  object-fit: cover;
 }
-.header-card .welcome-text.data-v-a869e244 {
-  font-size: 38rpx;
-  font-weight: bold;
-  color: #ffffff;
+.stats-overview.data-v-a869e244 {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 16rpx;
+  margin-bottom: 24rpx;
+}
+.stats-overview .alert-card.data-v-a869e244 {
+  background: white;
+  border-radius: 16rpx;
+  padding: 20rpx;
+  display: flex;
+  flex-direction: column;
+  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
+  position: relative;
+  overflow: hidden;
+  transition: transform 0.2s, box-shadow 0.2s;
+}
+.stats-overview .alert-card.data-v-a869e244:active {
+  transform: translateY(2rpx);
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
+}
+.stats-overview .alert-card.data-v-a869e244::after {
+  content: "";
+  position: absolute;
+  right: 12rpx;
+  bottom: 12rpx;
+  width: 16rpx;
+  height: 16rpx;
+  border-top: 2rpx solid #E0E0E0;
+  border-right: 2rpx solid #E0E0E0;
+  transform: rotate(45deg);
+  opacity: 0.5;
+}
+.stats-overview .alert-card .alert-header.data-v-a869e244 {
+  display: flex;
+  align-items: center;
   margin-bottom: 12rpx;
 }
-.header-card .plot-info.data-v-a869e244 {
+.stats-overview .alert-card .alert-header .alert-icon-container.data-v-a869e244 {
+  margin-right: 12rpx;
+  width: 40rpx;
+  height: 40rpx;
   display: flex;
   align-items: center;
-  flex-wrap: wrap;
+  justify-content: center;
 }
-.header-card .plot-info .plot-label.data-v-a869e244 {
-  font-size: 28rpx;
-  color: rgba(255, 255, 255, 0.9);
-  margin-right: 4rpx;
+.stats-overview .alert-card .alert-header .alert-icon-container .custom-icon.data-v-a869e244 {
+  width: 40rpx;
+  height: 40rpx;
+  object-fit: contain;
 }
-.header-card .plot-info .plot-name.data-v-a869e244 {
-  font-size: 28rpx;
-  color: #ffffff;
-  font-weight: 500;
-  margin-right: 16rpx;
+.stats-overview .alert-card .alert-header .alert-title.data-v-a869e244 {
+  font-size: 26rpx;
+  color: #333333;
+  font-weight: 600;
+}
+.stats-overview .alert-card .alert-value.data-v-a869e244 {
+  font-size: 30rpx;
+  font-weight: 700;
+  color: #3BB44A;
+  margin-bottom: 6rpx;
+  line-height: 1.2;
+  padding-left: 52rpx;
+}
+.stats-overview .alert-card .alert-description.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #757575;
+  padding-left: 52rpx;
+}
+.card.data-v-a869e244 {
+  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;
 }
-.header-card .plot-info .switch-plot-btn.data-v-a869e244 {
+.card .card-header.data-v-a869e244 {
   display: flex;
+  justify-content: space-between;
   align-items: center;
-  background-color: rgba(255, 255, 255, 0.2);
-  border-radius: 30rpx;
-  padding: 4rpx 16rpx;
-  margin-left: 8rpx;
+  padding: 24rpx 28rpx;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.03);
 }
-.header-card .plot-info .switch-plot-btn text.data-v-a869e244 {
-  font-size: 24rpx;
-  color: #ffffff;
-  margin-left: 4rpx;
+.card .card-header .title-section.data-v-a869e244 {
+  display: flex;
+  align-items: center;
 }
-.stats-grid.data-v-a869e244 {
-  display: grid;
-  grid-template-columns: repeat(2, 1fr);
-  gap: 20rpx;
-  margin-bottom: 24rpx;
+.card .card-header .title-section .title-line.data-v-a869e244 {
+  width: 4rpx;
+  height: 28rpx;
+  border-radius: 0;
+  background: linear-gradient(180deg, #3BB44A, #66CC6A);
+  margin-right: 16rpx;
 }
-.stats-grid .stat-card.data-v-a869e244 {
-  background-color: #ffffff;
+.card .card-header .title-section .card-title.data-v-a869e244 {
+  font-size: 28rpx;
+  font-weight: 600;
+  color: #2C3E50;
+}
+.card .card-header .period-selector.data-v-a869e244 {
+  display: flex;
+  background: rgba(0, 0, 0, 0.03);
+  border-radius: 20rpx;
+  padding: 2rpx;
+}
+.card .card-header .period-selector .period.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
+  padding: 8rpx 16rpx;
   border-radius: 16rpx;
-  padding: 24rpx;
+}
+.card .card-header .period-selector .period.active.data-v-a869e244 {
+  background: white;
+  color: #3BB44A;
+  font-weight: 500;
+  box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.05);
+}
+.card .card-header .action-button.data-v-a869e244 {
   display: flex;
-  flex-direction: column;
   align-items: center;
-  justify-content: center;
-  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
+  background: linear-gradient(135deg, #3BB44A, #66CC6A);
+  border-radius: 24rpx;
+  padding: 8rpx 16rpx;
+  box-shadow: 0 2rpx 8rpx rgba(59, 180, 74, 0.25);
+}
+.card .card-header .action-button text.data-v-a869e244 {
+  font-size: 22rpx;
+  color: white;
+  margin-right: 6rpx;
 }
-.stats-grid .stat-card .stat-content.data-v-a869e244 {
+.farm-performance .performance-stats.data-v-a869e244 {
+  display: flex;
+  padding: 24rpx 28rpx;
+}
+.farm-performance .performance-stats .metric-column.data-v-a869e244 {
+  flex: 1;
   display: flex;
   flex-direction: column;
+}
+.farm-performance .performance-stats .metric-column .metric-value.data-v-a869e244 {
+  font-size: 48rpx;
+  font-weight: 700;
+  color: #2C3E50;
+  margin-bottom: 6rpx;
+  line-height: 1.1;
+}
+.farm-performance .performance-stats .metric-column .metric-value .metric-unit.data-v-a869e244 {
+  font-size: 24rpx;
+  font-weight: 500;
+  color: #8C9396;
+  margin-left: 4rpx;
+}
+.farm-performance .performance-stats .metric-column .metric-label.data-v-a869e244 {
+  font-size: 24rpx;
+  color: #8C9396;
+  margin-bottom: 12rpx;
+}
+.farm-performance .performance-stats .metric-column .growth.data-v-a869e244 {
+  display: flex;
   align-items: center;
-  text-align: center;
+  font-size: 22rpx;
 }
-.stats-grid .stat-card .stat-content .stat-value.data-v-a869e244 {
-  font-size: 40rpx;
-  font-weight: bold;
-  color: #333;
-  margin-bottom: 10rpx;
+.farm-performance .performance-stats .metric-column .growth.positive.data-v-a869e244 {
+  color: #3BB44A;
 }
-.stats-grid .stat-card .stat-content .stat-label.data-v-a869e244 {
-  font-size: 26rpx;
-  color: #666;
+.farm-performance .performance-stats .metric-column .growth.negative.data-v-a869e244 {
+  color: #FF5252;
 }
-.section-card.data-v-a869e244 {
-  background-color: #ffffff;
-  border-radius: 16rpx;
-  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
-  margin-bottom: 24rpx;
-  overflow: hidden;
+.farm-performance .performance-stats .metric-divider.data-v-a869e244 {
+  width: 1px;
+  background: rgba(0, 0, 0, 0.04);
+  margin: 0 28rpx;
 }
-.section-card .card-header.data-v-a869e244 {
+.farm-performance .chart-container.data-v-a869e244 {
+  padding: 24rpx 28rpx;
+}
+.farm-performance .chart-container .chart-header.data-v-a869e244 {
   display: flex;
   justify-content: space-between;
   align-items: center;
-  padding: 20rpx 24rpx;
-  border-bottom: 1px solid #f0f0f0;
+  margin-bottom: 16rpx;
 }
-.section-card .card-header .card-title.data-v-a869e244 {
+.farm-performance .chart-container .chart-header .chart-title.data-v-a869e244 {
+  font-size: 28rpx;
+  font-weight: 600;
+  color: #2C3E50;
+}
+.farm-performance .chart-container .chart-header .chart-legend.data-v-a869e244 {
   display: flex;
   align-items: center;
 }
-.section-card .card-header .card-title .title-icon.data-v-a869e244 {
+.farm-performance .chart-container .chart-header .chart-legend .legend-item.data-v-a869e244 {
   display: flex;
   align-items: center;
-  margin-right: 12rpx;
+  margin-left: 16rpx;
 }
-.section-card .card-header .card-title .title-icon .icon-dot.data-v-a869e244 {
-  width: 12rpx;
-  height: 12rpx;
-  border-radius: 6rpx;
-  background-color: #4CAF50;
+.farm-performance .chart-container .chart-header .chart-legend .legend-item .legend-color.data-v-a869e244 {
+  width: 16rpx;
+  height: 16rpx;
+  border-radius: 4rpx;
+  margin-right: 8rpx;
 }
-.section-card .card-header .card-title .title-text.data-v-a869e244 {
-  font-size: 30rpx;
-  font-weight: bold;
-  color: #333;
+.farm-performance .chart-container .chart-header .chart-legend .legend-item text.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
 }
-.section-card .card-header .more-link.data-v-a869e244 {
+.farm-performance .chart-container .chart-body.data-v-a869e244 {
   display: flex;
-  align-items: center;
+  height: 240rpx;
+  position: relative;
+  margin-top: 12rpx;
 }
-.section-card .card-header .more-link text.data-v-a869e244 {
-  font-size: 24rpx;
-  color: #4CAF50;
-  margin-right: 6rpx;
+.farm-performance .chart-container .chart-body .y-axis.data-v-a869e244 {
+  width: 40rpx;
+  height: 200rpx;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  text-align: right;
+  padding-right: 16rpx;
+  margin-bottom: 30rpx;
 }
-.section-card .card-body.data-v-a869e244 {
-  padding: 0;
-  border: 1rpx solid rgba(76, 175, 80, 0.15);
-  border-radius: 10rpx;
-  overflow: hidden;
-  box-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.03);
+.farm-performance .chart-container .chart-body .y-axis text.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
 }
-.section-card .card-body .activity-item.data-v-a869e244:not(:last-child) {
+.farm-performance .chart-container .chart-body .bars-container.data-v-a869e244 {
+  flex: 1;
+  display: flex;
+  justify-content: space-around;
+  height: 200rpx;
   position: relative;
 }
-.section-card .card-body .activity-item.data-v-a869e244:not(:last-child):after {
+.farm-performance .chart-container .chart-body .bars-container.data-v-a869e244::before {
   content: "";
   position: absolute;
   left: 0;
-  right: 0;
   bottom: 0;
-  height: 1rpx;
-  background-color: #f2f2f2;
+  width: 100%;
+  height: 1px;
+  background-color: #E0E0E0;
 }
-.activity-header.data-v-a869e244 {
+.farm-performance .chart-container .chart-body .bars-container .month-group.data-v-a869e244 {
   display: flex;
-  margin-bottom: 0;
-  padding-bottom: 18rpx;
-  padding-top: 18rpx;
-  border-bottom: 1rpx solid rgba(76, 175, 80, 0.1);
-  background-color: rgba(76, 175, 80, 0.07);
-  border-radius: 8rpx 8rpx 0 0;
+  flex-direction: column;
+  align-items: center;
+  width: 14%;
 }
-.activity-header .activity-header-right.data-v-a869e244 {
-  flex: 1;
+.farm-performance .chart-container .chart-body .bars-container .month-group .bar-wrapper.data-v-a869e244 {
+  height: 200rpx;
+  width: 70%;
   display: flex;
-  justify-content: space-between;
-  align-items: center;
+  justify-content: center;
+  position: relative;
 }
-.activity-header .activity-header-right .header-title.data-v-a869e244 {
-  flex: 1.5;
-  font-size: 28rpx;
-  color: #4CAF50;
-  font-weight: bold;
-  padding-left: 30rpx;
-  text-align: left;
+.farm-performance .chart-container .chart-body .bars-container .month-group .bar-wrapper .bar.data-v-a869e244 {
+  position: absolute;
+  bottom: 0;
+  width: 45%;
+  border-radius: 4rpx 4rpx 0 0;
+  transition: height 0.3s ease;
 }
-.activity-header .activity-header-right .header-executor.data-v-a869e244 {
-  font-size: 28rpx;
-  color: #4CAF50;
-  font-weight: bold;
-  width: 180rpx;
-  text-align: center;
+.farm-performance .chart-container .chart-body .bars-container .month-group .bar-wrapper .last-year.data-v-a869e244 {
+  left: 0;
+  background: #E0E0E0;
 }
-.activity-header .activity-header-right .header-date.data-v-a869e244 {
-  font-size: 28rpx;
-  color: #4CAF50;
-  font-weight: bold;
-  min-width: 250rpx;
-  text-align: center;
-  margin-right: 20rpx;
+.farm-performance .chart-container .chart-body .bars-container .month-group .bar-wrapper .this-year.data-v-a869e244 {
+  right: 0;
+  background: #3BB44A;
 }
-.activity-header .activity-header-right .header-action.data-v-a869e244 {
-  width: 36rpx;
+.farm-performance .chart-container .chart-body .bars-container .month-group .month-label.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
+  margin-top: 8rpx;
+}
+.crop-portfolio .crop-grid.data-v-a869e244 {
+  padding: 16rpx;
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 16rpx;
+}
+.crop-portfolio .crop-item.data-v-a869e244 {
+  padding: 16rpx;
+  background: rgba(0, 0, 0, 0.01);
+  border-radius: 16rpx;
+  display: flex;
+  align-items: center;
 }
-.activity-item.data-v-a869e244 {
+.crop-portfolio .crop-item .crop-icon.data-v-a869e244 {
+  width: 48rpx;
+  height: 48rpx;
+  border-radius: 12rpx;
   display: flex;
-  margin-bottom: 0;
-  padding: 24rpx 0;
-  border-bottom: 1rpx solid #f2f2f2;
-  height: 60rpx;
+  align-items: center;
+  justify-content: center;
+  margin-right: 16rpx;
 }
-.activity-item.data-v-a869e244:last-child {
-  border-bottom-left-radius: 8rpx;
-  border-bottom-right-radius: 8rpx;
+.crop-portfolio .crop-item .crop-icon .crop-icon-text.data-v-a869e244 {
+  font-size: 24rpx;
 }
-.activity-item .activity-right.data-v-a869e244 {
+.crop-portfolio .crop-item .crop-details.data-v-a869e244 {
   flex: 1;
+}
+.crop-portfolio .crop-item .crop-details .crop-info.data-v-a869e244 {
   display: flex;
   justify-content: space-between;
   align-items: center;
-  padding-bottom: 0;
-  border-bottom: none;
-  height: 100%;
+  margin-bottom: 10rpx;
 }
-.activity-item .activity-right .activity-content.data-v-a869e244 {
-  flex: 1.5;
-  padding-left: 30rpx;
-  height: 100%;
+.crop-portfolio .crop-item .crop-details .crop-info .crop-name.data-v-a869e244 {
+  font-size: 26rpx;
+  font-weight: 600;
+  color: #2C3E50;
+}
+.crop-portfolio .crop-item .crop-details .crop-info .crop-area.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
+}
+.crop-portfolio .crop-item .crop-details .crop-stats.data-v-a869e244 {
   display: flex;
   align-items: center;
 }
-.activity-item .activity-right .activity-content .activity-title.data-v-a869e244 {
-  font-size: 28rpx;
-  color: #333;
-  font-weight: 500;
-  text-align: left;
-  line-height: 1.4;
+.crop-portfolio .crop-item .crop-details .crop-stats .crop-progress-container.data-v-a869e244 {
+  flex: 1;
+  height: 8rpx;
+  background: rgba(0, 0, 0, 0.03);
+  border-radius: 4rpx;
+  margin-right: 12rpx;
+  overflow: hidden;
 }
-.activity-item .activity-right .activity-executor.data-v-a869e244 {
-  font-size: 28rpx;
-  color: #666;
-  width: 180rpx;
-  text-align: center;
+.crop-portfolio .crop-item .crop-details .crop-stats .crop-progress-container .crop-progress.data-v-a869e244 {
   height: 100%;
+  border-radius: 4rpx;
+}
+.crop-portfolio .crop-item .crop-details .crop-stats .crop-progress-text.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
+  min-width: 36rpx;
+  text-align: right;
+}
+.resource-efficiency .resource-grid.data-v-a869e244 {
+  padding: 16rpx;
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 16rpx;
+}
+.resource-efficiency .resource-item.data-v-a869e244 {
+  padding: 16rpx;
+  background: rgba(0, 0, 0, 0.01);
+  border-radius: 16rpx;
+}
+.resource-efficiency .resource-item .resource-header.data-v-a869e244 {
   display: flex;
   align-items: center;
-  justify-content: center;
+  margin-bottom: 12rpx;
 }
-.activity-item .activity-right .activity-date.data-v-a869e244 {
-  font-size: 28rpx;
-  color: #999;
-  text-align: center;
-  margin-right: 20rpx;
-  min-width: 250rpx;
-  height: 100%;
+.resource-efficiency .resource-item .resource-header .icon-tile.data-v-a869e244 {
+  width: 28rpx;
+  height: 28rpx;
+  border-radius: 6rpx;
   display: flex;
   align-items: center;
   justify-content: center;
+  margin-right: 10rpx;
 }
-.activity-item .activity-right .activity-action.data-v-a869e244 {
-  width: 36rpx;
+.resource-efficiency .resource-item .resource-header .icon-tile.small.data-v-a869e244 {
+  width: 28rpx;
+  height: 28rpx;
 }
-.weather-card .card-body.data-v-a869e244 {
-  padding: 0;
-  background: #ffffff;
-  border-radius: 12rpx;
-  overflow: hidden;
+.resource-efficiency .resource-item .resource-header .resource-name.data-v-a869e244 {
+  font-size: 24rpx;
+  color: #8C9396;
 }
-.weather-card .weather-main.data-v-a869e244 {
-  padding: 30rpx;
+.resource-efficiency .resource-item .resource-value.data-v-a869e244 {
+  margin-bottom: 12rpx;
 }
-.weather-card .weather-top.data-v-a869e244 {
-  display: flex;
-  margin-bottom: 0;
+.resource-efficiency .resource-item .resource-value .value.data-v-a869e244 {
+  font-size: 36rpx;
+  font-weight: 700;
+  color: #2C3E50;
 }
-.weather-card .weather-left.data-v-a869e244 {
-  display: flex;
-  align-items: flex-start;
-  gap: 20rpx;
+.resource-efficiency .resource-item .resource-value .unit.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
+  margin-left: 4rpx;
 }
-.weather-card .weather-icon-large.data-v-a869e244 {
-  width: 48rpx;
-  height: 48rpx;
-  margin-top: 6rpx;
-  flex-shrink: 0;
+.resource-efficiency .resource-item .resource-progress-container .resource-progress-bg.data-v-a869e244 {
+  height: 8rpx;
+  background: rgba(0, 0, 0, 0.03);
+  border-radius: 4rpx;
+  margin-bottom: 8rpx;
+  overflow: hidden;
+}
+.resource-efficiency .resource-item .resource-progress-container .resource-progress-bg .resource-progress.data-v-a869e244 {
+  height: 100%;
+  border-radius: 4rpx;
+}
+.resource-efficiency .resource-item .resource-progress-container .resource-efficiency.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
+}
+.farm-activities .activities-list.data-v-a869e244 {
+  padding: 8rpx 0;
 }
-.weather-card .weather-info .temp-row.data-v-a869e244 {
+.farm-activities .activity-item.data-v-a869e244 {
   display: flex;
   align-items: center;
-  gap: 16rpx;
+  padding: 20rpx 28rpx;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.02);
 }
-.weather-card .weather-info .temp-row .temp-display.data-v-a869e244 {
-  display: flex;
-  align-items: flex-start;
+.farm-activities .activity-item.data-v-a869e244:last-child {
+  border-bottom: none;
 }
-.weather-card .weather-info .temp-row .temp-display .weather-temp.data-v-a869e244 {
-  font-size: 48rpx;
-  font-weight: 500;
-  color: #333;
-  line-height: 1;
+.farm-activities .activity-item .activity-dot.data-v-a869e244 {
+  width: 10rpx;
+  height: 10rpx;
+  border-radius: 50%;
+  margin-right: 16rpx;
+  flex-shrink: 0;
 }
-.weather-card .weather-info .temp-row .temp-display .temp-unit.data-v-a869e244 {
-  font-size: 24rpx;
-  color: #666;
-  margin-top: 6rpx;
-  margin-left: 2rpx;
+.farm-activities .activity-item .activity-dot.completed.data-v-a869e244 {
+  background: #4CAF50;
 }
-.weather-card .weather-info .temp-row .weather-desc.data-v-a869e244 {
-  font-size: 28rpx;
-  color: #666;
-  margin-top: 4rpx;
+.farm-activities .activity-item .activity-dot.pending.data-v-a869e244 {
+  background: #FFC107;
 }
-.weather-card .weather-advice.data-v-a869e244 {
-  background: #F8FFF9;
-  border: 2rpx solid rgba(76, 175, 80, 0.15);
-  border-radius: 12rpx;
-  padding: 24rpx;
-  margin-top: 24rpx;
+.farm-activities .activity-item .activity-dot.failed.data-v-a869e244 {
+  background: #FF5252;
 }
-.weather-card .weather-advice .advice-header.data-v-a869e244 {
+.farm-activities .activity-item .activity-details.data-v-a869e244 {
+  flex: 1;
+}
+.farm-activities .activity-item .activity-details .activity-title-row.data-v-a869e244 {
   display: flex;
+  justify-content: space-between;
   align-items: center;
-  gap: 8rpx;
-  margin-bottom: 12rpx;
+  margin-bottom: 6rpx;
 }
-.weather-card .weather-advice .advice-header .advice-title.data-v-a869e244 {
-  font-size: 28rpx;
-  color: #4CAF50;
+.farm-activities .activity-item .activity-details .activity-title-row .activity-title.data-v-a869e244 {
+  font-size: 26rpx;
   font-weight: 500;
+  color: #2C3E50;
 }
-.weather-card .weather-advice .advice-content.data-v-a869e244 {
-  font-size: 26rpx;
-  color: #333;
-  line-height: 1.5;
+.farm-activities .activity-item .activity-details .activity-title-row .activity-date.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
 }
-.weather-metrics.data-v-a869e244 {
+.farm-activities .activity-item .activity-details .activity-meta-row.data-v-a869e244 {
   display: flex;
   justify-content: space-between;
   align-items: center;
-  padding: 20rpx 30rpx;
-  border-top: 2rpx solid #f5f5f5;
 }
-.weather-metrics .metric-item.data-v-a869e244 {
-  flex: 1;
+.farm-activities .activity-item .activity-details .activity-meta-row .activity-executor.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
+}
+.farm-activities .activity-item .activity-details .activity-meta-row .activity-action.data-v-a869e244 {
   display: flex;
-  flex-direction: column;
   align-items: center;
 }
-.weather-metrics .metric-item .metric-label.data-v-a869e244 {
-  font-size: 24rpx;
-  color: #999;
-  margin-bottom: 8rpx;
+.farm-activities .activity-item .activity-details .activity-meta-row .activity-action .action-text.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #3BB44A;
+  margin-right: 6rpx;
 }
-.weather-metrics .metric-item .metric-value.data-v-a869e244 {
-  font-size: 28rpx;
-  color: #333;
-  font-weight: 500;
+.weather-card .weather-content.data-v-a869e244 {
+  padding: 20rpx 28rpx;
 }
-.weather-metrics .metric-divider.data-v-a869e244 {
-  width: 2rpx;
-  height: 40rpx;
-  background: #f0f0f0;
-  margin: 0 20rpx;
+.weather-card .current-weather.data-v-a869e244 {
+  display: flex;
+  align-items: center;
+  margin-bottom: 24rpx;
 }
-@keyframes rotate-a869e244 {
-from {
-    transform: rotate(0deg);
+.weather-card .current-weather .weather-icon-container.data-v-a869e244 {
+  margin-right: 20rpx;
 }
-to {
-    transform: rotate(360deg);
+.weather-card .current-weather .weather-icon-container .weather-icon.data-v-a869e244 {
+  font-size: 60rpx;
+  line-height: 1;
 }
+.weather-card .current-weather .weather-details .weather-temp.data-v-a869e244 {
+  font-size: 48rpx;
+  font-weight: 700;
+  color: #2C3E50;
+  line-height: 1.1;
 }
-@keyframes float-a869e244 {
-0%, 100% {
-    transform: translateY(0);
+.weather-card .current-weather .weather-details .weather-desc.data-v-a869e244 {
+  font-size: 26rpx;
+  color: #8C9396;
 }
-50% {
-    transform: translateY(-6rpx);
+.weather-card .weather-metrics.data-v-a869e244 {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 16rpx 24rpx;
+  margin-bottom: 24rpx;
+  border-radius: 12rpx;
+  background-color: rgba(247, 247, 247, 0.5);
+  border: 1px solid rgba(0, 0, 0, 0.03);
 }
+.weather-card .weather-metrics .weather-metric.data-v-a869e244 {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
 }
-@keyframes rainDrop-a869e244 {
-0%, 100% {
-    transform: translateY(0);
+.weather-card .weather-metrics .weather-metric .metric-label.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
+  margin-bottom: 6rpx;
 }
-50% {
-    transform: translateY(2rpx);
+.weather-card .weather-metrics .weather-metric .metric-value.data-v-a869e244 {
+  font-size: 28rpx;
+  font-weight: 600;
+  color: #2C3E50;
 }
+.weather-card .weather-metrics .vertical-divider.data-v-a869e244 {
+  width: 1px;
+  height: 36rpx;
+  background-color: rgba(0, 0, 0, 0.05);
 }
-.plot-selector.data-v-a869e244 {
-  background-color: #ffffff;
-  border-radius: 24rpx 24rpx 0 0;
-  overflow: hidden;
+.weather-card .weather-advice.data-v-a869e244 {
+  background: rgba(59, 180, 74, 0.05);
+  border-radius: 16rpx;
+  padding: 16rpx;
 }
-.plot-selector .plot-selector-header.data-v-a869e244 {
+.weather-card .weather-advice .advice-header.data-v-a869e244 {
   display: flex;
-  justify-content: space-between;
   align-items: center;
-  padding: 30rpx;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.plot-selector .plot-selector-header .plot-selector-title.data-v-a869e244 {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-}
-.plot-selector .plot-selector-body.data-v-a869e244 {
-  max-height: 60vh;
-  overflow-y: auto;
-  padding: 0 30rpx;
+  margin-bottom: 10rpx;
 }
-.plot-selector .plot-selector-body .plot-selector-item.data-v-a869e244 {
+.weather-card .weather-advice .advice-header .icon-tile.data-v-a869e244 {
+  width: 24rpx;
+  height: 24rpx;
+  border-radius: 50%;
+  background: linear-gradient(135deg, #3BB44A, #66CC6A);
   display: flex;
-  justify-content: space-between;
   align-items: center;
-  padding: 30rpx 0;
-  border-bottom: 1rpx solid #f0f0f0;
+  justify-content: center;
+  margin-right: 10rpx;
+  box-shadow: 0 2rpx 8rpx rgba(59, 180, 74, 0.25);
 }
-.plot-selector .plot-selector-body .plot-selector-item.data-v-a869e244:last-child {
-  border-bottom: none;
+.weather-card .weather-advice .advice-header .icon-tile.small.data-v-a869e244 {
+  width: 24rpx;
+  height: 24rpx;
 }
-.plot-selector .plot-selector-body .plot-selector-item.active .plot-name.data-v-a869e244 {
-  color: #4CAF50;
-  font-weight: bold;
+.weather-card .weather-advice .advice-header .advice-title.data-v-a869e244 {
+  font-size: 24rpx;
+  font-weight: 600;
+  color: #2C3E50;
 }
-.plot-selector .plot-selector-body .plot-selector-item .plot-name.data-v-a869e244 {
-  font-size: 30rpx;
-  color: #333;
+.weather-card .weather-advice .advice-content.data-v-a869e244 {
+  font-size: 24rpx;
+  color: #2C3E50;
+  line-height: 1.4;
+}
+@media screen and (max-width: 768px) {
+.stats-overview.data-v-a869e244 {
+    grid-template-columns: repeat(2, 1fr);
+}
+.crop-grid.data-v-a869e244 {
+    grid-template-columns: 1fr;
 }
-.stats-section.data-v-a869e244 {
-  margin: 40rpx 32rpx;
 }
-.stats-section .stats-grid.data-v-a869e244 {
+.device-overview .device-metrics-grid.data-v-a869e244 {
   display: grid;
   grid-template-columns: repeat(2, 1fr);
-  gap: 40rpx 32rpx;
-}
-.stats-section .stat-card.data-v-a869e244 {
-  background: #FAFAFA;
-  border-radius: 24rpx;
-  padding: 32rpx;
-  box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.04);
-  min-height: 320rpx;
-  display: flex;
-  flex-direction: column;
-  transition: all 0.3s ease;
+  gap: 16rpx;
+  padding: 16rpx;
 }
-.stats-section .stat-card.data-v-a869e244:hover {
-  transform: translateY(-2rpx);
-  box-shadow: 0 12rpx 48rpx rgba(0, 0, 0, 0.08);
+.device-overview .device-metric-card.data-v-a869e244 {
+  background: white;
+  border-radius: 16rpx;
+  padding: 20rpx;
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
+  border: 1px solid rgba(0, 0, 0, 0.02);
 }
-.stats-section .stat-card .card-header.data-v-a869e244 {
+.device-overview .device-metric-card .device-metric-header.data-v-a869e244 {
   display: flex;
   align-items: center;
-  justify-content: center;
-  margin-bottom: 32rpx;
-  gap: 16rpx;
+  margin-bottom: 16rpx;
 }
-.stats-section .stat-card .card-header .icon-badge.data-v-a869e244 {
-  width: 48rpx;
-  height: 48rpx;
+.device-overview .device-metric-card .device-metric-header .icon-tile.data-v-a869e244 {
+  width: 24rpx;
+  height: 24rpx;
   border-radius: 50%;
   display: flex;
   align-items: center;
   justify-content: center;
-  background: linear-gradient(135deg, var(--primary-color, #4CAF50), var(--primary-dark, #2E7D32));
-  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
+  margin-right: 10rpx;
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
 }
-.stats-section .stat-card .card-header .icon-badge .icon.data-v-a869e244 {
+.device-overview .device-metric-card .device-metric-header .metric-name.data-v-a869e244 {
   font-size: 24rpx;
+  color: #8C9396;
 }
-.stats-section .stat-card .card-header .card-title.data-v-a869e244 {
-  font-size: 32rpx;
-  color: #333;
-  font-weight: 600;
+.device-overview .device-metric-card .device-metric-value.data-v-a869e244 {
+  font-size: 44rpx;
+  font-weight: 700;
+  color: #2C3E50;
+  margin-bottom: 12rpx;
 }
-.stats-section .stat-card .card-content.data-v-a869e244 {
-  flex: 1;
+.device-overview .device-metric-card .device-metric-trend.data-v-a869e244 {
   display: flex;
-  flex-direction: column;
-  justify-content: space-between;
+  align-items: center;
+  font-size: 22rpx;
 }
-.stats-section .stat-card .card-content .main-stats.data-v-a869e244 {
-  display: flex;
-  justify-content: space-around;
-  gap: 24rpx;
-  margin-bottom: 32rpx;
+.device-overview .device-metric-card .device-metric-trend.up.data-v-a869e244 {
+  color: #3BB44A;
 }
-.stats-section .stat-card .card-content .main-stats .stat-item.data-v-a869e244 {
-  flex: 1;
-  text-align: center;
+.device-overview .device-metric-card .device-metric-trend.down.data-v-a869e244 {
+  color: #FF5252;
 }
-.stats-section .stat-card .card-content .main-stats .stat-item .number.data-v-a869e244 {
-  font-size: 48rpx;
-  font-weight: 600;
-  color: #333;
-  line-height: 1.5;
-  display: block;
-  animation: numberChange-a869e244 0.5s ease-out;
+.device-overview .device-metric-card .device-metric-trend text.data-v-a869e244 {
+  margin-left: 4rpx;
 }
-.stats-section .stat-card .card-content .main-stats .stat-item .label.data-v-a869e244 {
-  font-size: 24rpx;
-  color: #999;
-  line-height: 1.5;
-  display: block;
-  margin-top: 8rpx;
+.machinery-activity .machinery-metrics-grid.data-v-a869e244 {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 16rpx;
+  padding: 16rpx;
 }
-.stats-section .stat-card .card-content .main-stats .stat-item .progress-circle.data-v-a869e244 {
-  width: 96rpx;
-  height: 96rpx;
-  margin: 0 auto;
-  border-radius: 50%;
-  background: conic-gradient(var(--primary-color, #4CAF50) 80%, #f0f0f0 80%);
+.machinery-activity .machinery-metric-card.data-v-a869e244 {
+  background: white;
+  border-radius: 16rpx;
+  padding: 20rpx;
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
+  border: 1px solid rgba(0, 0, 0, 0.02);
+}
+.machinery-activity .machinery-metric-card .machinery-metric-header.data-v-a869e244 {
   display: flex;
   align-items: center;
-  justify-content: center;
-  position: relative;
+  margin-bottom: 16rpx;
 }
-.stats-section .stat-card .card-content .main-stats .stat-item .progress-circle.data-v-a869e244::after {
-  content: "";
-  position: absolute;
-  width: 80rpx;
-  height: 80rpx;
-  background: #FAFAFA;
+.machinery-activity .machinery-metric-card .machinery-metric-header .icon-tile.data-v-a869e244 {
+  width: 24rpx;
+  height: 24rpx;
   border-radius: 50%;
-}
-.stats-section .stat-card .card-content .main-stats .stat-item .progress-circle .progress-text.data-v-a869e244 {
-  font-size: 28rpx;
-  font-weight: 600;
-  color: #333;
-  z-index: 1;
-}
-.stats-section .stat-card .card-content .sub-info.data-v-a869e244 {
   display: flex;
   align-items: center;
   justify-content: center;
-  gap: 8rpx;
-  padding: 16rpx;
-  background: rgba(0, 0, 0, 0.02);
-  border-radius: 12rpx;
-}
-.stats-section .stat-card .card-content .sub-info .emoji.data-v-a869e244 {
-  font-size: 28rpx;
+  margin-right: 10rpx;
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
 }
-.stats-section .stat-card .card-content .sub-info .info-text.data-v-a869e244 {
+.machinery-activity .machinery-metric-card .machinery-metric-header .metric-name.data-v-a869e244 {
   font-size: 24rpx;
-  color: #666;
-  line-height: 1.5;
+  color: #8C9396;
 }
-.stats-section .stat-card .card-content .sub-info.warning.data-v-a869e244 {
-  background: rgba(255, 167, 38, 0.1);
+.machinery-activity .machinery-metric-card .machinery-metric-value.data-v-a869e244 {
+  font-size: 44rpx;
+  font-weight: 700;
+  color: #2C3E50;
+  margin-bottom: 12rpx;
 }
-.stats-section .stat-card .card-content .sub-info.warning .info-text.data-v-a869e244 {
-  color: #F57C00;
+.machinery-activity .machinery-metric-card .machinery-metric-trend.data-v-a869e244 {
+  display: flex;
+  align-items: center;
+  font-size: 22rpx;
 }
-@keyframes numberChange-a869e244 {
-from {
-    opacity: 0;
-    transform: translateY(10rpx);
+.machinery-activity .machinery-metric-card .machinery-metric-trend.up.data-v-a869e244 {
+  color: #3BB44A;
 }
-to {
-    opacity: 1;
-    transform: translateY(0);
+.machinery-activity .machinery-metric-card .machinery-metric-trend.down.data-v-a869e244 {
+  color: #FF5252;
+}
+.machinery-activity .machinery-metric-card .machinery-metric-trend text.data-v-a869e244 {
+  margin-left: 4rpx;
 }
+.machinery-activity .machinery-metric-card .machinery-metric-unit.data-v-a869e244 {
+  font-size: 22rpx;
+  color: #8C9396;
 }

+ 2 - 2
unpackage/dist/dev/mp-weixin/pages/knowledge/index.js

@@ -158,12 +158,12 @@ const _sfc_main = {
       } : {}, {
         k: currentTab.value === 0 && techList.value.length === 0 || currentTab.value === 1 && policyList.value.length === 0
       }, currentTab.value === 0 && techList.value.length === 0 || currentTab.value === 1 && policyList.value.length === 0 ? {
-        l: common_assets._imports_0$1
+        l: common_assets._imports_0$2
       } : {}, {
         m: common_vendor.o(loadMore),
         n: common_vendor.o(onRefresh),
         o: isRefreshing.value,
-        p: common_assets._imports_0,
+        p: common_assets._imports_0$1,
         q: common_vendor.o(navigateToAI)
       });
     };

+ 7 - 7
unpackage/dist/dev/mp-weixin/pages/privacy/index.js

@@ -1,11 +1,11 @@
 "use strict";
+const common_vendor = require("../../common/vendor.js");
 const _sfc_main = {
-  __name: "index",
-  setup(__props) {
-    return (_ctx, _cache) => {
-      return {};
-    };
-  }
+  // 隐私政策页面无需特殊逻辑,但仍需符合Vue 2格式
 };
-wx.createPage(_sfc_main);
+function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
+  return {};
+}
+const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
+wx.createPage(MiniProgramPage);
 //# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/privacy/index.js.map

+ 78 - 63
unpackage/dist/dev/mp-weixin/pages/settings/index.js

@@ -1,24 +1,32 @@
 "use strict";
 const common_vendor = require("../../common/vendor.js");
 const _sfc_main = {
-  __name: "index",
-  setup(__props) {
-    const notifications = common_vendor.ref({
-      system: true,
-      crop: true,
-      weather: true
-    });
-    const cacheSize = common_vendor.ref("0.00MB");
-    const version = common_vendor.ref("1.0.0");
-    const getCacheSize = () => {
+  data() {
+    return {
+      // 通知设置状态
+      notifications: {
+        system: true,
+        crop: true,
+        weather: true
+      },
+      // 缓存大小
+      cacheSize: "0.00MB",
+      // 版本号
+      version: "1.0.0"
+    };
+  },
+  methods: {
+    // 获取缓存大小
+    getCacheSize() {
       common_vendor.index.getStorageInfo({
         success: (res) => {
           const size = (res.currentSize / 1024).toFixed(2);
-          cacheSize.value = size + "MB";
+          this.cacheSize = size + "MB";
         }
       });
-    };
-    const handleClearCache = () => {
+    },
+    // 清除缓存
+    handleClearCache() {
       common_vendor.index.showModal({
         title: "提示",
         content: "确定要清除缓存吗?",
@@ -30,14 +38,15 @@ const _sfc_main = {
                   title: "清除成功",
                   icon: "success"
                 });
-                getCacheSize();
+                this.getCacheSize();
               }
             });
           }
         }
       });
-    };
-    const checkUpdate = () => {
+    },
+    // 检查更新
+    checkUpdate() {
       common_vendor.index.showLoading({ title: "检查更新中..." });
       setTimeout(() => {
         common_vendor.index.hideLoading();
@@ -46,62 +55,68 @@ const _sfc_main = {
           icon: "none"
         });
       }, 1500);
-    };
-    const handleSystemNotification = (e) => {
-      notifications.value.system = e.detail.value;
-      saveNotificationSettings();
-    };
-    const handleCropNotification = (e) => {
-      notifications.value.crop = e.detail.value;
-      saveNotificationSettings();
-    };
-    const handleWeatherNotification = (e) => {
-      notifications.value.weather = e.detail.value;
-      saveNotificationSettings();
-    };
-    const saveNotificationSettings = () => {
-      common_vendor.index.setStorageSync("notifications", notifications.value);
-    };
-    const loadNotificationSettings = () => {
+    },
+    // 通知设置处理函数
+    handleSystemNotification(e) {
+      this.notifications.system = e.detail.value;
+      this.saveNotificationSettings();
+    },
+    handleCropNotification(e) {
+      this.notifications.crop = e.detail.value;
+      this.saveNotificationSettings();
+    },
+    handleWeatherNotification(e) {
+      this.notifications.weather = e.detail.value;
+      this.saveNotificationSettings();
+    },
+    // 保存通知设置
+    saveNotificationSettings() {
+      common_vendor.index.setStorageSync("notifications", this.notifications);
+    },
+    // 加载通知设置
+    loadNotificationSettings() {
       const savedSettings = common_vendor.index.getStorageSync("notifications");
       if (savedSettings) {
-        notifications.value = savedSettings;
+        this.notifications = savedSettings;
       }
-    };
-    const navigateToAboutUs = () => {
+    },
+    // 页面跳转
+    navigateToAboutUs() {
       common_vendor.index.navigateTo({ url: "/pages/about/index" });
-    };
-    const navigateToPrivacy = () => {
+    },
+    navigateToPrivacy() {
       common_vendor.index.navigateTo({ url: "/pages/privacy/index" });
-    };
-    const handleContact = () => {
+    },
+    handleContact() {
       common_vendor.index.makePhoneCall({
         phoneNumber: "400-xxx-xxxx"
         // 替换为实际的客服电话
       });
-    };
-    common_vendor.onShow(() => {
-      getCacheSize();
-      loadNotificationSettings();
-    });
-    return (_ctx, _cache) => {
-      return {
-        a: notifications.value.system,
-        b: common_vendor.o(handleSystemNotification),
-        c: notifications.value.crop,
-        d: common_vendor.o(handleCropNotification),
-        e: notifications.value.weather,
-        f: common_vendor.o(handleWeatherNotification),
-        g: common_vendor.t(cacheSize.value),
-        h: common_vendor.o(handleClearCache),
-        i: common_vendor.t(version.value),
-        j: common_vendor.o(checkUpdate),
-        k: common_vendor.o(navigateToAboutUs),
-        l: common_vendor.o(handleContact),
-        m: common_vendor.o(navigateToPrivacy)
-      };
-    };
+    }
+  },
+  // 页面显示时加载数据
+  onShow() {
+    this.getCacheSize();
+    this.loadNotificationSettings();
   }
 };
-wx.createPage(_sfc_main);
+function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
+  return {
+    a: $data.notifications.system,
+    b: common_vendor.o((...args) => $options.handleSystemNotification && $options.handleSystemNotification(...args)),
+    c: $data.notifications.crop,
+    d: common_vendor.o((...args) => $options.handleCropNotification && $options.handleCropNotification(...args)),
+    e: $data.notifications.weather,
+    f: common_vendor.o((...args) => $options.handleWeatherNotification && $options.handleWeatherNotification(...args)),
+    g: common_vendor.t($data.cacheSize),
+    h: common_vendor.o((...args) => $options.handleClearCache && $options.handleClearCache(...args)),
+    i: common_vendor.t($data.version),
+    j: common_vendor.o((...args) => $options.checkUpdate && $options.checkUpdate(...args)),
+    k: common_vendor.o((...args) => $options.navigateToAboutUs && $options.navigateToAboutUs(...args)),
+    l: common_vendor.o((...args) => $options.handleContact && $options.handleContact(...args)),
+    m: common_vendor.o((...args) => $options.navigateToPrivacy && $options.navigateToPrivacy(...args))
+  };
+}
+const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
+wx.createPage(MiniProgramPage);
 //# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/settings/index.js.map

+ 1 - 1
unpackage/dist/dev/mp-weixin/pages/user/index.js

@@ -76,7 +76,7 @@ const _sfc_main = {
 };
 function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
   return {
-    a: common_assets._imports_0$2,
+    a: common_assets._imports_0$3,
     b: common_vendor.o((...args) => $options.navigateToPlots && $options.navigateToPlots(...args)),
     c: common_vendor.t($data.plotInfo.total),
     d: common_vendor.t($data.plotInfo.active),

BIN
unpackage/dist/dev/mp-weixin/static/.DS_Store


BIN
unpackage/dist/dev/mp-weixin/static/icons/.DS_Store


BIN
unpackage/dist/dev/mp-weixin/static/icons/activity-active.png


BIN
unpackage/dist/dev/mp-weixin/static/icons/activity.png


BIN
unpackage/dist/dev/mp-weixin/static/icons/device-active.png


BIN
unpackage/dist/dev/mp-weixin/static/icons/device.png


BIN
unpackage/dist/dev/mp-weixin/static/icons/home-active.png


BIN
unpackage/dist/dev/mp-weixin/static/icons/home.png


BIN
unpackage/dist/dev/mp-weixin/static/icons/knowledge-active.png


BIN
unpackage/dist/dev/mp-weixin/static/icons/knowledge.png


BIN
unpackage/dist/dev/mp-weixin/static/icons/user-active.png


BIN
unpackage/dist/dev/mp-weixin/static/icons/user.png


Някои файлове не бяха показани, защото твърде много файлове са промени