From b0ccd2d131b2e3df5d901385e38ed0077b8d0fbc Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Mon, 14 Apr 2025 12:31:31 +0800
Subject: [PATCH] feat:修改任务管理内容

---
 src/views/TaskManage/TaskIntermediateContent/TaskTable.vue |  169 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 136 insertions(+), 33 deletions(-)

diff --git a/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue b/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
index 26d834a..6d1b608 100644
--- a/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
+++ b/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
@@ -1,21 +1,25 @@
 <template>
-  <el-table :data="tableData" style="width: 100%" height="400" @selection-change="handleSelectionChange">
-    <el-table-column type="selection" width="55" />
-    <el-table-column type="index" label="序号" width="60" />
-    <el-table-column prop="nickname" label="机巢名称" />
-    <el-table-column prop="estimated_arrival_time" label="预计到达时间" />
-    <el-table-column prop="exe_distance" label="执行里程" />
-  </el-table>
-  <div class="pagination">
-    <el-pagination
-      v-model:current-page="pageParams.page"
-      v-model:page-size="pageParams.limit"
-      :page-sizes="[10, 20, 30]"
-      layout="total, sizes, prev, pager, next"
-      :total="total"
-      @size-change="handleSizeChange"
-      @current-change="handleCurrentChange"
-    />
+  <div class="table-container">
+    <el-table :data="tableData" style="width: 100%" height="400" 
+      @selection-change="handleSelectionChange"
+      @select="handleSelect">
+      <el-table-column type="selection" width="55" :selectable="checkSelectable" />
+      <el-table-column type="index" label="序号" width="60" />
+      <el-table-column prop="nickname" label="机巢名称" />
+      <el-table-column prop="estimated_arrival_time" label="预计到达时间" />
+      <el-table-column prop="exe_distance" label="执行里程" />
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pagingParams.page"
+        v-model:page-size="pagingParams.size"
+        :page-sizes="[10, 20, 30]"
+        layout="total, sizes, prev, pager, next"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
   </div>
 </template>
 
@@ -29,58 +33,157 @@
   },
   waylineType: {
     type: Number,
-    default: 0
+    default: 3
+  },
+  singlePoint: {
+    type: Object,
+    default: () => ({})
+  },
+  planarPoints: {
+    type: Array,
+    default: () => ([])
   }
 });
 
 // 选中的数据
 const selectedRows = ref([]);
 // 分页参数
-let pageParams = reactive({
+let pageParams = ref({
   wayline_id: props.waylineId, 
   type: props.waylineType,
-  page: 1,
-  limit: 10
+  longitude: props.singlePoint.longitude,
+  latitude: props.singlePoint.latitude,
+  polygon: [],
+});
+let pagingParams = ref({
+  current: 1,
+  size: 10
 });
 // 获取可用机巢列表数据
 const total = ref(0);
 const tableData = ref([]);
 const getNestList = async () => {
 	tableData.value = [];
-  const res = await getFlyingNestBy(pageParams);
+  const res = await getFlyingNestBy(pageParams.value, pagingParams.value);
   if (res.data.code === 0) {
     tableData.value = res.data.data;
   }
 };
 // 分页大小改变
 const handleSizeChange = (val) => {
-  pageParams.limit = val;
+  pagingParams.value.size = val;
   getNestList();
 };
 
 // 页码改变
 const handleCurrentChange = (val) => {
-  pageParams.page = val;
+  pagingParams.value.current = val;
   getNestList();
 };
+
+// 刷新数据
+const refreshData = () => {
+  tableData.value = [];
+  pagingParams.value.current = 1;
+  getNestList();
+};
+
 const emit = defineEmits(['update:selected']);
 const handleSelectionChange = (val) => {
-  selectedRows.value = val;
-  // 可以通过emit将选中数据传给父组件
-  emit('update:selected', val);
+  // 如果不是智能规划选区模式,才更新所有选中数据
+  if (props.waylineType !== 2) {
+    selectedRows.value = val;
+    emit('update:selected', val);
+  }
 };
+
+// 控制表格行是否可选
+const checkSelectable = (row) => {
+  if (props.waylineType === 2) {
+    // 如果已经有选中的行,且当前行未被选中,则不允许选择
+    return selectedRows.value.length === 0 || selectedRows.value.some(selected => selected.device_sn === row.device_sn);
+  }
+  return true;
+};
+
+// 处理单行选择
+const handleSelect = (selection, row) => {
+  if (props.waylineType === 2) {
+    // 如果是智能规划选区模式,确保只能选中一行
+    if (selection.length > 1) {
+      // 保留最后选中的那一行
+      const lastSelected = selection[selection.length - 1];
+      selectedRows.value = [lastSelected];
+      // 触发更新事件
+      emit('update:selected', selectedRows.value);
+    }
+  }
+};
+
 // 监听航线ID变化
 watch(() => props.waylineId, (newVal) => {
-  pageParams.wayline_id = newVal;
+  pageParams.value.type = 0;
   if (newVal) {
-    pageParams.page = 1;
-    getNestList();
+    pageParams.value.wayline_id = newVal;
+    refreshData();
+  } else {
+    // 数据为空时,清除列表数据
+    tableData.value = [];
   }
-}, { immediate: true });
-onMounted(() => {
-  // getNestList();
+}, { deep: true });
+
+// 监听单点返回的数据
+watch(() => props.singlePoint, (newVal) => {
+  pageParams.value.wayline_id = '';
+  pageParams.value.type = 1;
+  if (newVal && newVal.latitude && newVal.longitude) {
+    pageParams.value.latitude = newVal.latitude;
+    pageParams.value.longitude = newVal.longitude;
+    refreshData();
+  }
+}, { deep: true });
+
+// 监听面状航线返回的数据
+watch(() => props.planarPoints, (newVal) => {
+  pageParams.value.wayline_id = '';
+  pageParams.value.type = 2;
+  if (newVal && newVal.length > 0) {
+    const polygonArray = newVal.map(point => [point.longitude, point.latitude]);
+    pageParams.value.polygon = polygonArray;
+    refreshData();
+  }
+}, { deep: true });
+
+// 暴露给父组件的方法
+const clearTableData = () => {
+  tableData.value = [];
+};
+defineExpose({
+  clearTableData
 });
+
+
+onMounted(() => {});
+
 </script>
 
 <style lang="scss" scoped>
+.table-container {
+  height: 500px;
+  // display: flex;
+  // flex-direction: column;
+  
+  .pagination {
+    margin-top: 10px;
+  }
+  
+  // :deep(.el-table) {
+  //   flex: 1;
+  //   background-color: transparent;
+  //   --el-table-border-color: rgba(255, 255, 255, 0.1);
+  //   --el-table-header-bg-color: rgba(31, 62, 122, 0.5);
+  //   --el-table-header-text-color: #fff;
+  //   --el-table-text-color: #fff;
+  // }
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3