Blame view

pages-sub/problem/work-order-manage/order-detail.vue 11 KB
ff65dc6c   刘淇   快速工单 样式优化
1
2
3
4
5
6
7
8
9
10
11
12
13
  <template>
    <view class="page-container">
      <!-- 页面级加载组件 -->
      <up-loading-page
          v-if="loading"
          :loading="true"
          title="加载中..."
          color="#3c9cff"
      ></up-loading-page>
  
      <!-- 主内容容器 -->
      <view v-else class="main-content">
        <!-- 顶部固定Tabs -->
dacff5e3   刘淇   养护员退回
14
15
16
17
18
19
20
21
22
23
24
25
26
        <up-sticky :bgColor="'#fff'">
          <up-tabs
              v-model="activeTopTab"
              :list="topTabList"
              :scrollable="false"
              sticky
              active-color="#3c9cff"
              inactive-color="#666"
              class="top-tabs"
              @click="activeTopTabClick"
          ></up-tabs>
        </up-sticky>
  
ff65dc6c   刘淇   快速工单 样式优化
27
28
29
30
31
  
        <!-- 顶部Tab内容区 -->
        <view class="tab-content">
          <!-- 1. 工单详情Tab -->
          <view v-show="activeTopTab == 0" class="detail-content">
1f1f236c   刘淇   工单详情
32
            <up-cell-group :border="false" class="detail-cell-group">
ff65dc6c   刘淇   快速工单 样式优化
33
34
              <!-- 工单编号 -->
              <up-cell title="工单编号" :value="orderDetail.orderNo || '--'" align="middle"></up-cell>
ff65dc6c   刘淇   快速工单 样式优化
35
  
1f1f236c   刘淇   工单详情
36
37
              <!-- 工单位置 -->
              <up-cell align="middle">
ff65dc6c   刘淇   快速工单 样式优化
38
                <template #title>
1f1f236c   刘淇   工单详情
39
                  <view style="min-width: 200rpx">工单位置</view>
ff65dc6c   刘淇   快速工单 样式优化
40
41
42
43
44
                </template>
                <template #value>
                  <view class="common-text-color up-line-1">{{ orderDetail.roadName || '--' }}</view>
                </template>
              </up-cell>
1f1f236c   刘淇   工单详情
45
  
ff65dc6c   刘淇   快速工单 样式优化
46
47
              <!-- 工单名称 -->
              <up-cell title="工单名称" :value="orderDetail.orderName || '--'" align="middle"></up-cell>
1f1f236c   刘淇   工单详情
48
  
ff65dc6c   刘淇   快速工单 样式优化
49
              <!-- 情况描述 -->
1f1f236c   刘淇   工单详情
50
              <up-cell>
ff65dc6c   刘淇   快速工单 样式优化
51
                <template #title>
1f1f236c   刘淇   工单详情
52
                  <view style="min-width: 200rpx">情况描述</view>
ff65dc6c   刘淇   快速工单 样式优化
53
54
55
56
57
                </template>
                <template #value>
                  <view class="common-text-color up-line-1">{{ orderDetail.remark || '--' }}</view>
                </template>
              </up-cell>
1f1f236c   刘淇   工单详情
58
  
ff65dc6c   刘淇   快速工单 样式优化
59
60
61
62
63
64
65
              <!-- 紧急程度 -->
              <up-cell
                  title="紧急程度"
                  :value="uni.$dict.getDictLabel('workorder_pressing_type', orderDetail.pressingType) || '--'"
                  align="middle"
              ></up-cell>
  
1f1f236c   刘淇   工单详情
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
              <!-- 提交人 -->
              <up-cell title="提交人" :value="orderDetail.userName || '--'" align="middle"></up-cell>
  
              <!-- 提交时间 -->
              <up-cell
                  title="提交时间"
                  :value="timeFormat(orderDetail.createTime, 'yyyy-mm-dd hh:MM:ss') || '--'"
                  align="middle"
              ></up-cell>
  
              <!-- 处理结果 -->
              <up-cell>
                <template #title>
                  <view style="min-width: 200rpx">处理结果</view>
                </template>
                <template #value>
                  <view class="common-text-color up-line-1">{{ orderDetail.handleResult || '--' }}</view>
                </template>
              </up-cell>
  
              <!-- 街道名称 -->
              <up-cell title="街道名称" :value="orderDetail.streetName || '--'" align="middle"></up-cell>
  
ff65dc6c   刘淇   快速工单 样式优化
89
90
91
92
93
              <!-- 问题照片 -->
              <up-cell title="问题照片">
                <template #value>
                  <view class="cell-content-wrap">
                    <up-album
5059c4dd   刘淇   养护员提交养护工单
94
95
                        v-if="!!orderDetail.problemsImgs?.length"
                        :urls="orderDetail.problemsImgs.slice(0, 3)"
ff65dc6c   刘淇   快速工单 样式优化
96
97
98
99
100
101
102
                        singleSize="70"
                        :preview-full-image="true"
                    ></up-album>
                    <text v-else class="empty-text">暂无问题照片</text>
                  </view>
                </template>
              </up-cell>
1f1f236c   刘淇   工单详情
103
  
ff65dc6c   刘淇   快速工单 样式优化
104
105
106
              <!-- 希望完成时间 -->
              <up-cell
                  title="希望完成时间"
1f1f236c   刘淇   工单详情
107
                  :value="orderDetail.finishDate === 0 ? '未设置' : timeFormat(orderDetail.finishDate, 'yyyy-mm-dd hh:MM:ss')"
ff65dc6c   刘淇   快速工单 样式优化
108
109
110
111
112
                  align="middle"
                  :border="false"
              ></up-cell>
            </up-cell-group>
  
dacff5e3   刘淇   养护员退回
113
  
ff65dc6c   刘淇   快速工单 样式优化
114
            <!-- 图片分类Tabs区块 -->
dacff5e3   刘淇   养护员退回
115
116
117
118
119
120
121
122
123
124
125
126
            <view class="img-tabs-block" v-if="orderDetail.startImgs.length>0">
              <up-cell-group :border="false">
                <up-cell>
                <template #title>
                  <view style="min-width: 200rpx">共同处理人</view>
                </template>
                <template #value>
                  <view class="common-text-color up-line-1">{{ orderDetail.coHandlersName || '--' }}</view>
                </template>
                </up-cell>
              </up-cell-group>
              <!--            coHandlersName-->
1f1f236c   刘淇   工单详情
127
              <up-tabs
dacff5e3   刘淇   养护员退回
128
                  @change='imgTabChange'
1f1f236c   刘淇   工单详情
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
                  v-model="activeImgTab"
                  :list="imgTabList"
                  :scrollable="false"
                  active-color="#3c9cff"
                  inactive-color="#666"
                  class="img-tabs"
              ></up-tabs>
  
              <!-- 图片Tab内容区 -->
              <view class="img-tab-content">
                <up-album
                    v-if="currentImgList.length"
                    :urls="currentImgList.slice(0, 3)"
                    singleSize="80"
                    multipleSize="80"
                    :preview-full-image="true"
                    class="img-album"
                ></up-album>
                <text v-else class="empty-img-text">暂无图片</text>
              </view>
            </view>
ff65dc6c   刘淇   快速工单 样式优化
150
151
152
153
          </view>
  
          <!-- 2. 流程节点Tab -->
          <view v-show="activeTopTab == 1" class="process-content">
dacff5e3   刘淇   养护员退回
154
155
156
157
            <!--          <up-empty-->
            <!--              mode="data"-->
            <!--          ></up-empty>-->
            <!--          &lt;!&ndash; 可根据实际需求补充流程节点展示逻辑 &ndash;&gt;-->
ff65dc6c   刘淇   快速工单 样式优化
158
159
160
161
162
163
164
          </view>
        </view>
      </view>
    </view>
  </template>
  
  <script setup lang="ts">
dacff5e3   刘淇   养护员退回
165
166
167
168
169
170
171
172
173
  import {ref, computed} from 'vue';
  import {onLoad, onShow} from '@dcloudio/uni-app';
  import {timeFormat} from '@/uni_modules/uview-plus';
  import {
    getMyTaskDetail,
    getDoneTaskDetail,
    getTodoTaskDetail,
    getApprovalDetail
  } from '@/api/work-order-manage/work-order-manage';
ff65dc6c   刘淇   快速工单 样式优化
174
175
176
177
178
179
180
181
  
  // 状态管理
  const loading = ref(true);
  const activeTopTab = ref(0); // 顶部Tab激活索引
  const activeImgTab = ref(0); // 图片分类Tab激活索引
  
  // 顶部Tab列表
  const topTabList = ref([
dacff5e3   刘淇   养护员退回
182
183
    {name: '工单详情'},
    {name: '流程节点'}
ff65dc6c   刘淇   快速工单 样式优化
184
185
  ]);
  
1f1f236c   刘淇   工单详情
186
  const activeTopTabClick = async (item: any) => {
ff65dc6c   刘淇   快速工单 样式优化
187
188
    console.log(item)
    activeTopTab.value = item.index
dacff5e3   刘淇   养护员退回
189
    if (activeTopTab.value == 1) {
1f1f236c   刘淇   工单详情
190
      let getData = {
dacff5e3   刘淇   养护员退回
191
        processInstanceId: processInstanceId.value,
1f1f236c   刘淇   工单详情
192
      }
dacff5e3   刘淇   养护员退回
193
      const res = await getApprovalDetail(getData)
1f1f236c   刘淇   工单详情
194
195
      console.log(res)
    }
ff65dc6c   刘淇   快速工单 样式优化
196
197
198
199
  }
  
  // 图片分类Tab列表(带角标配置)
  const imgTabList = ref([
dacff5e3   刘淇   养护员退回
200
201
202
203
204
    {name: '开始', badge: {isDot: true}},
    {name: '进行中'},
    {name: '结束', badge: {isDot: true}},
    {name: '人员'},
    {name: '材料'}
ff65dc6c   刘淇   快速工单 样式优化
205
206
  ]);
  
1f1f236c   刘淇   工单详情
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
  // 工单详情数据(初始化赋值,可被接口数据覆盖)
  const orderDetail = ref<any>({
    id: 0,
    busiLine: '',
    orderNo: '',
    orderName: '',
    sourceId: 0,
    sourceName: '',
    roadId: 0,
    roadName: '',
    streetId: '',
    streetName: '',
    curingLevelId: 0,
    curingLevelName: '',
    commitDate: 0,
    finishDate: 0,
    pressingType: 0,
    userId: 0,
    userName: '',
    companyId: 0,
    latLonType: 0,
    lat: 0,
    lon: 0,
    lonLatAddress: '',
    thirdWorkNo: '',
    thirdPushState: 0,
    buzStatus: null,
    status: 0,
    processInstanceId: '',
    remark: '',
    handleResult: '',
    createTime: 0,
    fileNames: null,
    coHandlers: null,
    coHandlersName: null,
    companyName: null,
    userMobile: null,
    taskId: '',
    taskName: '',
    taskKey: '',
    processDefinitionName: '',
    startTime: 0,
    endTime: 0,
    key_: '',
    problemsImgs: [],
    startImgs: [],
    processingImgs: [],
    endImgs: [],
    personImgs: [],
    materialImgs: []
  });
ff65dc6c   刘淇   快速工单 样式优化
258
259
  
  /**
1f1f236c   刘淇   工单详情
260
   * 当前激活的图片列表(无需函数调用,直接访问)
ff65dc6c   刘淇   快速工单 样式优化
261
   */
1f1f236c   刘淇   工单详情
262
263
264
  const currentImgList = ref([])
  
  const tabKeyMap = ['startImgs', 'processingImgs', 'endImgs', 'personImgs', 'materialImgs'];
dacff5e3   刘淇   养护员退回
265
  const imgTabChange = (({index}) => {
1f1f236c   刘淇   工单详情
266
267
268
269
270
271
272
    console.log(index)
    const currentKey = tabKeyMap[index]
    console.log(currentKey)
    console.log(orderDetail.value[currentKey])
    currentImgList.value = orderDetail.value[currentKey]
  })
  
ff65dc6c   刘淇   快速工单 样式优化
273
274
275
276
  
  /**
   * 获取工单详情
   */
1f1f236c   刘淇   工单详情
277
278
  const DetailQuery = async (taskIdStr: string) => {
    console.log('当前工单ID:', taskIdStr)
ff65dc6c   刘淇   快速工单 样式优化
279
280
    try {
      loading.value = true;
1f1f236c   刘淇   工单详情
281
282
283
284
285
      // 转换activeTab为数字类型,避免类型不一致导致接口调用失败
      const tabType = Number(activeTab.value);
      let res: any;
  
      if (tabType === 0) {
dacff5e3   刘淇   养护员退回
286
        res = await getTodoTaskDetail({taskId: taskIdStr});
1f1f236c   刘淇   工单详情
287
      } else if (tabType === 1) {
dacff5e3   刘淇   养护员退回
288
        res = await getMyTaskDetail({taskId: taskIdStr});
1f1f236c   刘淇   工单详情
289
      } else if (tabType === 2) {
dacff5e3   刘淇   养护员退回
290
        res = await getDoneTaskDetail({taskId: taskIdStr});
1f1f236c   刘淇   工单详情
291
      } else {
dacff5e3   刘淇   养护员退回
292
        uni.showToast({title: '无效的工单类型', icon: 'none'});
1f1f236c   刘淇   工单详情
293
        return;
fa775c6b   刘淇   养护计划调整
294
      }
fa775c6b   刘淇   养护计划调整
295
  
1f1f236c   刘淇   工单详情
296
297
298
      // 覆盖工单详情数据
      if (res) {
        orderDetail.value = res;
dacff5e3   刘淇   养护员退回
299
        currentImgList.value = orderDetail.value.startImgs
fa775c6b   刘淇   养护计划调整
300
      }
ff65dc6c   刘淇   快速工单 样式优化
301
302
    } catch (error) {
      console.error('获取工单详情失败:', error);
dacff5e3   刘淇   养护员退回
303
      uni.showToast({title: '加载失败,请重试', icon: 'none'});
ff65dc6c   刘淇   快速工单 样式优化
304
305
306
307
308
    } finally {
      loading.value = false;
    }
  };
  
1f1f236c   刘淇   工单详情
309
  // 页面加载参数
fa775c6b   刘淇   养护计划调整
310
311
  const taskId = ref('')
  const activeTab = ref('')
1f1f236c   刘淇   工单详情
312
313
314
  const processInstanceId = ref('')
  onLoad((options: any) => {
    console.log('页面入参:', options)
dacff5e3   刘淇   养护员退回
315
    const {taskId: taskIdOpt, activeTab: activeTabOpt, processInstanceId: processInstanceIdOpt} = options;
1f1f236c   刘淇   工单详情
316
317
318
    // 0-待办 1-我发起的 2-已办
    taskId.value = taskIdOpt || '';
    activeTab.value = activeTabOpt || '0';
dacff5e3   刘淇   养护员退回
319
320
    processInstanceId.value = processInstanceIdOpt;
    DetailQuery(taskId.value);
1f1f236c   刘淇   工单详情
321
  });
ff65dc6c   刘淇   快速工单 样式优化
322
  
1f1f236c   刘淇   工单详情
323
  onShow(() => {
dacff5e3   刘淇   养护员退回
324
325
326
327
328
329
    // if (taskId.value) {
    //   DetailQuery(taskId.value);
    // } else {
    //   loading.value = false;
    //   uni.showToast({title: '缺少工单ID参数', icon: 'none'});
    // }
ff65dc6c   刘淇   快速工单 样式优化
330
  });
ff65dc6c   刘淇   快速工单 样式优化
331
332
333
334
335
336
  </script>
  
  <style scoped lang="scss">
  // 全局样式
  .page-container {
    min-height: 100vh;
ff65dc6c   刘淇   快速工单 样式优化
337
338
339
340
341
342
343
344
345
346
347
348
349
350
  }
  
  // 主内容容器
  .main-content {
    padding-bottom: 20rpx;
  }
  
  // 顶部Tabs
  .top-tabs {
    //background-color: #fff;
  }
  
  // Tab内容区
  .tab-content {
dacff5e3   刘淇   养护员退回
351
    //padding: 16rpx;
ff65dc6c   刘淇   快速工单 样式优化
352
353
354
355
356
357
  }
  
  // 工单详情内容
  .detail-content {
    .detail-cell-group {
      background-color: #fff;
ff65dc6c   刘淇   快速工单 样式优化
358
359
360
      margin-bottom: 20rpx;
    }
  
ff65dc6c   刘淇   快速工单 样式优化
361
    .cell-content-wrap {
1f1f236c   刘淇   工单详情
362
      // 保持原有样式,兼容up-album布局
ff65dc6c   刘淇   快速工单 样式优化
363
364
    }
  
1f1f236c   刘淇   工单详情
365
366
367
368
    .empty-text {
      color: #999;
      font-size: 26rpx;
    }
ff65dc6c   刘淇   快速工单 样式优化
369
370
371
372
373
374
375
376
  }
  
  // 图片分类Tabs区块
  .img-tabs-block {
    background-color: #fff;
    border-radius: 12rpx;
    padding: 16rpx;
  
1f1f236c   刘淇   工单详情
377
378
379
380
381
382
383
    //// 图片Tabs样式(平均分配空间)
    //.img-tabs {
    //  --u-tabs-item-flex: 1; // 平均分配空间
    //  --u-tabs-item-font-size: 26rpx;
    //  --u-tabs-item-height: 72rpx;
    //  margin-bottom: 16rpx;
    //}
ff65dc6c   刘淇   快速工单 样式优化
384
385
386
387
388
389
390
391
392
393
394
395
396
  
    // 图片内容区
    .img-tab-content {
      padding: 10rpx 0;
      min-height: 120rpx;
      display: flex;
      align-items: center;
      justify-content: center;
  
      .img-album {
        width: 100%;
      }
  
1f1f236c   刘淇   工单详情
397
398
399
400
401
402
      .empty-img-text {
        height: 100px;
        line-height: 100px;
        color: #999;
        font-size: 28rpx;
      }
ff65dc6c   刘淇   快速工单 样式优化
403
404
405
406
407
    }
  }
  
  // 流程节点空状态
  .process-content {
1f1f236c   刘淇   工单详情
408
409
410
411
412
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 400rpx;
  
ff65dc6c   刘淇   快速工单 样式优化
413
414
415
416
417
    .empty-process {
      margin-top: 100rpx;
    }
  }
  </style>