zmj 8 månader sedan
förälder
incheckning
ba912fbdfe

+ 2 - 0
package.json

@@ -42,6 +42,7 @@
     "clipboard": "2.0.8",
     "clipboard": "2.0.8",
     "core-js": "3.37.1",
     "core-js": "3.37.1",
     "echarts": "^5.4.0",
     "echarts": "^5.4.0",
+    "element-china-area-data": "^5.0.2",
     "element-ui": "2.15.14",
     "element-ui": "2.15.14",
     "file-saver": "2.0.5",
     "file-saver": "2.0.5",
     "fuse.js": "6.4.3",
     "fuse.js": "6.4.3",
@@ -52,6 +53,7 @@
     "nprogress": "0.2.0",
     "nprogress": "0.2.0",
     "quill": "2.0.2",
     "quill": "2.0.2",
     "screenfull": "5.0.2",
     "screenfull": "5.0.2",
+    "seedrandom": "^3.0.5",
     "sortablejs": "1.10.2",
     "sortablejs": "1.10.2",
     "splitpanes": "2.4.1",
     "splitpanes": "2.4.1",
     "vue": "2.6.12",
     "vue": "2.6.12",

+ 19 - 0
src/api/base/device.js

@@ -9,6 +9,25 @@ export function listDevice(query) {
   })
   })
 }
 }
 
 
+// 开始播放
+export function playback(query) {
+  return request({
+    url: '/base/device/playback',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 停止播放
+export function stopPlaying(query) {
+  return request({
+    url: '/base/device/stopPlaying',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询设备详细
 // 查询设备详细
 export function getDevice(id) {
 export function getDevice(id) {
   return request({
   return request({

+ 12 - 3
src/api/base/machineWorkRecords.js

@@ -28,10 +28,19 @@ export function addMachineWorkRecords(data) {
 
 
 
 
 
 
-export function getMachineNameFieldUser(farmId) {
+export function getMachineNameFieldUser(data) {
   return request({
   return request({
-    url: '/base/machineWorkRecords/MachineNameFieldUser/' + farmId,
-    method: 'get'
+    url: '/base/machineWorkRecords/MachineNameFieldUser',
+    method: 'post',
+    data: data
+  })
+}
+
+export function MachineNameFieldUserText(data) {
+  return request({
+    url: '/base/machineWorkRecords/MachineNameFieldUserText',
+    method: 'post',
+    data: data
   })
   })
 }
 }
 
 

+ 9 - 0
src/api/base/mall.js

@@ -26,6 +26,15 @@ export function addMall(data) {
   })
   })
 }
 }
 
 
+
+export function getCount(data) {
+  return request({
+    url: '/base/mall/getCount',
+    method: 'post',
+    data: data
+  })
+}
+
 // 修改农资商城
 // 修改农资商城
 export function updateMall(data) {
 export function updateMall(data) {
   return request({
   return request({

+ 9 - 0
src/api/base/productInfo.js

@@ -42,3 +42,12 @@ export function delProductInfo(id) {
     method: 'delete'
     method: 'delete'
   })
   })
 }
 }
+
+
+export function getCount(data) {
+  return request({
+    url: '/base/productInfo/getCount',
+    method: 'post',
+    data: data
+  })
+}

+ 39 - 0
src/components/cascader/index.vue

@@ -0,0 +1,39 @@
+<template>
+  <div>
+    <el-cascader style="width: 100%;" :options="options" v-model="value1" @change="handleChange" filterable
+      :props="{value:'label'}" placeholder="省/市/区"></el-cascader>
+  </div>
+</template>
+
+<script>
+ // 引入省市区数据包
+  import {
+    regionData
+  } from 'element-china-area-data'
+  export default {
+    name: "cascader",
+    props: ['value'],
+    data() {
+      return {
+        options: regionData,
+        selectedOptions: []
+      }
+    },
+    computed: {
+      value1: {
+        set(val) {
+          this.$emit("input", val)
+        },
+        get(val) {
+          return this.value
+        }
+      }
+    },
+    methods: {
+      handleChange(value) {
+        this.$emit('provincesValueChang', value)
+      }
+    }
+  }
+
+</script>

+ 32 - 31
src/views/base/device/device-monitor.vue

@@ -1,7 +1,6 @@
 <template>
 <template>
   <div class="device-monitor-container">
   <div class="device-monitor-container">
 
 
-<iframe src="http://121.4.16.100:28080/#/play/wasm/ws%3A%2F%2F121.4.16.100%3A6080%2Frtp%2F34020000001110000001_34020000001320000012.live.flv"></iframe>
 
 
     <!-- 控制面板 -->
     <!-- 控制面板 -->
     <div class="control-panel">
     <div class="control-panel">
@@ -108,7 +107,7 @@
           <div class="video-header-left">
           <div class="video-header-left">
             <h2 class="section-title">视频监控</h2>
             <h2 class="section-title">视频监控</h2>
             <div class="video-count">
             <div class="video-count">
-              共 {{ videoList.length }} 个摄像头
+              共 2 个摄像头
             </div>
             </div>
           </div>
           </div>
           <div class="video-header-right">
           <div class="video-header-right">
@@ -135,34 +134,9 @@
           </div>
           </div>
         </div>
         </div>
 
 
-        <div class="video-container">
-          <div class="video-grid">
-            <div v-for="video in paginatedVideos" :key="video.id" class="video-card">
-              <button class="camera-fullscreen-btn" @click="openVideoFullscreen(video)" title="全屏查看">
-                <svg class="w-5 h-5" viewBox="0 0 20 20" fill="currentColor">
-                  <path fill-rule="evenodd" d="M3 4a1 1 0 011-1h4a1 1 0 010 2H6.414l2.293 2.293a1 1 0 11-1.414 1.414L5 6.414V8a1 1 0 01-2 0V4zm9 1a1 1 0 010-2h4a1 1 0 011 1v4a1 1 0 01-2 0V6.414l-2.293 2.293a1 1 0 11-1.414-1.414L13.586 5H12zm-9 7a1 1 0 012 0v1.586l2.293-2.293a1 1 0 111.414 1.414L6.414 15H8a1 1 0 010 2H4a1 1 0 01-1-1v-4zm13-1a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 010-2h1.586l-2.293-2.293a1 1 0 111.414-1.414L15 13.586V12a1 1 0 011-1z" clip-rule="evenodd" />
-                </svg>
-              </button>
-              <div class="video-preview">
-                <div class="camera-placeholder centered-container">
-                  <svg class="camera-icon centered-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
-                    <path d="M23 7l-7 5 7 5V7z"/>
-                    <rect x="1" y="5" width="15" height="14" rx="2" ry="2"/>
-                  </svg>
-                </div>
-                <div class="video-info-overlay">
-                  <div class="video-details">
-                    <div class="video-name">{{ video.name }}</div>
-                    <div class="video-location">{{ video.location }}</div>
-                  </div>
-                  <span class="video-status" :class="video.status">
-                    {{ video.status === 'online' ? '在线' : '离线' }}
-                  </span>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
+        <iframe style="width:600px;height: 400px;" src="http://121.4.16.100:28080/#/play/wasm/ws%3A%2F%2F121.4.16.100%3A6080%2Frtp%2F34020000001110000001_34020000001320000012.live.flv"></iframe>
+        <iframe style="width:600px;height: 400px;" :src="iframeSrc"></iframe>
+
       </div>
       </div>
 
 
       <!-- 设备监控 -->
       <!-- 设备监控 -->
@@ -521,6 +495,8 @@
 </template>
 </template>
 
 
 <script>
 <script>
+import { playback, stopPlaying } from "@/api/base/device"
+
 export default {
 export default {
   name: 'DeviceMonitor',
   name: 'DeviceMonitor',
   data() {
   data() {
@@ -539,6 +515,7 @@ export default {
       sortBy: 'alert',
       sortBy: 'alert',
       deviceCurrentPage: 1,
       deviceCurrentPage: 1,
       devicePerPage: 8,
       devicePerPage: 8,
+      iframeSrc: '',
 
 
       // 单个摄像头全屏模式
       // 单个摄像头全屏模式
       singleCameraFullscreen: {
       singleCameraFullscreen: {
@@ -1326,8 +1303,20 @@ export default {
             this.gridFullscreen.currentPage = pageNum
             this.gridFullscreen.currentPage = pageNum
           }
           }
         }
         }
-      }
+      }	
+
     })
     })
+        const query = { deviceId: '34020000001110000001' };
+        const query2 = { deviceId: '34020000001320000001' };
+
+        playback(query).then(response => {
+        })
+
+        playback(query2).then(response => {
+     
+          this.iframeSrc = "http://121.4.16.100:28080/#/play/wasm/"+encodeURIComponent(response.msg);
+     
+        })
   },
   },
 
 
   beforeDestroy() {
   beforeDestroy() {
@@ -1352,6 +1341,18 @@ export default {
       this.chartInstance.dispose()
       this.chartInstance.dispose()
       this.chartInstance = null
       this.chartInstance = null
     }
     }
+    const query = { deviceId: '34020000001110000001' };
+    const query2 = { deviceId: '34020000001320000001' };
+
+      stopPlaying(query).then(response => {
+        console.log(response)
+
+      })
+
+      stopPlaying(query2).then(response => {
+        console.log(response)
+
+      })
   }
   }
 }
 }
 </script>
 </script>

+ 163 - 56
src/views/base/device/index.vue

@@ -309,6 +309,82 @@
     </el-dialog>
     </el-dialog>
 
 
 
 
+    <!-- 查看摄像头设备对话框 -->
+    <el-dialog :title="title" :visible.sync="cameraView" @close="handleDialogClose" width="800px" append-to-body>
+      <el-tabs v-model="activeTab" @tab-click="handleClickCamera">
+        <el-tab-pane label="基本信息" name="basicInfo">
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <div class="device-info">
+                <h3>设备基础信息</h3>
+
+                <ul>
+                  <li><strong>设备编号:</strong> {{ formView.deviceId }}</li>
+                  <li><strong>设备名称:</strong> {{ formView.deviceName }}</li>
+
+                  <li><strong style="float: left;">设备类型:</strong><dict-tag :options="dict.type.device_type"
+                      :value="formView.deviceTypeId" /></li>
+                  <li><strong>设备型号:</strong> {{ formView.model }}</li>
+                  <li><strong>制造厂商:</strong> {{ formView.manufacturer }}</li>
+                </ul>
+
+              </div>
+
+
+            </el-col>
+            <el-col :span="12">
+              <div class="device-info">
+                <h3>位置信息</h3>
+
+                <ul>
+                  <li><strong>所属农场:</strong> {{ formView.deptName }}</li>
+                  <li><strong>所属地块:</strong> {{ formView.fieldName }}</li>
+                  <li><strong>安装日期:</strong> {{ formView.installDate }}</li>
+                  <li><strong>GPS坐标:</strong> {{ formView.longitude }} - {{ formView.latitude }}</li>
+                </ul>
+
+              </div>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="24">
+              <h3>运行状态</h3>
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <div>
+                    <p>当前状态:
+                      <el-tag :type="getTagType(formView.status)">{{ getStatusText(formView.status) }}</el-tag>
+                    </p>
+                  </div>
+                  <div>
+                    <p>最后活动:{{ formView.lastActiveTime }}</p>
+
+                  </div>
+                </el-col>
+                <el-col :span="12">
+                  <div>
+                    <p>电量状态:
+                      <el-progress :percentage="deviceStatus.battery" :stroke-width="10"></el-progress>
+                    </p>
+                  </div>
+                  <div>
+                    <p>信号强度:良好</p>
+                  </div>
+                </el-col>
+              </el-row>
+            </el-col>
+          </el-row>
+        </el-tab-pane>
+        <el-tab-pane label="实时数据" name="realTimeData">
+
+          <iframe :src="iframeSrc" style="width: 100%; height: 350px;"></iframe>
+
+
+        </el-tab-pane>
+      </el-tabs>
+    </el-dialog>
+
+
 
 
     <!-- 查看气象设备对话框 -->
     <!-- 查看气象设备对话框 -->
     <el-dialog :title="title" :visible.sync="openWeatherView" width="800px" append-to-body>
     <el-dialog :title="title" :visible.sync="openWeatherView" width="800px" append-to-body>
@@ -693,7 +769,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { listDevice, getDevice, delDevice, addDevice, updateDevice } from "@/api/base/device"
+import { listDevice, getDevice, delDevice, addDevice, updateDevice, playback, stopPlaying } from "@/api/base/device"
 import { getInfoLatestTime, listSensorStatistics } from "@/api/base/sensor"
 import { getInfoLatestTime, listSensorStatistics } from "@/api/base/sensor"
 import { getInfoWeatherLatestTime, listWeatherStatistics } from "@/api/base/weather"
 import { getInfoWeatherLatestTime, listWeatherStatistics } from "@/api/base/weather"
 import { listFieldName } from "@/api/base/field"
 import { listFieldName } from "@/api/base/field"
@@ -742,6 +818,8 @@ export default {
       openWeatherView: false,
       openWeatherView: false,
       // 是否显示查看控制器的弹出层
       // 是否显示查看控制器的弹出层
       openControllerView: false,
       openControllerView: false,
+      // 是否显示查看摄像头的弹出层
+      cameraView: false,
 
 
       // 传感器日期数据
       // 传感器日期数据
       sensorDate: [],
       sensorDate: [],
@@ -756,6 +834,8 @@ export default {
       // 传感器土壤湿度数据
       // 传感器土壤湿度数据
       avgSoilMoisture: [],
       avgSoilMoisture: [],
 
 
+      iframeSrc: '',
+
 
 
 
 
 
 
@@ -926,6 +1006,16 @@ export default {
   },
   },
   methods: {
   methods: {
 
 
+    // 关闭摄像头对话框执行的操作
+    handleDialogClose() {
+      const query = { deviceId: this.deviceId };
+
+      stopPlaying(query).then(response => {
+        console.log(response)
+
+      })
+    },
+
 
 
 
 
 
 
@@ -1025,7 +1115,7 @@ export default {
         }, */
         }, */
         tooltip: {},
         tooltip: {},
         legend: {
         legend: {
-          data: ['最高温度', '最低温度', '湿度', '降雨量', '风速','土壤氮','土壤磷','土壤钾']
+          data: ['最高温度', '最低温度', '湿度', '降雨量', '风速', '土壤氮', '土壤磷', '土壤钾']
         },
         },
         xAxis: {
         xAxis: {
           type: 'category',
           type: 'category',
@@ -1159,11 +1249,6 @@ export default {
       } else if (tab.index == 1) {
       } else if (tab.index == 1) {
         console.log("传感器第二个");
         console.log("传感器第二个");
         console.log(this.deviceId);
         console.log(this.deviceId);
-
-
-        /* getInfoLatestTime(this.deviceId).then(response => {
-          this.sensorRealTime = response.data
-        }) */
         getInfoLatestTime(this.deviceId)
         getInfoLatestTime(this.deviceId)
           .then(response => {
           .then(response => {
             const data = response?.data;
             const data = response?.data;
@@ -1190,53 +1275,12 @@ export default {
           this.AverageSensorRealTime = response.data.sensorRealtimeData
           this.AverageSensorRealTime = response.data.sensorRealtimeData
 
 
         })
         })
-
-
       } else {
       } else {
-        //网络请求3getUserField
         console.log("传感器第三个");
         console.log("传感器第三个");
       }
       }
 
 
     },
     },
 
 
-
-    _fetchWeather(days = null) {
-      const query = { deviceId: this.deviceId };
-      if (days != null) query.NumberDay = days;
-
-      const label = days == null ? '7天' : days === 24 ? '24小时' : `${days}天`;
-      console.log(`按${label}键了`);
-
-      listWeatherStatistics(query).then(({ data }) => {
-        Object.assign(this, {
-          weatherDate: data.weatherDate,
-          weatherMaxTemperature: data.weatherMaxTemperature,
-          weatherMinTemperature: data.weatherMinTemperature,
-          weatherHumidity: data.weatherHumidity,
-          weatherRainfall: data.weatherRainfall,
-          weatherWindSpeed: data.weatherWindSpeed,
-          weatherAvgSoilN: data.weatherAvgSoilN,
-          weatherAvgSoilP: data.weatherAvgSoilP,
-          weatherAvgSoilK: data.weatherAvgSoilK,
-          AverageweatherRealTime: data.weatherRealtimeData
-        });
-
-        this.$nextTick(this.weather);
-      });
-    },
-
-    /* 三个按钮入口 */
-    twentyFourHours() {
-      this._fetchWeather(24);
-    },
-    sevenDays() {
-      this._fetchWeather();
-    },
-    thirtyDays() {
-      this._fetchWeather(30);
-    },
-
-
     /* 气象设备切换事件 */
     /* 气象设备切换事件 */
     handleClickWeather(tab, event) {
     handleClickWeather(tab, event) {
       console.log(tab, event);
       console.log(tab, event);
@@ -1244,13 +1288,6 @@ export default {
         console.log("气象设备第一个");
         console.log("气象设备第一个");
       } else if (tab.index == 1) {
       } else if (tab.index == 1) {
 
 
-
-        /* getInfoWeatherLatestTime(this.deviceId).then(response => {
-          if (response.data) {
-            this.weatherRealTime = response.data;
-          }
-        }) */
-
         getInfoWeatherLatestTime(this.deviceId)
         getInfoWeatherLatestTime(this.deviceId)
           .then(response => {
           .then(response => {
             const data = response?.data;
             const data = response?.data;
@@ -1306,6 +1343,63 @@ export default {
 
 
     },
     },
 
 
+    /* 摄像头切换事件 */
+    handleClickCamera(tab, event) {
+      console.log(tab, event);
+      if (tab.index == 0) {
+        console.log("摄像头第一个");
+      } else if (tab.index == 1) {
+
+        console.log("摄像头第二个");
+      } else {
+        //网络请求3getUserField
+        console.log("摄像头第三个");
+      }
+
+    },
+
+
+
+
+
+    _fetchWeather(days = null) {
+      const query = { deviceId: this.deviceId };
+      if (days != null) query.NumberDay = days;
+
+      const label = days == null ? '7天' : days === 24 ? '24小时' : `${days}天`;
+      console.log(`按${label}键了`);
+
+      listWeatherStatistics(query).then(({ data }) => {
+        Object.assign(this, {
+          weatherDate: data.weatherDate,
+          weatherMaxTemperature: data.weatherMaxTemperature,
+          weatherMinTemperature: data.weatherMinTemperature,
+          weatherHumidity: data.weatherHumidity,
+          weatherRainfall: data.weatherRainfall,
+          weatherWindSpeed: data.weatherWindSpeed,
+          weatherAvgSoilN: data.weatherAvgSoilN,
+          weatherAvgSoilP: data.weatherAvgSoilP,
+          weatherAvgSoilK: data.weatherAvgSoilK,
+          AverageweatherRealTime: data.weatherRealtimeData
+        });
+
+        this.$nextTick(this.weather);
+      });
+    },
+
+    /* 三个按钮入口 */
+    twentyFourHours() {
+      this._fetchWeather(24);
+    },
+    sevenDays() {
+      this._fetchWeather();
+    },
+    thirtyDays() {
+      this._fetchWeather(30);
+    },
+
+
+
     /**查询对应的负责人 */
     /**查询对应的负责人 */
     queryPersonCharge() {
     queryPersonCharge() {
 
 
@@ -1421,8 +1515,21 @@ export default {
         this.openView = true
         this.openView = true
 
 
       } else if (row.deviceTypeId == 2) {// 摄像头
       } else if (row.deviceTypeId == 2) {// 摄像头
+
+        const query = { deviceId: this.deviceId };
+
+        playback(query).then(response => {
+          console.log(response)
+          this.iframeSrc = "http://121.4.16.100:28080/#/play/wasm/" + encodeURIComponent(response.msg);
+          
+        }).catch(error => {
+          this.$message.error("摄像头连接失败")
+        });
+        this.cameraView = true
+
+
       } else if (row.deviceTypeId == 3) {// 控制器
       } else if (row.deviceTypeId == 3) {// 控制器
-        this.openControllerView = true
+        this.openControllerView = true;
       } else if (row.deviceTypeId == 4) {// 气象设备
       } else if (row.deviceTypeId == 4) {// 气象设备
         this.openWeatherView = true
         this.openWeatherView = true
       }
       }

+ 14 - 5
src/views/base/field/index.vue

@@ -56,7 +56,7 @@
       </el-form-item> -->
       </el-form-item> -->
 
 
       <el-form-item label="日期" prop="rangeTime" :width="150">
       <el-form-item label="日期" prop="rangeTime" :width="150">
-        <el-date-picker v-model="queryParams.rangeTime" type="daterange" range-separator="至" start-placeholder="开始日期"
+        <el-date-picker v-model="daterangeDate" type="daterange" range-separator="至" start-placeholder="开始日期"
           end-placeholder="结束日期" value-format="yyyy-MM-dd">
           end-placeholder="结束日期" value-format="yyyy-MM-dd">
         </el-date-picker>
         </el-date-picker>
       </el-form-item>
       </el-form-item>
@@ -253,10 +253,15 @@ export default {
       fieldList: [],
       fieldList: [],
       // 弹出层标题
       // 弹出层标题
       title: "",
       title: "",
+      titleSet: "",
       // 是否显示弹出层
       // 是否显示弹出层
       open: false,
       open: false,
+      openSet: false,
       // 部门树选项
       // 部门树选项
       deptOptions: undefined,
       deptOptions: undefined,
+
+      // 启用时间范围
+      daterangeDate: [],
       // 查询参数
       // 查询参数
       queryParams: {
       queryParams: {
         pageNum: 1,
         pageNum: 1,
@@ -284,6 +289,7 @@ export default {
       },
       },
       // 表单参数
       // 表单参数
       form: {},
       form: {},
+      formSet: {},
       // 表单校验
       // 表单校验
       rules: {
       rules: {
         fieldCode: [
         fieldCode: [
@@ -343,13 +349,15 @@ export default {
 
 
     /** 查询地块信息列表 */
     /** 查询地块信息列表 */
     getList() {
     getList() {
-
-      console.log(this.queryParams);
-
       this.loading = true
       this.loading = true
-      if (null != this.queryParams.rangeTime && '' != this.queryParams.rangeTime) {
+      this.queryParams.params = {}
+      /* if (null != this.queryParams.rangeTime && '' != this.queryParams.rangeTime) {
         this.queryParams.params["beginfieldDate"] = this.queryParams.rangeTime[0];
         this.queryParams.params["beginfieldDate"] = this.queryParams.rangeTime[0];
         this.queryParams.params["endfieldDate"] = this.queryParams.rangeTime[1];
         this.queryParams.params["endfieldDate"] = this.queryParams.rangeTime[1];
+      } */
+      if (null != this.daterangeDate && '' != this.daterangeDate) {
+        this.queryParams.params["beginTime"] = this.daterangeDate[0]
+        this.queryParams.params["endTime"] = this.daterangeDate[1]
       }
       }
       listField(this.queryParams).then(response => {
       listField(this.queryParams).then(response => {
         this.fieldList = response.rows
         this.fieldList = response.rows
@@ -394,6 +402,7 @@ export default {
     },
     },
     /** 重置按钮操作 */
     /** 重置按钮操作 */
     resetQuery() {
     resetQuery() {
+      this.daterangeDate = []
       this.resetForm("queryForm")
       this.resetForm("queryForm")
       this.handleQuery()
       this.handleQuery()
     },
     },

+ 39 - 8
src/views/base/knowledgeContent/index.vue

@@ -9,17 +9,27 @@
           @keyup.enter.native="handleQuery"
           @keyup.enter.native="handleQuery"
         />
         />
       </el-form-item>
       </el-form-item>
-      <el-form-item label="内容形式" prop="contentType">
+      <!-- <el-form-item label="内容形式" prop="contentType">
         <el-select v-model="queryParams.contentType" placeholder="请选择内容形式" clearable>
         <el-select v-model="queryParams.contentType" placeholder="请选择内容形式" clearable>
           <el-option label="文章" value="article"></el-option>
           <el-option label="文章" value="article"></el-option>
           <el-option label="视频" value="video"></el-option>
           <el-option label="视频" value="video"></el-option>
         </el-select>
         </el-select>
+      </el-form-item> -->
+      <el-form-item label="内容形式" prop="contentType">
+        <el-select v-model="queryParams.contentType" placeholder="请选择内容分类" clearable>
+          <el-option v-for="dict in dict.type.knowledge_content_type" :key="dict.value" :label="dict.label" :value="dict.value" />
+        </el-select>
       </el-form-item>
       </el-form-item>
-      <el-form-item label="内容分类" prop="contentCategory">
+      <!-- <el-form-item label="内容分类" prop="contentCategory">
         <el-select v-model="queryParams.contentCategory" placeholder="请选择内容分类" clearable>
         <el-select v-model="queryParams.contentCategory" placeholder="请选择内容分类" clearable>
           <el-option label="农技知识" value="tech"></el-option>
           <el-option label="农技知识" value="tech"></el-option>
           <el-option label="政策解读" value="policy"></el-option>
           <el-option label="政策解读" value="policy"></el-option>
         </el-select>
         </el-select>
+      </el-form-item> -->
+      <el-form-item label="内容分类" prop="contentCategory">
+        <el-select v-model="queryParams.contentCategory" placeholder="请选择内容分类" clearable>
+          <el-option v-for="dict in dict.type.knowledge_content_category" :key="dict.value" :label="dict.label" :value="dict.value" />
+        </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item label="来源" prop="source">
       <el-form-item label="来源" prop="source">
         <el-input
         <el-input
@@ -37,11 +47,16 @@
           @keyup.enter.native="handleQuery"
           @keyup.enter.native="handleQuery"
         />
         />
       </el-form-item>
       </el-form-item>
-      <el-form-item label="发布状态" prop="status">
+      <!-- <el-form-item label="发布状态" prop="status">
         <el-select v-model="queryParams.status" placeholder="请选择发布状态" clearable>
         <el-select v-model="queryParams.status" placeholder="请选择发布状态" clearable>
           <el-option label="已发布" :value="1"></el-option>
           <el-option label="已发布" :value="1"></el-option>
           <el-option label="已下架" :value="0"></el-option>
           <el-option label="已下架" :value="0"></el-option>
         </el-select>
         </el-select>
+      </el-form-item> -->
+      <el-form-item label="发布状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择发布状态" clearable>
+          <el-option v-for="dict in dict.type.knowledge_content_status" :key="dict.value" :label="dict.label" :value="dict.value" />
+        </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -111,7 +126,7 @@
           v-hasPermi="['base:knowledgeContent:add']"
           v-hasPermi="['base:knowledgeContent:add']"
         >新增</el-button>
         >新增</el-button>
       </el-col>
       </el-col>
-      <el-col :span="1.5">
+      <!-- <el-col :span="1.5">
         <el-button
         <el-button
           type="success"
           type="success"
           plain
           plain
@@ -121,7 +136,7 @@
           @click="handleUpdate"
           @click="handleUpdate"
           v-hasPermi="['base:knowledgeContent:edit']"
           v-hasPermi="['base:knowledgeContent:edit']"
         >修改</el-button>
         >修改</el-button>
-      </el-col>
+      </el-col> -->
       <el-col :span="1.5">
       <el-col :span="1.5">
         <el-button
         <el-button
           type="danger"
           type="danger"
@@ -154,15 +169,25 @@
         </template>
         </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="标题" align="center" prop="title" />
       <el-table-column label="标题" align="center" prop="title" />
-      <el-table-column label="内容形式" align="center" prop="contentType">
+      <!-- <el-table-column label="内容形式" align="center" prop="contentType">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <span>{{ scope.row.contentType === 'article' ? '文章' : scope.row.contentType === 'video' ? '视频' : scope.row.contentType }}</span>
           <span>{{ scope.row.contentType === 'article' ? '文章' : scope.row.contentType === 'video' ? '视频' : scope.row.contentType }}</span>
         </template>
         </template>
+      </el-table-column> -->
+      <el-table-column label="内容形式" align="center" prop="contentType">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.knowledge_content_type" :value="scope.row.contentType" />
+        </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="内容分类" align="center" prop="contentCategory">
+      <!-- <el-table-column label="内容分类" align="center" prop="contentCategory">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <span>{{ scope.row.contentCategory === 'tech' ? '农技知识' : scope.row.contentCategory === 'policy' ? '政策解读' : scope.row.contentCategory }}</span>
           <span>{{ scope.row.contentCategory === 'tech' ? '农技知识' : scope.row.contentCategory === 'policy' ? '政策解读' : scope.row.contentCategory }}</span>
         </template>
         </template>
+      </el-table-column> -->
+      <el-table-column label="内容分类" align="center" prop="contentCategory">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.knowledge_content_category" :value="scope.row.contentCategory" />
+        </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="来源" align="center" prop="source" />
       <el-table-column label="来源" align="center" prop="source" />
       <el-table-column label="作者" align="center" prop="author" />
       <el-table-column label="作者" align="center" prop="author" />
@@ -172,10 +197,15 @@
           <span>{{ parseTime(scope.row.publishDate, '{y}-{m}-{d}') }}</span>
           <span>{{ parseTime(scope.row.publishDate, '{y}-{m}-{d}') }}</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="发布状态" align="center" prop="status">
+      <!-- <el-table-column label="发布状态" align="center" prop="status">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <span>{{ scope.row.status === 1 ? '已发布' : scope.row.status === 0 ? '已下架' : scope.row.status }}</span>
           <span>{{ scope.row.status === 1 ? '已发布' : scope.row.status === 0 ? '已下架' : scope.row.status }}</span>
         </template>
         </template>
+      </el-table-column> -->
+      <el-table-column label="发布状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.knowledge_content_status" :value="scope.row.status" />
+        </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
         <template slot-scope="scope">
@@ -296,6 +326,7 @@ import { listKnowledgeContent, getKnowledgeContent, delKnowledgeContent, addKnow
 
 
 export default {
 export default {
   name: "KnowledgeContent",
   name: "KnowledgeContent",
+  dicts: ['knowledge_content_type', 'knowledge_content_category', 'knowledge_content_status'],
   data() {
   data() {
     return {
     return {
       // 遮罩层
       // 遮罩层

+ 25 - 12
src/views/base/machineWorkRecords/index.vue

@@ -421,20 +421,33 @@ export default {
   },
   },
   methods: {
   methods: {
 
 
-    queryMachineNameFieldUser(farmId) {
-      if (farmId === undefined || farmId === null || farmId === '') {
-        this.fields = [];
-        this.machinesList = [];
-        this.userName = [];
-        return;
+    queryMachineNameFieldUserTe() {
+      const id = this.form.id;
+      if (id != undefined) {
+        console.log("queryMachineNameFieldUserTe")
+        getTasks(id).then(response => {
+          this.form.fieldId = response.data.plotId
+          this.form.operatorId = response.data.assigneeId
+        })
       }
       }
-      console.log(farmId)
-      getMachineNameFieldUser(farmId).then(response => {
-        this.fields = response.data.fields
-        this.machinesList = response.data.machinesList
-        this.userName = response.data.users
-      })
+    },
+    
 
 
+    queryMachineNameFieldUser(farmId) {
+      console.log(this.form)
+      console.log("queryMachineNameFieldUser")
+      this.form.plotId = null;
+      this.form.assigneeId = null;
+      if (farmId != undefined) {
+        const data = {
+          deptId: farmId
+        }
+        getMachineNameFieldUser(data).then(response => {
+          this.fields = response.data.fields
+          this.machinesList = response.data.machinesList
+          this.userName = response.data.users
+        })
+      }
     },
     },
 
 
     /** 查询地块名称 **/
     /** 查询地块名称 **/

+ 2 - 2
src/views/base/machines/machines-monitor.vue

@@ -885,8 +885,8 @@ export default {
     // 加载农机列表
     // 加载农机列表
     async loadMachinesList() {
     async loadMachinesList() {
       try {
       try {
-        const response = await getMachines()
-        this.machinesList = response.rows || []
+        /* const response = await getMachines()
+        this.machinesList = response.rows || [] */
         this.applyFilters()
         this.applyFilters()
       } catch (error) {
       } catch (error) {
         console.error('加载农机列表失败:', error)
         console.error('加载农机列表失败:', error)

+ 251 - 192
src/views/base/mall/index.vue

@@ -1,7 +1,7 @@
 <template>
 <template>
   <div class="app-container">
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="商品分类" prop="productCategory">
+      <!-- <el-form-item label="商品分类" prop="productCategory">
         <el-select v-model="queryParams.productCategory" placeholder="请选择商品分类" clearable>
         <el-select v-model="queryParams.productCategory" placeholder="请选择商品分类" clearable>
           <el-option
           <el-option
             v-for="dict in categoryOptions"
             v-for="dict in categoryOptions"
@@ -10,67 +10,49 @@
             :value="parseInt(dict.dictValue)"
             :value="parseInt(dict.dictValue)"
           ></el-option>
           ></el-option>
         </el-select>
         </el-select>
+      </el-form-item> -->
+      <el-form-item label="商品分类" prop="productCategory">
+        <el-select v-model="queryParams.productCategory" placeholder="请选择商品分类" clearable>
+          <el-option v-for="dict in dict.type.mall_product_category" :key="dict.value" :label="dict.label"
+            :value="dict.value" />
+        </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item label="商品标题" prop="title">
       <el-form-item label="商品标题" prop="title">
-        <el-input
-          v-model="queryParams.title"
-          placeholder="请输入商品标题"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.title" placeholder="请输入商品标题" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       </el-form-item>
       <el-form-item label="价格" prop="originalPrice">
       <el-form-item label="价格" prop="originalPrice">
         <div style="display: flex; align-items: center; gap: 8px;">
         <div style="display: flex; align-items: center; gap: 8px;">
-          <el-input
-            v-model="queryParams.originalPriceMin"
-            placeholder="最低价格"
-            clearable
-            style="width: 120px;"
-            @keyup.enter.native="handleQuery"
-          />
+          <el-input v-model="originalPrice.originalPriceMin" placeholder="最低价格" clearable style="width: 120px;"
+            @keyup.enter.native="handleQuery" />
           <span>-</span>
           <span>-</span>
-          <el-input
-            v-model="queryParams.originalPriceMax"
-            placeholder="最高价格"
-            clearable
-            style="width: 120px;"
-            @keyup.enter.native="handleQuery"
-          />
+          <el-input v-model="originalPrice.originalPriceMax" placeholder="最高价格" clearable style="width: 120px;"
+            @keyup.enter.native="handleQuery" />
         </div>
         </div>
       </el-form-item>
       </el-form-item>
       <el-form-item label="优惠价格" prop="price">
       <el-form-item label="优惠价格" prop="price">
         <div style="display: flex; align-items: center; gap: 8px;">
         <div style="display: flex; align-items: center; gap: 8px;">
-          <el-input
-            v-model="queryParams.priceMin"
-            placeholder="最低优惠价"
-            clearable
-            style="width: 120px;"
-            @keyup.enter.native="handleQuery"
-          />
+          <el-input v-model="price.priceMin" placeholder="最低优惠价" clearable style="width: 120px;"
+            @keyup.enter.native="handleQuery" />
           <span>-</span>
           <span>-</span>
-          <el-input
-            v-model="queryParams.priceMax"
-            placeholder="最高优惠价"
-            clearable
-            style="width: 120px;"
-            @keyup.enter.native="handleQuery"
-          />
+          <el-input v-model="price.priceMax" placeholder="最高优惠价" clearable style="width: 120px;"
+            @keyup.enter.native="handleQuery" />
         </div>
         </div>
       </el-form-item>
       </el-form-item>
       <el-form-item label="商品规格" prop="specifications">
       <el-form-item label="商品规格" prop="specifications">
-        <el-input
-          v-model="queryParams.specifications"
-          placeholder="请输入商品规格"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.specifications" placeholder="请输入商品规格" clearable
+          @keyup.enter.native="handleQuery" />
       </el-form-item>
       </el-form-item>
-      <el-form-item label="上架状态" prop="status">
+      <!-- <el-form-item label="上架状态" prop="status">
         <el-select v-model="queryParams.status" placeholder="请选择上架状态" clearable>
         <el-select v-model="queryParams.status" placeholder="请选择上架状态" clearable>
           <el-option label="已上架" :value="1"></el-option>
           <el-option label="已上架" :value="1"></el-option>
           <el-option label="待上架" :value="2"></el-option>
           <el-option label="待上架" :value="2"></el-option>
           <el-option label="已下架" :value="0"></el-option>
           <el-option label="已下架" :value="0"></el-option>
         </el-select>
         </el-select>
+      </el-form-item> -->
+      <el-form-item label="上架状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择上架状态" clearable>
+          <el-option v-for="dict in dict.type.mall_status" :key="dict.value" :label="dict.label" :value="dict.value" />
+        </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -131,46 +113,20 @@
 
 
     <el-row :gutter="10" class="mb8">
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['base:mall:add']"
-        >新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['base:mall:edit']"
-        >修改</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+          v-hasPermi="['base:mall:add']">新增</el-button>
       </el-col>
       </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['base:mall:edit']">修改</el-button>
+      </el-col> -->
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['base:mall:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['base:mall:remove']">删除</el-button>
       </el-col>
       </el-col>
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['base:mall:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+          v-hasPermi="['base:mall:export']">导出</el-button>
       </el-col>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     </el-row>
@@ -182,16 +138,22 @@
           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="商品分类" align="center" prop="productCategory">
+      <!-- <el-table-column label="商品分类" align="center" prop="productCategory">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <span>{{ getCategoryText(scope.row.productCategory) }}</span>
           <span>{{ getCategoryText(scope.row.productCategory) }}</span>
         </template>
         </template>
+      </el-table-column> -->
+      <el-table-column label="商品分类" align="center" prop="productCategory">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mall_product_category" :value="scope.row.productCategory" />
+        </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="商品标题" align="center" prop="title" />
       <el-table-column label="商品标题" align="center" prop="title" />
       <el-table-column label="商品描述" align="center" prop="description" width="200" show-overflow-tooltip>
       <el-table-column label="商品描述" align="center" prop="description" width="200" show-overflow-tooltip>
         <template slot-scope="scope">
         <template slot-scope="scope">
           <div class="description-cell">
           <div class="description-cell">
-            {{ scope.row.description && scope.row.description.length > 35 ? scope.row.description.substring(0, 35) + '...' : scope.row.description }}
+            {{ scope.row.description && scope.row.description.length > 35 ? scope.row.description.substring(0, 35) +
+              '...' : scope.row.description }}
           </div>
           </div>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
@@ -201,13 +163,9 @@
       <el-table-column label="商品规格" align="center" prop="specifications" />
       <el-table-column label="商品规格" align="center" prop="specifications" />
       <el-table-column label="商品缩略图" align="center" prop="swiperImages" width="120">
       <el-table-column label="商品缩略图" align="center" prop="swiperImages" width="120">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-image
-            v-if="getFirstImage(scope.row.swiperImages)"
-            :src="getFirstImage(scope.row.swiperImages)"
+          <el-image v-if="getFirstImage(scope.row.swiperImages)" :src="getFirstImage(scope.row.swiperImages)"
             :preview-src-list="[getFirstImage(scope.row.swiperImages)]"
             :preview-src-list="[getFirstImage(scope.row.swiperImages)]"
-            style="width: 80px; height: 80px; object-fit: cover; cursor: pointer;"
-            fit="cover"
-          >
+            style="width: 80px; height: 80px; object-fit: cover; cursor: pointer;" fit="cover">
             <div slot="error" class="image-slot">
             <div slot="error" class="image-slot">
               <i class="el-icon-picture-outline"></i>
               <i class="el-icon-picture-outline"></i>
             </div>
             </div>
@@ -215,110 +173,70 @@
           <span v-else>暂无图片</span>
           <span v-else>暂无图片</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="上架状态" align="center" prop="status">
+      <!-- <el-table-column label="上架状态" align="center" prop="status">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-tag 
-            :type="scope.row.status === 1 ? 'success' : scope.row.status === 2 ? 'warning' : 'danger'"
-            size="mini"
-          >
+          <el-tag :type="scope.row.status === 1 ? 'success' : scope.row.status === 2 ? 'warning' : 'danger'"
+            size="mini">
             {{ scope.row.status === 1 ? '已上架' : scope.row.status === 2 ? '待上架' : '已下架' }}
             {{ scope.row.status === 1 ? '已上架' : scope.row.status === 2 ? '待上架' : '已下架' }}
           </el-tag>
           </el-tag>
         </template>
         </template>
+      </el-table-column> -->
+      <el-table-column label="上架状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mall_status" :value="scope.row.status" />
+        </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <!-- 修改按钮:只有待上架(2)和已下架(0)可以修改 -->
           <!-- 修改按钮:只有待上架(2)和已下架(0)可以修改 -->
-          <el-button
-            v-if="scope.row.status === 2 || scope.row.status === 0"
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['base:mall:edit']"
-          >修改</el-button>
-          
+          <el-button v-if="scope.row.status === 2 || scope.row.status === 0" size="mini" type="text" icon="el-icon-edit"
+            @click="handleUpdate(scope.row)" v-hasPermi="['base:mall:edit']">修改</el-button>
+
           <!-- 上架按钮:待上架(2)和已下架(0)都可以上架 -->
           <!-- 上架按钮:待上架(2)和已下架(0)都可以上架 -->
-          <el-button
-            v-if="scope.row.status === 2 || scope.row.status === 0"
-            size="mini"
-            type="text"
-            icon="el-icon-top"
-            @click="handleToggleStatus(scope.row, 1)"
-            v-hasPermi="['base:mall:edit']"
-          >上架</el-button>
-          
+          <el-button v-if="scope.row.status === 2 || scope.row.status === 0" size="mini" type="text" icon="el-icon-top"
+            @click="handleToggleStatus(scope.row, 1)" v-hasPermi="['base:mall:edit']">上架</el-button>
+
           <!-- 下架按钮:只有已上架(1)可以下架 -->
           <!-- 下架按钮:只有已上架(1)可以下架 -->
-          <el-button
-            v-if="scope.row.status === 1"
-            size="mini"
-            type="text"
-            icon="el-icon-bottom"
-            @click="handleToggleStatus(scope.row, 0)"
-            v-hasPermi="['base:mall:edit']"
-          >下架</el-button>
-          
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['base:mall:remove']"
-          >删除</el-button>
+          <el-button v-if="scope.row.status === 1" size="mini" type="text" icon="el-icon-bottom"
+            @click="handleToggleStatus(scope.row, 0)" v-hasPermi="['base:mall:edit']">下架</el-button>
+
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['base:mall:remove']">删除</el-button>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
 
 
     <!-- 添加或修改农资商城对话框 -->
     <!-- 添加或修改农资商城对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
     <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
         <el-form-item label="商品分类" prop="productCategory">
         <el-form-item label="商品分类" prop="productCategory">
           <el-select v-model="form.productCategory" placeholder="请选择商品分类" style="width: 100%">
           <el-select v-model="form.productCategory" placeholder="请选择商品分类" style="width: 100%">
-            <el-option
-              v-for="dict in categoryOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="parseInt(dict.dictValue)"
-            ></el-option>
+            <el-option v-for="dict in categoryOptions" :key="dict.dictValue" :label="dict.dictLabel"
+              :value="parseInt(dict.dictValue)"></el-option>
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
-        
+
         <el-form-item label="商品标题" prop="title">
         <el-form-item label="商品标题" prop="title">
           <el-input v-model="form.title" placeholder="请输入商品标题" />
           <el-input v-model="form.title" placeholder="请输入商品标题" />
         </el-form-item>
         </el-form-item>
-        
+
         <el-form-item label="商品描述" prop="description">
         <el-form-item label="商品描述" prop="description">
           <el-input v-model="form.description" type="textarea" :rows="3" placeholder="请输入商品描述" />
           <el-input v-model="form.description" type="textarea" :rows="3" placeholder="请输入商品描述" />
         </el-form-item>
         </el-form-item>
-        
+
         <el-row :gutter="20">
         <el-row :gutter="20">
           <el-col :span="8">
           <el-col :span="8">
             <el-form-item label="价格" prop="originalPrice">
             <el-form-item label="价格" prop="originalPrice">
-              <el-input-number
-                v-model="form.originalPrice"
-                :min="0"
-                :precision="2"
-                placeholder="请输入价格"
-                style="width: 100%"
-              />
+              <el-input-number v-model="form.originalPrice" :min="0" :precision="2" placeholder="请输入价格"
+                style="width: 100%" />
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
           <el-col :span="8">
           <el-col :span="8">
             <el-form-item label="优惠价格" prop="price">
             <el-form-item label="优惠价格" prop="price">
-              <el-input-number
-                v-model="form.price"
-                :min="0"
-                :precision="2"
-                placeholder="请输入优惠价格"
-                style="width: 100%"
-              />
+              <el-input-number v-model="form.price" :min="0" :precision="2" placeholder="请输入优惠价格" style="width: 100%" />
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
           <el-col :span="8">
           <el-col :span="8">
@@ -327,29 +245,110 @@
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
         </el-row>
         </el-row>
-        
+
         <el-form-item label="商品规格" prop="specifications">
         <el-form-item label="商品规格" prop="specifications">
           <el-input v-model="form.specifications" placeholder="请输入商品规格" />
           <el-input v-model="form.specifications" placeholder="请输入商品规格" />
         </el-form-item>
         </el-form-item>
-        
-        <el-form-item label="产品特点" prop="features">
-          <el-input v-model="form.features" type="textarea" :rows="3" placeholder="请输入产品特点" />
+
+        <el-form-item label="产品特点" prop="featuresText">
+          <el-input v-model="form.featuresText" type="textarea" :rows="3" placeholder="请输入产品特点" />
+          <div style="margin-bottom: 16px; color: #909399; font-size: 12px;">
+            不同特点用分号;间隔
+          </div>
         </el-form-item>
         </el-form-item>
         
         
+
         <el-form-item label="使用说明" prop="usageGuide">
         <el-form-item label="使用说明" prop="usageGuide">
           <el-input v-model="form.usageGuide" type="textarea" :rows="4" placeholder="请输入使用说明" />
           <el-input v-model="form.usageGuide" type="textarea" :rows="4" placeholder="请输入使用说明" />
         </el-form-item>
         </el-form-item>
-        
+
         <el-form-item label="商品缩略图" prop="swiperImages">
         <el-form-item label="商品缩略图" prop="swiperImages">
           <image-upload v-model="form.swiperImages" :limit="5" />
           <image-upload v-model="form.swiperImages" :limit="5" />
           <div style="color: #999; font-size: 12px; margin-top: 5px;">用于商品列表展示,建议上传3-5张</div>
           <div style="color: #999; font-size: 12px; margin-top: 5px;">用于商品列表展示,建议上传3-5张</div>
         </el-form-item>
         </el-form-item>
-        
+
         <el-form-item label="商品详情图" prop="detailImages">
         <el-form-item label="商品详情图" prop="detailImages">
           <image-upload v-model="form.detailImages" :limit="10" />
           <image-upload v-model="form.detailImages" :limit="10" />
           <div style="color: #999; font-size: 12px; margin-top: 5px;">用于商品详情页展示,建议上传5-10张</div>
           <div style="color: #999; font-size: 12px; margin-top: 5px;">用于商品详情页展示,建议上传5-10张</div>
         </el-form-item>
         </el-form-item>
+
+        <el-form-item label="是否推荐" prop="isRecommended">
+          <el-radio-group v-model="form.isRecommended">
+            <el-radio :label="1">是</el-radio>
+            <el-radio :label="0">否</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="商品分类" prop="productCategory">
+          <el-select v-model="form.productCategory" placeholder="请选择商品分类" style="width: 100%">
+            <el-option v-for="dict in categoryOptions" :key="dict.dictValue" :label="dict.dictLabel"
+              :value="parseInt(dict.dictValue)"></el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="商品标题" prop="title">
+          <el-input v-model="form.title" placeholder="请输入商品标题" />
+        </el-form-item>
+
+        <el-form-item label="商品描述" prop="description">
+          <el-input v-model="form.description" type="textarea" :rows="3" placeholder="请输入商品描述" />
+        </el-form-item>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="价格" prop="originalPrice">
+              <el-input-number v-model="form.originalPrice" :min="0" :precision="2" placeholder="请输入价格"
+                style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="优惠价格" prop="price">
+              <el-input-number v-model="form.price" :min="0" :precision="2" placeholder="请输入优惠价格" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="单位" prop="unit">
+              <el-input v-model="form.unit" placeholder="如:元/斤、元/袋" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-form-item label="商品规格" prop="specifications">
+          <el-input v-model="form.specifications" placeholder="请输入商品规格" />
+        </el-form-item>
+
+        <el-form-item label="产品特点" prop="featuresText">
+          <el-input v-model="form.featuresText" type="textarea" :rows="3" placeholder="请输入产品特点" />
+          <div style="margin-bottom: 16px; color: #909399; font-size: 12px;">
+            不同特点用分号;间隔
+          </div>
+        </el-form-item>
         
         
+
+        <el-form-item label="使用说明" prop="usageGuide">
+          <el-input v-model="form.usageGuide" type="textarea" :rows="4" placeholder="请输入使用说明" />
+        </el-form-item>
+
+        <el-form-item label="商品缩略图" prop="swiperImages">
+          <image-upload v-model="form.swiperImages" :limit="5" />
+          <div style="color: #999; font-size: 12px; margin-top: 5px;">用于商品列表展示,建议上传3-5张</div>
+        </el-form-item>
+
+        <el-form-item label="商品详情图" prop="detailImages">
+          <image-upload v-model="form.detailImages" :limit="10" />
+          <div style="color: #999; font-size: 12px; margin-top: 5px;">用于商品详情页展示,建议上传5-10张</div>
+        </el-form-item>
+
         <el-form-item label="是否推荐" prop="isRecommended">
         <el-form-item label="是否推荐" prop="isRecommended">
           <el-radio-group v-model="form.isRecommended">
           <el-radio-group v-model="form.isRecommended">
             <el-radio :label="1">是</el-radio>
             <el-radio :label="1">是</el-radio>
@@ -357,7 +356,7 @@
           </el-radio-group>
           </el-radio-group>
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
-      
+
       <div slot="footer" class="dialog-footer">
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
         <el-button @click="cancel">取 消</el-button>
@@ -367,11 +366,12 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { listMall, getMall, delMall, addMall, updateMall } from "@/api/base/mall"
+import { listMall, getMall, delMall, addMall, updateMall, getCount } from "@/api/base/mall"
 import { getDicts } from "@/api/system/dict/data"
 import { getDicts } from "@/api/system/dict/data"
 
 
 export default {
 export default {
   name: "Mall",
   name: "Mall",
+  dicts: ['mall_product_category', 'mall_status'],
   data() {
   data() {
     return {
     return {
       // 遮罩层
       // 遮罩层
@@ -398,6 +398,14 @@ export default {
         pendingCount: 0,
         pendingCount: 0,
         recommendedCount: 0
         recommendedCount: 0
       },
       },
+      originalPrice: {
+        originalPriceMin: null,
+        originalPriceMax: null,
+      },
+      price: {
+        priceMin: null,
+        priceMax: null,
+      },
       // 弹出层标题
       // 弹出层标题
       title: "",
       title: "",
       // 是否显示弹出层
       // 是否显示弹出层
@@ -445,7 +453,7 @@ export default {
         specifications: [
         specifications: [
           { required: true, message: "商品规格不能为空", trigger: "blur" }
           { required: true, message: "商品规格不能为空", trigger: "blur" }
         ],
         ],
-        features: [
+        featuresText: [
           { required: true, message: "产品特点不能为空", trigger: "blur" }
           { required: true, message: "产品特点不能为空", trigger: "blur" }
         ],
         ],
         usageGuide: [
         usageGuide: [
@@ -475,16 +483,16 @@ export default {
     /** 获取统计数据 */
     /** 获取统计数据 */
     getStatistics() {
     getStatistics() {
       // 这里可以调用专门的统计API,目前先用列表数据计算
       // 这里可以调用专门的统计API,目前先用列表数据计算
-      listMall({}).then(response => {
-        const data = response.rows || []
-        
-        this.statistics = {
+      getCount({}).then(response => {
+        this.statistics = response.data || []
+
+        /* this.statistics = {
           totalCount: data.length,
           totalCount: data.length,
           onSaleCount: data.filter(item => item.status === 1).length,
           onSaleCount: data.filter(item => item.status === 1).length,
           offSaleCount: data.filter(item => item.status === 0).length,
           offSaleCount: data.filter(item => item.status === 0).length,
           pendingCount: data.filter(item => item.status === 2).length,
           pendingCount: data.filter(item => item.status === 2).length,
           recommendedCount: data.filter(item => item.isRecommended === 1).length
           recommendedCount: data.filter(item => item.isRecommended === 1).length
-        }
+        } */
       }).catch(() => {
       }).catch(() => {
         this.statistics = {
         this.statistics = {
           totalCount: 0,
           totalCount: 0,
@@ -536,17 +544,67 @@ export default {
     /** 搜索按钮操作 */
     /** 搜索按钮操作 */
     handleQuery() {
     handleQuery() {
       this.queryParams.pageNum = 1
       this.queryParams.pageNum = 1
+
+      // 检查原始价格范围是否完整且有效
+      if (this.originalPrice.originalPriceMin !== null && this.originalPrice.originalPriceMax === null) {
+        this.$message.error('请填写价格最大值');
+        return;
+      }
+      if (this.originalPrice.originalPriceMin === null && this.originalPrice.originalPriceMax !== null) {
+        this.$message.error('请填写价格最小值');
+        return;
+      }
+      if (this.originalPrice.originalPriceMin !== null && this.originalPrice.originalPriceMax !== null) {
+        if (this.originalPrice.originalPriceMin > this.originalPrice.originalPriceMax) {
+          this.$message.error('价格最小值不能大于最大值');
+          return;
+        }
+      }
+
+      // 检查价格范围是否完整且有效
+      if (this.price.priceMin !== null && this.price.priceMax === null) {
+        this.$message.error('请填写优惠价格最大值');
+        return;
+      }
+      if (this.price.priceMin === null && this.price.priceMax !== null) {
+        this.$message.error('请填写优惠价格最小值');
+        return;
+      }
+      if (this.price.priceMin !== null && this.price.priceMax !== null) {
+        if (this.price.priceMin > this.price.priceMax) {
+          this.$message.error('优惠价格最小值不能大于最大值');
+          return;
+        }
+      }
+
+      this.queryParams.originalPriceMin = this.originalPrice.originalPriceMin
+      this.queryParams.originalPriceMax = this.originalPrice.originalPriceMax
+      this.queryParams.priceMin = this.price.priceMin
+      this.queryParams.priceMax = this.price.priceMax
+
       this.getList()
       this.getList()
     },
     },
     /** 重置按钮操作 */
     /** 重置按钮操作 */
     resetQuery() {
     resetQuery() {
       this.resetForm("queryForm")
       this.resetForm("queryForm")
-      this.handleQuery()
+      this.originalPrice = {
+        originalPriceMin: null,
+        originalPriceMax: null,
+      }
+      this.price = {
+        priceMin: null,
+        priceMax: null,
+      }
+      this.queryParams.originalPriceMin = null,
+        this.queryParams.originalPriceMax = null,
+        this.queryParams.priceMin = null,
+        this.queryParams.priceMax = null,
+        this.handleQuery()
     },
     },
     // 多选框选中数据
     // 多选框选中数据
     handleSelectionChange(selection) {
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
       this.multiple = !selection.length
     },
     },
     /** 新增按钮操作 */
     /** 新增按钮操作 */
@@ -566,10 +624,11 @@ export default {
       })
       })
     },
     },
     /** 提交按钮 */
     /** 提交按钮 */
-    submitForm() {
+    submitForm() { 
       this.$refs["form"].validate(valid => {
       this.$refs["form"].validate(valid => {
         if (valid) {
         if (valid) {
           if (this.form.id != null) {
           if (this.form.id != null) {
+          this.form.features = null
             updateMall(this.form).then(response => {
             updateMall(this.form).then(response => {
               this.$modal.msgSuccess("修改成功")
               this.$modal.msgSuccess("修改成功")
               this.open = false
               this.open = false
@@ -590,13 +649,13 @@ export default {
     /** 删除按钮操作 */
     /** 删除按钮操作 */
     handleDelete(row) {
     handleDelete(row) {
       const ids = row.id || this.ids
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除农资商城编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除农资商城编号为"' + ids + '"的数据项?').then(function () {
         return delMall(ids)
         return delMall(ids)
       }).then(() => {
       }).then(() => {
         this.getList()
         this.getList()
         this.getStatistics()
         this.getStatistics()
         this.$modal.msgSuccess("删除成功")
         this.$modal.msgSuccess("删除成功")
-      }).catch(() => {})
+      }).catch(() => { })
     },
     },
     /** 导出按钮操作 */
     /** 导出按钮操作 */
     handleExport() {
     handleExport() {
@@ -607,7 +666,7 @@ export default {
     /** 获取第一张图片 */
     /** 获取第一张图片 */
     getFirstImage(swiperImages) {
     getFirstImage(swiperImages) {
       if (!swiperImages) return null
       if (!swiperImages) return null
-      
+
       // 如果是字符串,尝试解析为JSON数组
       // 如果是字符串,尝试解析为JSON数组
       if (typeof swiperImages === 'string') {
       if (typeof swiperImages === 'string') {
         try {
         try {
@@ -619,12 +678,12 @@ export default {
           return images.length > 0 ? images[0] : null
           return images.length > 0 ? images[0] : null
         }
         }
       }
       }
-      
+
       // 如果是数组,直接返回第一个元素
       // 如果是数组,直接返回第一个元素
       if (Array.isArray(swiperImages) && swiperImages.length > 0) {
       if (Array.isArray(swiperImages) && swiperImages.length > 0) {
         return swiperImages[0]
         return swiperImages[0]
       }
       }
-      
+
       return null
       return null
     },
     },
     /** 获取商品分类文字 */
     /** 获取商品分类文字 */
@@ -635,13 +694,13 @@ export default {
     /** 切换商品上架状态 */
     /** 切换商品上架状态 */
     handleToggleStatus(row, targetStatus) {
     handleToggleStatus(row, targetStatus) {
       const statusText = targetStatus === 1 ? '上架' : '下架'
       const statusText = targetStatus === 1 ? '上架' : '下架'
-      
+
       this.$modal.confirm(`确认要${statusText}商品"${row.title}"吗?`).then(() => {
       this.$modal.confirm(`确认要${statusText}商品"${row.title}"吗?`).then(() => {
         const updateData = {
         const updateData = {
           id: row.id,
           id: row.id,
           status: targetStatus
           status: targetStatus
         }
         }
-        
+
         updateMall(updateData).then(response => {
         updateMall(updateData).then(response => {
           this.$modal.msgSuccess(`${statusText}成功`)
           this.$modal.msgSuccess(`${statusText}成功`)
           this.getList()
           this.getList()
@@ -649,7 +708,7 @@ export default {
         }).catch(() => {
         }).catch(() => {
           this.$modal.msgError(`${statusText}失败`)
           this.$modal.msgError(`${statusText}失败`)
         })
         })
-      }).catch(() => {})
+      }).catch(() => { })
     }
     }
   }
   }
 }
 }
@@ -682,11 +741,11 @@ export default {
 }
 }
 
 
 /* 价格区间搜索样式 */
 /* 价格区间搜索样式 */
-.el-form .el-form-item__content > div {
+.el-form .el-form-item__content>div {
   align-items: center;
   align-items: center;
 }
 }
 
 
-.el-form .el-form-item__content > div > span {
+.el-form .el-form-item__content>div>span {
   color: #606266;
   color: #606266;
   margin: 0 4px;
   margin: 0 4px;
   font-weight: 500;
   font-weight: 500;
@@ -804,16 +863,16 @@ export default {
     padding: 14px;
     padding: 14px;
     height: 110px;
     height: 110px;
   }
   }
-  
+
   .stat-title {
   .stat-title {
     font-size: 12px;
     font-size: 12px;
   }
   }
-  
+
   .stat-number {
   .stat-number {
     font-size: 28px;
     font-size: 28px;
     margin: 4px 0;
     margin: 4px 0;
   }
   }
-  
+
   .stat-desc {
   .stat-desc {
     font-size: 10px;
     font-size: 10px;
   }
   }
@@ -824,15 +883,15 @@ export default {
     padding: 16px;
     padding: 16px;
     height: 120px;
     height: 120px;
   }
   }
-  
+
   .stat-title {
   .stat-title {
     font-size: 13px;
     font-size: 13px;
   }
   }
-  
+
   .stat-number {
   .stat-number {
     font-size: 30px;
     font-size: 30px;
   }
   }
-  
+
   .stat-desc {
   .stat-desc {
     font-size: 11px;
     font-size: 11px;
   }
   }
@@ -843,16 +902,16 @@ export default {
     padding: 20px;
     padding: 20px;
     height: 140px;
     height: 140px;
   }
   }
-  
+
   .stat-title {
   .stat-title {
     font-size: 14px;
     font-size: 14px;
   }
   }
-  
+
   .stat-number {
   .stat-number {
     font-size: 36px;
     font-size: 36px;
     margin: 8px 0;
     margin: 8px 0;
   }
   }
-  
+
   .stat-desc {
   .stat-desc {
     font-size: 12px;
     font-size: 12px;
   }
   }

+ 215 - 295
src/views/base/productInfo/index.vue

@@ -2,101 +2,74 @@
   <div class="app-container">
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="农品标题" prop="title">
       <el-form-item label="农品标题" prop="title">
-        <el-input
-          v-model="queryParams.title"
-          placeholder="请输入农品标题"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.title" placeholder="请输入农品标题" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       </el-form-item>
-      <el-form-item label="发布人" prop="userId">
-        <el-input
-          v-model="queryParams.userId"
-          placeholder="请输入发布人"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+      <el-form-item label="发布人" prop="createBy">
+        <el-input v-model="queryParams.createBy" placeholder="请输入发布人" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       </el-form-item>
       <el-form-item label="农品分类" prop="categoryId">
       <el-form-item label="农品分类" prop="categoryId">
         <el-select v-model="queryParams.categoryId" placeholder="请选择农品分类" clearable>
         <el-select v-model="queryParams.categoryId" placeholder="请选择农品分类" clearable>
-          <el-option
-            v-for="dict in dict.type.agricultural_category"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
+          <el-option v-for="dict in dict.type.agricultural_category" :key="dict.value" :label="dict.label"
+            :value="dict.value" />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
-      <el-form-item label="交易类型" prop="type">
+      <!-- <el-form-item label="交易类型" prop="type">
         <el-select v-model="queryParams.type" placeholder="请选择交易类型" clearable>
         <el-select v-model="queryParams.type" placeholder="请选择交易类型" clearable>
           <el-option label="销售" :value="0" />
           <el-option label="销售" :value="0" />
           <el-option label="收购" :value="1" />
           <el-option label="收购" :value="1" />
         </el-select>
         </el-select>
+      </el-form-item> -->
+      <el-form-item label="交易类型" prop="type">
+        <el-select v-model="queryParams.type" placeholder="请选择交易类型" clearable>
+          <el-option v-for="dict in dict.type.agricultural_type" :key="dict.value" :label="dict.label"
+            :value="dict.value" />
+        </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item style="margin-right: 15px;">
       <el-form-item style="margin-right: 15px;">
-        <span slot="label" style="white-space: nowrap;">单价(元)</span>
+        <span slot="label" style="white-space: nowrap;">单价</span>
         <div style="display: inline-flex; align-items: center; white-space: nowrap;">
         <div style="display: inline-flex; align-items: center; white-space: nowrap;">
-          <el-input
-            v-model="queryParams.minPrice"
-            placeholder="最低价"
-            style="width: 100px"
-            clearable
-            size="small"
-          />
+          <el-input v-model="queryParams.minPrice" placeholder="最低价" style="width: 100px" clearable size="small" />
           <span style="margin: 0 8px; color: #666;">-</span>
           <span style="margin: 0 8px; color: #666;">-</span>
-          <el-input
-            v-model="queryParams.maxPrice"
-            placeholder="最高价"
-            style="width: 100px"
-            clearable
-            size="small"
-          />
+          <el-input v-model="queryParams.maxPrice" placeholder="最高价" style="width: 100px" clearable size="small" />
         </div>
         </div>
       </el-form-item>
       </el-form-item>
       <el-form-item label="所在地" prop="location">
       <el-form-item label="所在地" prop="location">
-        <el-cascader
+        <!-- <el-cascader
           v-model="queryParams.areaCode"
           v-model="queryParams.areaCode"
           :options="areaOptions"
           :options="areaOptions"
           placeholder="请选择省市区"
           placeholder="请选择省市区"
           clearable
           clearable
           style="width: 200px"
           style="width: 200px"
           @change="handleAreaChange"
           @change="handleAreaChange"
-        />
+        /> -->
+        <el-cascader size="large" :options="options" v-model="selectedOptions" @change="handleChange">
+        </el-cascader>
+
       </el-form-item>
       </el-form-item>
-      <el-form-item label="发布状态" prop="status">
+      <!-- <el-form-item label="发布状态" prop="status">
         <el-select v-model="queryParams.status" placeholder="请选择发布状态" clearable>
         <el-select v-model="queryParams.status" placeholder="请选择发布状态" clearable>
           <el-option label="未通过" :value="0" />
           <el-option label="未通过" :value="0" />
           <el-option label="待审核" :value="1" />
           <el-option label="待审核" :value="1" />
           <el-option label="已上架" :value="2" />
           <el-option label="已上架" :value="2" />
           <el-option label="已下架" :value="3" />
           <el-option label="已下架" :value="3" />
         </el-select>
         </el-select>
+      </el-form-item> -->
+      <el-form-item label="发布状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择发布状态" clearable>
+          <el-option v-for="dict in dict.type.agricultural_status" :key="dict.value" :label="dict.label"
+            :value="dict.value" />
+        </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item label="联系人" prop="contactName">
       <el-form-item label="联系人" prop="contactName">
-        <el-input
-          v-model="queryParams.contactName"
-          placeholder="请输入联系人"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.contactName" placeholder="请输入联系人" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       </el-form-item>
       <el-form-item label="联系电话" prop="contactPhone">
       <el-form-item label="联系电话" prop="contactPhone">
-        <el-input
-          v-model="queryParams.contactPhone"
-          placeholder="请输入联系电话"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.contactPhone" placeholder="请输入联系电话" clearable
+          @keyup.enter.native="handleQuery" />
       </el-form-item>
       </el-form-item>
       <el-form-item label="发布时间">
       <el-form-item label="发布时间">
-        <el-date-picker
-          v-model="queryParams.publishTimeRange"
-          type="datetimerange"
-          range-separator="至"
-          start-placeholder="开始时间"
-          end-placeholder="结束时间"
-          value-format="yyyy-MM-dd HH:mm:ss"
-          clearable
-        />
+        <el-date-picker v-model="queryParams.publishTimeRange" type="datetimerange" range-separator="至"
+          start-placeholder="开始时间" end-placeholder="结束时间" value-format="yyyy-MM-dd HH:mm:ss" clearable />
       </el-form-item>
       </el-form-item>
       <el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -175,46 +148,20 @@
 
 
     <el-row :gutter="10" class="mb8">
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['base:productInfo:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+          v-hasPermi="['base:productInfo:add']">新增</el-button>
       </el-col>
       </el-col>
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['base:productInfo:edit']"
-        >修改</el-button>
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['base:productInfo:edit']">修改</el-button>
       </el-col>
       </el-col>
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['base:productInfo:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['base:productInfo:remove']">删除</el-button>
       </el-col>
       </el-col>
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['base:productInfo:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+          v-hasPermi="['base:productInfo:export']">导出</el-button>
       </el-col>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     </el-row>
@@ -227,18 +174,23 @@
         </template>
         </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="农品标题" align="center" prop="title" />
       <el-table-column label="农品标题" align="center" prop="title" />
-      <el-table-column label="发布人" align="center" prop="userId" width="120" />
+      <el-table-column label="发布人" align="center" prop="createBy" width="120" />
       <el-table-column label="农品分类" align="center" prop="categoryId" width="100">
       <el-table-column label="农品分类" align="center" prop="categoryId" width="100">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.agricultural_category" :value="scope.row.categoryId + ''" />
           <dict-tag :options="dict.type.agricultural_category" :value="scope.row.categoryId + ''" />
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="交易类型" align="center" prop="type" width="100">
+      <!-- <el-table-column label="交易类型" align="center" prop="type" width="100">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <el-tag :type="scope.row.type === 0 ? 'success' : 'warning'">
           <el-tag :type="scope.row.type === 0 ? 'success' : 'warning'">
             {{ scope.row.type === 0 ? '销售' : scope.row.type === 1 ? '收购' : scope.row.type }}
             {{ scope.row.type === 0 ? '销售' : scope.row.type === 1 ? '收购' : scope.row.type }}
           </el-tag>
           </el-tag>
         </template>
         </template>
+      </el-table-column> -->
+      <el-table-column label="交易类型" align="center" prop="type" width="100">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.agricultural_type" :value="scope.row.type + ''" />
+        </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="详情说明" align="center" prop="description" width="200" show-overflow-tooltip>
       <el-table-column label="详情说明" align="center" prop="description" width="200" show-overflow-tooltip>
         <template slot-scope="scope">
         <template slot-scope="scope">
@@ -247,7 +199,7 @@
           </span>
           </span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="单价(元)" align="center" prop="price" width="120" />
+      <el-table-column label="单价" align="center" prop="price" width="120" />
       <el-table-column label="数量" align="center" prop="quantity" />
       <el-table-column label="数量" align="center" prop="quantity" />
       <el-table-column label="单位" align="center" prop="unit" width="80">
       <el-table-column label="单位" align="center" prop="unit" width="80">
         <template slot-scope="scope">
         <template slot-scope="scope">
@@ -257,22 +209,23 @@
       <el-table-column label="所在地" align="center" prop="location" />
       <el-table-column label="所在地" align="center" prop="location" />
       <el-table-column label="农品图片" align="center" prop="imageUrl" width="100">
       <el-table-column label="农品图片" align="center" prop="imageUrl" width="100">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-image
-            v-if="scope.row.imageUrl"
-            :src="getFirstImage(scope.row.imageUrl)"
-            :preview-src-list="getImageList(scope.row.imageUrl)"
-            style="width: 50px; height: 50px"
-            fit="cover">
+          <el-image v-if="scope.row.imageUrl" :src="getFirstImage(scope.row.imageUrl)"
+            :preview-src-list="getImageList(scope.row.imageUrl)" style="width: 50px; height: 50px" fit="cover">
           </el-image>
           </el-image>
           <span v-else>暂无图片</span>
           <span v-else>暂无图片</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="发布状态" align="center" prop="status" width="100">
+      <!-- <el-table-column label="发布状态" align="center" prop="status" width="100">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <el-tag :type="getStatusType(scope.row.status)">
           <el-tag :type="getStatusType(scope.row.status)">
             {{ getStatusText(scope.row.status) }}
             {{ getStatusText(scope.row.status) }}
           </el-tag>
           </el-tag>
         </template>
         </template>
+      </el-table-column> -->
+      <el-table-column label="发布状态" align="center" prop="status" width="100">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.agricultural_status" :value="scope.row.status + ''" />
+        </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="联系人" align="center" prop="contactName" />
       <el-table-column label="联系人" align="center" prop="contactName" />
       <el-table-column label="联系电话" align="center" prop="contactPhone" width="130" />
       <el-table-column label="联系电话" align="center" prop="contactPhone" width="130" />
@@ -285,125 +238,55 @@
         <template slot-scope="scope">
         <template slot-scope="scope">
           <!-- 待审核状态:审核、修改、删除 -->
           <!-- 待审核状态:审核、修改、删除 -->
           <template v-if="scope.row.status === 1">
           <template v-if="scope.row.status === 1">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-view"
-              @click="handleOpenAudit(scope.row)"
-              v-hasPermi="['base:productInfo:audit']"
-            >审核</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['base:productInfo:edit']"
-            >修改</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['base:productInfo:remove']"
-            >删除</el-button>
+            <el-button size="mini" type="text" icon="el-icon-view" @click="handleOpenAudit(scope.row)"
+              v-hasPermi="['base:productInfo:audit']">审核</el-button>
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+              v-hasPermi="['base:productInfo:edit']">修改</el-button>
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+              v-hasPermi="['base:productInfo:remove']">删除</el-button>
           </template>
           </template>
-          
+
           <!-- 已上架状态:下架、修改、删除 -->
           <!-- 已上架状态:下架、修改、删除 -->
           <template v-else-if="scope.row.status === 2">
           <template v-else-if="scope.row.status === 2">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-bottom"
-              @click="handleShelve(scope.row, 3)"
-              v-hasPermi="['base:productInfo:shelve']"
-            >下架</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['base:productInfo:edit']"
-            >修改</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['base:productInfo:remove']"
-            >删除</el-button>
+            <el-button size="mini" type="text" icon="el-icon-bottom" @click="handleShelve(scope.row, 3)"
+              v-hasPermi="['base:productInfo:shelve']">下架</el-button>
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+              v-hasPermi="['base:productInfo:edit']">修改</el-button>
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+              v-hasPermi="['base:productInfo:remove']">删除</el-button>
           </template>
           </template>
-          
+
           <!-- 已下架状态:上架、修改、删除 -->
           <!-- 已下架状态:上架、修改、删除 -->
           <template v-else-if="scope.row.status === 3">
           <template v-else-if="scope.row.status === 3">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-top"
-              @click="handleShelve(scope.row, 2)"
-              v-hasPermi="['base:productInfo:shelve']"
-            >上架</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['base:productInfo:edit']"
-            >修改</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['base:productInfo:remove']"
-            >删除</el-button>
+            <el-button size="mini" type="text" icon="el-icon-top" @click="handleShelve(scope.row, 2)"
+              v-hasPermi="['base:productInfo:shelve']">上架</el-button>
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+              v-hasPermi="['base:productInfo:edit']">修改</el-button>
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+              v-hasPermi="['base:productInfo:remove']">删除</el-button>
           </template>
           </template>
-          
+
           <!-- 未通过状态:修改、删除 -->
           <!-- 未通过状态:修改、删除 -->
           <template v-else-if="scope.row.status === 0">
           <template v-else-if="scope.row.status === 0">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['base:productInfo:edit']"
-            >修改</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['base:productInfo:remove']"
-            >删除</el-button>
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+              v-hasPermi="['base:productInfo:edit']">修改</el-button>
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+              v-hasPermi="['base:productInfo:remove']">删除</el-button>
           </template>
           </template>
-          
+
           <!-- 其他状态:默认显示修改、删除 -->
           <!-- 其他状态:默认显示修改、删除 -->
           <template v-else>
           <template v-else>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['base:productInfo:edit']"
-            >修改</el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['base:productInfo:remove']"
-            >删除</el-button>
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+              v-hasPermi="['base:productInfo:edit']">修改</el-button>
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+              v-hasPermi="['base:productInfo:remove']">删除</el-button>
           </template>
           </template>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
 
 
     <!-- 添加或修改交易信息对话框 -->
     <!-- 添加或修改交易信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
     <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
@@ -417,27 +300,30 @@
           <el-col :span="12">
           <el-col :span="12">
             <el-form-item label="农品分类" prop="categoryId">
             <el-form-item label="农品分类" prop="categoryId">
               <el-select v-model="form.categoryId" placeholder="请选择农品分类" style="width: 100%">
               <el-select v-model="form.categoryId" placeholder="请选择农品分类" style="width: 100%">
-                <el-option
-                  v-for="dict in dict.type.agricultural_category"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                />
+                <el-option v-for="dict in dict.type.agricultural_category" :key="dict.value" :label="dict.label"
+                  :value="dict.value" />
               </el-select>
               </el-select>
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
         </el-row>
         </el-row>
         <el-row :gutter="20">
         <el-row :gutter="20">
           <el-col :span="12">
           <el-col :span="12">
-            <el-form-item label="交易类型" prop="type">
+            <!-- <el-form-item label="交易类型" prop="type">
               <el-select v-model="form.type" placeholder="请选择交易类型" style="width: 100%">
               <el-select v-model="form.type" placeholder="请选择交易类型" style="width: 100%">
                 <el-option label="销售" :value="0" />
                 <el-option label="销售" :value="0" />
                 <el-option label="收购" :value="1" />
                 <el-option label="收购" :value="1" />
               </el-select>
               </el-select>
+            </el-form-item> -->
+
+            <el-form-item label="交易类型" prop="type">
+              <el-select v-model="form.type" placeholder="请选择交易类型" style="width: 100%">
+                <el-option v-for="dict in dict.type.agricultural_type" :key="dict.value" :label="dict.label"
+                  :value="dict.value" />
+              </el-select>
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
           <el-col :span="12">
           <el-col :span="12">
-            <el-form-item label="单价(元)" prop="price">
+            <el-form-item label="单价" prop="price">
               <el-input v-model="form.price" placeholder="请输入单价" />
               <el-input v-model="form.price" placeholder="请输入单价" />
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
@@ -451,24 +337,15 @@
           <el-col :span="12">
           <el-col :span="12">
             <el-form-item label="单位" prop="unit">
             <el-form-item label="单位" prop="unit">
               <el-select v-model="form.unit" placeholder="请选择单位" style="width: 100%">
               <el-select v-model="form.unit" placeholder="请选择单位" style="width: 100%">
-                <el-option
-                  v-for="dict in dict.type.agricultural_unit"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                />
+                <el-option v-for="dict in dict.type.agricultural_unit" :key="dict.value" :label="dict.label"
+                  :value="dict.value" />
               </el-select>
               </el-select>
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
         </el-row>
         </el-row>
-        <el-form-item label="所在地" prop="areaCode">
-          <el-cascader
-            v-model="form.areaCode"
-            :options="areaOptions"
-            placeholder="请选择省市区"
-            style="width: 100%"
-            @change="handleFormAreaChange"
-          />
+        <el-form-item label="所在地">
+          <el-cascader size="large" :options="optionsAdd" v-model="selectedOptionsAdd" @change="handleChangeAdd">
+          </el-cascader>
         </el-form-item>
         </el-form-item>
         <el-form-item label="详情说明" prop="description">
         <el-form-item label="详情说明" prop="description">
           <el-input v-model="form.description" type="textarea" :rows="3" placeholder="请输入详情说明" />
           <el-input v-model="form.description" type="textarea" :rows="3" placeholder="请输入详情说明" />
@@ -484,12 +361,7 @@
           </el-col>
           </el-col>
           <el-col :span="12">
           <el-col :span="12">
             <el-form-item label="联系电话" prop="contactPhone">
             <el-form-item label="联系电话" prop="contactPhone">
-              <el-input 
-                v-model="form.contactPhone" 
-                placeholder="请输入联系电话"
-                @input="handlePhoneInput"
-                maxlength="11"
-              />
+              <el-input v-model="form.contactPhone" placeholder="请输入联系电话" @input="handlePhoneInput" maxlength="11" />
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
         </el-row>
         </el-row>
@@ -613,14 +485,8 @@
             <span>农品图片</span>
             <span>农品图片</span>
           </div>
           </div>
           <div class="image-gallery">
           <div class="image-gallery">
-            <div 
-              v-for="(img, index) in getImageList(auditForm.productInfo.imageUrl)"
-              :key="index"
-              class="image-item">
-              <el-image
-                :src="img"
-                :preview-src-list="getImageList(auditForm.productInfo.imageUrl)"
-                fit="cover"
+            <div v-for="(img, index) in getImageList(auditForm.productInfo.imageUrl)" :key="index" class="image-item">
+              <el-image :src="img" :preview-src-list="getImageList(auditForm.productInfo.imageUrl)" fit="cover"
                 class="product-image">
                 class="product-image">
                 <div slot="error" class="image-slot">
                 <div slot="error" class="image-slot">
                   <i class="el-icon-picture-outline"></i>
                   <i class="el-icon-picture-outline"></i>
@@ -667,7 +533,7 @@
           </el-row>
           </el-row>
         </el-card>
         </el-card>
       </div>
       </div>
-      
+
       <!-- 审核操作区域 -->
       <!-- 审核操作区域 -->
       <el-divider></el-divider>
       <el-divider></el-divider>
       <h4 style="margin-bottom: 15px; color: #303133;">审核操作</h4>
       <h4 style="margin-bottom: 15px; color: #303133;">审核操作</h4>
@@ -677,20 +543,14 @@
             <el-radio :label="2">
             <el-radio :label="2">
               <span style="color: #67C23A;">通过</span>
               <span style="color: #67C23A;">通过</span>
             </el-radio>
             </el-radio>
-            <el-radio :label="0">
+            <el-radio :label="4">
               <span style="color: #F56C6C;">驳回</span>
               <span style="color: #F56C6C;">驳回</span>
             </el-radio>
             </el-radio>
           </el-radio-group>
           </el-radio-group>
         </el-form-item>
         </el-form-item>
         <el-form-item label="审核备注" prop="auditRemark">
         <el-form-item label="审核备注" prop="auditRemark">
-          <el-input 
-            v-model="auditForm.auditRemark" 
-            type="textarea" 
-            :rows="4" 
-            placeholder="请填写审核备注(必填)"
-            maxlength="200"
-            show-word-limit
-          />
+          <el-input v-model="auditForm.auditRemark" type="textarea" :rows="4" placeholder="请填写审核备注(必填)" maxlength="200"
+            show-word-limit />
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
       <div slot="footer" class="dialog-footer">
       <div slot="footer" class="dialog-footer">
@@ -702,11 +562,11 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { listProductInfo, getProductInfo, delProductInfo, addProductInfo, updateProductInfo } from "@/api/base/productInfo"
-
+import { listProductInfo, getProductInfo, delProductInfo, addProductInfo, updateProductInfo, getCount } from "@/api/base/productInfo"
+import { regionData, CodeToText } from 'element-china-area-data'
 export default {
 export default {
   name: "ProductInfo",
   name: "ProductInfo",
-  dicts: ['agricultural_category', 'agricultural_unit'],
+  dicts: ['agricultural_category', 'agricultural_unit', 'agricultural_type', 'agricultural_status'],
   data() {
   data() {
     return {
     return {
       // 遮罩层
       // 遮罩层
@@ -733,6 +593,10 @@ export default {
         saleCount: 0,
         saleCount: 0,
         purchaseCount: 0
         purchaseCount: 0
       },
       },
+      options: regionData,
+      optionsAdd: regionData,
+      selectedOptions: [],
+      selectedOptionsAdd: [],
       // 地区选项数据(简化版本,实际项目中可能需要从后台获取)
       // 地区选项数据(简化版本,实际项目中可能需要从后台获取)
       areaOptions: [
       areaOptions: [
         {
         {
@@ -826,6 +690,9 @@ export default {
         contactPhone: null,
         contactPhone: null,
         publishTimeRange: null,
         publishTimeRange: null,
         areaCode: null,
         areaCode: null,
+        createBy: null,
+        minPrice: null,
+        maxPrice: null,
       },
       },
       // 表单参数
       // 表单参数
       form: {},
       form: {},
@@ -884,20 +751,28 @@ export default {
   computed: {
   computed: {
     // 确保字典数据已加载
     // 确保字典数据已加载
     isDictLoaded() {
     isDictLoaded() {
-      return this.dict && this.dict.type && 
-             this.dict.type.agricultural_category && 
-             this.dict.type.agricultural_unit
+      return this.dict && this.dict.type &&
+        this.dict.type.agricultural_category &&
+        this.dict.type.agricultural_unit
     }
     }
   },
   },
 
 
   methods: {
   methods: {
+    /* this.queryParams.location = value[2] */
+    handleChange(value) {
+      this.queryParams.location = value[2]
+    },
+    handleChangeAdd(value) {
+      this.form.location = value[2]
+    },
+
     /** 获取统计数据 */
     /** 获取统计数据 */
     getStatistics() {
     getStatistics() {
       // 调用不带分页参数的API获取全部数据进行统计
       // 调用不带分页参数的API获取全部数据进行统计
-      listProductInfo({}).then(response => {
-        const data = response.rows || []
-        
-        this.statistics = {
+      getCount({}).then(response => {
+        this.statistics = response.data || []
+
+        /* this.statistics = {
           totalCount: data.length,
           totalCount: data.length,
           pendingCount: data.filter(item => item.status === 1).length,  // 待审核
           pendingCount: data.filter(item => item.status === 1).length,  // 待审核
           onSaleCount: data.filter(item => item.status === 2).length,   // 已上架
           onSaleCount: data.filter(item => item.status === 2).length,   // 已上架
@@ -905,7 +780,7 @@ export default {
           rejectedCount: data.filter(item => item.status === 0).length, // 未通过
           rejectedCount: data.filter(item => item.status === 0).length, // 未通过
           saleCount: data.filter(item => item.type === 0).length,       // 销售类型
           saleCount: data.filter(item => item.type === 0).length,       // 销售类型
           purchaseCount: data.filter(item => item.type === 1).length    // 收购类型
           purchaseCount: data.filter(item => item.type === 1).length    // 收购类型
-        }
+        } */
       }).catch(() => {
       }).catch(() => {
         this.statistics = {
         this.statistics = {
           totalCount: 0,
           totalCount: 0,
@@ -922,7 +797,12 @@ export default {
     getList() {
     getList() {
       this.loading = true
       this.loading = true
       listProductInfo(this.queryParams).then(response => {
       listProductInfo(this.queryParams).then(response => {
-        this.productInfoList = response.rows
+        /* this.productInfoList = response.rows */
+        this.productInfoList = response.rows.map(item => {
+          // 调用 CodeToText 转换 location 字段
+          item.location = CodeToText[item.location];
+          return item;
+        });
         this.total = response.total
         this.total = response.total
         this.loading = false
         this.loading = false
       })
       })
@@ -953,6 +833,8 @@ export default {
         createBy: null,
         createBy: null,
         createTime: null,
         createTime: null,
         updateBy: null,
         updateBy: null,
+        minPrice: null,
+        maxPrice: null,
         updateTime: null
         updateTime: null
       }
       }
       this.resetForm("form")
       this.resetForm("form")
@@ -960,6 +842,25 @@ export default {
     /** 搜索按钮操作 */
     /** 搜索按钮操作 */
     handleQuery() {
     handleQuery() {
       this.queryParams.pageNum = 1
       this.queryParams.pageNum = 1
+
+
+      // 检查原始价格范围是否完整且有效
+      if (this.queryParams.minPrice !== null && this.queryParams.maxPrice === null) {
+        this.$message.error('请填写价格最大值');
+        return;
+      }
+      if (this.queryParams.minPrice === null && this.queryParams.maxPrice !== null) {
+        this.$message.error('请填写价格最小值');
+        return;
+      }
+      if (this.queryParams.minPrice !== null && this.queryParams.maxPrice !== null) {
+        if (this.queryParams.minPrice > this.queryParams.maxPrice) {
+          this.$message.error('价格最小值不能大于最大值');
+          return;
+        }
+      }
+
+
       // 处理时间范围查询
       // 处理时间范围查询
       if (this.queryParams.publishTimeRange && this.queryParams.publishTimeRange.length === 2) {
       if (this.queryParams.publishTimeRange && this.queryParams.publishTimeRange.length === 2) {
         this.queryParams.publishTimeStart = this.queryParams.publishTimeRange[0]
         this.queryParams.publishTimeStart = this.queryParams.publishTimeRange[0]
@@ -973,12 +874,18 @@ export default {
     /** 重置按钮操作 */
     /** 重置按钮操作 */
     resetQuery() {
     resetQuery() {
       this.resetForm("queryForm")
       this.resetForm("queryForm")
-      this.handleQuery()
+      this.queryParams.minPrice = null,
+        this.queryParams.maxPrice = null,
+        this.queryParams.location = null,
+        this.queryParams.publishTimeRange = []
+
+      this.selectedOptions = [],
+        this.handleQuery()
     },
     },
     // 多选框选中数据
     // 多选框选中数据
     handleSelectionChange(selection) {
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
       this.multiple = !selection.length
     },
     },
     /** 新增按钮操作 */
     /** 新增按钮操作 */
@@ -1001,8 +908,21 @@ export default {
           this.form.unit = String(this.form.unit)
           this.form.unit = String(this.form.unit)
         }
         }
         if (this.form.type !== null && this.form.type !== undefined) {
         if (this.form.type !== null && this.form.type !== undefined) {
-          this.form.type = Number(this.form.type)
+          this.form.type = String(this.form.type)
+        }
+        const districtCode = response.data.location
+      
+
+        if (!districtCode || districtCode.length !== 6) {
+          throw new Error('Invalid district code');
         }
         }
+
+        // 省代码:取前2位
+        const provinceCode = districtCode.substring(0, 2) + '0000';
+
+        // 市代码:取前4位
+        const cityCode = districtCode.substring(0, 4) + '00';
+        this.selectedOptionsAdd = [provinceCode,cityCode,districtCode]
         this.open = true
         this.open = true
         this.title = "修改交易信息"
         this.title = "修改交易信息"
       })
       })
@@ -1032,13 +952,13 @@ export default {
     /** 删除按钮操作 */
     /** 删除按钮操作 */
     handleDelete(row) {
     handleDelete(row) {
       const ids = row.id || this.ids
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除交易信息编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除交易信息编号为"' + ids + '"的数据项?').then(function () {
         return delProductInfo(ids)
         return delProductInfo(ids)
       }).then(() => {
       }).then(() => {
         this.getList()
         this.getList()
         this.getStatistics()
         this.getStatistics()
         this.$modal.msgSuccess("删除成功")
         this.$modal.msgSuccess("删除成功")
-      }).catch(() => {})
+      }).catch(() => { })
     },
     },
     /** 导出按钮操作 */
     /** 导出按钮操作 */
     handleExport() {
     handleExport() {
@@ -1069,7 +989,7 @@ export default {
     getStatusText(status) {
     getStatusText(status) {
       const statusMap = {
       const statusMap = {
         0: '未通过',
         0: '未通过',
-        1: '待审核', 
+        1: '待审核',
         2: '已上架',
         2: '已上架',
         3: '已下架'
         3: '已下架'
       }
       }
@@ -1197,7 +1117,7 @@ export default {
         }).catch(() => {
         }).catch(() => {
           this.$modal.msgError(`${statusText}失败`)
           this.$modal.msgError(`${statusText}失败`)
         })
         })
-      }).catch(() => {})
+      }).catch(() => { })
     }
     }
   }
   }
 }
 }
@@ -1673,16 +1593,16 @@ export default {
     padding: 10px;
     padding: 10px;
     height: 90px;
     height: 90px;
   }
   }
-  
+
   .stat-title {
   .stat-title {
     font-size: 11px;
     font-size: 11px;
   }
   }
-  
+
   .stat-number {
   .stat-number {
     font-size: 20px;
     font-size: 20px;
     margin: 3px 0;
     margin: 3px 0;
   }
   }
-  
+
   .stat-desc {
   .stat-desc {
     font-size: 9px;
     font-size: 9px;
   }
   }
@@ -1692,27 +1612,27 @@ export default {
   .statistics-panel .el-row {
   .statistics-panel .el-row {
     flex-wrap: wrap;
     flex-wrap: wrap;
   }
   }
-  
+
   .statistics-panel .el-col {
   .statistics-panel .el-col {
     flex: 0 0 50%;
     flex: 0 0 50%;
     max-width: 50%;
     max-width: 50%;
   }
   }
-  
+
   .stat-card {
   .stat-card {
     padding: 12px;
     padding: 12px;
     height: 100px;
     height: 100px;
     margin-bottom: 8px;
     margin-bottom: 8px;
   }
   }
-  
+
   .stat-title {
   .stat-title {
     font-size: 12px;
     font-size: 12px;
   }
   }
-  
+
   .stat-number {
   .stat-number {
     font-size: 24px;
     font-size: 24px;
     margin: 4px 0;
     margin: 4px 0;
   }
   }
-  
+
   .stat-desc {
   .stat-desc {
     font-size: 10px;
     font-size: 10px;
   }
   }
@@ -1723,20 +1643,20 @@ export default {
     flex: 0 0 33.333%;
     flex: 0 0 33.333%;
     max-width: 33.333%;
     max-width: 33.333%;
   }
   }
-  
+
   .stat-card {
   .stat-card {
     padding: 14px;
     padding: 14px;
     height: 110px;
     height: 110px;
   }
   }
-  
+
   .stat-title {
   .stat-title {
     font-size: 12px;
     font-size: 12px;
   }
   }
-  
+
   .stat-number {
   .stat-number {
     font-size: 26px;
     font-size: 26px;
   }
   }
-  
+
   .stat-desc {
   .stat-desc {
     font-size: 10px;
     font-size: 10px;
   }
   }
@@ -1747,40 +1667,40 @@ export default {
     flex: 0 0 50%;
     flex: 0 0 50%;
     max-width: 50%;
     max-width: 50%;
   }
   }
-  
+
   .stat-card {
   .stat-card {
     padding: 16px;
     padding: 16px;
     height: 120px;
     height: 120px;
     margin-bottom: 12px;
     margin-bottom: 12px;
   }
   }
-  
+
   .stat-title {
   .stat-title {
     font-size: 13px;
     font-size: 13px;
   }
   }
-  
+
   .stat-number {
   .stat-number {
     font-size: 28px;
     font-size: 28px;
     margin: 6px 0;
     margin: 6px 0;
   }
   }
-  
+
   .stat-desc {
   .stat-desc {
     font-size: 11px;
     font-size: 11px;
   }
   }
-  
+
   .audit-header {
   .audit-header {
     flex-direction: column;
     flex-direction: column;
     align-items: flex-start;
     align-items: flex-start;
     gap: 12px;
     gap: 12px;
   }
   }
-  
+
   .product-status {
   .product-status {
     margin-left: 0;
     margin-left: 0;
   }
   }
-  
+
   .contact-item {
   .contact-item {
     padding: 12px 0;
     padding: 12px 0;
   }
   }
-  
+
   .image-item {
   .image-item {
     width: 80px;
     width: 80px;
     height: 80px;
     height: 80px;
@@ -1792,22 +1712,22 @@ export default {
     flex: 0 0 100%;
     flex: 0 0 100%;
     max-width: 100%;
     max-width: 100%;
   }
   }
-  
+
   .stat-card {
   .stat-card {
     padding: 20px;
     padding: 20px;
     height: 100px;
     height: 100px;
     margin-bottom: 12px;
     margin-bottom: 12px;
   }
   }
-  
+
   .stat-title {
   .stat-title {
     font-size: 14px;
     font-size: 14px;
   }
   }
-  
+
   .stat-number {
   .stat-number {
     font-size: 32px;
     font-size: 32px;
     margin: 8px 0;
     margin: 8px 0;
   }
   }
-  
+
   .stat-desc {
   .stat-desc {
     font-size: 12px;
     font-size: 12px;
   }
   }

+ 263 - 423
src/views/base/tasks/index.vue

@@ -2,99 +2,42 @@
   <div class="app-container">
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="任务名称" prop="taskName">
       <el-form-item label="任务名称" prop="taskName">
-        <el-input
-          v-model="queryParams.taskName"
-          placeholder="请输入任务名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.taskName" placeholder="请输入任务名称" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       </el-form-item>
-      <el-form-item label="任务类型" prop="taskType">
-        <el-select v-model="queryParams.taskType" placeholder="请选择任务类型" clearable>
-          <el-option label="施肥" value="0" />
-          <el-option label="灌溉" value="1" />
-          <el-option label="打药" value="2" />
-          <el-option label="采摘" value="3" />
-          <el-option label="巡检" value="4" />
-          <el-option label="除草" value="5" />
-          <el-option label="其他" value="6" />
+      <el-form-item label="任务类型" prop="typeName">
+        <el-select v-model="queryParams.typeName" placeholder="请选择任务类型" clearable>
+          <el-option v-for="dict in dict.type.task_type" :key="dict.value" :label="dict.label" :value="dict.value" />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
-      <el-form-item label="所属地块" prop="plotNames">
-        <el-select 
-          v-model="queryParams.plotNames" 
-          placeholder="请选择地块" 
-          multiple 
-          collapse-tags
-          clearable
-          style="width: 200px"
-        >
-          <el-option 
-            v-for="item in plotOptions" 
-            :key="item.value" 
-            :label="item.label" 
-            :value="item.value"
-          />
-          <div v-if="plotOptions.length === 0" style="text-align: center; padding: 20px; color: #999;">
-            暂无数据
-          </div>
+
+      <el-form-item label="所属地块" prop="fieldIdList">
+        <el-select v-model="queryParams.fieldIdList" placeholder="请选择地块" multiple collapse-tags filterable clearable>
+          <el-option v-for="dict in fieldIdList" :key="dict.value" :label="dict.label" :value="dict.value" />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
-      <el-form-item label="所属农场" prop="farmNames">
-        <el-select 
-          v-model="queryParams.farmNames" 
-          placeholder="请选择农场" 
-          multiple 
-          collapse-tags
-          clearable
-          style="width: 200px"
-        >
-          <el-option 
-            v-for="item in farmOptions" 
-            :key="item.value" 
-            :label="item.label" 
-            :value="item.value"
-          />
-          <div v-if="farmOptions.length === 0" style="text-align: center; padding: 20px; color: #999;">
-            暂无数据
-          </div>
-        </el-select>
+      <el-form-item label="所属农场" prop="deptIdList">
+        <treeselect v-model="queryParams.deptIdList" :options="deptOptions" multiple :flat="true" :limit="1"
+          :limitText="count => `+${count}`" style="width:200px" :show-count="true" placeholder="请选所属农场" />
       </el-form-item>
       </el-form-item>
-      <el-form-item label="执行人" prop="executor">
-        <el-input
-          v-model="queryParams.executor"
-          placeholder="请输入执行人"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+
+      <el-form-item label="执行人" prop="assigneeName">
+        <el-input v-model="queryParams.assigneeName" placeholder="请输入执行人" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
       </el-form-item>
       <el-form-item label="任务状态" prop="taskStatus">
       <el-form-item label="任务状态" prop="taskStatus">
         <el-select v-model="queryParams.taskStatus" placeholder="请选择任务状态" clearable>
         <el-select v-model="queryParams.taskStatus" placeholder="请选择任务状态" clearable>
-          <el-option label="待完成" value="0" />
-          <el-option label="已完成" value="1" />
+          <el-option v-for="dict in dict.type.task_status" :key="dict.value" :label="dict.label" :value="dict.value" />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
+
       <el-form-item label="执行时间" prop="executeTimeRange">
       <el-form-item label="执行时间" prop="executeTimeRange">
-        <el-date-picker
-          v-model="queryParams.executeTimeRange"
-          type="datetimerange"
-          range-separator="至"
-          start-placeholder="开始时间"
-          end-placeholder="结束时间"
-          value-format="yyyy-MM-dd HH:mm:ss"
-          clearable
+        <el-date-picker v-model="executeTimeRange" type="datetimerange" range-separator="至"
+          start-placeholder="开始时间" end-placeholder="结束时间" value-format="yyyy-MM-dd HH:mm:ss" clearable
           style="width: 350px">
           style="width: 350px">
         </el-date-picker>
         </el-date-picker>
       </el-form-item>
       </el-form-item>
       <el-form-item label="完成时间" prop="completionTimeRange">
       <el-form-item label="完成时间" prop="completionTimeRange">
-        <el-date-picker
-          v-model="queryParams.completionTimeRange"
-          type="datetimerange"
-          range-separator="至"
-          start-placeholder="开始时间"
-          end-placeholder="结束时间"
-          value-format="yyyy-MM-dd HH:mm:ss"
-          clearable
+        <el-date-picker v-model="completionTimeRange" type="datetimerange" range-separator="至"
+          start-placeholder="开始时间" end-placeholder="结束时间" value-format="yyyy-MM-dd HH:mm:ss" clearable
           style="width: 350px">
           style="width: 350px">
         </el-date-picker>
         </el-date-picker>
       </el-form-item>
       </el-form-item>
@@ -106,36 +49,17 @@
 
 
     <el-row :gutter="10" class="mb8">
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['base:tasks:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+          v-hasPermi="['base:tasks:add']">新增</el-button>
       </el-col>
       </el-col>
 
 
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['base:tasks:remove']"
-        >删除</el-button>
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['base:tasks:remove']">删除</el-button>
       </el-col>
       </el-col>
       <el-col :span="1.5">
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['base:tasks:export']"
-        >导出</el-button>
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+          v-hasPermi="['base:tasks:export']">导出</el-button>
       </el-col>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     </el-row>
@@ -143,74 +67,66 @@
     <el-table v-loading="loading" :data="tasksList" @selection-change="handleSelectionChange">
     <el-table v-loading="loading" :data="tasksList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="任务名称" align="center" prop="taskName" />
       <el-table-column label="任务名称" align="center" prop="taskName" />
-      <el-table-column label="任务类型" align="center" prop="taskType" width="100">
+      <el-table-column label="任务类型" align="center" prop="typeName">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-tag :type="getTaskTypeTagType(scope.row.taskType)" size="small">
-            {{ getTaskTypeName(scope.row.taskType) }}
-          </el-tag>
+          <dict-tag :options="dict.type.task_type" :value="scope.row.typeName" />
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="作物名称" align="center" prop="cropName" />
-      <el-table-column label="所属地块" align="center" prop="plotName" />
-      <el-table-column label="所属农场" align="center" prop="farmName" />
-      <el-table-column label="执行人" align="center" prop="executor" />
+
+      <el-table-column label="作物名称" align="center" prop="growCrops" />
+      <el-table-column label="所属地块" align="center" prop="fieldName" />
+      <el-table-column label="所属农场" align="center" prop="deptName" />
+      <el-table-column label="执行人" align="center" prop="assigneeName" />
       <el-table-column label="执行时间" align="center" prop="executeTime" width="180">
       <el-table-column label="执行时间" align="center" prop="executeTime" width="180">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.executeTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
           <span>{{ parseTime(scope.row.executeTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="任务状态" align="center" prop="taskStatus" width="100">
+      <!-- <el-table-column label="任务状态" align="center" prop="taskStatus" width="100">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <el-tag :type="scope.row.taskStatus === 1 ? 'success' : 'warning'" size="small">
           <el-tag :type="scope.row.taskStatus === 1 ? 'success' : 'warning'" size="small">
             {{ scope.row.taskStatus === 1 ? '已完成' : '待完成' }}
             {{ scope.row.taskStatus === 1 ? '已完成' : '待完成' }}
           </el-tag>
           </el-tag>
         </template>
         </template>
+      </el-table-column> -->
+
+      <el-table-column label="任务状态" align="center" prop="taskStatus">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.task_status" :value="scope.row.taskStatus" />
+        </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="任务说明" align="center" prop="taskDescription" width="150" show-overflow-tooltip />
+
+      <el-table-column label="任务说明" align="center" prop="remark" width="150" show-overflow-tooltip />
       <el-table-column label="完成时间" align="center" prop="completionTime" width="180">
       <el-table-column label="完成时间" align="center" prop="completionTime" width="180">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <span>{{ scope.row.completionTime ? parseTime(scope.row.completionTime, '{y}-{m}-{d} {h}:{i}:{s}') : '-' }}</span>
+          <span>{{ scope.row.completionTime ? parseTime(scope.row.completionTime, '{y}-{m}-{d} {h}:{i}:{s}') : '-'
+          }}</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column label="完成说明" align="center" prop="completionDescription" width="150" show-overflow-tooltip />
-      <el-table-column label="附件" align="center" prop="attachmentImages" width="80">
+      <el-table-column label="完成说明" align="center" prop="completionDesc" width="150" show-overflow-tooltip />
+      <el-table-column label="附件" align="center" prop="imageCount" width="80">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-tag v-if="scope.row.attachmentImages && scope.row.attachmentImages.length > 0" type="success" size="mini">
-            {{ scope.row.attachmentImages.length }}张
+          <el-tag v-if="scope.row.imageCount && scope.row.imageCount > 0" type="success" size="mini">
+            {{ scope.row.imageCount }}张
           </el-tag>
           </el-tag>
           <span v-else style="color: #999;">-</span>
           <span v-else style="color: #999;">-</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150">
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['base:tasks:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['base:tasks:remove']"
-          >删除</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['base:tasks:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['base:tasks:remove']">删除</el-button>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
+
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
 
 
     <!-- 添加或修改农事任务对话框 -->
     <!-- 添加或修改农事任务对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body @opened="queryMachineNameFieldUserTe()">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-row :gutter="20">
         <el-row :gutter="20">
           <el-col :span="12">
           <el-col :span="12">
@@ -219,74 +135,48 @@
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
           <el-col :span="12">
           <el-col :span="12">
-            <el-form-item label="任务类型" prop="taskType">
-              <el-select v-model="form.taskType" placeholder="请选择任务类型">
-                <el-option label="施肥" value="0" />
-                <el-option label="灌溉" value="1" />
-                <el-option label="打药" value="2" />
-                <el-option label="采摘" value="3" />
-                <el-option label="巡检" value="4" />
-                <el-option label="除草" value="5" />
-                <el-option label="其他" value="6" />
+            <el-form-item label="任务类型" prop="typeName">
+              <el-select v-model="form.typeName" placeholder="请选择任务类型">
+                <el-option v-for="dict in dict.type.task_type" :key="dict.value" :label="dict.label"
+                  :value="dict.value"></el-option>
               </el-select>
               </el-select>
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
         </el-row>
         </el-row>
         <el-row :gutter="20">
         <el-row :gutter="20">
           <el-col :span="12">
           <el-col :span="12">
-            <el-form-item label="所属地块" prop="plotName">
-              <el-select v-model="form.plotName" placeholder="请选择地块" clearable style="width: 100%">
-                <el-option 
-                  v-for="item in plotOptions" 
-                  :key="item.value" 
-                  :label="item.label" 
-                  :value="item.value"
-                />
-                <div v-if="plotOptions.length === 0" style="text-align: center; padding: 20px; color: #999;">
-                  暂无数据
-                </div>
-              </el-select>
+            <el-form-item label="所属农场" prop="farmId">
+              <treeselect v-model="form.farmId" :options="enabledDeptOptions" :show-count="true"
+                @input="queryMachineNameFieldUser(form.farmId)" placeholder="请先选择所属农场" />
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
           <el-col :span="12">
           <el-col :span="12">
-            <el-form-item label="所属农场" prop="farmName">
-              <el-select v-model="form.farmName" placeholder="请选择农场" clearable style="width: 100%">
-                <el-option 
-                  v-for="item in farmOptions" 
-                  :key="item.value" 
-                  :label="item.label" 
-                  :value="item.value"
-                />
-                <div v-if="farmOptions.length === 0" style="text-align: center; padding: 20px; color: #999;">
-                  暂无数据
-                </div>
+
+            <el-form-item label="所属地块" prop="plotIds">
+              <!-- <el-select v-model="form.fieldName" placeholder="请选择作业地块" style="width: 100%" :disabled="!form.farmName">
+                <el-option v-for="field in filteredFieldOptions" :key="field.value" :label="field.label"
+                  :value="field.value" />
+              </el-select> -->
+
+              <el-select v-model="form.plotId" placeholder="请选择作业地块" :disabled="!form.farmId">
+                <el-option v-for="item in fields" :key="item.id" :label="item.fieldName" :value="item.id">
+                </el-option>
               </el-select>
               </el-select>
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
         </el-row>
         </el-row>
         <el-row :gutter="20">
         <el-row :gutter="20">
           <el-col :span="12">
           <el-col :span="12">
-            <el-form-item label="执行人" prop="executor">
-              <el-select v-model="form.executor" placeholder="请选择执行人" clearable style="width: 100%">
-                <el-option 
-                  v-for="item in executorOptions" 
-                  :key="item.value" 
-                  :label="item.label" 
-                  :value="item.value"
-                />
-                <div v-if="executorOptions.length === 0" style="text-align: center; padding: 20px; color: #999;">
-                  暂无数据
-                </div>
+            <el-form-item label="执行人" prop="assigneeId">
+              <el-select v-model="form.assigneeId" placeholder="请选择操作员" :disabled="!form.farmId">
+                <el-option v-for="item in userName" :key="item.userId" :label="item.nickName" :value="item.userId">
+                </el-option>
               </el-select>
               </el-select>
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
           <el-col :span="12">
           <el-col :span="12">
             <el-form-item label="执行时间" prop="executeTime">
             <el-form-item label="执行时间" prop="executeTime">
-              <el-date-picker clearable
-                v-model="form.executeTime"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                placeholder="请选择执行时间"
+              <el-date-picker clearable v-model="form.executeTime" type="datetime" placeholder="请选择执行时间"
                 style="width: 100%">
                 style="width: 100%">
               </el-date-picker>
               </el-date-picker>
             </el-form-item>
             </el-form-item>
@@ -296,38 +186,38 @@
           <el-col :span="12">
           <el-col :span="12">
             <el-form-item label="任务状态" prop="taskStatus">
             <el-form-item label="任务状态" prop="taskStatus">
               <el-select v-model="form.taskStatus" placeholder="请选择任务状态" style="width: 100%">
               <el-select v-model="form.taskStatus" placeholder="请选择任务状态" style="width: 100%">
-                <el-option label="待完成" value="0" />
-                <el-option label="已完成" value="1" />
+                <el-option v-for="dict in dict.type.task_status" :key="dict.value" :label="dict.label"
+                  :value="dict.value"></el-option>
               </el-select>
               </el-select>
             </el-form-item>
             </el-form-item>
+
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="作物名称" prop="growCrops">
+              <el-input v-model="form.growCrops" placeholder="请输入作物名称" />
+            </el-form-item>
           </el-col>
           </el-col>
         </el-row>
         </el-row>
-        <el-form-item label="任务说明" prop="taskDescription">
-          <el-input v-model="form.taskDescription" type="textarea" :rows="3" placeholder="请输入任务说明" />
+        <el-form-item label="任务说明" prop="remark">
+          <el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入任务说明" />
         </el-form-item>
         </el-form-item>
         <el-row :gutter="20" v-if="form.taskStatus == 1">
         <el-row :gutter="20" v-if="form.taskStatus == 1">
           <el-col :span="12">
           <el-col :span="12">
             <el-form-item label="完成时间" prop="completionTime">
             <el-form-item label="完成时间" prop="completionTime">
-              <el-date-picker clearable
-                v-model="form.completionTime"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                placeholder="请选择完成时间"
+              <el-date-picker clearable v-model="form.completionTime"
+               type="datetime" 
+               value-format="yyyy-MM-dd HH:mm:ss"
+                placeholder="请选择完成时间" 
                 style="width: 100%">
                 style="width: 100%">
               </el-date-picker>
               </el-date-picker>
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
         </el-row>
         </el-row>
-        <el-form-item label="完成说明" prop="completionDescription" v-if="form.taskStatus == 1">
-          <el-input v-model="form.completionDescription" type="textarea" :rows="3" placeholder="请输入完成说明" />
+        <el-form-item label="完成说明" prop="completionDesc" v-if="form.taskStatus == 1">
+          <el-input v-model="form.completionDesc" type="textarea" :rows="3" placeholder="请输入完成说明" />
         </el-form-item>
         </el-form-item>
-        <el-form-item label="上传附件" prop="attachmentImages" v-if="form.taskStatus == 1">
-          <image-upload 
-            v-model="form.attachmentImages"
-            :limit="5"
-            :fileSize="10"
-            :fileType="['jpg', 'jpeg', 'png', 'gif']"
-          />
+        <el-form-item label="上传附件" prop="taskImages" v-if="form.taskStatus == 1">
+          <image-upload v-model="form.taskImages" :limit="5" :fileSize="10" :fileType="['jpg', 'jpeg', 'png', 'gif']" />
           <div style="color: #999; font-size: 12px; margin-top: 5px;">
           <div style="color: #999; font-size: 12px; margin-top: 5px;">
             支持jpg、jpeg、png、gif格式,单张图片不超过10MB,最多上传5张
             支持jpg、jpeg、png、gif格式,单张图片不超过10MB,最多上传5张
           </div>
           </div>
@@ -338,18 +228,28 @@
         <el-button @click="cancel">取 消</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
+
+
+
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
+import { getMachineNameFieldUser,MachineNameFieldUserText } from "@/api/base/machineWorkRecords"
 import { listTasks, getTasks, delTasks, addTasks, updateTasks } from "@/api/base/tasks"
 import { listTasks, getTasks, delTasks, addTasks, updateTasks } from "@/api/base/tasks"
+import { deptTreeSelect } from "@/api/system/user";
+import { listFieldName } from "@/api/base/field"
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import ImageUpload from "@/components/ImageUpload"
 import ImageUpload from "@/components/ImageUpload"
 
 
 export default {
 export default {
   name: "Tasks",
   name: "Tasks",
   components: {
   components: {
-    ImageUpload
+    ImageUpload,
+    Treeselect
   },
   },
+  dicts: ['task_type', 'task_status', 'field_soil_type', 'sys_field_type'],
   data() {
   data() {
     return {
     return {
       // 遮罩层
       // 遮罩层
@@ -368,8 +268,10 @@ export default {
       tasksList: [],
       tasksList: [],
       // 弹出层标题
       // 弹出层标题
       title: "",
       title: "",
+      titleSet: "",
       // 是否显示弹出层
       // 是否显示弹出层
       open: false,
       open: false,
+      openSet: false,
       // 查询参数
       // 查询参数
       queryParams: {
       queryParams: {
         pageNum: 1,
         pageNum: 1,
@@ -380,8 +282,7 @@ export default {
         farmNames: [],
         farmNames: [],
         executor: null,
         executor: null,
         taskStatus: null,
         taskStatus: null,
-        executeTimeRange: null,
-        completionTimeRange: null,
+    
       },
       },
       // 地块选项
       // 地块选项
       plotOptions: [],
       plotOptions: [],
@@ -391,21 +292,35 @@ export default {
       executorOptions: [],
       executorOptions: [],
       // 表单参数
       // 表单参数
       form: {},
       form: {},
+      formSet: {},
+      // 部门树选项
+      deptOptions: undefined,
+      // 过滤掉已禁用部门树选项
+      enabledDeptOptions: undefined,
+      // 所属地块
+      fieldIdList: [],
+     
+      fields: [],
+      userName: [],
+      executeTimeRange: [],
+      completionTimeRange: [],
+
+
       // 表单校验
       // 表单校验
       rules: {
       rules: {
         taskName: [
         taskName: [
           { required: true, message: "任务名称不能为空", trigger: "blur" }
           { required: true, message: "任务名称不能为空", trigger: "blur" }
         ],
         ],
-        taskType: [
+        typeName: [
           { required: true, message: "任务类型不能为空", trigger: "change" }
           { required: true, message: "任务类型不能为空", trigger: "change" }
         ],
         ],
-        plotName: [
+        plotId: [
           { required: true, message: "所属地块不能为空", trigger: "change" }
           { required: true, message: "所属地块不能为空", trigger: "change" }
         ],
         ],
-        farmName: [
+        farmId: [
           { required: true, message: "所属农场不能为空", trigger: "change" }
           { required: true, message: "所属农场不能为空", trigger: "change" }
         ],
         ],
-        executor: [
+        assigneeId: [
           { required: true, message: "执行人不能为空", trigger: "change" }
           { required: true, message: "执行人不能为空", trigger: "change" }
         ],
         ],
         executeTime: [
         executeTime: [
@@ -418,10 +333,67 @@ export default {
     }
     }
   },
   },
   created() {
   created() {
-    this.getList()
-    this.initOptions()
+    this.getList();
+    this.getDeptTree();
+    this.getFieldNameList();
+    // this.initOptions()
   },
   },
   methods: {
   methods: {
+
+    queryMachineNameFieldUser(farmId) {
+      console.log("queryMachineNameFieldUser")
+      this.form.plotId = null;
+      this.form.assigneeId = null;
+      if (farmId != undefined) {
+        const data = {
+          deptId: farmId
+        }
+        getMachineNameFieldUser(data).then(response => {
+          this.fields = response.data.fields
+          this.userName = response.data.users
+        })
+      }
+    },
+    queryMachineNameFieldUserTe() {
+      console.log("queryMachineNameFieldUserTe")
+      const id = this.form.id;
+      if (id != undefined) {
+        getTasks(id).then(response => {
+          this.form.plotId = response.data.plotId
+          this.form.assigneeId = response.data.assigneeId
+        })
+      }
+    },
+
+    /** 查询部门下拉树结构 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+        this.enabledDeptOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)))
+      });
+    },
+    filterDisabledDept(deptList) {
+      return deptList.filter(dept => {
+        if (dept.disabled) {
+          return false
+        }
+        if (dept.children && dept.children.length) {
+          dept.children = this.filterDisabledDept(dept.children)
+        }
+        return true
+      })
+    },
+
+    /** 查询地块名称 **/
+    getFieldNameList() {
+      listFieldName().then(res => {
+        this.fieldIdList = res;
+        this.fieldIdList.forEach(x => {
+          x.value = x.id;
+          x.label = x.fieldName;
+        })
+      });
+    },
     /** 初始化下拉选项 */
     /** 初始化下拉选项 */
     initOptions() {
     initOptions() {
       // 为了支持修改表单回填,这里提供一些模拟数据
       // 为了支持修改表单回填,这里提供一些模拟数据
@@ -438,7 +410,7 @@ export default {
         { label: "葡萄园A区", value: "葡萄园A区" },
         { label: "葡萄园A区", value: "葡萄园A区" },
         { label: "机械库房", value: "机械库房" }
         { label: "机械库房", value: "机械库房" }
       ]
       ]
-      
+
       this.farmOptions = [
       this.farmOptions = [
         { label: "阳光农场", value: "阳光农场" },
         { label: "阳光农场", value: "阳光农场" },
         { label: "绿野农场", value: "绿野农场" },
         { label: "绿野农场", value: "绿野农场" },
@@ -451,7 +423,7 @@ export default {
         { label: "智慧农场", value: "智慧农场" },
         { label: "智慧农场", value: "智慧农场" },
         { label: "酒庄农场", value: "酒庄农场" }
         { label: "酒庄农场", value: "酒庄农场" }
       ]
       ]
-      
+
       this.executorOptions = [
       this.executorOptions = [
         { label: "张三", value: "张三" },
         { label: "张三", value: "张三" },
         { label: "李四", value: "李四" },
         { label: "李四", value: "李四" },
@@ -469,7 +441,7 @@ export default {
     getTaskTypeName(type) {
     getTaskTypeName(type) {
       const typeMap = {
       const typeMap = {
         '0': '施肥',
         '0': '施肥',
-        '1': '灌溉', 
+        '1': '灌溉',
         '2': '打药',
         '2': '打药',
         '3': '采摘',
         '3': '采摘',
         '4': '巡检',
         '4': '巡检',
@@ -494,176 +466,20 @@ export default {
     /** 查询农事任务列表 */
     /** 查询农事任务列表 */
     getList() {
     getList() {
       this.loading = true
       this.loading = true
-      // 模拟假数据,实际开发中应该调用真实的API
-      const mockData = {
-        rows: [
-          {
-            id: 1,
-            taskName: "水稻施肥作业",
-            taskType: "0",
-            cropName: "水稻",
-            plotName: "东区1号田",
-            farmName: "阳光农场",
-            executor: "张三",
-            executeTime: "2024-01-15 09:00:00",
-            taskStatus: 1,
-            taskDescription: "对水稻进行有机肥施肥,提高产量和品质,需要注意施肥量的控制,避免过量施肥导致烧苗",
-            completionTime: "2024-01-15 11:30:00",
-            completionDescription: "已完成有机肥施肥,共施肥50亩,肥料用量符合标准要求,苗情良好",
-            attachmentImages: ["https://example.com/images/fertilizer1.jpg", "https://example.com/images/fertilizer2.jpg"]
-          },
-          {
-            id: 2,
-            taskName: "玉米灌溉任务",
-            taskType: "1",
-            cropName: "玉米",
-            plotName: "西区2号田",
-            farmName: "绿野农场",
-            executor: "李四",
-            executeTime: "2024-01-16 06:30:00",
-            taskStatus: 0,
-            taskDescription: "对玉米田进行滴灌作业,确保土壤湿度适宜",
-            completionTime: null,
-            completionDescription: null,
-            attachmentImages: null
-          },
-          {
-            id: 3,
-            taskName: "果园病虫害防治",
-            taskType: "2",
-            cropName: "苹果",
-            plotName: "南区果园",
-            farmName: "丰收农场",
-            executor: "王五",
-            executeTime: "2024-01-17 07:00:00",
-            taskStatus: 1,
-            taskDescription: "对苹果树进行病虫害防治,使用生物农药,确保果实品质安全",
-            completionTime: "2024-01-17 10:45:00",
-            completionDescription: "病虫害防治作业完成,使用生物农药150公斤,覆盖果园100亩",
-            attachmentImages: ["https://example.com/images/pesticide1.jpg"]
-          },
-          {
-            id: 4,
-            taskName: "草莓采摘作业",
-            taskType: "3",
-            cropName: "草莓",
-            plotName: "温室大棚A区",
-            farmName: "田园农场",
-            executor: "赵六",
-            executeTime: "2024-01-18 05:00:00",
-            taskStatus: 0,
-            taskDescription: "对成熟草莓进行采摘,注意保持果实完整性,分级包装",
-            completionTime: null,
-            completionDescription: null,
-            attachmentImages: null
-          },
-          {
-            id: 5,
-            taskName: "大棚设施巡检",
-            taskType: "4",
-            cropName: "番茄",
-            plotName: "智能温室B区",
-            farmName: "科技农场",
-            executor: "钱七",
-            executeTime: "2024-01-19 08:00:00",
-            taskStatus: 1,
-            taskDescription: "对温室大棚设施进行全面巡检,检查通风、灌溉、温控等系统运行状态",
-            completionTime: "2024-01-19 12:00:00",
-            completionDescription: "巡检完成,发现2号风机需要维护,其他设施运行正常",
-            attachmentImages: ["https://example.com/images/inspection1.jpg", "https://example.com/images/inspection2.jpg", "https://example.com/images/inspection3.jpg"]
-          },
-          {
-            id: 6,
-            taskName: "蔬菜田除草工作",
-            taskType: "5",
-            cropName: "白菜",
-            plotName: "北区菜地",
-            farmName: "有机农场",
-            executor: "孙八",
-            executeTime: "2024-01-20 07:30:00",
-            taskStatus: 0,
-            taskDescription: "对白菜田进行人工除草,清除田间杂草,提高蔬菜生长环境",
-            completionTime: null,
-            completionDescription: null,
-            attachmentImages: null
-          },
-          {
-            id: 7,
-            taskName: "农机设备维护",
-            taskType: "6",
-            cropName: "小麦",
-            plotName: "机械库房",
-            farmName: "现代农场",
-            executor: "周九",
-            executeTime: "2024-01-21 09:00:00",
-            taskStatus: 1,
-            taskDescription: "对收割机进行定期维护保养,更换机油、清洁滤芯、检查传动系统",
-            completionTime: "2024-01-21 16:30:00",
-            completionDescription: "设备维护完成,更换机油20升,清洁空气滤芯,传动系统正常",
-            attachmentImages: ["https://example.com/images/maintenance1.jpg"]
-          },
-          {
-            id: 8,
-            taskName: "有机肥料施用",
-            taskType: "0",
-            cropName: "茄子",
-            plotName: "有机种植区",
-            farmName: "生态农场",
-            executor: "吴十",
-            executeTime: "2024-01-22 08:30:00",
-            taskStatus: 0,
-            taskDescription: "为茄子田施用有机肥料,改善土壤结构,提供充足养分支持茄子生长发育",
-            completionTime: null,
-            completionDescription: null,
-            attachmentImages: null
-          },
-          {
-            id: 9,
-            taskName: "精准灌溉系统调试",
-            taskType: "1",
-            cropName: "黄瓜",
-            plotName: "智能温室C区",
-            farmName: "智慧农场",
-            executor: "郑十一",
-            executeTime: "2024-01-23 10:00:00",
-            taskStatus: 1,
-            taskDescription: "调试精准灌溉系统,设置不同生长期的灌溉参数,确保黄瓜水分需求得到满足",
-            completionTime: "2024-01-23 14:20:00",
-            completionDescription: "灌溉系统调试完成,设置了3个不同生长期的灌溉方案,系统运行稳定",
-            attachmentImages: ["https://example.com/images/irrigation1.jpg", "https://example.com/images/irrigation2.jpg"]
-          },
-          {
-            id: 10,
-            taskName: "葡萄园修剪作业",
-            taskType: "6",
-            cropName: "葡萄",
-            plotName: "葡萄园A区",
-            farmName: "酒庄农场",
-            executor: "冯十二",
-            executeTime: "2024-01-24 07:00:00",
-            taskStatus: 0,
-            taskDescription: "对葡萄藤进行冬季修剪,去除病枝、弱枝,保持树形美观,为来年丰产奠定基础",
-            completionTime: null,
-            completionDescription: null,
-            attachmentImages: null
-          }
-        ],
-        total: 10
+      this.queryParams.params = {}
+      if (null != this.executeTimeRange && '' != this.executeTimeRange) {
+        this.queryParams.params["beginExecuteTime"] = this.executeTimeRange[0];
+        this.queryParams.params["endExecuteTime"] = this.executeTimeRange[1];
       }
       }
-      
-      // 模拟网络延迟
-      setTimeout(() => {
-        this.tasksList = mockData.rows
-        this.total = mockData.total
+      if (null != this.completionTimeRange && '' != this.completionTimeRange) {
+        this.queryParams.params["beginCompletionTime"] = this.completionTimeRange[0];
+        this.queryParams.params["endCompletionTime"] = this.completionTimeRange[1];
+      }
+      listTasks(this.queryParams).then(response => {
+        this.tasksList = response.rows
+        this.total = response.total
         this.loading = false
         this.loading = false
-      }, 500)
-      
-      // 真实API调用 (注释掉,用于实际开发)
-      // listTasks(this.queryParams).then(response => {
-      //   this.tasksList = response.rows
-      //   this.total = response.total
-      //   this.loading = false
-      // })
+      })
     },
     },
     // 取消按钮
     // 取消按钮
     cancel() {
     cancel() {
@@ -675,17 +491,25 @@ export default {
       this.form = {
       this.form = {
         id: null,
         id: null,
         taskName: null,
         taskName: null,
-        taskType: null,
+        typeName: null,
         plotName: null,
         plotName: null,
-        farmName: null,
-        executor: null,
+        farmId: null,
+        plotId: null,
+        assigneeId: null,
         executeTime: null,
         executeTime: null,
+        growCrops: null,
+        remark: null,
         taskStatus: "0",
         taskStatus: "0",
         taskDescription: null,
         taskDescription: null,
         completionTime: null,
         completionTime: null,
-        completionDescription: null,
-        attachmentImages: null
+        completionDesc: null,
+        field: null,
+        fieldName: null,
+        assigneeId: null,
+        assigneeName: null,
+        imageCount: null
       }
       }
+
       this.resetForm("form")
       this.resetForm("form")
     },
     },
     /** 搜索按钮操作 */
     /** 搜索按钮操作 */
@@ -695,13 +519,15 @@ export default {
     },
     },
     /** 重置按钮操作 */
     /** 重置按钮操作 */
     resetQuery() {
     resetQuery() {
+      this.executeTimeRange = []
+      this.completionTimeRange = []
       this.resetForm("queryForm")
       this.resetForm("queryForm")
       this.handleQuery()
       this.handleQuery()
     },
     },
     // 多选框选中数据
     // 多选框选中数据
     handleSelectionChange(selection) {
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
       this.multiple = !selection.length
     },
     },
     /** 新增按钮操作 */
     /** 新增按钮操作 */
@@ -710,53 +536,67 @@ export default {
       this.open = true
       this.open = true
       this.title = "添加农事任务"
       this.title = "添加农事任务"
     },
     },
-    /** 格式化表单数据 */
-    formatFormData(rowData) {
-      return {
-        id: rowData.id,
-        taskName: rowData.taskName || '',
-        taskType: rowData.taskType ? rowData.taskType.toString() : '',
-        plotName: rowData.plotName || '',
-        farmName: rowData.farmName || '',
-        executor: rowData.executor || '',
-        executeTime: rowData.executeTime || null,
-        taskStatus: rowData.taskStatus ? rowData.taskStatus.toString() : '0',
-        taskDescription: rowData.taskDescription || '',
-        completionTime: rowData.completionTime || null,
-        completionDescription: rowData.completionDescription || '',
-        attachmentImages: rowData.attachmentImages || null
-      }
-    },
+   
     /** 修改按钮操作 */
     /** 修改按钮操作 */
     handleUpdate(row) {
     handleUpdate(row) {
+      if (row.farmId != undefined) {
+        const data = {
+          deptId: row.farmId
+        }
+        MachineNameFieldUserText(data).then(response => {
+          this.fields = response.data.fields
+          this.userName = response.data.users
+        })
+      }
       this.reset()
       this.reset()
+      console.log(row)
       const id = row.id || this.ids
       const id = row.id || this.ids
-      
-      // 如果是从表格行点击修改,直接使用行数据回填
-      if (row && row.id) {
-        this.form = this.formatFormData(row)
+      // 如果是批量修改或者需要从服务器获取数据
+      getTasks(id).then(response => {
+        this.form = response.data
         this.open = true
         this.open = true
         this.title = "修改农事任务"
         this.title = "修改农事任务"
-      } else {
-        // 如果是批量修改或者需要从服务器获取数据
-        getTasks(id).then(response => {
-          this.form = this.formatFormData(response.data)
-          this.open = true
-          this.title = "修改农事任务"
-        })
-      }
+      })
+
     },
     },
+    formatDateTime(dateString) {
+    const date = new Date(dateString);
+    return date.toISOString().replace('T', ' ').substring(0, 16);
+  },
     /** 提交按钮 */
     /** 提交按钮 */
     submitForm() {
     submitForm() {
+      console.log("提交按钮")
       this.$refs["form"].validate(valid => {
       this.$refs["form"].validate(valid => {
         if (valid) {
         if (valid) {
           if (this.form.id != null) {
           if (this.form.id != null) {
+            this.form.field = this.form.plotId
+            const selectedUser = this.userName.find(user => user.userId === this.form.assigneeId);
+            if (selectedUser) {
+              this.form.assigneeName = selectedUser.nickName;
+            }
+
+            const selectedfieldName = this.fields.find(field => field.id === this.form.plotId);
+            if (selectedfieldName) {
+              this.form.fieldName = selectedfieldName.fieldName;
+            }
+            this.form.executeTime = this.formatDateTime(this.form.executeTime);
             updateTasks(this.form).then(response => {
             updateTasks(this.form).then(response => {
               this.$modal.msgSuccess("修改成功")
               this.$modal.msgSuccess("修改成功")
               this.open = false
               this.open = false
               this.getList()
               this.getList()
             })
             })
           } else {
           } else {
+            this.form.field = this.form.plotId
+            const selectedUser = this.userName.find(user => user.userId === this.form.assigneeId);
+            if (selectedUser) {
+              this.form.assigneeName = selectedUser.nickName;
+            }
+
+            const selectedfieldName = this.fields.find(field => field.id === this.form.plotId);
+            if (selectedfieldName) {
+              this.form.fieldName = selectedfieldName.fieldName;
+            }
+            this.form.executeTime = this.formatDateTime(this.form.executeTime);
             addTasks(this.form).then(response => {
             addTasks(this.form).then(response => {
               this.$modal.msgSuccess("新增成功")
               this.$modal.msgSuccess("新增成功")
               this.open = false
               this.open = false
@@ -769,12 +609,12 @@ export default {
     /** 删除按钮操作 */
     /** 删除按钮操作 */
     handleDelete(row) {
     handleDelete(row) {
       const ids = row.id || this.ids
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除农事任务编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除农事任务编号为"' + ids + '"的数据项?').then(function () {
         return delTasks(ids)
         return delTasks(ids)
       }).then(() => {
       }).then(() => {
         this.getList()
         this.getList()
         this.$modal.msgSuccess("删除成功")
         this.$modal.msgSuccess("删除成功")
-      }).catch(() => {})
+      }).catch(() => { })
     },
     },
     /** 导出按钮操作 */
     /** 导出按钮操作 */
     handleExport() {
     handleExport() {

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 301 - 365
src/views/base/tasks/stats/index.vue


Vissa filer visades inte eftersom för många filer har ändrats