From fee18d19a1d961847cd09469a20fc8231c1df46c Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Thu, 10 Apr 2025 11:09:34 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/views/TaskManage/TaskIntermediateContent/TaskTable.vue | 123 ++++++++++++++++++++++++++++++++++-------
1 files changed, 102 insertions(+), 21 deletions(-)
diff --git a/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue b/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
index 7b349c3..9129de8 100644
--- a/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
+++ b/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
@@ -1,7 +1,9 @@
<template>
<div class="table-container">
- <el-table :data="tableData" style="width: 100%" height="400" @selection-change="handleSelectionChange">
- <el-table-column type="selection" width="55" />
+ <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="预计到达时间" />
@@ -9,8 +11,8 @@
</el-table>
<div class="pagination">
<el-pagination
- v-model:current-page="pageParams.page"
- v-model:page-size="pageParams.limit"
+ 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"
@@ -31,59 +33,138 @@
},
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,
+ longitude: props.singlePoint.longitude,
+ latitude: props.singlePoint.latitude,
+ polygon: [],
+});
+let pagingParams = ref({
page: 1,
- limit: 10
+ 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) {
- console.log(res.data.data, '哒哒哒');
tableData.value = res.data.data;
}
};
// 分页大小改变
const handleSizeChange = (val) => {
- pageParams.limit = val;
+ pagingParams.value.size = val;
getNestList();
};
// 页码改变
const handleCurrentChange = (val) => {
- pageParams.page = val;
+ pagingParams.value.page = val;
getNestList();
};
+
+// 刷新数据
+const refreshData = () => {
+ tableData.value = [];
+ pagingParams.value.page = 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>
--
Gitblit v1.9.3