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>-->
<!-- <!– 可根据实际需求补充流程节点展示逻辑 –>-->
|
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>
|