Procházet zdrojové kódy

feat: 添加虫情测报灯详情页功能及组件优化

refactor(cbd): 重构虫情分析组件以支持动态数据
feat(cbd): 实现虫情图表展示及害虫类型筛选功能
fix(cbd): 修复设备数据展示问题并优化样式
style(cbd): 调整害虫档案卡片布局和样式
perf(cbd): 优化图片展示组件性能及交互体验
fix(api): 修正请求处理逻辑并添加错误处理
docs: 更新package.json项目描述信息
allen před 7 hodinami
rodič
revize
40afad3f88

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 6671 - 11
package-lock.json


+ 13 - 15
package.json

@@ -1,18 +1,16 @@
 {
+  "name": "bigdata_WX",
+  "version": "1.0.0",
+  "description": "Big Data WeChat Mini Program",
+  "main": "index.js",
   "dependencies": {
-	    "name": "gulp",
-	    "version": "1.0.0",
-	    "description": "",
-	    "main": "index.js",
-	    "dependencies": {
-	      "gulp": "^4.0.2",
-	      "gulp-uglify": "^3.0.2"
-	    },
-	    "devDependencies": {},
-	    "scripts": {
-	      "test": "echo \"Error: no test specified\" && exit 1"
-	    },
-	    "author": "",
-	    "license": "ISC"
-  }
+    "echarts": "^6.0.0",
+    "gulp": "^4.0.2",
+    "gulp-uglify": "^3.0.2"
+  },
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "",
+  "license": "ISC"
 }

binární
pages/cbd/assets/cbd.png


binární
pages/cbd/assets/copy.png


binární
pages/cbd/assets/edit.png


binární
pages/cbd/assets/setting.png


binární
pages/cbd/assets/sim.png


+ 12 - 8
pages/cbd/components/DeviceCard.vue

@@ -1,33 +1,35 @@
 <template>
   <view class="device-card__body">
     <view class="device-card">
-      <view class="online-status">在线</view>
+      <view :class=" dataSource.status == 1 ?'online-status':'offline-status'">{{ dataSource.status === 1 ? '在线' : '离线' }}</view>
       <view class="device-card__title">设备ID</view>
       <view class="device-card__content">
-        <text class="device-id-text">{{ deviceId }}</text>
-        <text class="copy-icon" @tap="copyDeviceId">&#xe628;</text>
+        <text class="device-id-text">{{ dataSource.id  }}</text>
+        <img class="copy-icon" :src="copy" @click="copyDeviceId"/>
       </view>
     </view>
     <view class="device-card">
       <view class="device-card__title">上报时间</view>
-      <view class="device-card__content">2026-02-22 14:20:00</view>
+      <view class="device-card__content">{{ dataSource.uptime | timeFormat()}}</view>
     </view>
     <view class="device-card">
       <view class="device-card__title">设备位置</view>
-      <view class="device-card__content address">位置信息此处展示16个字超出省略省略省略…</view>
+      <view class="device-card__content address">{{ dataSource.address || '-' }}</view>
     </view>
   </view>
 </template>
 <script>
+import copy from '../assets/copy.png';
 export default {
   props: {
-    deviceId: {
-      type: String,
-      default: '2255666666666125'
+    dataSource: {
+      type: Object,
+      default: () => ({})
     }
   },
   data() {
     return {
+      copy,
       title: ''
     }
   },
@@ -115,6 +117,8 @@ export default {
         font-size: 32rpx;
         color: #86909C;
         cursor: pointer;
+        width: 28rpx;
+        height: 28rpx;
         &:active {
           opacity: 0.6;
         }

+ 54 - 24
pages/cbd/components/deviceData.vue

@@ -3,18 +3,19 @@
     <!-- 顶部时间戳和图标区域 -->
     <view class="device-data-wraper">
       <view class="top-bar">
-        <text class="timestamp">2025-12-28 08:00:00
+        <text class="timestamp">
+          {{formatDate(deviceInfo.uptime)}}
           <u-icon name="reload" color="#0BBC58" style="margin-left: 12rpx"></u-icon>
         </text>
         <view class="icon-group">
           <view class="icon-item refresh-icon" @click="refreshData">
-            <text class="iconfont">&#xe6aa;</text>
+            <img class="copy-icon" :src="sim"/>
           </view>
           <view class="icon-item settings-icon" @click="openSettings">
-            <text class="iconfont">&#xe634;</text>
+            <img class="copy-icon" :src="setting"/>
           </view>
           <view class="icon-item info-icon">
-            <text class="iconfont">&#xe604;</text>
+            <img class="copy-icon" :src="edit"/>
           </view>
         </view>
       </view>
@@ -23,44 +24,43 @@
       <view class="main-data-panel">
         <view class="data-column-left">
           <view class="data-item">
-            <text class="data-value">84%</text>
+            <text class="data-value">{{ deviceStatic.vol }}</text>
             <text class="data-label">电量</text>
           </view>
           <view class="data-item">
-            <text class="data-value">时控</text>
-            <text class="data-label">电压</text>
+            <text class="data-value">{{ deviceStatic.gs == 1? '落虫' : '排水' }}</text>
+            <text class="data-label">通道状态</text>
           </view>
           <view class="data-item">
-            <text class="data-value temp-value">25°C</text>
-            <text class="data-label">环境湿度</text>
+            <text class="data-value">{{ deviceStatic.upds == 1? '打开' : '关闭' }}</text>
+            <text class="data-label">上仓门</text>
           </view>
           <view class="data-item">
-            <text class="data-value">70min</text>
-            <text class="data-label">数据上传间隔</text>
+            <text class="data-value">{{ deviceStatic.dver }}</text>
+            <text class="data-label">设备版本</text>
           </view>
         </view>
         <view class="data-column-left">
           <view class="data-item">
-            <text class="data-value">时控</text>
+            <text class="data-value">{{ deviceStatic.tmod == '1' ? '时控' : '光控' }}</text>
             <text class="data-label">定时模式</text>
           </view>
           <view class="data-item">
-            <text class="data-value">220V</text>
-            <text class="data-label">信号强度</text>
+            <text class="data-value">{{ deviceStatic.hs == '1' ? '加热' : '正常' }}</text>
+            <text class="data-label">加热状态</text>
           </view>
           <view class="data-item">
-            <text class="data-value">70%RH</text>
-            <text class="data-label">环境湿度</text>
+            <text class="data-value">{{ deviceStatic.dpds == '1' ? '打开' : '关闭' }}</text>
+            <text class="data-label">下仓门</text>
           </view>
           <view class="data-item">
-            <text class="data-value">1.54.40(2000W)-2.11.1</text>
-            <text class="data-label">设备版本</text>
+            <text class="data-value">{{ deviceStatic.tph }}</text>
+            <text class="data-label">高温限值</text>
           </view>
         </view>
         <view class="data-column-right">
           <view class="device-image-container">
-            <view class="device-glow"></view>
-            <image class="device-image" src="../assets/online.png" mode="aspectFit"></image>
+            <image class="device-image" src="../assets/cbd.png" mode="aspectFit"></image>
           </view>
         </view>
       </view>
@@ -160,13 +160,28 @@
 
 <script>
 import uCharts from '@/components/js_sdk/u-charts/u-charts/u-charts.js';
-
+import setting from '../assets/setting.png';
+import edit from '../assets/edit.png';
+import sim from '../assets/sim.png';
 let chartInstance = null;
 
 export default {
   name: 'DeviceData',
+  props:{
+    deviceInfo:{
+      type:Object,
+      default:()=>({}),
+    },
+    deviceStatic:{
+      type:Object,
+      default:()=>({}),
+    }
+  },
   data() {
     return {
+      setting,
+      edit,
+      sim,
       chartTabs: [
         { name: '温度', id: 'temp' },
         { name: '湿度', id: 'humidity' },
@@ -217,6 +232,17 @@ export default {
         this.drawChart();
       });
     },
+    // 格式化时间
+    formatDate(dateString) {
+      const date = new Date(dateString*1000);
+      const year = date.getFullYear();
+      const month = String(date.getMonth() + 1).padStart(2, '0');
+      const day = String(date.getDate()).padStart(2, '0');
+      const hour = String(date.getHours()).padStart(2, '0');
+      const minute = String(date.getMinutes()).padStart(2, '0');
+      const second = String(date.getSeconds()).padStart(2, '0');
+      return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
+    },
     drawChart() {
       const ctx = uni.createCanvasContext('tempChart', this);
 
@@ -417,9 +443,10 @@ export default {
 
       .device-image {
         position: relative;
-        width: 160rpx;
-        height: 160rpx;
+        width: 260rpx;
+        height: 360rpx;
         z-index: 1;
+        top: 60rpx;
       }
     }
 
@@ -568,7 +595,10 @@ export default {
     }
   }
 }
-
+.copy-icon{
+  width: 28rpx;
+  height: 28rpx;
+}
 /* 历史数据表格 */
 .history-section {
   background: #FFFFFF;

+ 14 - 44
pages/cbd/components/pestArchive.vue

@@ -6,10 +6,10 @@
 
       <view
         class="pest-card"
-        @tap="handleCardClick(item)"
+        @tap="handleCardClick()"
       >
         <view class="pest-card__image">
-          <image :src="item.image" mode="aspectFill" class="pest-img"></image>
+          <image :src="pest_info.img_urls" mode="aspectFill" class="pest-img"></image>
         </view>
         <view class="pest-card__info">
           <view class="pest-card__top">
@@ -17,31 +17,15 @@
               名称
             </view>
             <view class="pest-card__status">
-              叶蝉
+              {{ pest_info.name || '未知' }}
             </view>
           </view>
           <view class="pest-card__top">
             <view class="pest-card__name">
-              科目
+              害虫信息
             </view>
-            <view class="pest-card__status">
-              叶蝉
-            </view>
-          </view>
-          <view class="pest-card__top">
-            <view class="pest-card__name">
-              别名
-            </view>
-            <view class="pest-card__status">
-              叶蝉
-            </view>
-          </view>
-          <view class="pest-card__top">
-            <view class="pest-card__name">
-              危害作物
-            </view>
-            <view class="pest-card__status">
-              叶蝉科半翅目
+            <view class="pest-card__status" style="height:200rpx;overflow: auto;">
+              {{ pest_info.prevention || '未知' }}
             </view>
           </view>
         </view>
@@ -55,23 +39,19 @@ export default {
     scrollHeight: {
       type: String,
       default: '500rpx'
+    },
+    pest_info: {
+      type: Object,
+      default: () => ({})
     }
   },
   data() {
     return {
-      item: {
-        name: '小菜蛾',
-        status: '已防治',
-        statusType: 'handled',
-        time: '2025-06-15',
-        description: '采用生物防治方法,投放赤眼蜂进行防治',
-        image: 'https://via.placeholder.com/120x120/4CAF50/FFFFFF?text=小菜蛾'
-      },
     }
   },
   methods: {
-    handleCardClick(item) {
-      this.$emit('click', item)
+    handleCardClick() {
+      this.$emit('click', this.pest_info)
     }
   }
 }
@@ -156,36 +136,26 @@ export default {
 }
 
 .pest-card__info {
-  flex: 1;
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
   padding: 4rpx 0;
 }
 
 .pest-card__top {
   display: flex;
-  align-items: center;
 }
 
 .pest-card__name {
   font-size: 24rpx;
-  color: #042118;
   color: #999999;
   font-family: "Source Han Sans CN VF";
-  font-size: 24rpx;
   font-weight: 400;
+  width: 100rpx;
 }
 
 .pest-card__status {
-  padding: 6rpx 16rpx;
+  width: 270rpx;
   border-radius: 20rpx;
   font-size: 24rpx;
   font-weight: 500;
-  // 超出隐藏
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
 
   &.status--handled {
     background: rgba(0, 210, 106, 0.15);

+ 41 - 23
pages/cbd/components/pestDiscern.vue

@@ -14,7 +14,7 @@
           <u-line-progress :active-color="item.color" :percent="item.percent" :show-percent="false" height="8"></u-line-progress>
         </view>
         <view class="pest-discern__item-count">
-          6521
+          {{ total }}
         </view>
       </view>
     </view>
@@ -22,30 +22,48 @@
 </template>
 <script>
 export default {
+  props: {
+    total: {
+      type: Number,
+      default: 0
+    },
+    pest_order: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  watch:{
+    pest_order:{
+      handler(val){
+        this.pests = [];
+        let index = 0;
+        for(let key in val){
+          index++;
+          this.pests.push({
+            color: this.colors[index],
+            name: key,
+            percent: (val[key] / this.total) * 100
+          })
+        }
+      },
+      deep: true
+    }
+  },
   data() {
     return {
-      pests: [
-        {
-          color:'#FF3546',
-          name: '叶蝉',
-          percent: 90
-        },
-        {
-          color:'#F69B47',
-          name: '稻飞虱',
-          percent: 80
-        },
-        {
-          color:'#EEAC19',
-          name: '水龟虫',
-          percent: 70
-        },
-        {
-          color:'#0085FF',
-          name: '蝼蛄',
-          percent: 60
-        }
-      ]
+      colors:[
+        '#FF5951',
+        '#66EDED',
+        '#E67B3E',
+        '#6DE28B',
+        '#FFC97A',
+        '#E7EB4B',
+        '#1561F3',
+        '#FA73F5',
+        '#159AFF',
+        '#FA73F5'
+      ],
+      pests: []
     }
   }
 }

+ 195 - 177
pages/cbd/components/pestEchart.vue

@@ -33,227 +33,245 @@
 
       <!-- 图表区域 -->
       <view class="chart-container">
-        <canvas
-          canvas-id="pestChart"
-          id="pestChart"
-          class="chart-canvas"
-          @touchstart="touchStart"
-          @touchmove="touchMove"
-          @touchend="touchEnd"
-        />
+        <div id="pestChart" class="chart-canvas"></div>
       </view>
     </view>
   </view>
 </template>
 
 <script>
-import uCharts from '@/components/js_sdk/u-charts/u-charts/u-charts.js';
+import * as echarts from 'echarts';
 
 let chartInstance = null;
 
 export default {
   name: 'PestEchart',
+  props:{
+    pest_order:{
+      type: Object,
+      default: () => ({})
+    },
+    endDate: {
+      type: String,
+      default: ''
+    },
+    d_id: {
+      type: String | Number,
+      default: ''
+    },
+    day:{
+      type: Array,
+      default: () => []
+    },
+    pest:{
+      type: Array,
+      default: () => []
+    },
+  },
+  watch:{
+    pest_order:{
+      handler(val){
+        this.tabs = [];
+        for(let key in val){
+          this.tabs.push({
+            name: key,
+          })
+        }
+        const name = this.tabs[0]?.name;
+        this.currentPest = name;
+        if(this.currentPest){
+          this.getPestNameDetail(name);
+          this.setChartData();
+        }
+      },
+      deep: true
+    },
+    d_id:{
+      handler(val){
+        val && this.setChartData();
+      },
+      deep: true
+    },
+    endDate:{
+      handler(val){
+        val && this.setChartData();
+      },
+      deep: true
+    },
+    day:{
+      handler(){
+        this.initChart();
+      },
+      deep: true
+    },
+  },
   data() {
     return {
-      tabs: [
-        { name: '叶蝉', id: 'yechan' },
-        { name: '水龟虫', id: 'shuigui' },
-        { name: '稻飞虱', id: 'daofeishi' },
-        { name: '蝼蛄', id: 'lougou' },
-        { name: '叶蝉', id: 'yechan' },
-        { name: '蝼蛄', id: 'lougou' },
-        { name: '叶蝉', id: 'yechan' },
-        { name: '蝼蛄', id: 'lougou' },
-        { name: '叶蝉', id: 'yechan' },
-        { name: '甜菜', id: 'tiancai' }
-      ],
+      tabs: [],
+      currentPest:'',
       activeTab: 0,
       // 三个关键时期数据
       periodData: {
-        firstDate: '2025-05-24',
-        peakDate: '2025-06-24',
-        lastDate: '2025-07-24'
+        firstDate: '-',
+        peakDate: '-',
+        lastDate: '-'
       },
-      chartData: {
-        categories: ['05-29/00:00', '05-29/00:00', '05-29/00:00'],
-        series: [
-          {
-            name: '虫量',
-            data: [3, 7, 9]
-          }
-        ]
-      },
-      cWidth: 320,
-      cHeight: 200,
+      chartData: {},
       // 每个标签对应的数据
-      tabData: [
-        {
-          periodData: {
-            firstDate: '2025-05-24',
-            peakDate: '2025-06-24',
-            lastDate: '2025-07-24'
-          },
-          chartData: {
-            categories: ['05-29/00:00', '05-29/00:00', '05-29/00:00'],
-            series: [
-              {
-                name: '虫量',
-                data: [3, 7, 9]
-              }
-            ]
-          }
-        },
-        {
-          periodData: {
-            firstDate: '2025-06-01',
-            peakDate: '2025-07-01',
-            lastDate: '2025-08-01'
-          },
-          chartData: {
-            categories: ['06-05', '06-12', '06-19', '06-26', '07-03', '07-10', '07-17', '07-24', '07-31'],
-            series: [
-              {
-                name: '虫量',
-                data: [1, 3, 6, 10, 12, 8, 5, 3, 2]
-              }
-            ]
-          }
-        },
-        {
-          periodData: {
-            firstDate: '2025-05-15',
-            peakDate: '2025-06-15',
-            lastDate: '2025-07-15'
-          },
-          chartData: {
-            categories: ['05-20', '05-27', '06-03', '06-10', '06-17', '06-24', '07-01', '07-08', '07-15'],
-            series: [
-              {
-                name: '虫量',
-                data: [3, 5, 7, 9, 11, 8, 6, 4, 2]
-              }
-            ]
-          }
-        },
-        {
-          periodData: {
-            firstDate: '2025-05-20',
-            peakDate: '2025-06-20',
-            lastDate: '2025-07-20'
-          },
-          chartData: {
-            categories: ['05-25', '06-01', '06-08', '06-15', '06-22', '06-29', '07-06', '07-13', '07-20'],
-            series: [
-              {
-                name: '虫量',
-                data: [1, 2, 5, 8, 10, 7, 5, 3, 1]
-              }
-            ]
-          }
-        },
-        {
-          periodData: {
-            firstDate: '2025-06-05',
-            peakDate: '2025-07-05',
-            lastDate: '2025-08-05'
-          },
-          chartData: {
-            categories: ['06-10', '06-17', '06-24', '07-01', '07-08', '07-15', '07-22', '07-29', '08-05'],
-            series: [
-              {
-                name: '虫量',
-                data: [2, 4, 6, 9, 12, 10, 7, 4, 2]
-              }
-            ]
-          }
-        }
-      ]
+      tabData: []
     };
   },
-  mounted() {
-    this.initChart();
-  },
   methods: {
+    async getPestNameDetail(name){
+      const res = await this.$myRequest({
+        url: '/api/pest_name_detail',
+        method: 'POST',
+        data: {
+          name
+        },
+      });
+      this.deviceInfo = res
+      this.$emit('getInfo',res)
+    },
+    async setChartData(){
+      if(!this.currentPest){
+        return;
+      }
+      if(!this.d_id || !this.endDate){
+        return;
+      }
+     const res = await this.$myRequest({
+        url: '/api/api_gateway?method=forecast.cbd_analysis.pest_predict_time',
+        method: 'POST',
+        data: {
+          model:'B',
+          d_id: this.d_id,
+          year: this.endDate.split('-')[0],
+          pest: this.currentPest,
+        },
+      });
+      this.periodData = {
+        firstDate: res[0][0],
+        peakDate: res[1][0],
+        lastDate: res[2][0],
+      }
+    },
     initChart() {
-      this.cWidth = uni.upx2px(680);
-      this.cHeight = uni.upx2px(400);
       this.$nextTick(() => {
-        this.drawChart();
+        setTimeout(() => {
+          this.drawChart();
+        }, 100);
       });
     },
     drawChart() {
-      const ctx = uni.createCanvasContext('pestChart', this);
+      // 销毁已有的图表实例
+      if (chartInstance) {
+        chartInstance.dispose();
+        chartInstance = null;
+      }
+
+      // 初始化图表
+      const chartDom = document.getElementById('pestChart');
+      if (!chartDom) return;
 
-      chartInstance = new uCharts({
-        type: 'line',
-        context: ctx,
-        width: this.cWidth,
-        height: this.cHeight,
-        categories: this.chartData.categories,
-        series: this.chartData.series,
-        animation: true,
-        background: '#FFFFFF',
-        color: ['#0085FF'],
-        padding: [10, 20, 10, 0],
-        dataLabel: false,
-        dataPointShape: true,
-        enableScroll: false,
+      // 确保 pest 数据是数字类型
+      const dayData = this.day || [];
+      const pestData = (this.pest || []).map(item => Number(item) || 0);
+
+      chartInstance = echarts.init(chartDom);
+      const option = {
+        backgroundColor: '#FFFFFF',
+        tooltip: {
+          trigger: 'axis'
+        },
         legend: {
           show: false
         },
+        grid: {
+          left: '3%',
+          right: '4%',
+          bottom: '3%',
+          top: '3%',
+          containLabel: true
+        },
         xAxis: {
-          disableGrid: true,
-          boundaryGap: 'center',
-          fontSize: 11,
-          fontColor: '#999999',
-          scrollShow: false
+          type: 'category',
+          boundaryGap: false,
+          data: dayData,
+          axisLine: {
+            lineStyle: {
+              color: '#CCCCCC'
+            }
+          },
+          axisLabel: {
+            fontSize: 11,
+            color: '#999999'
+          },
+          splitLine: {
+            show: false
+          }
         },
         yAxis: {
-          gridType: 'none',
-          splitNumber: 4,
+          type: 'value',
           min: 0,
-          max: 12,
-          fontSize: 11,
-          fontColor: '#999999'
+          minInterval: 1,
+          splitNumber: 4,
+          axisLine: {
+            show: true,
+            lineStyle: {
+              color: '#CCCCCC'
+            }
+          },
+          axisLabel: {
+            fontSize: 11,
+            color: '#999999',
+            formatter: (value) => Math.floor(value)
+          },
+          splitLine: {
+            show: false
+          }
         },
-        extra: {
-          line: {
-            type: 'curve',
-            width: 2,
-            activeType: 'hollow',
-            linearType: 'none',
-            onShadow: false,
-            shadowColor: 'rgba(0, 133, 255, 0.3)',
-            tension: 0.4
+        series: [
+          {
+            name: '虫量',
+            type: 'line',
+            smooth: true,
+            data: pestData,
+            lineStyle: {
+              color: '#0085FF',
+              width: 2
+            },
+            itemStyle: {
+              color: '#0085FF',
+              borderColor: '#0085FF',
+              borderWidth: 2
+            },
+            symbol: 'circle',
+            symbolSize: 6,
           }
-        }
+        ]
+      };
+      
+      chartInstance.setOption(option, true);
+      
+      // 监听窗口大小变化,调整图表大小
+      window.addEventListener('resize', () => {
+        chartInstance.resize();
       });
     },
     switchTab(index) {
       this.activeTab = index;
       // 更新数据
-      this.periodData = this.tabData[index].periodData;
-      this.chartData = this.tabData[index].chartData;
+      const name = this.tabs[index]?.name;
+      this.currentPest = name
+      this.getPestNameDetail(name);
+      this.setChartData();
+      // this.periodData = this.tabData[index].periodData;
+      // this.chartData = this.tabData[index].chartData;
       // 重新绘制图表
       this.$nextTick(() => {
         this.drawChart();
       });
-    },
-    touchStart(e) {
-      if (chartInstance) {
-        chartInstance.scrollStart(e);
-      }
-    },
-    touchMove(e) {
-      if (chartInstance) {
-        chartInstance.scroll(e);
-      }
-    },
-    touchEnd(e) {
-      if (chartInstance) {
-        chartInstance.scrollEnd(e);
-        chartInstance.showToolTip(e);
-      }
     }
   }
 };
@@ -354,4 +372,4 @@ export default {
   width: 100%;
   height: 100%;
 }
-</style>
+</style>

+ 41 - 9
pages/cbd/components/photoImage.vue

@@ -3,12 +3,12 @@
     <view class="photo-image__tabs">
       <view
         class="photo-image__tab"
-        v-for="(tab, index) in tabs"
+        v-for="(pest, index) in pestList"
         :key="index"
-        :class="{ active: activeTab === index }"
-        @click="activeTab = index"
+        :class="{ active: activeIndexList.includes(index) }"
+        @click="changeTab(index)"
       >
-        <text class="tab-text">{{ tab }}</text>
+        <text class="tab-text">{{ pest.pest_name }}({{ pest.pest_num }})</text>
       </view>
     </view>
     <view class="photo-image__content">
@@ -17,12 +17,12 @@
           <view class="photo-image__item-img-container">
             <image
               class="photo-image__item-img"
-              src="https://trae-api-cn.mchost.guru/api/ide/v1/text_to_image?prompt=insects%20on%20a%20white%20surface&image_size=square"
+              :src="item.addr"
               mode="aspectFill"
             />
           </view>
           <view class="photo-image__item-time">
-            2025-12-28 08:00:00
+            {{ formatDate(item.addtime) }}
           </view>
         </view>
       </view>
@@ -32,14 +32,46 @@
 
 <script>
 export default {
+  props:{
+    pestList:{
+      type: Array,
+      default: () => []
+    },
+    images:{
+      type: Array,
+      default: () => []
+    },
+  },
   data() {
     return {
+      activeIndexList:[],
+      activePest:[],
       activeTab: 0,
       tabs: ['全部', '稻飞虱', '水龟虫', '蝼蛄', '系统','全部', '稻飞虱', '水龟虫', '蝼蛄', '系统'],
-      images: Array(12).fill(0) // 生成12个图片项
     };
   },
   methods: {
+    changeTab(index) {
+      if(this.activeIndexList.includes(index)){
+        this.activePest = this.activePest.filter(item => item !== this.pestList[index])
+        this.activeIndexList = this.activeIndexList.filter(item => item !== index)
+      }else{
+        this.activeIndexList.push(index)
+        this.activePest.push(this.pestList[index])
+      }
+      this.$emit('changeTab', this.activePest)
+    },
+    // 格式化时间
+    formatDate(dateString) {
+      const date = new Date(dateString*1000);
+      const year = date.getFullYear();
+      const month = String(date.getMonth() + 1).padStart(2, '0');
+      const day = String(date.getDate()).padStart(2, '0');
+      const hour = String(date.getHours()).padStart(2, '0');
+      const minute = String(date.getMinutes()).padStart(2, '0');
+      const second = String(date.getSeconds()).padStart(2, '0');
+      return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
+    },
     handleClick(item) {
       uni.navigateTo({
         url: '/pages/cbd/devicePhoto?devicePhoto=' + item
@@ -106,7 +138,6 @@ export default {
 
     &.active {
       color: #0BBC58;
-      font-weight: 500;
     }
 
     .tab-underline {
@@ -150,8 +181,9 @@ export default {
       bottom: 10rpx;
       margin-top: 12rpx;
       font-size: 22rpx;
-      color: #666;
+      color: #fff;
       text-align: center;
+      background-color: rgba(0, 0, 0, 0.5);
     }
   }
 }

+ 218 - 14
pages/cbd/detail.vue

@@ -28,29 +28,39 @@
             设备数据
           </view>
         </view>
-        <view class="tabs-timer-container">
-          <view class="tabs-timer-item">
-            2023-08-01
+        <view class="select-timer-container">
+          <view class="select-year">
+            <view class="select-year-item" @click="showPicker = true">
+              {{ currentYear }}
+              <u-icon name="arrow-down" size="18" class="arrow-down"></u-icon>
+            </view>
           </view>
-          至
-          <view class="tabs-timer-item">
-            2023-08-01
+          <view class="tabs-timer-container" @click="showCalendar">
+            <view class="tabs-timer-item">
+              {{startDate}}
+            </view>
+            至
+            <view class="tabs-timer-item">
+              {{endDate}}
+            </view>
+            <u-icon name="calendar" size="36" class="calendar-icon"></u-icon>
           </view>
-          <u-icon name="calendar" size="36" class="calendar-icon"></u-icon>
         </view>
       </view>
       <view v-if="activeTab === 'pestAnalysis'" class="tab-content">
-        <PestDiscern />
-        <PestEchart />
-        <PestArchive />
+        <PestDiscern :total="total" :pest_order="pest_order"/>
+        <PestEchart :pest_order="pest_order" @getInfo="getInfo" :endDate="endDate" :d_id="deviceInfo.d_id" :day="day" :pest="pest"/>
+        <PestArchive :pest_info="pestInfo"/>
       </view>
       <view v-if="activeTab === 'viewImage'">
-        <photoImage :images="imageList" />
+        <photoImage :images="imageList" :pestList="pestList" @changeTab="changeTab"/>
       </view>
       <view v-if="activeTab === 'deviceData'">
-        <DeviceData />
+        <DeviceData :deviceStatic="deviceStatic" :deviceInfo="deviceInfo"/>
       </view>
     </view>
+		<u-calendar v-model="show" :mode="mode" @change="handleChange" :max-date="maxDate" :min-date="minDate"></u-calendar>
+		<u-picker v-model="showPicker" mode="selector" :range="selectorRange" range-key="id" :default-selector="[0]" @confirm="confirmHandler"></u-picker>
   </view>
 </template>
 <script>
@@ -72,16 +82,103 @@ export default {
   },
   data(){
     return {
+      showPicker: false,
+      currentYear: new Date().getFullYear(),
+      selectorRange: [],
+      maxDate: this.formatDate(new Date()),
+      minDate: this.formatDate(new Date(new Date().getFullYear(), 0, 1)),
+      show: false,
+      // 当前年份的第一天 格式2026-01-01 月份和日期小于10的时候前面加个0
+      startDate: this.formatDate(new Date(new Date().getFullYear(), 0, 1)),
+      endDate: this.formatDate(new Date()),
+      mode: 'range',
       imageList: [],
+      pest_order:{},
       deviceInfo: {},
+      pestInfo: {},
       time: '',
       activeTab: 'pestAnalysis',
       title: '虫情测报灯详情',
       deviceType: '',
-      location: ''
+      location: '',
+      total: 0,
+      day: [],
+      pest: [],
+      page:1,
+      is_pest:'',
+      page_size:24,
+      pestList:[],
+      pest_names:'',
+      deviceStatic:{}
+    }
+  },
+  onLoad(options){
+    this.deviceInfo = JSON.parse(options.info);
+    this.getPestAnalysis();
+    const currentYear = new Date().getFullYear();
+    this.selectorRange = [];
+    for(let i = 0;i<50;i++){
+      const item = {
+        label: currentYear - i,
+        id: currentYear - i
+      }
+      this.selectorRange.push(item);
     }
   },
   methods: {
+    changeTab(pestList){
+      let pest_names = pestList.map(item => item.pest_name);
+      this.pest_names = pest_names.join(',');
+      this.initImageList();
+    },
+    confirmHandler(e){
+      this.currentYear = this.selectorRange[e].id;
+      if(this.currentYear == new Date().getFullYear()){
+        this.startDate = this.formatDate(new Date(new Date().getFullYear(), 0, 1));
+        this.endDate = this.formatDate(new Date());
+        this.maxDate = this.formatDate(new Date());
+        this.minDate = this.formatDate(new Date(new Date().getFullYear(), 0, 1));
+      }else{
+        this.startDate = this.formatDate(new Date(this.currentYear, 0, 1));
+        this.endDate = this.formatDate(new Date(this.currentYear, 11, 31));
+        this.maxDate = this.formatDate(new Date(this.currentYear, 11, 31));
+        this.minDate = this.formatDate(new Date(this.currentYear, 0, 1));
+      }
+      if(this.activeTab === 'pestAnalysis'){
+        this.getPestAnalysis();
+      }else if(this.activeTab === 'viewImage'){
+        this.initPest();
+        this.initImageList();
+      }else if(this.activeTab === 'deviceData'){
+        this.getDeviceData();
+      }
+      this.showPicker = false;
+    },
+    getInfo(info){
+      this.pestInfo = info;
+    },
+    // 格式化日期为YYYY-MM-DD格式,月份和日期小于10时前面加0
+    formatDate(date) {
+      const year = date.getFullYear();
+      const month = String(date.getMonth() + 1).padStart(2, '0');
+      const day = String(date.getDate()).padStart(2, '0');
+      return `${year}-${month}-${day}`;
+    },
+    handleChange(e){
+      this.startDate = e.startDate;
+      this.endDate = e.endDate;
+      if(this.activeTab === 'pestAnalysis'){
+        this.getPestAnalysis();
+      }else if(this.activeTab === 'viewImage'){
+        this.initPest();
+        this.initImageList();
+      }else if(this.activeTab === 'deviceData'){
+        this.getDeviceData();
+      }
+    },
+    showCalendar(){
+      this.show = true;
+    },
     handleBack() {
       uni.navigateBack({
         delta: 1
@@ -89,11 +186,96 @@ export default {
     },
     handleTabClick(tab) {
       this.activeTab = tab;
+      if(tab === 'pestAnalysis'){
+        this.getPestAnalysis();
+      }else if(tab === 'viewImage'){
+        this.initPest();
+        this.initImageList();
+      }else if(tab === 'deviceData'){
+        this.getDeviceData();
+      }
+    },
+    //api/api_gateway?method=forecast.worm_lamp.device_status_data
+    async getDeviceData(){
+      const res = await this.$myRequest({
+        url: '/api/api_gateway?method=forecast.worm_lamp.device_status_data',
+        method: 'POST',
+        data: {
+          device_id: this.deviceInfo.id,
+        },
+      });
+      this.deviceStatic = res;
+    },
+    async initImageList(){
+      const res = await this.$myRequest({
+        url: '/api/api_gateway?method=forecast.new_cbd.photo_list',
+        method: 'POST',
+        data: {
+          page:this.page,
+          page_size:this.page_size,
+          device_id: this.deviceInfo.id,
+          is_pest: this.is_pest,
+          identify_model: 'B',
+          pest_names: this.pest_names,
+          time_begin: this.formatDate(new Date(this.startDate)) + ' 00:00:00',// 格式化开始时间YYYY-MM-DD HH:MM:SS
+          time_end: this.formatDate(new Date(this.endDate)) + ' 23:59:59',// 格式化结束时间YYYY-MM-DD HH:MM:SS
+        },
+      });
+      const data = res?.data || [];
+      this.imageList = data
+    },
+    async initPest(){
+      const res = await this.$myRequest({
+        url: '/api/api_gateway?method=forecast.new_cbd.pest_type_list',
+        method: 'POST',
+        data:{
+          page:1,
+          page_size:999999,
+          device_id: this.deviceInfo.id,
+          identify_model: 'B',
+          time_begin: this.formatDate(new Date(this.startDate)) + ' 00:00:00',// 格式化开始时间YYYY-MM-DD HH:MM:SS
+          time_end: this.formatDate(new Date(this.endDate)) + ' 23:59:59',// 格式化结束时间YYYY-MM-DD HH:MM:SS
+        },
+      });
+      const data = res?.data || [];
+      this.pestList = data
+      console.log(res,'resresres')
+    },
+    async getPestAnalysis(){
+      const res = await this.$myRequest({
+        url: '/api/api_gateway?method=forecast.cbd_analysis.analysis_pest_result',
+        method: 'POST',
+        data: {
+        d_id: this.deviceInfo.d_id,
+        start: this.startDate,
+        end: this.endDate,
+        model: 'B'
+        },
+      });
+      const pest_order = res?.pest_order;
+      let total = 0;
+      for(let key in pest_order){
+        total += pest_order[key] || 0;
+      }
+      this.pest_order = pest_order;
+      this.day = res?.day || [];
+      const pest = res?.pest || [];
+      this.pest = [];
+      pest.forEach(p =>{
+        for(let i = 0;i< p.length;i++){
+          this.pest.push(p[i]);
+        }
+      })
+      this.total = total;
     }
   }
 }
 </script>
 <style scoped lang="scss">
+::v-deep .u-calendar__action{
+  display:flex;
+  justify-content: space-between;
+}
 .device-detail {
   display: flex;
   width: 100%;
@@ -148,9 +330,31 @@ export default {
       color: #042118;
       font-family: 'Source Han Sans CN VF';
     }
+    .select-timer-container{
+      display:flex;
+      align-items: center;
+      padding-left: 32rpx;
+      .select-year{
+        width: 128rpx;
+        text-align: center;
+        height: 64rpx;
+        border-radius: 32rpx;
+        font-family: 'Source Han Sans CN VF';
+        line-height: 64rpx;
+        background: #F1F4F8;
+        padding: 0 32rpx;
+        .select-year-item{
+          color: #656565;
+          font-size: 24rpx;
+          display: flex;
+          align-items: center;
+          justify-content: space-around;
+        }
+      }
+    }
     .tabs-timer-container{
       display: flex;
-      width: calc(100% - 128rpx);
+      width: calc(100% - 256rpx);
       height: 64rpx;
       line-height: 64rpx;
       text-align: center;

+ 50 - 53
pages/equipList2/index.vue

@@ -221,18 +221,18 @@
         this.eqlist(true);
         this.width = 0;
       },
-			historys(itemOld) {
-				let item = JSON.parse(JSON.stringify(itemOld));
-				switch (this.type_id) {
+			historys(item) {
+				const type_id = item.type_id;
+				switch (type_id) {
 					// 水肥新设备
 					case 22:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						uni.navigateTo({
 							url: '../waterandfernew/details?shebei=' + JSON.stringify(obj),
@@ -254,11 +254,11 @@
 					case 38:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.equip_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.equip_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						uni.navigateTo({
 							url: '../environment/equipment-new?shebei=' + JSON.stringify(obj),
@@ -267,11 +267,11 @@
 					case 5:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.equip_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.equip_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						uni.navigateTo({
 							url: '../environment/equipment?shebei=' + JSON.stringify(obj),
@@ -280,28 +280,28 @@
 					case 6:
 						uni.navigateTo({
 							url: '/pages/webview/webview?device_id=' +
-								item.imei +
+								item.id +
 								'&accessToken=' +
 								this.accessToken,
 						});
 						break;
 					case 3:
 						item.addtime = item.uptime;
-						item.type = this.type_id;
+						item.type = item.type_id;
 						uni.navigateTo({
 							url: '../cbd/detail?info=' + JSON.stringify(item),
 						});
 						break;
 					case 28:
 						item.addtime = item.uptime;
-						item.type = this.type_id;
+						item.type = item.type_id;
 						uni.navigateTo({
 							url: '../cb/smallPest/smallPest?info=' + JSON.stringify(item),
 						});
 						break;
 					case 4:
 						item.addtime = item.uptime;
-						item.type = this.type_id;
+						item.type = item.type_id;
 						uni.navigateTo({
 							url: '../cb/equip-detail/equip-detail?info=' + JSON.stringify(item),
 						});
@@ -311,7 +311,7 @@
 					case 34:
 					case 35:
 						item.addtime = item.uptime;
-						item.type = this.type_id;
+						item.type = item.type_id;
 						uni.navigateTo({
 							url: '../cb/equip-detail/equip-detail-new?info=' +
 								JSON.stringify(item),
@@ -319,27 +319,24 @@
 						break;
 					case 7:
 						item.addtime = item.uptime;
-						item.type = this.type_id;
+						item.type = item.type_id;
 						uni.navigateTo({
 							url: '../cb/equip-detail/equip-detail?info=' + JSON.stringify(item),
 						});
 						break;
 					case 8:
-						// item.type = this.type_id;
 						uni.navigateTo({
-							url: '../cb/thxydetail/thxydetail?imei=' + item.imei,
+							url: '../cb/thxydetail/thxydetail?imei=' + item.id,
 						});
 						break;
 					case 29:
-						// item.type = this.type_id;
 						uni.navigateTo({
-							url: `../cb/nlNewXy/nlNewXy?imei=${item.imei}&showId=${item.only_for_show}`,
+							url: `../cb/nlNewXy/nlNewXy?imei=${item.id}&showId=${item.only_for_show}`,
 						});
 						break;
 					case 24:
-						// item.type = this.type_id;
 						uni.navigateTo({
-							url: '../cb/zjxydetail/thxydetail?imei=' + item.imei,
+							url: '../cb/zjxydetail/thxydetail?imei=' + item.id,
 						});
 						break;
 					case 12:
@@ -351,11 +348,11 @@
 					case 13:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						uni.navigateTo({
 							url: '../waterandfer/datails?shebei=' + JSON.stringify(obj),
@@ -364,11 +361,11 @@
 					case 15:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						uni.navigateTo({
 							url: '../environment/gsequipment?shebei=' + JSON.stringify(obj),
@@ -378,8 +375,8 @@
 						break;
 					case 18:
 						var obj = {};
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						uni.navigateTo({
 							url: '../cb/shuifeiL/shuifeiL?detail=' + JSON.stringify(obj),
 						});
@@ -391,7 +388,7 @@
           break;
           case 44:
             uni.navigateTo({
-              url: "/pages/webviewdgp/webview?device_id=" + item.imei + "&accessToken=" + this.accessToken || uni
+              url: "/pages/webviewdgp/webview?device_id=" + item.id + "&accessToken=" + this.accessToken || uni
                 .getStorageSync('session_key') +
                 '&type=dgp'
             })
@@ -399,11 +396,11 @@
 					case 11:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						obj.location = item.address;
 						obj.type = 11;
@@ -414,11 +411,11 @@
 					case 19:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						obj.location = item.address;
 						obj.type = 19;
@@ -429,11 +426,11 @@
 					case 20:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						obj.location = item.address;
 						obj.type = 20;
@@ -444,11 +441,11 @@
 					case 21:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						obj.location = item.address;
 						obj.type = 21;
@@ -459,11 +456,11 @@
 					case 26:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						obj.location = item.address;
 						obj.type = 26;
@@ -474,11 +471,11 @@
 					case 27:
 						var obj = {};
 						obj.d_id = item.d_id;
-						obj.device_id = item.imei;
-						obj.is_online = item.is_online;
+						obj.device_id = item.id;
+						obj.is_online = item.status;
 						obj.lat = item.lat;
 						obj.lng = item.lng;
-						obj.equip_name = item.device_name;
+						obj.equip_name = item.name;
 						obj.uptime = item.uptime;
 						obj.location = item.address;
 						obj.type = 26;
@@ -502,13 +499,13 @@
 					case 40:
 						item.addtime = item.uptime;
 						uni.navigateTo({
-							url: `../cb/shuifeizs/shuifeizs?devBid=${item.devBid}&devName=${item.devName}&devStatus=${item.devStatus}`,
+							url: `../cb/shuifeizs/shuifeizs?devBid=${item.devBid}&devName=${item.name}&devStatus=${item.status}`,
 						});
 						break;
 					case 42:
 						item.addtime = item.uptime;
 						uni.navigateTo({
-							url: `../cb/wenshizs/wenshizs?devBid=${item.devBid}&devName=${item.device_name}&devStatus=${item.devStatus}`,
+							url: `../cb/wenshizs/wenshizs?devBid=${item.devBid}&devName=${item.name}&devStatus=${item.status}`,
 						});
 						break;
 				}

+ 0 - 3
pages/index/index.vue

@@ -227,9 +227,6 @@
 				const res = await this.$myRequest({
 					url: '/api/api_gateway?method=user.login.user_login_info',
 					method: 'POST',
-					data: {
-						is_app: 1,
-					},
 				});
 				// this.jurisdiction = {
 				// 	cbtf: false,

+ 0 - 3
pages/my/index/index.vue

@@ -78,9 +78,6 @@ export default {
       const res = await this.$myRequest({
         url: '/api/api_gateway?method=user.login.user_login_info',
         method: 'POST',
-        data: {
-          is_app: 1,
-        },
       });
       console.log(res.children);
       this.usernames = res.username;

+ 31 - 23
pages/prevention/equipmentdetails.vue

@@ -73,6 +73,7 @@
 
 					}
 				},
+				city:'',
 				olddata: {},
 				olddatas: [],
 				newdatesTF: false, //暂无数据提示
@@ -145,31 +146,38 @@
 				var newtime = +new Date() / 1000
 				var oldtime = newtime - 24 * 60 * 60
 				this.dataloadingtf = true
-				const res = await this.$myRequest({
-					url: '/api/api_gateway?method=forecast.worm_lamp.device_history_data',
-					data: {
-						device_type_id: 2,
-						device_id: this.eqinfo.item.imei,
-						start_time: parseInt(oldtime),
-						end_time: parseInt(newtime)
+				console.log(222)
+				try{
+					const res = await this.$myRequest({
+						url: '/api/api_gateway?method=forecast.worm_lamp.device_history_data',
+						data: {
+							device_type_id: 2,
+							device_id: this.eqinfo.item.imei,
+							start_time: parseInt(oldtime),
+							end_time: parseInt(newtime)
+						}
+					})
+					if (res?.data?.length != 0) {
+						this.olddata = res.data[0].d_h_t
+						this.newdatesTF = true;
+						this.work = this.olddata.ws;
+						// if (Number(this.olddata.ws) == 0) {
+						// 	this.work = "待机"
+						// } else if (Number(this.olddata.ws) == 1) {
+						// 	this.work = "工作"
+						// } else {
+						// 	this.work = "充电"
+						// }
+					} else {
+						this.newdatesTF = false
 					}
-				})
-				this.dataloadingtf = false
-				if (res.data.length != 0) {
-					this.olddata = res.data[0].d_h_t
-					this.newdatesTF = true;
-					this.work = this.olddata.ws;
-					// if (Number(this.olddata.ws) == 0) {
-					// 	this.work = "待机"
-					// } else if (Number(this.olddata.ws) == 1) {
-					// 	this.work = "工作"
-					// } else {
-					// 	this.work = "充电"
-					// }
-				} else {
-					this.newdatesTF = false
+					this.modification()
+				}catch(err){
+					this.dataloadingtf = false
+					console.log(err,'errerrerrerr')
+				}finally{
+					this.dataloadingtf = false
 				}
-				this.modification()
 			},
 			async eqlist(id) { //搜索
 				const res = await this.$myRequest({

+ 6 - 1
util/api.js

@@ -45,6 +45,10 @@ export const myRequest = (options) => {
       },
       data: data,
       success: (res) => {
+        if(res.data.code == 200){
+          resolve(res.data.data);
+          return
+        }
         if (res.data.errorCode == 403) {
           uni.removeStorageSync('session_key');
           uni.showToast({
@@ -65,10 +69,11 @@ export const myRequest = (options) => {
             res.data.message !== '识别无结果' &&
             res.data.message !== '该设备未绑定SIM'
           ) {
-            return uni.showToast({
+            uni.showToast({
               title: res.data.message,
               icon: 'none',
             });
+            return reject(res)
           } else {
             resolve(res.data.data);
           }