From c108a2ed77130a72c197fc660ba9c4eed14a375f Mon Sep 17 00:00:00 2001
From: rain <1679827795@qq.com>
Date: Tue, 15 Apr 2025 16:37:05 +0800
Subject: [PATCH] 新建工单只展示在全部和我的发起,动态渲染工单状态详情流程

---
 src/views/tickets/ticket.vue |  117 +++++++++++++++++++++++-----------------------------------
 1 files changed, 46 insertions(+), 71 deletions(-)

diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index e9c2fe0..7b61d27 100644
--- a/src/views/tickets/ticket.vue
+++ b/src/views/tickets/ticket.vue
@@ -31,7 +31,12 @@
           <avue-crud v-model="tableData" :option="option" :data="tableData" v-model:page="page"
             @size-change="sizeChange" @current-change="handleCurrentChange" :table-loading="loading">
             <template #menu-left>
-              <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新建工单</el-button>
+              <el-button
+                v-if="activeTab === 'all' || activeTab === 'myTickets'"
+                type="primary"
+                icon="el-icon-plus"
+                @click="handleAdd"
+              >新建工单</el-button>
               <el-button type="success" plain icon="el-icon-download" @click="exportData">导出</el-button>
             </template>
             <template #menu="{ row }">
@@ -164,7 +169,7 @@
               发起任务
             </div>
             <div
-              v-for="(status, index) in fixedStatuses"
+              v-for="(status, index) in dynamicFixedStatuses"
               :key="index"
               :class="{ active: Number(currentDetail.status) >= Number(status) }"
               class="step-title"
@@ -185,7 +190,7 @@
                 </div>
               </template>
             </el-step>
-            <el-step v-for="(status, index) in fixedStatuses" :key="index">
+            <el-step v-for="(status, index) in dynamicFixedStatuses" :key="index">
               <template #description>
                 <span class="step-description">
                   {{ getStepHandler(status) }}
@@ -198,7 +203,7 @@
           width: 100px;
           margin-left: 4px;  
           color: #666;
-          font-size: 12px;">耗时{{ getStepTime(status) }}</span>
+          font-size: 12px;">耗时:{{ getStepTime(status) }}</span>
                 </div>
                 <div class="step-description" >
                   {{ getStepCreateTime(status) }}
@@ -544,6 +549,7 @@
       stepInfos: [], // 新增:存储步骤信息
       fixedStatuses: ["2", "0", "3", "4", "5"], // 固定的五个状态
       userNameToIdMap: {}, // 新增用户名到ID的映射
+      workType: 0, // 新增:当前工单work_type
     };
   },
   created() {
@@ -659,6 +665,13 @@
       }
       return formattedFields;
     },
+    dynamicFixedStatuses() {
+      // 根据当前工单work_type动态返回流程
+      if (this.workType === 1) {
+        return ["3", "4", "5"]; // 人工工单:处理中-已完成-已完结
+      }
+      return this.fixedStatuses; // 默认流程
+    },
     ...mapGetters(['userInfo']),
   },
   methods: {
@@ -672,12 +685,8 @@
 
         // 直接从返回对象中获取正确的路径
         const center = adcodeObj?.payload?.objects?.collection?.geometries?.[0]?.properties?.center;
-
-        console.log('获取到的中心点:', center);
-
         if (Array.isArray(center) && center.length === 2) {
           this.mapParams.center = center;
-          console.log('成功设置地图中心点:', center);
         } else {
           // 如果找不到中心点,尝试使用 bbox 的中心点
           const bbox = adcodeObj?.payload?.bbox;
@@ -685,16 +694,13 @@
             const centerX = (bbox[0] + bbox[2]) / 2;
             const centerY = (bbox[1] + bbox[3]) / 2;
             this.mapParams.center = [centerX, centerY];
-            console.log('使用 bbox 计算的中心点:', this.mapParams.center);
           } else {
-            console.warn('无法获取有效的中心点坐标,使用默认值');
             this.mapParams.center = [115.861365, 28.621311];
           }
         }
 
         this.mapLoaded = true;
       } catch (error) {
-        console.error('地图脚本加载失败:', error);
         this.$message.error('地图加载失败,请检查网络或API Key配置');
       }
     },
@@ -732,10 +738,7 @@
             this.userNameToIdMap[user.name] = user.id;
           });
         });
-
-        console.log('用户名到ID的映射:', this.userNameToIdMap);
       } catch (error) {
-        console.error('获取下拉框数据失败:', error);
         this.$message.error('加载下拉框数据失败');
       }
     },
@@ -801,11 +804,8 @@
             video_url: item.video_url || '',  // 保存原始 video_url
             location: (!isNaN(longitude) && !isNaN(latitude)) ? [longitude, latitude] : null,
             processing_details: item.processing_details || '', // 添加处理详情字段
-            video_url: item.video_url || '',  // 保存原始 video_url
-            location: (!isNaN(longitude) && !isNaN(latitude)) ? [longitude, latitude] : null,
-            processing_details: item.processing_details || '', // 添加处理详情字段
             update_photo_url: item.update_photo_url || '', // 添加处理图片字段
-
+            work_type: item.work_type !== undefined ? Number(item.work_type) : 0, // 保留work_type字段并转为数字
           };
         });
 
@@ -818,7 +818,6 @@
 
         await this.fetchTabCounts();
       } catch (error) {
-        console.error("获取数据失败:", error);
         this.$message.error(error.message || "获取数据失败");
         this.tableData = [];
         this.page.total = 0;
@@ -879,7 +878,6 @@
           throw new Error(response.data.msg || '创建失败');
         }
       } catch (error) {
-        console.error('提交失败:', error);
         if (error.message.includes('验证未通过')) {
           this.$message.warning('请填写完整的工单信息');
         } else {
@@ -930,13 +928,12 @@
           throw new Error(response.data.msg || '保存失败');
         }
       } catch (error) {
-        console.error('保存草稿失败:', error);
         this.$message.error(error.message || '保存草稿失败,请稍后重试');
       }
     },
 
     async handleLocationChange(val) {
-      console.log('地图选址返回值:', val);
+
 
       // 处理 Proxy 对象的值
       let locationValue = val.value;
@@ -944,14 +941,7 @@
         // 确保我们获取到实际的数组值
         this.form.location = [locationValue[0], locationValue[1]];
         this.form.address = locationValue[2] || '';
-
-        console.log('解析后的位置信息:', {
-          经度: this.form.location[0],
-          纬度: this.form.location[1],
-          地址: this.form.address
-        });
       } else {
-        console.warn('无效的位置数据');
         this.form.location = [];
         this.form.address = '';
       }
@@ -991,9 +981,6 @@
       try {
         const response = await getstatusCount();
         const { statusCount, totalCount, userCount } = response.data.data;
-
-        console.log('接口返回的状态统计数据:', { statusCount, totalCount, userCount });
-
         this.tabs.forEach(tab => {
           if (tab.name === 'all') {
             tab.count = totalCount || 0; // 总工单数
@@ -1003,10 +990,7 @@
             tab.count = statusCount[String(tab.value)] || 0; // 根据状态值映射
           }
         });
-
-        console.log('更新后的 tabs 数据:', this.tabs);
       } catch (error) {
-        console.error('获取 tab 数据失败:', error);
         this.$message.error('获取 tab 数据失败');
       }
     },
@@ -1038,7 +1022,6 @@
     },
 
     async handleCurrentChange(val) {
-      console.log('当前页变更:', val);
       // 先更新页码
       this.page.currentPage = val;
       // 等待 DOM 更新后再请求数据
@@ -1047,7 +1030,6 @@
     },
 
     async sizeChange(val) {
-      console.log('每页条数变更:', val);
       this.page.pageSize = val;
       this.page.currentPage = 1; // 重置到第一页
       await this.$nextTick();
@@ -1084,10 +1066,14 @@
     },
 
     async handleViewDetail(row) {
-      console.log('查看详情数据:', row);
+      // 先设置workType,直接从row读取
+      this.workType = row.work_type !== undefined ? Number(row.work_type) : 0;
+
       // 重置上传组件的文件列表
       this.$nextTick(() => {
-        this.$refs.MapContainer.initAddEntity('point',this.currentDetail.location);
+        if (this.$refs.MapContainer && this.$refs.MapContainer.initAddEntity) {
+          this.$refs.MapContainer.initAddEntity('point', this.currentDetail.location);
+        }
       });
 
       const detailData = {
@@ -1100,12 +1086,16 @@
 
       try {
         const stepResponse = await getStepInfo(row.orderNumber);
-        console.log('接口返回的步骤信息:', stepResponse.data.data);
+        // 不再从stepResponse获取work_type
 
-        const steps = stepResponse.data.data || [];
+        // 兼容原有步骤数据
+        const steps = Array.isArray(stepResponse.data.data)
+          ? stepResponse.data.data
+          : stepResponse.data.data?.steps || [];
 
-        // 根据接口返回的步骤信息补充处理人和时间
-        this.stepInfos = this.fixedStatuses.map(status => {
+        // 根据流程类型动态生成步骤
+        const statusArr = this.workType === 1 ? ["3", "4", "5"] : this.fixedStatuses;
+        this.stepInfos = statusArr.map(status => {
           const step = steps.find(s => String(s.status) === String(status));
           return {
             status,
@@ -1115,13 +1105,10 @@
           };
         });
 
-        console.log('处理后的步骤信息:', this.stepInfos);
-
         this.currentDetail.status = row.status; // 使用行数据中的状态
       } catch (error) {
-        console.error('获取步骤信息失败:', error);
-        // 如果接口调用失败,使用默认的固定状态
-        this.stepInfos = this.fixedStatuses.map(status => ({
+        const statusArr = this.workType === 1 ? ["3", "4", "5"] : this.fixedStatuses;
+        this.stepInfos = statusArr.map(status => ({
           status,
           name: status === row.status ? row.handler || '未分配' : '未处理',
           time: status === row.status ? row.startTime || '未知时间' : null,
@@ -1129,11 +1116,12 @@
       }
 
       this.currentDetail = detailData;
-      console.log('当前详情数据:', this.currentDetail);
       this.detailVisible = true;
       this.$nextTick(() => {
-                this.$refs.MapContainer.initAddEntity('point', this.currentDetail.location)
-            })
+        if (this.$refs.MapContainer && this.$refs.MapContainer.initAddEntity) {
+          this.$refs.MapContainer.initAddEntity('point', this.currentDetail.location);
+        }
+      });
     },
 
     getStepHandler(status) {
@@ -1148,30 +1136,19 @@
 },
     getStepCreateTime(status) {
       const step = this.stepInfos.find(step => step.status === status);
-      console.log('getStepCreateTime:', step);
       return step ? step.create_time : null;
     },
     getActiveStep() {
-      // 由于新增了发起任务步骤,需要调整步骤索引
-      const index = this.fixedStatuses.indexOf(String(this.currentDetail.status));
-      return index !== -1 ? index + 1 : 1; // 加1是因为多了发起任务这一步
+      // 动态流程下,步骤索引需适配
+      const arr = this.dynamicFixedStatuses;
+      const index = arr.indexOf(String(this.currentDetail.status));
+      return index !== -1 ? index + 1 : 1;
     },
 
     openMap() {
       const areaCode = this.userInfo.detail.areaCode;
       const subAreaCode = areaCode ? areaCode.substring(0, 6) : '';
-      const adcodeObj = getAdcodeObj(geoJson, 'adcode', subAreaCode);
-
-      console.log('区域代码:', subAreaCode);
-      console.log('getAdcodeObj返回值:', {
-        完整对象: adcodeObj,
-        级别: adcodeObj?.level,
-        名称: adcodeObj?.name,
-        代码: adcodeObj?.adcode,
-        中心点: adcodeObj?.center,
-        边界: adcodeObj?.polyline,
-      });
-
+      getAdcodeObj(geoJson, 'adcode', subAreaCode);
       this.$message.info("地图选址功能暂未实现");
     },
 
@@ -1267,7 +1244,6 @@
         export_json_to_excel(headers, exportData, '工单数据');
         this.$message.success('数据导出成功');
       } catch (error) {
-        console.error('导出失败:', error);
         this.$message.error(error.message || '导出失败,请稍后重试');
       } finally {
         this.loading = false;
@@ -1334,7 +1310,6 @@
           throw new Error(response.data.msg || '操作失败');
         }
       } catch (error) {
-        console.error('通过操作失败:', error);
         this.$message.error(error.message || '操作失败,请稍后重试');
       }
     },
@@ -1355,7 +1330,6 @@
           throw new Error(response.data.msg || '操作失败');
         }
       } catch (error) {
-        console.error('不通过操作失败:', error);
         this.$message.error(error.message || '操作失败,请稍后重试');
       }
     },
@@ -2065,4 +2039,5 @@
     }
   }
 }
-</style>
\ No newline at end of file
+</style>
+```
\ No newline at end of file

--
Gitblit v1.9.3