From 11716d70cedf174055840f39bf2f1664acdfd30c Mon Sep 17 00:00:00 2001
From: linwe <872216996@qq.com>
Date: Wed, 23 Apr 2025 16:02:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 public/img/bg/index_logo.png   |    0 
 /dev/null                      |    0 
 src/views/tickets/ticket.vue   |  128 ++++++++++++++++++++----------------------
 src/views/system/dept.vue      |    1 
 src/views/tickets/orderLog.vue |    6 +-
 public/img/bg/mainLogo.png     |    0 
 index.html                     |    2 
 src/views/base/region.vue      |    2 
 src/page/index/logo.vue        |    2 
 9 files changed, 68 insertions(+), 73 deletions(-)

diff --git a/index.html b/index.html
index 6de0d9e..2c07141 100644
--- a/index.html
+++ b/index.html
@@ -11,7 +11,7 @@
   <meta name="apple-mobile-web-app-capable" content="yes" />
   <meta name="apple-mobile-web-app-status-bar-style" content="black" />
   <meta name="format-detection" content="telephone=no" />
-  <link rel="icon" href="/favicon.png" />
+  <link rel="icon" href="/img/bg/index_logo.png" />
   <link rel="stylesheet" href="/iconfont/index.css" />
   <link rel="stylesheet" href="/iconfont/avue/iconfont.css" />
   <link rel="stylesheet" href="/iconfont/saber/iconfont.css" />
diff --git a/public/img/bg/index_logo.png b/public/img/bg/index_logo.png
new file mode 100644
index 0000000..43577c7
--- /dev/null
+++ b/public/img/bg/index_logo.png
Binary files differ
diff --git a/public/img/bg/logo.png b/public/img/bg/logo.png
deleted file mode 100644
index b3e40cc..0000000
--- a/public/img/bg/logo.png
+++ /dev/null
Binary files differ
diff --git a/public/img/bg/mainLogo.png b/public/img/bg/mainLogo.png
new file mode 100644
index 0000000..0db1ec8
--- /dev/null
+++ b/public/img/bg/mainLogo.png
Binary files differ
diff --git a/src/page/index/logo.vue b/src/page/index/logo.vue
index e181c40..db62d5d 100644
--- a/src/page/index/logo.vue
+++ b/src/page/index/logo.vue
@@ -8,7 +8,7 @@
     <transition-group name="fade">
       <template v-if="getScreen(!isCollapse)">
         <div style="display: flex; align-items: left; gap: 5px; margin: 8px 8px 10px 20px;">
-    <img class="img" src="/img/logo.png" alt="" width="50%" height="50%" />
+    <img class="img" src="/img/bg/mainLogo.png" alt="" width="50%" height="50%" />
     <!-- <span style="font-size: 20px;"  key="1">
         {{ this.parentDeptInfo.sysName }}
     </span> -->
diff --git a/src/views/base/region.vue b/src/views/base/region.vue
index 32c8fcd..012b64e 100644
--- a/src/views/base/region.vue
+++ b/src/views/base/region.vue
@@ -95,7 +95,7 @@
         nodeKey: 'id',
         lazy: true,
         treeLoad: function (node, resolve) {
-          const parentCode = node.level === 0 ? '00' : node.data.id;
+          const parentCode = node.level === 0 ? '000000000000' : node.data.id;
           getLazyTree(parentCode).then(res => {
             resolve(
               res.data.data.map(item => {
diff --git a/src/views/system/dept.vue b/src/views/system/dept.vue
index f253b58..e2f6e33 100644
--- a/src/views/system/dept.vue
+++ b/src/views/system/dept.vue
@@ -218,6 +218,7 @@
 			{
 			  label: '行政区划',
 			  prop: 'areaCode',
+			  checkStrictly: true,
 			  type: 'cascader',
 			  labelWidth: 120,
 			  props: {
diff --git a/src/views/tickets/orderLog.vue b/src/views/tickets/orderLog.vue
index f46fd3d..8590d70 100644
--- a/src/views/tickets/orderLog.vue
+++ b/src/views/tickets/orderLog.vue
@@ -197,7 +197,7 @@
         </el-dialog>
 
         <!-- 工单详情对话框 -->
-        <el-dialog v-model="detailVisible" title="工单详情" width="70%" :close-on-click-modal="false" @close="resetForm" >
+        <el-dialog v-model="detailVisible" title="编辑工单" width="70%" :close-on-click-modal="false" @close="resetForm" >
             <el-form :model="form" ref="testform" label-width="100px">
                 <div class="custom-steps-container">
                     <!-- 标题行 -->
@@ -287,8 +287,8 @@
                         <el-button type="danger"
                             v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)"
                             @click="submitForm(1)">发布</el-button>
-                        <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
-                            @click="submitForm(0)">保存</el-button>
+                        <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
+                            @click="submitForm(0)">保存</el-button> -->
 
                         <el-button type="primary" v-if="form.status == 1 && userInfo.user_id != form.create_user"
                             @click="orderLogPass(form.id)">通过</el-button>
diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index 3e5e526..a0f80b5 100644
--- a/src/views/tickets/ticket.vue
+++ b/src/views/tickets/ticket.vue
@@ -156,6 +156,10 @@
     <el-dialog v-model="detailVisible" title="工单详情" width="80%" append-to-body>
       <div class="detail-container">
         <div class="event-title-center">{{ currentDetail.orderName || '事件名称' }}</div>
+        <div v-if="totalTime" class="event-total-time"
+          style="text-align:center;color:#666;font-size:15px;margin-bottom:12px;">
+          总耗时:{{ totalTime }}
+        </div>
         <!-- 工单状态流程 -->
         <div class="custom-steps-container">
           <!-- 标题行 -->
@@ -276,7 +280,7 @@
               style="font-size: 32px; display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">+</span>
           </el-upload>
           <div class="el-upload__tip" style="margin-top: 12px;" v-if="hasProcessedAndOverBtnPermission()">
-            支持 jpg/png 格式图片,单张不超过 5MB
+            (上传照片即可完结工单,只能上传jpg、jpeg、png照片,且不超过5M)
           </div>
         </div>
         <!-- 图片和地图部分 -->
@@ -286,13 +290,9 @@
               <div class="media-box">
                 <div class="media-title">事件图片</div>
                 <div class="media-content">
-                  <el-image
-                    v-if="currentDetail.mediaUrl"
-                    :src="getThumbUrl(currentDetail.mediaUrl)"
-                    :preview-src-list="[currentDetail.mediaUrl]"
-                    fit="cover"
-                    style="width: 100%; height: 300px; cursor: pointer;"
-                  >
+                  <el-image v-if="currentDetail.mediaUrl" :src="getThumbUrl(currentDetail.mediaUrl)"
+                    :preview-src-list="[currentDetail.mediaUrl]" fit="contain"
+                    style="width: 700px; height: 520px; cursor: pointer;">
                     <template #placeholder>
                       <div class="image-placeholder">
                         <i class="el-icon-picture-outline"></i>
@@ -316,13 +316,9 @@
                 <template v-if="currentDetail.status === 5">
                   <div class="media-title">工单处理图片</div>
                   <div class="media-content">
-                    <el-image
-                      v-if="currentDetail.updatePhotoUrl"
-                      :src="getThumbUrl(currentDetail.updatePhotoUrl)"
-                      :preview-src-list="[currentDetail.updatePhotoUrl]"
-                      fit="cover"
-                      style="width: 100%; height: 300px; cursor: pointer;"
-                    >
+                    <el-image v-if="currentDetail.updatePhotoUrl" :src="getThumbUrl(currentDetail.updatePhotoUrl)"
+                      :preview-src-list="[currentDetail.updatePhotoUrl]" fit="fill"
+                      style="width: 700px; height: 520px; cursor: pointer;">
                       <template #placeholder>
                         <div class="image-placeholder">
                           <i class="el-icon-picture-outline"></i>
@@ -342,7 +338,7 @@
                 <template v-else>
                   <div class="media-title">地图标记事件点</div>
                   <div class="media-content">
-                    <div id="map-container" style="width: 100%; height: 300px; background: #f5f5f5;">
+                    <div id="map-container" style="width: 700px; height: 520px; background: #f5f5f5;">
                       <map-container v-if='detailVisible' ref="MapContainer"></map-container>
                     </div>
                   </div>
@@ -356,23 +352,29 @@
         <div class="dialog-footer">
           <template v-if="currentDetail.status === 2">
             <!-- 待审核 -->
-            <el-button v-if="hasReviewBtnPermission()" type="primary" :loading="approveLoading" @click="approveTicket">通过</el-button>
-            <el-button v-if="hasReviewBtnPermission()" type="danger" :loading="rejectLoading" @click="rejectTicket">不通过</el-button>
+            <el-button v-if="hasReviewBtnPermission()" type="primary" :loading="approveLoading"
+              @click="approveTicket">通过</el-button>
+            <el-button v-if="hasReviewBtnPermission()" type="danger" :loading="rejectLoading"
+              @click="rejectTicket">不通过</el-button>
             <el-button @click="detailVisible = false">取消</el-button>
           </template>
           <template v-else-if="currentDetail.status === 0">
-            <el-button v-if="hasProcessingBtnPermission()" type="primary" :loading="dispatchLoading" @click="approveAndDispatch">通过并派发</el-button>
-            <el-button v-if="hasProcessingBtnPermission()" type="danger" :loading="rejectLoading" @click="rejectTicket">不通过</el-button>
+            <el-button v-if="hasProcessingBtnPermission()" type="primary" :loading="dispatchLoading"
+              @click="approveAndDispatch">通过并派发</el-button>
+            <el-button v-if="hasProcessingBtnPermission()" type="danger" :loading="rejectLoading"
+              @click="rejectTicket">不通过</el-button>
             <el-button @click="detailVisible = false">取消</el-button>
           </template>
           <template v-if="currentDetail.status === 3">
             <!-- 处理中 -->
-            <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="completeLoading" @click="completeTicket">完成工单</el-button>
+            <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="completeLoading"
+              @click="completeTicket">完成工单</el-button>
             <el-button @click="detailVisible = false">取消</el-button>
           </template>
           <template v-else-if="currentDetail.status === 4">
             <!-- 已完成 -->
-            <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="finalizeLoading" @click="finalizeTicket">完结工单</el-button>
+            <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="finalizeLoading"
+              @click="finalizeTicket">完结工单</el-button>
             <el-button @click="detailVisible = false">取消</el-button>
           </template>
           <template v-else-if="currentDetail.status === 5">
@@ -404,7 +406,7 @@
     </el-dialog>
 
     <!-- 添加在其他 dialog 组件之后 -->
-    <el-dialog v-model="reviewDialogVisible" title="批量审核" width="70%" append-to-body custom-class="review-dialog">
+    <el-dialog v-model="reviewDialogVisible" title="批量审核" width="70%" append-to-body custom-class="review-dialog"   @close="cancleBatchReject">
       <div class="review-container">
         <div class="review-image-wrapper">
           <!-- 修改左右箭头的显示条件 -->
@@ -413,15 +415,9 @@
           </div>
 
           <div class="review-image-container">
-            <el-image
-              v-if="currentReviewImage"
-              :src="getThumbUrl(currentReviewImage)"
-              fit="cover"
-              :preview-src-list="getImageList()"
-              :initial-index="currentImageIndex - 1"
-              class="preview-image"
-              style="cursor: pointer;"
-            >
+            <el-image v-if="currentReviewImage" :src="getThumbUrl(currentReviewImage)" fit="fill"
+              :preview-src-list="getImageList()" :initial-index="currentImageIndex - 1" class="preview-image"
+              style="cursor: pointer;">
               <template #error>
                 <div class="image-error">
                   <i class="el-icon-picture-outline"></i>
@@ -516,7 +512,7 @@
         selection: true, // 添加多选功能
         index: true,     // 保留序号功能
         indexLabel: '序号',
-        indexWidth: 60,  
+        indexWidth: 60,
         menuWidth: 150,
         searchMenuSpan: 6,
         viewBtn: false,
@@ -621,6 +617,7 @@
       reviewDialogVisible: false, // 新增:审核对话框可见性
       currentReviewImage: '', // 新增:当前审核图片
       currentImageIndex: 1, // 新增:当前图片索引
+      totalTime: '',
       isShowInfo: false,
     };
   },
@@ -850,7 +847,6 @@
           isPass: 0,
           eventNum: currentItem.orderNumber,
           eventName: currentItem.orderName,
-          eventType: currentItem.type,
         };
 
         const response = await flowEvent(data);
@@ -1180,27 +1176,27 @@
     },
 
     async fetchTabCounts() {
-  try {
-    // 判断是否有部门筛选
-    let params = {};
-    if (this.filters.department) {
-      params.deptId = this.filters.department;
-    }
-    const response = await getstatusCount(params);
-    const { statusCount, totalCount, userCount } = response.data.data;
-    this.tabs.forEach(tab => {
-      if (tab.name === 'all') {
-        tab.count = totalCount || 0; // 总工单数
-      } else if (tab.name === 'myTickets') {
-        tab.count = userCount || 0; // 我发起的工单数
-      } else {
-        tab.count = statusCount[String(tab.value)] || 0; // 根据状态值映射
+      try {
+        // 判断是否有部门筛选
+        let params = {};
+        if (this.filters.department) {
+          params.deptId = this.filters.department;
+        }
+        const response = await getstatusCount(params);
+        const { statusCount, totalCount, userCount } = response.data.data;
+        this.tabs.forEach(tab => {
+          if (tab.name === 'all') {
+            tab.count = totalCount || 0; // 总工单数
+          } else if (tab.name === 'myTickets') {
+            tab.count = userCount || 0; // 我发起的工单数
+          } else {
+            tab.count = statusCount[String(tab.value)] || 0; // 根据状态值映射
+          }
+        });
+      } catch (error) {
+        this.$message.error('获取 tab 数据失败');
       }
-    });
-  } catch (error) {
-    this.$message.error('获取 tab 数据失败');
-  }
-},
+    },
 
     handleTabChange(tab) {
       this.activeTab = tab.props?.name || tab.name;
@@ -1300,6 +1296,8 @@
         const steps = Array.isArray(stepResponse.data.data)
           ? stepResponse.data.data
           : stepResponse.data.data?.steps || [];
+        const finishedStep = steps.find(s => String(s.status) === '5');
+        this.totalTime = finishedStep && finishedStep.total_time ? finishedStep.total_time : '';
         if (this.activeTab !== 'myTickets') {
           this.stepInfos = steps.map(step => ({
             status: String(step.status),
@@ -1534,10 +1532,6 @@
           status: this.currentDetail.status,
           isPass: 0, // 0 表示通过
           eventNum: this.currentDetail.orderNumber,
-          eventName: this.currentDetail.orderName, // 工单名称
-          eventType: this.currentDetail.type, // 工单类型
-          departmentId: this.dispatchForm.department, // 派发部门 ID
-          handlerId: this.dispatchForm.handler, // 处理人 ID
         };
 
         const file = this.currentDetail.file || null; // 如果没有文件,则为 null
@@ -1734,7 +1728,7 @@
       try {
         // 检查是否上传了图片
         if (!this.currentDetail.photos || !this.currentDetail.photos.length) {
-          this.$message.warning('请上传处理图片');
+          this.$message.warning('请上传事件处理照片,或飞行任务结束核验工单是否完结');
           return;
         }
 
@@ -1966,8 +1960,6 @@
           status: currentItem.status,
           isPass: 0,
           eventNum: currentItem.orderNumber,
-          eventName: currentItem.orderName,
-          eventType: currentItem.type,
         };
         console.log('删除前:', this.selections)
         const response = await flowEvent(data);
@@ -2005,8 +1997,11 @@
     },
 
     cancleBatchReject() {
-      reviewDialogVisible = false;
-      this.fetchTableData();
+      this.reviewDialogVisible = false;
+  this.selections = [];
+  this.currentImageIndex = 1;
+  this.currentReviewImage = '';
+  this.fetchTableData();
     },
     // 批量审核不通过
     async handleBatchReject() {
@@ -2022,7 +2017,7 @@
           return;
         }
 
-        await this.$confirm('确认驳回当前工单?', '提示', {
+        await this.$confirm('确认该工单审核不通过?', '提示', {
           confirmButtonText: '确定',
           cancelButtonText: '取消',
           type: 'warning'
@@ -2034,7 +2029,6 @@
           isPass: 1,
           eventNum: currentItem.orderNumber,
           eventName: currentItem.orderName,
-          eventType: currentItem.type,
         };
 
         const response = await flowEvent(data);
@@ -2292,7 +2286,7 @@
 }
 
 .dialog-footer {
-  text-align: right;
+  text-align: center;
   padding-top: 16px;
   border-top: 1px solid #ebeef5;
 
@@ -2468,7 +2462,7 @@
 
 .media-content {
   position: relative;
-  height: 300px;
+  // height: 300px;
 }
 
 .image-placeholder,

--
Gitblit v1.9.3