From d5b9e8f2933849f9d877a5b81bbccb9892ea146f Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Sat, 31 Jan 2026 15:36:04 +0800
Subject: [PATCH] feat: 进度调整

---
 applications/task-work-order/src/views/orderView/orderManage/orderManage/OrderStepBar.vue     |  199 ++++++++++++++++++++++++++++
 applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue |    6 
 applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue       |  179 -------------------------
 applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js    |    9 +
 4 files changed, 215 insertions(+), 178 deletions(-)

diff --git a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
index fdee741..ce4967b 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
@@ -248,7 +248,7 @@
 import { ElMessage } from 'element-plus'
 import { fieldRules, flyVisual, getDictLabel } from '@ztzf/utils'
 import { gdPatrolTaskRepublish, gdFlyerPageApi, gdPatrolTaskAuditApi } from './inspectionRequestApi'
-import { gdWorkOrderFlowListApi, gdWorkOrderPageApi } from '../orderManage/orderManageApi'
+import { gdWorkOrderFlowListApi, gdWorkOrderFlowPatrolListApi, gdWorkOrderPageApi } from '../orderManage/orderManageApi'
 import { gdManageDeviceListApi } from '../orderManage/gdManageDeviceApi'
 import { pxToRem } from '@/utils/rem'
 import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
@@ -400,9 +400,8 @@
 const processList = ref([])
 // 加载时间线list
 function loadList() {
-	gdWorkOrderFlowListApi({ workOrderId: formData.value.id, type: '1' }).then(res => {
+	gdWorkOrderFlowPatrolListApi({ workOrderId: formData.value.id, type: '1' }).then(res => {
 		processList.value = res.data.data
-		console.log(processList.value, 'processList.value')
 	})
 }
 
@@ -432,6 +431,7 @@
 	}
 }
 import { ArrowLineMaterialProperty } from '@/utils/cesium/Material'
+import OrderStepBar from '@/views/orderView/orderManage/orderManage/OrderStepBar.vue'
 let arrowLineMaterialProperty = new ArrowLineMaterialProperty({
 	color: new Cesium.Color(128 / 255, 215 / 255, 255 / 255, 1),
 	directionColor: new Cesium.Color(1, 1, 1, 1),
diff --git a/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
index a04f341..bcb77b1 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
@@ -10,42 +10,8 @@
 	>
 		<div class="content" style="display: flex">
 			<div class="processBox" v-if="dialogMode !== 'add' && processList.length">
-				<div class="timeline-wrapper">
-					<div v-for="(stage, stageIndex) in processList" :key="stageIndex" class="stage-group">
-						<!-- 大节点 Stage Node -->
-						<div class="stage-node">
-							<div class="stage-icon" :class="{ reached: stage.reached }">
-								<el-icon v-if="stage.reached"><Check /></el-icon>
-								<span v-else class="stage-index">{{ stageIndex + 1 }}</span>
-							</div>
-							<span class="stage-name">{{ stage.stageName }}</span>
-						</div>
-
-						<!-- 小节点 Child Nodes -->
-						<div class="child-list" v-if="stage.child && stage.child.length">
-							<template v-for="(child, childIndex) in stage.child.filter(c => c.reached)">
-								<div v-if="child.reached" :key="childIndex" class="child-node">
-									<div class="child-left">
-										<span class="child-status">{{ child.statusName }}</span>
-									</div>
-									<div class="child-dot"></div>
-									<div class="child-right">
-										<span class="child-operator">{{ child.operator || '-' }}</span>
-										<span class="child-time">{{ child.createTime || '-' }}</span>
-									</div>
-								</div>
-							</template>
-
-						</div>
-
-						<!-- 连接线 -->
-						<div
-							class="connector-line"
-							v-if="stageIndex < processList.length - 1"
-							:class="{ reached: stage.reached }"
-						></div>
-					</div>
-				</div>
+<!--				<div class="detail-title">工单记录</div>-->
+				<OrderStepBar :processList="processList" />
 			</div>
 			<div class="leftBox">
 				<div v-if="dialogReadonly">
@@ -311,6 +277,7 @@
 import droneIcon from '@/assets/images/orderView/orderManage/drone.png'
 import droneActiveIcon from '@/assets/images/orderView/orderManage/droneActive.png'
 import { useStore } from 'vuex'
+import OrderStepBar from '@/views/orderView/orderManage/orderManage/OrderStepBar.vue'
 const store = useStore()
 const permission = computed(() => store.state.user.permission)
 
@@ -707,150 +674,12 @@
 	}
 
 	.processBox {
-		padding: 24px 16px;
+		padding: 12px 16px 24px 16px;
 		width: 312px;
 		border: 1px solid #e4e4e4;
 		border-radius: 8px;
 		overflow: auto;
 		background: #fff;
-
-		.timeline-wrapper {
-			padding-left: 100px;
-			position: relative;
-		}
-
-		.stage-group {
-			position: relative;
-		}
-
-		// 大节点 - Stage Node
-		.stage-node {
-			display: flex;
-			align-items: center;
-			gap: 12px;
-			margin-bottom: 8px;
-
-			.stage-icon {
-				width: 28px;
-				height: 28px;
-				border-radius: 50%;
-				background: #e0e0e0;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				color: #fff;
-				font-size: 14px;
-				font-weight: 600;
-				flex-shrink: 0;
-				position: relative;
-				z-index: 2;
-
-				&.reached {
-					background: #1a1a2e;
-				}
-
-				.el-icon {
-					font-size: 16px;
-				}
-
-				.stage-index {
-					font-size: 12px;
-				}
-			}
-
-			.stage-name {
-				width: 70px;
-				text-align: right;
-				position: absolute;
-				left: -80px;
-				font-family: Roboto, Roboto;
-				font-weight: bold;
-				font-size: 16px;
-				color: rgba(0,0,0,0.85);
-			}
-		}
-
-		// 小节点 - Child Nodes
-		.child-list {
-			position: relative;
-			left: -52px;
-		}
-
-		.child-node {
-			display: flex;
-			align-items: flex-start;
-			position: relative;
-
-
-			&:last-child::before {
-				bottom: 50%;
-			}
-
-			.child-left {
-				width: 100px;
-				flex-shrink: 0;
-				text-align: right;
-				padding-right: 20px;
-				font-family: Source Han Sans CN, Source Han Sans CN;
-				font-weight: 400;
-				font-size: 14px;
-				color: rgba(0,0,0,0.85);
-
-				.child-status {
-					white-space: nowrap;
-				}
-			}
-
-			.child-dot {
-				width: 12px;
-				height: 12px;
-				border-radius: 50%;
-				background: #1a1a2e;
-				flex-shrink: 0;
-				position: relative;
-				z-index: 2;
-				margin-top: 4px;
-			}
-
-			.child-right {
-				flex: 1;
-				padding-left: 12px;
-				display: flex;
-				flex-direction: column;
-				gap: 2px;
-
-				.child-operator {
-					font-family: Source Han Sans CN, Source Han Sans CN;
-					font-weight: 400;
-					font-size: 14px;
-					color: rgba(0,0,0,0.85);
-
-				}
-
-				.child-time {
-					white-space: nowrap;
-					font-family: Source Han Sans CN, Source Han Sans CN;
-					font-weight: 400;
-					font-size: 14px;
-					color: rgba(0,0,0,0.45);
-				}
-			}
-		}
-
-		// 连接线
-		.connector-line {
-			position: absolute;
-			left: 13px;
-			width: 2px;
-			height: 100%;
-			background: #e0e0e0;
-			top: 28px;
-			z-index: 1;
-
-			&.reached {
-				background: #1a1a2e;
-			}
-		}
 	}
 }
 
diff --git a/applications/task-work-order/src/views/orderView/orderManage/orderManage/OrderStepBar.vue b/applications/task-work-order/src/views/orderView/orderManage/orderManage/OrderStepBar.vue
new file mode 100644
index 0000000..16f6780
--- /dev/null
+++ b/applications/task-work-order/src/views/orderView/orderManage/orderManage/OrderStepBar.vue
@@ -0,0 +1,199 @@
+<template>
+	<div class="timeline-wrapper">
+		<div v-for="(stage, stageIndex) in processList" :key="stageIndex" class="stage-group">
+			<!-- 大节点 Stage Node -->
+			<div class="stage-node">
+				<div class="stage-icon" :class="{ reached: stage.reached }">
+					<el-icon v-if="stage.reached"><Check /></el-icon>
+					<span v-else class="stage-index">{{ stageIndex + 1 }}</span>
+				</div>
+				<span class="stage-name" :class="{ reached: stage.reached }">{{ stage.stageName }}</span>
+			</div>
+
+			<!-- 小节点 Child Nodes -->
+			<div class="child-list" v-if="stage?.child?.length && stageIndex !== processList.length-1">
+				<template v-for="(child, childIndex) in stage.child.filter(c => c.reached)">
+					<div v-if="child.reached" :key="childIndex" class="child-node">
+						<div class="child-left">
+							<span class="child-status">{{ child.statusName }}</span>
+						</div>
+						<div class="child-dot"></div>
+						<div class="child-right">
+							<span class="child-operator">{{ child.operator || '-' }}</span>
+							<span class="child-time">{{ child.createTime || '-' }}</span>
+						</div>
+					</div>
+				</template>
+				<!-- 连接线 -->
+				<div
+					class="connector-line"
+					v-if="stageIndex < processList.length - 1"
+					:class="{ reached: stage.reached }"
+				></div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script setup>
+import { Check } from '@element-plus/icons-vue'
+
+const props = defineProps({
+	processList: {
+		type: Array,
+		default: () => [],
+	},
+})
+</script>
+
+<style scoped lang="scss">
+.timeline-wrapper {
+	padding-left: 100px;
+	position: relative;
+
+
+	.stage-group {
+		position: relative;
+	}
+
+	// 大节点 - Stage Node
+	.stage-node {
+		display: flex;
+		align-items: center;
+		gap: 12px;
+
+		.stage-icon {
+			width: 28px;
+			height: 28px;
+			border-radius: 50%;
+			background: #DBDDE2;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			color: #fff;
+			font-size: 14px;
+			font-weight: 600;
+			flex-shrink: 0;
+			position: relative;
+			z-index: 2;
+
+			&.reached {
+				background: #1a1a2e;
+			}
+
+			.el-icon {
+				font-size: 16px;
+			}
+
+			.stage-index {
+				font-size: 12px;
+				color: #4E5969;
+			}
+		}
+
+		.stage-name {
+			width: 70px;
+			text-align: right;
+			position: absolute;
+			left: -80px;
+			font-family: Roboto, Roboto;
+			font-weight: bold;
+			font-size: 16px;
+			color: rgba(0,0,0,0.45);
+
+			&.reached {
+				color: #4C34FF;
+			}
+		}
+	}
+
+	// 小节点 - Child Nodes
+	.child-list {
+		position: relative;
+		left: -92px;
+		min-height: 80px;
+
+
+		// 连接线
+		.connector-line {
+			position: absolute;
+			left: 105px;
+			width: 1px;
+			height: calc(100% - 5px);
+			top: 50%;
+			transform: translateY(-50%);
+			background: #CCCCCC;
+			z-index: 1;
+
+			&.reached {
+				background: #4C34FF;
+			}
+		}
+	}
+
+	.child-node {
+		display: flex;
+		align-items: flex-start;
+		position: relative;
+		padding: 40px 0;
+
+
+		&:last-child::before {
+			bottom: 50%;
+		}
+
+		.child-left {
+			width: 100px;
+			flex-shrink: 0;
+			text-align: right;
+			padding-right: 20px;
+			font-family: Source Han Sans CN, Source Han Sans CN;
+			font-weight: 400;
+			font-size: 14px;
+			color: rgba(0,0,0,0.85);
+
+			.child-status {
+				white-space: nowrap;
+			}
+		}
+
+		.child-dot {
+			width: 12px;
+			height: 12px;
+			border-radius: 50%;
+			background: #1a1a2e;
+			flex-shrink: 0;
+			position: relative;
+			z-index: 2;
+			margin-top: 4px;
+		}
+
+		.child-right {
+			flex: 1;
+			padding-left: 12px;
+			display: flex;
+			flex-direction: column;
+			gap: 2px;
+			position: relative;
+
+			.child-operator {
+				font-family: Source Han Sans CN, Source Han Sans CN;
+				font-weight: 400;
+				font-size: 14px;
+				color: rgba(0,0,0,0.85);
+
+			}
+
+			.child-time {
+				position: absolute;
+				top: 30px;
+				white-space: nowrap;
+				font-family: Source Han Sans CN, Source Han Sans CN;
+				font-weight: 400;
+				font-size: 14px;
+				color: rgba(0,0,0,0.45);
+			}
+		}
+	}
+}
+</style>
diff --git a/applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js b/applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js
index 4518436..b373365 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js
+++ b/applications/task-work-order/src/views/orderView/orderManage/orderManage/orderManageApi.js
@@ -56,3 +56,12 @@
 		params:{ descs: 'create_time', ...params },
 	})
 }
+
+// 分页
+export const gdWorkOrderFlowPatrolListApi = params => {
+	return request({
+		url: `/drone-gd/workOrder/gdWorkOrderFlow/patrolList`,
+		method: 'get',
+		params:{ descs: 'create_time', ...params },
+	})
+}

--
Gitblit v1.9.3