| | |
| | | <div class="task-contain"> |
| | | <div class="left"> |
| | | <div class="search"> |
| | | <div class="item">任务名称:<el-input v-model="searchForm.name" placeholder="请输入任务名称"></el-input></div> |
| | | <div class="item"><span style="color: red;">*</span>任务日期: |
| | | <div class="item"><span class="required">*</span>任务名称:<el-input v-model="searchForm.name" placeholder="请输入任务名称"></el-input></div> |
| | | <div class="item"><span class="required">*</span>任务日期: |
| | | <el-date-picker |
| | | v-model="searchForm.begin_time" |
| | | v-model="taskData" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | /> |
| | |
| | | </div> |
| | | <div class="lines"> |
| | | <div class="wayline-type"> |
| | | <el-radio-group v-model="searchForm.wayline_type"> |
| | | <el-radio label="1">单点航线</el-radio> |
| | | <el-radio label="2">智能规划选区</el-radio> |
| | | <el-radio-group v-model="waylineType" @change="radioChange"> |
| | | <el-radio :value="1" label="单点航线"></el-radio> |
| | | <el-radio :value="2" label="智能规划选区"></el-radio> |
| | | </el-radio-group> |
| | | </div> |
| | | <TaskMap class="wayline-map" :wayLineFile="wayLineFile"/> |
| | | <TaskMap class="wayline-map" |
| | | :wayLineFile="wayLineFile" |
| | | :checkedTableData="checkedTableData" |
| | | :waylineTypeTest="waylineType" |
| | | @clickPosition="clickSignPosition" |
| | | @saveWayline="savePlanerWayline" |
| | | /> |
| | | </div> |
| | | </div> |
| | | <div class="right"> |
| | | <TaskTable :waylineId="waylineId" :waylineType="waylineType" @update:selected="handleSelected" /> |
| | | <TaskTable ref="taskTableRef" |
| | | :waylineId="waylineId" |
| | | :waylineType="waylineType" |
| | | :singlePoint="singlePoint" |
| | | :planarPoints="planarPoints" |
| | | @update:selected="handleSelected" |
| | | /> |
| | | <div class="btn"> |
| | | <el-button type="primary" @click="cancel">取消</el-button> |
| | | <el-button type="primary" @click="submitClick">发布</el-button> |
| | |
| | | import TaskMap from './TaskMap.vue'; |
| | | import TaskTable from './TaskTable.vue'; |
| | | |
| | | const emit = defineEmits(['refresh']); |
| | | |
| | | const rangDate = ref([]); |
| | | // 航线ID |
| | | let waylineId = ref(''); |
| | | const waylineId = ref(''); |
| | | // 航线文件 |
| | | let wayLineFile = ref(''); |
| | | const wayLineFile = ref(''); |
| | | // 航线类型 |
| | | let waylineType = ref(0); |
| | | |
| | | const waylineType = ref(3); |
| | | // 添加子组件引用 |
| | | const taskTableRef = ref(null); |
| | | const taskData = ref(''); |
| | | const searchForm = reactive({ |
| | | name: '', |
| | | ai_types: [], |
| | |
| | | remark: '', |
| | | type: waylineType.value, |
| | | dock_sns: [], |
| | | longitude: '', |
| | | latitude: '', |
| | | polygon: [], |
| | | }); |
| | | const isShowAddTask = defineModel('show'); |
| | | |
| | |
| | | routeOptions.value = res.data.data; |
| | | } |
| | | }; |
| | | // 关联算法 |
| | | const algorithmChange = (val) => { |
| | | searchForm.ai_types = val; |
| | | }; |
| | | |
| | | // 切换航线类型 |
| | | const radioChange = (val) => { |
| | | // 清空选中航线值 |
| | | searchForm.file_id = ''; |
| | | // 航线ID也清空 |
| | | waylineId.value = ''; |
| | | wayLineFile.value = ''; |
| | | waylineType.value = val; |
| | | searchForm.type = val; |
| | | // 清空列表数据 |
| | | nextTick(() => { |
| | | if (taskTableRef.value) { |
| | | taskTableRef.value.clearTableData(); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | // 获取航线文件 |
| | | const getWayLineFile = async (val) => { |
| | | searchForm.type = 0; |
| | | waylineType.value = 0; |
| | | waylineId.value = val; |
| | | const currentRoute = routeOptions.value.find(item => item.wayline_id === val); |
| | | wayLineFile.value = currentRoute.object_key; |
| | | }; |
| | | |
| | | // 获取选中机场列表数据,并且发布 |
| | | let checkedTableData = ref([]); |
| | | const handleSelected = (val) => { |
| | | searchForm.dock_sns = val.map(item => item.device_sn); |
| | | checkedTableData.value = val; |
| | | }; |
| | | const emit = defineEmits(['refresh']); |
| | | |
| | | // 地图点击事件 表格重新刷新数据 |
| | | let singlePoint = ref({}); |
| | | const clickSignPosition = (val) => { |
| | | singlePoint.value = val; |
| | | searchForm.longitude = val.longitude; |
| | | searchForm.latitude = val.latitude; |
| | | }; |
| | | |
| | | // 保存面状航线 |
| | | let planarPoints = ref([]); |
| | | const savePlanerWayline = (val) => { |
| | | planarPoints.value = val; |
| | | const polygonArray = val.map(point => [point.longitude, point.latitude]); |
| | | searchForm.polygon = polygonArray; |
| | | }; |
| | | |
| | | // 提交 |
| | | const submitClick = () => { |
| | | if (!searchForm.begin_time) { |
| | | if (!taskData.value) { |
| | | ElMessage({ |
| | | message: '请选择任务日期', |
| | | type: 'warning' |
| | | }); |
| | | return; |
| | | } |
| | | searchForm.end_time = `${searchForm.begin_time} 23:59:59`; |
| | | searchForm.begin_time = `${searchForm.begin_time} 00:00:00`; |
| | | if (!searchForm.name) { |
| | | ElMessage({ |
| | | message: '请输入任务名称', |
| | | type: 'warning' |
| | | }); |
| | | return; |
| | | } |
| | | searchForm.begin_time = `${taskData.value} 00:00:00`; |
| | | searchForm.end_time = `${taskData.value} 23:59:59`; |
| | | |
| | | createTask(searchForm).then((res) => { |
| | | if (res.data.code === 0) { |
| | |
| | | waylineId.value = ''; |
| | | wayLineFile.value = ''; |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | getRouteList(); |
| | | }) |
| | |
| | | .task-contain { |
| | | display: flex; |
| | | .left { |
| | | width: 70%; |
| | | width: 68%; |
| | | .search { |
| | | display: grid; |
| | | grid-template-columns: repeat(3, 1fr); |
| | |
| | | gap: 30px; // 增加间距使布局更合理 |
| | | margin-bottom: 8px; // 添加底部间距 |
| | | .item { |
| | | position: relative; |
| | | display: flex; |
| | | align-items: center; |
| | | :deep(.el-input), |
| | |
| | | :deep(.el-date-editor.el-input__wrapper) { |
| | | width: 200px; // 调整日期选择器宽度 |
| | | } |
| | | .required { |
| | | color: #f56c6c; |
| | | margin-left: 4px; |
| | | position: absolute; |
| | | left: -10px; |
| | | top: 8px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .right { |
| | | width: 30%; |
| | | width: 32%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: space-between; |