From 446823f71c9f7b867244035433febb3d8fd66573 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Sat, 11 Oct 2025 17:25:17 +0800
Subject: [PATCH] feat:事件工单

---
 src/subPackages/workDetail/index.vue |  247 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 234 insertions(+), 13 deletions(-)

diff --git a/src/subPackages/workDetail/index.vue b/src/subPackages/workDetail/index.vue
index 7a6c92d..dedac24 100644
--- a/src/subPackages/workDetail/index.vue
+++ b/src/subPackages/workDetail/index.vue
@@ -1,18 +1,239 @@
-<!--
- * @Author       : yuan
- * @Date         : 2025-09-29 13:52:16
- * @LastEditors  : yuan
- * @LastEditTime : 2025-09-29 13:53:32
- * @FilePath     : \src\subPackages\workDetail\index.vue
- * @Description  :
- * Copyright 2025 OBKoro1, All Rights Reserved.
- * 2025-09-29 13:52:16
--->
 <!-- 工单详情 - 包含待审核、待处理、处理中、已完成 -->
 <template>
-  <view> 基础 </view>
+	<view class="workDetailContainer">
+		<div class="detailTop">
+			<div class="image-container">
+				<u-image class="detailImage" :src="workDetailData.photo_url" mode="cover" width="100%" height="200px"
+					@click="previewImage(workDetailData.photo_url)"></u-image>
+				<div class="detailTitle">
+					<div class="titleText">
+						<p>{{workDetailData.event_name}}</p>
+						<p>{{workDetailData.create_time}}</p>
+					</div>
+				</div>
+			</div>
+		</div>
+		<!-- 步骤条 -->
+		<div class="stepContainer">
+		  <up-steps :current="currentStep" direction="column">
+		      <up-steps-item 
+		        v-for="(step, index) in stepTitles" 
+		        :key="index"
+		      >
+		        <template #title>
+		          <div class="horizontal-step">
+		            <span class="step-title">{{ step.title }}</span>
+		            <div class="step-desc" v-if="stepResponse[index]">
+		              <span>{{ stepResponse[index].name || '' }}</span>
+		              <span>{{ stepResponse[index].create_time || '' }}</span>
+		            </div>
+		          </div>
+		        </template>
+		      </up-steps-item>
+		    </up-steps>
+		</div>
+		<!-- 工单内容 -->
+		<div class="workOrderContent">
+			<div class="workOrderTitle">工单内容</div>
+			<div class="workOrderContainer">
+				<div>工单名称:{{workDetailData.event_name}}</div>
+				<div>工单类型:{{workDetailData.$type}}</div>
+				<div>关联任务:{{workDetailData.job_name}}</div>
+				<div>工单创建人:{{workDetailData.creator}}</div>
+				<div>事件地址:{{workDetailData.address}}</div>
+				<div>关联算法:{{workDetailData.ai_types}}</div>
+				<div>发起部门:{{workDetailData.dept_name}}</div>
+				<div>发起任务时间:{{workDetailData.create_time}}</div>
+				<div>工单内容:{{workDetailData.remark}}</div>
+			</div>
+		</div>
+		<!-- 操作按钮 -->
+		<div class="actionButton">
+			<div class="leftBtn" @click="leftClick">
+				上一页
+			</div>
+			<div class="btngroups">
+				<up-button type="primary" text="通过"></up-button>
+				<up-button type="error" text="不通过"></up-button>
+			</div>
+			<div class="leftBtn" @click="rightClick">
+				下一页
+			</div>
+		</div>
+
+	</view>
 </template>
 
-<script setup></script>
+<script setup>
+	import {getStepInfo,getList} from '/src/api/work/index.js'
+	const eventNum = ref('');
+	const currentStatus = ref('')
+	const stepResponse = ref([]);
+	const currentStep = ref(0);
+	// 工单内容
+	const workDetailData = ref({})
+	const stepTitles  =ref([
+		{
+			title: '待审核',
+			status: '2'
+		},
+		{
+			title: '待处理',
+			status: '0'
+		},
+		
+		{
+			title: '处理中',
+			status: '3'
+		},{
+			title: '已完成',
+			status: '4'
+		}
+	])
+	onLoad(async (options) => {
+	  eventNum.value = options.eventNum;
+	  await getDataList(eventNum.value); 
+	  await getStepInfoData(eventNum.value); 
+	});
+	const getDataList = async (val) => {
+	  const params = {
+	    current: 1,
+	    size: 9999,
+	    source: 1,  
+	    event_name: val
+	  }
+	  const res = await getList(params);
+	  const response = res.data.data.records;
+	  workDetailData.value = response[0];
+	  currentStatus.value = workDetailData.value.status;
+	  
+	}
+	// 步骤条
+	const calculateCurrentStep = (status) => {
+	  const statusToStep = {
+	    '2': 0,  // 待审核 -> 第0步
+	    '0': 1,  // 待处理 -> 第1步
+	    '3': 2,  // 处理中 -> 第2步
+	    '4': 3   // 已完成 -> 第3步
+	  }
+	  return statusToStep[String(status)] || 0 
+	}
+	const getStepInfoData = async (val) => {
+	  const res = await getStepInfo(val);
+	  stepResponse.value = res.data.data;
+	  currentStep.value = calculateCurrentStep(currentStatus.value);
+	}
+	// 图片预览
+	const previewImage = (url) => {
+		uni.previewImage({
+			urls: [url],
+			current: 0
+		});
+	};
+</script>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+	.workDetailContainer {
+		padding: 0 10px;
+
+		.detailTop {
+			.image-container {
+				position: relative;
+				width: 100%;
+				height: 200px;
+
+				.detailImage {
+					width: 100%;
+					height: 100%;
+					display: block;
+					object-fit: cover
+				}
+
+				.detailTitle {
+					position: absolute;
+					left: 0;
+					bottom: 0;
+					    width: 100%; 
+				}
+
+				.titleText {
+					display: flex;
+					width: 100%;
+					justify-content: space-between;
+					align-items: center;
+				}
+			}
+		}
+
+		.stepContainer {
+			margin-top: 10px;
+			display: flex;
+			background-color: aquamarine;
+			border-radius: 5px;
+			padding: 10px;
+			 .horizontal-step {
+			    display: flex;
+			    align-items: center;
+			    gap: 12px;
+			    
+			    .step-title {
+			      min-width: 60px; 
+			    }
+			    
+			    .step-desc {
+			      display: flex;
+				  justify-content: space-around;
+			      gap: 8px;
+			      // color: #666;
+			      font-size: 14px;
+			    }
+			  }
+
+		}
+
+		
+		.actionButton{
+			display: flex;
+			justify-content: space-between;
+		margin-bottom: 10px;
+			.btngroups {
+				display: flex;
+				justify-content: space-between;
+				.u-button {
+				   padding: 9px 20px;
+				     height: 32px;
+				     &:last-child {
+				         margin-left: 12px;
+				         margin-right: 12px;
+				       }
+				}
+			}
+			.leftBtn {
+			  width: 70px;
+			  height: 32px;
+			  background-color: #999;
+			  border-radius: 5px;
+			  text-align: center;
+			  line-height: 32px;
+			  color: #fff;
+			  cursor: pointer;
+			  opacity: 0.8;
+			}
+			.disableds {
+			  background: #999 !important;
+			  cursor: not-allowed !important;
+			  pointer-events: none;
+			  opacity: 0.3 !important;
+			}
+		}
+		.workOrderContent {
+			margin-top: 15px;
+			.workOrderContainer {
+				div {
+					margin-bottom: 10px;
+				}
+			}
+		}
+		
+	}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3