From 24ed311c46eaaebdfa6f226998306093d923cb56 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Mon, 21 Jul 2025 13:56:18 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 src/views/job/components/SearchBox.vue                                       |   41 ++++++----
 src/views/job/components/TaskAlgorithmBusiness.vue                           |    9 ++
 src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue |   71 ++++++++---------
 src/views/tickets/ticket.vue                                                 |    8 +-
 src/views/job/components/TaskTop/TaskIndustry.vue                            |   12 +-
 src/views/wel/components/flyratio.vue                                        |    6 
 src/views/wel/components/proportionStatic.vue                                |    6 
 src/views/wel/components/flightStatistics.vue                                |   81 +++++++++----------
 src/views/wel/components/taskOutcome.vue                                     |    6 
 9 files changed, 122 insertions(+), 118 deletions(-)

diff --git a/src/views/job/components/SearchBox.vue b/src/views/job/components/SearchBox.vue
index 9a53df5..3e5d3db 100644
--- a/src/views/job/components/SearchBox.vue
+++ b/src/views/job/components/SearchBox.vue
@@ -57,9 +57,21 @@
             </div>
           </div>
         </el-form-item>
+        <div class="more" v-if="isExpand" @click="toggleExpand">收起</div>
+        <div class="more" v-else @click="toggleExpand">更多</div>
+        <div class="search-btn" :style="{ bottom: isExpand ? '5px' : '-3px' }">
+          <div class="btn clear" @click="handleReset">
+            <img src="@/assets/images/task/clear.png" />重置
+          </div>
+          <div class="btn search" @click="handleSearch">
+            <img src="@/assets/images/task/search.png" />搜索
+          </div>
+          <!-- <div class="btn add" @click="addTask"><img src="@/assets/images/task/add.png"/>新增</div> -->
+        </div>
         <el-form-item label="任务算法:" v-if="isExpand" class="taskAlgorithm">
           <TaskAlgorithmBusiness
-            :setWidth="222"
+          ref="algorithmRef"
+            :setWidth="160"
             :showAlgorithm="true"
             @algorithmChange="algorithmChange"
           />
@@ -108,17 +120,6 @@
             <el-option label="临时任务" :value="0" />
           </el-select>
         </el-form-item>
-        <div class="more" v-if="isExpand" @click="toggleExpand">收起</div>
-        <div class="more" v-else @click="toggleExpand">更多</div>
-        <div class="search-btn" :style="{ bottom: isExpand ? '5px' : '-3px' }">
-          <div class="btn search" @click="handleSearch">
-            <img src="@/assets/images/task/search.png" />搜索
-          </div>
-          <div class="btn clear" @click="handleReset">
-            <img src="@/assets/images/task/clear.png" />清空
-          </div>
-          <!-- <div class="btn add" @click="addTask"><img src="@/assets/images/task/add.png"/>新增</div> -->
-        </div>
       </div>
     </el-form>
   </div>
@@ -136,6 +137,8 @@
 const store = useStore();
 const userAreaCode = computed(() => store.getters.userInfo.detail.areaCode);
 const selectedAreaCode = computed(() => store.state.user.selectedAreaCode);
+
+const algorithmRef = ref(null)
 const isExpand = ref(false);
 const toggleExpand = () => {
   isExpand.value = !isExpand.value;
@@ -282,6 +285,8 @@
   searchForm.date_enum = 'TODAY';
   searchForm.area_code = userAreaCode.value;
   checked.value = 'today';
+  signDevice_sn.value = ''
+	algorithmRef.value?.clear()
   handleNodeClick({ id: userAreaCode.value });
   handleSearch();
 };
@@ -360,7 +365,7 @@
     display: flex;
     flex-wrap: wrap;
     align-items: center;
-    gap: 20px 12px; // 设置行间距和列间距
+    gap: 20px 15px; // 设置行间距和列间距
 
     .more {
       cursor: pointer;
@@ -369,16 +374,17 @@
       color: #1c5cff;
       line-height: 32px;
       font-size: 16px;
+      margin: 0 28px;
     }
 
     .search-btn {
-      position: absolute;
-      right: 0;
+      // position: absolute;
+      // right: 0;
       display: flex;
       justify-content: space-between;
       cursor: pointer;
-      font-size: 14px;
-
+      font-size: 14px;  
+      
       .btn {
         width: 80px;
         height: 32px;
@@ -387,6 +393,7 @@
         display: flex;
         justify-content: center;
         align-items: center;
+        // margin-left: px;
         img {
           width: 14px;
           height: 14px;
diff --git a/src/views/job/components/TaskAlgorithmBusiness.vue b/src/views/job/components/TaskAlgorithmBusiness.vue
index c5c0a9a..8e9b992 100644
--- a/src/views/job/components/TaskAlgorithmBusiness.vue
+++ b/src/views/job/components/TaskAlgorithmBusiness.vue
@@ -77,6 +77,15 @@
 	emit('businessChange', value)
 }
 
+const clear = () => {
+	ai_types.value = [] // 清空算法选择
+	handleAlgorithmChange(ai_types.value)
+}
+
+defineExpose({
+	clear,
+})
+
 onMounted(() => {
 	requestDictionary()
 })
diff --git a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
index 4e96fd7..5b3a96a 100644
--- a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
+++ b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
@@ -17,6 +17,7 @@
 				<el-table-column prop="ai_type_str" label="关联算法" show-overflow-tooltip align="center" />
 				<el-table-column label="任务状态" align="center">
 					<template #default="scope">
+						<div class="base_f_c_c">
 						<span :style="{
 							color:
 								scope.row.status === 1
@@ -33,6 +34,16 @@
 						}">
 							{{ scope.row.status ? getStatusText(scope.row.status) : '' }}
 						</span>
+						<el-tooltip
+								class="item"
+								effect="dark"
+								:content="scope.row.reason"
+								placement="top"
+								popper-class="reasonNotFly ztzf-tooltip-box1"
+							>
+								<el-icon v-if="scope.row.status === 5 && scope.row.reason" color="#FF4848"><QuestionFilled /></el-icon>
+							</el-tooltip>
+						</div>
 					</template>
 				</el-table-column>
 				<el-table-column prop="is_circle_job" label="任务类型" align="center">
@@ -50,43 +61,25 @@
 				<el-table-column prop="creator_name" label="创建人" align="center" show-overflow-tooltip />
 				<el-table-column label="操作" width="200" align="center">
 					<template #default="scope">
-						<div
-							v-if="scope.row.status === 2"
-							class="btnItem"
-							link
-							type="primary"
-							@click="turnBack(scope.row)"
-						>
+						<!-- <el-button type="text" @click="rejectDetail(row.id)">驳回原因</el-button> -->
+						<el-button icon="el-icon-back" v-if="scope.row.status === 2" type="text"
+							@click="turnBack(scope.row)">
 							返航
-						</div>
-						<div
-							v-if="scope.row.status === 1"
-							class="btnItem"
-							link
-							type="primary"
-							@click="cancelTask(scope.row)"
-						>
+						</el-button>
+						<el-button icon="el-icon-close" v-if="scope.row.status === 1" type="text"
+							@click="cancelTask(scope.row)">
 							取消任务
-						</div>
-						<div class="btnItem" link type="primary" @click="handleDetail(scope.row)">查看</div>
+						</el-button>
+						<el-button icon="el-icon-view" type="text" @click="handleDetail(scope.row)">查看</el-button>
 					</template>
 				</el-table-column>
 			</el-table>
 		</div>
 		<div class="pagination">
-			<el-pagination
-				class="ztzf-pagination"
-				popper-class="custom-pagination-dropdown"
-				background
-				:page-sizes="[10, 20, 30, 40,50,100]"
-				:size="size"
-				v-model:current-page="jobListParams.current"
-				v-model:page-size="jobListParams.size"
-				layout="total, sizes, prev, pager, next, jumper"
-				:total="total"
-				@size-change="handleSizeChange"
-				@current-change="handleCurrentChange"
-			/>
+			<el-pagination class="ztzf-pagination" popper-class="custom-pagination-dropdown" background
+				:page-sizes="[10, 20, 30, 40, 50, 100]" :size="size" v-model:current-page="jobListParams.current"
+				v-model:page-size="jobListParams.size" layout="total, sizes, prev, pager, next, jumper" :total="total"
+				@size-change="handleSizeChange" @current-change="handleCurrentChange" />
 		</div>
 	</div>
 	<!-- 添加任务 -->
@@ -113,7 +106,7 @@
 import DeviceJobDetails from '../DeviceJobDetails.vue'
 import CancelTaskDialog from '../CancelTaskDialog.vue'
 import { useStore } from 'vuex'
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash'
 const store = useStore()
 const singleUavHome = computed(() => store.state.home.singleUavHome)
 const jobListParams = reactive({
@@ -130,14 +123,14 @@
 
 // 获取任务列表
 const getJobList = () => {
-  const apiParams = {
-    ...cloneDeep(jobListParams),
-    searchParams: {
-      ...cloneDeep(jobListParams.searchParams),
-      status_list: jobListParams.searchParams.status || undefined,
-      status: undefined,
-    },
-  }
+	const apiParams = {
+		...cloneDeep(jobListParams),
+		searchParams: {
+			...cloneDeep(jobListParams.searchParams),
+			status_list: jobListParams.searchParams.status || undefined,
+			status: undefined,
+		},
+	}
 	jobList(apiParams).then(res => {
 		if (res.data.code !== 0) return
 		jobListData.value = res.data.data.records
diff --git a/src/views/job/components/TaskTop/TaskIndustry.vue b/src/views/job/components/TaskTop/TaskIndustry.vue
index 3d36176..bd2ae82 100644
--- a/src/views/job/components/TaskTop/TaskIndustry.vue
+++ b/src/views/job/components/TaskTop/TaskIndustry.vue
@@ -39,24 +39,24 @@
 			name: '机巢事件统计',
 			type: 'pie',
 			// roseType: 'radius',
-			radius: ['40%', '70%'],
+			radius: ['36%', '60%'],
 			// center: ['50%', '45%'],
 			// radius: '70%', // 设置饼图的半径
-			center: ['50%', '50%'], // 调整饼图位置
+			center: ['50%', '36%'], // 调整饼图位置
 			data: [],
 			label: {
 				show: true,
 				position: 'outside',
 				formatter: '{c}',
 				fontSize: 12,
-				color: '#fff',
+				color: '#000',
 			},
 			labelLine: {
 				show: true,
-				length: 5,
-				length2: 8,
+				length: 10,
+				length2: 10,
 				lineStyle: {
-					color: '#fff',
+					color: '#000',
 				},
 			},
 		},
diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index 0e388df..7c6466e 100644
--- a/src/views/tickets/ticket.vue
+++ b/src/views/tickets/ticket.vue
@@ -1457,10 +1457,10 @@
       if (status === -1 || status === '-1') return ''
       // 状态颜色映射
       const colorMap = {
-        0: '#ffb6b6', // 待处理-淡红
-        3: '#e57373', // 处理中-更淡红
-        2: '#faad14', // 待审核-橙色
-        4: '#a0cfff', // 已完成-淡蓝
+        0: '#FF7411', // 待处理-淡红
+        3: '#FFC300', // 处理中-更淡红
+        2: '#FF472F', // 待审核-橙色
+        4: '#0291A1', // 已完成-淡蓝
       }
       return colorMap[String(status)] || ''
     },
diff --git a/src/views/wel/components/flightStatistics.vue b/src/views/wel/components/flightStatistics.vue
index 16768fd..c6fe262 100644
--- a/src/views/wel/components/flightStatistics.vue
+++ b/src/views/wel/components/flightStatistics.vue
@@ -67,21 +67,16 @@
 const unitMap = {
   飞行时长: '小时',
   飞行里程: '公里',
-  //   任务成果: '个',
+
 };
 const flyTypeList = ref([
   { name: '飞行时长', value: 0, img: flyImg1, key: 'hour_count' },
   { name: '飞行里程', value: 0, img: flyImg2, key: 'flight_mileage' },
-  //   { name: '任务成果', value: 0, img: flyImg3 },
+
 ]);
 // 飞行统计
 const getFlyList = () => {
-  // getFly(params.value).then(res => {
-  //   flyTypeList.value = flyTypeList.value.map(item => ({
-  //     ...item,
-  //     value: res.data.data[keyMapping[item.name]] || 0,
-  //   }));
-  // });
+ 
 
   tongjiNestApi(flyparams.value).then(res => {
     flyTypeList.value = flyTypeList.value.map(item => ({
@@ -94,18 +89,19 @@
 const getFlyTimeList = () => {
   getFlyTime(params.value).then(res => {
     const resList = res?.data?.data || [];
+    console.log('飞行',resList);
+    
     lineCharts(resList);
   });
 };
 const refresh = () => {
-  params.value.date_enum = 'CURRENT_YEAR';
-  checked.value = 'CURRENT_YEAR';
-  dateSelect.value = 'CURRENT_YEAR';
+
   getFlyList();
   getFlyTimeList();
+
+  
 };
 let timeClick = (item, index) => {
-
   checked.value = item;
   params.value.date_enum = item;
   dateSelect.value = item;
@@ -187,41 +183,40 @@
     },
     yAxis: [
       {
-        type: 'log',
-        name: '单位:小时',
+    type: 'value', 
+    name: '单位:小时',
+    nameTextStyle: {
+      color: '#383838',
+      fontSize: '1.2rem',
+    },
+    axisLine: {
+      show: false,
+      lineStyle: {
+        color: '#cdd5e2',
+      },
+    },
+    splitLine: {
+      show: true,
+      lineStyle: {
+        type: 'dashed',
+        color: '#cdd5e2',
+        width: 1,
+        opacity: 0.5,
+      },
+    },
+    axisLabel: {
+      color: '#666666',
+    }
+  },
+      {
+        type: 'value', 
+        name: '单位:公里',
         nameTextStyle: {
           color: '#383838',
           fontSize: '1.2rem',
         },
-        min: 1,
-        logBase: 3,
-        axisLine: {
-          show: false,
-          lineStyle: {
-            color: '#cdd5e2',
-          },
-        },
-        splitLine: {
-          show: true,
-          lineStyle: {
-            type: 'dashed',
-            color: '#cdd5e2',
-            width: 1,
-            opacity: 0.5,
-          },
-        },
-        axisLabel: {
-          color: '#666666', // 直接配置颜色
-        },
-      },
-      {
-        type: 'log',
-        name: '单位:公里',
-        nameTextStyle: {
-          color: '#383838',
-        },
-        min: 1,
-        logBase: 3,
+     
+    
         axisLine: {
           show: false,
           lineStyle: {
diff --git a/src/views/wel/components/flyratio.vue b/src/views/wel/components/flyratio.vue
index d9dff52..1edbfea 100644
--- a/src/views/wel/components/flyratio.vue
+++ b/src/views/wel/components/flyratio.vue
@@ -52,9 +52,9 @@
   },
 });
 const refresh = () => {
-  params.value.date_enum = 'CURRENT_YEAR';
-  checked.value = 'CURRENT_YEAR';
-  dateSelect.value = 'CURRENT_YEAR';
+  // params.value.date_enum = 'CURRENT_YEAR';
+  // checked.value = 'CURRENT_YEAR';
+  // dateSelect.value = 'CURRENT_YEAR';
 getIndustryJobNumPieChart();
 };
 let timeClick = (item, index) => {
diff --git a/src/views/wel/components/proportionStatic.vue b/src/views/wel/components/proportionStatic.vue
index f83bd7e..41f2d56 100644
--- a/src/views/wel/components/proportionStatic.vue
+++ b/src/views/wel/components/proportionStatic.vue
@@ -84,9 +84,9 @@
   });
 };
 const refresh = () => {
-  params.value.date_enum = 'CURRENT_YEAR';
-  checked.value = 'CURRENT_YEAR';
-  dateSelect.value = 'CURRENT_YEAR';
+  // params.value.date_enum = 'CURRENT_YEAR';
+  // checked.value = 'CURRENT_YEAR';
+  // dateSelect.value = 'CURRENT_YEAR';
   getTypeData();
 };
 
diff --git a/src/views/wel/components/taskOutcome.vue b/src/views/wel/components/taskOutcome.vue
index ea24d7f..e8186e6 100644
--- a/src/views/wel/components/taskOutcome.vue
+++ b/src/views/wel/components/taskOutcome.vue
@@ -40,9 +40,9 @@
 const totalNum = ref(0)
 const dateSelect = ref('CURRENT_YEAR');
 const refresh = () => {
-  params.value.dateEnum = 'CURRENT_YEAR';
-  checked.value = 'CURRENT_YEAR';
-  dateSelect.value = 'CURRENT_YEAR';
+  // params.value.dateEnum = 'CURRENT_YEAR';
+  // checked.value = 'CURRENT_YEAR';
+  // dateSelect.value = 'CURRENT_YEAR';
   getBarChartData(params.value);
 };
 let timeClick = (item, index) => {

--
Gitblit v1.9.3