7b1f488f
刘淇
封装下图片上传
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<template>
<view class="page-container">
<!-- 顶部固定区域 -->
<up-sticky>
<view class="header-wrap">
<!-- 第一行:u-tabs 待办/已办切换 :scrollable="false"-->
<up-tabs
v-model="activeTab"
:list="tabList"
active-color="#1989fa"
inactive-color="#666"
font-size="30rpx"
|
ff65dc6c
刘淇
快速工单 样式优化
|
13
|
@click="handleTabChange"
|
7b1f488f
刘淇
封装下图片上传
|
14
15
16
17
18
|
/>
<!-- 第二行:下拉框 + 搜索框 -->
<view class="search-header">
<!-- 左侧下拉框 -->
|
ff65dc6c
刘淇
快速工单 样式优化
|
19
|
<view class="select-wrap common-text-color">
|
7b1f488f
刘淇
封装下图片上传
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
<up-select
v-model:current="selectedSortValue"
:options="sortOptions"
:showOptionsLabel="true"
@select="handleSortChange"
border="surround"
:style="{ flex: 1 }"
/>
</view>
<!-- 右侧搜索框 -->
<view class="search-input-wrap">
<up-search
v-model="searchValue"
placeholder="请输入关键字"
@search="handleSearch"
bg-color="#f5f5f5"
:clearabled="false"
:show-action="true"
actionText="搜索"
:animation="true"
@custom="handleSearch"
/>
</view>
</view>
</view>
</up-sticky>
<!-- 列表容器 -->
<z-paging
ref="paging"
v-model="orderList"
@query="queryList"
:auto-show-system-loading="true"
|
e6a04285
刘淇
单图情况 宽高70*70
|
54
|
|
7b1f488f
刘淇
封装下图片上传
|
55
|
>
|
5059c4dd
刘淇
养护员提交养护工单
|
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
<template #empty>
<empty-view/>
</template>
<view class="common-card-list" style="padding-top: 200rpx;padding-bottom: 30rpx">
<!-- 待办工单卡片 -->
<up-card
v-if="activeTab == 0"
:border="false"
:foot-border-top="false"
v-for="(item, index) in orderList"
:key="`todo_${item.orderNo}_${index}`"
:show-head="false"
class="order-card"
>
<template #body>
<view class="card-body">
<view class="u-body-item u-flex">
<view class="u-body-item-title">工单编号:</view>
<view class="u-line-1 u-body-value">{{ item.orderNo || '-' }}</view>
</view>
<view class="u-body-item u-flex">
<view class="u-body-item-title">工单位置:</view>
|
e6a04285
刘淇
单图情况 宽高70*70
|
79
|
<view class="u-line-1 u-body-value">{{ item.lonLatAddress || '-' }}</view>
|
5059c4dd
刘淇
养护员提交养护工单
|
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
</view>
<view class="u-body-item u-flex">
<view class="u-body-item-title">工单名称:</view>
<view class="u-line-1 u-body-value">{{ item.orderName || '未填写' }}</view>
</view>
<view class="u-body-item u-flex">
<view class="u-body-item-title">情况描述:</view>
<view class="u-line-1 u-body-value">{{ item.remark || '无' }}</view>
</view>
<view class="u-body-item u-flex common-item-center common-justify-between">
<view class="u-body-item-title">紧急程度:</view>
<view class="u-line-1 u-body-value">
{{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) }}
</view>
</view>
<view class="u-body-item u-flex">
|
4fa8cf12
刘淇
巡查员结束工单
|
96
97
98
99
|
<view class="u-body-item-title">工单状态:</view>
<view class="u-line-1 u-body-value">{{buzStatusMap[item.buzStatus] }}</view>
</view>
<view class="u-body-item u-flex">
|
5059c4dd
刘淇
养护员提交养护工单
|
100
101
102
103
|
<view class="u-body-item-title">提交时间:</view>
<view class="u-line-1 u-body-value">{{ timeFormat(item.createTime, 'yyyy-mm-dd hh:MM:ss') }}</view>
</view>
<!-- 操作按钮行 -->
|
5b5a4862
刘淇
按钮放大
|
104
105
|
<view class="u-body-item u-body-item-btn-wrap u-flex common-justify-between common-item-center mt-20">
<up-button type="warning" size="large" @click="handleReject(item)"
|
5059c4dd
刘淇
养护员提交养护工单
|
106
107
|
v-show="nextStepMap[item.taskKey].backShow">回退
</up-button>
|
7a96cf50
刘淇
重新提交
|
108
|
|
5b5a4862
刘淇
按钮放大
|
109
|
<up-button type="success" size="large" @click="handleRenew(item)"
|
7a96cf50
刘淇
重新提交
|
110
111
112
|
v-show="nextStepMap[item.taskKey].renewShow">重新提交
</up-button>
|
5b5a4862
刘淇
按钮放大
|
113
|
<up-button type="primary" size="large" @click="handleProcess(item)">{{
|
1f1f236c
刘淇
工单详情
|
114
115
|
nextStepMap[item.taskKey].btnText
}}
|
5059c4dd
刘淇
养护员提交养护工单
|
116
|
</up-button>
|
5b5a4862
刘淇
按钮放大
|
117
|
<up-button type="info" size="large" @click="handleDetail(item)">详情</up-button>
|
7b1f488f
刘淇
封装下图片上传
|
118
119
|
</view>
</view>
|
5059c4dd
刘淇
养护员提交养护工单
|
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
</template>
</up-card>
<!-- 已办工单卡片和我发起的 -->
<up-card
v-if="activeTab == 2||activeTab == 1"
:border="false"
:foot-border-top="false"
v-for="(item, index) in orderList"
:key="`done_${item.orderNo}_${index}`"
:show-head="false"
class="order-card"
>
<template #body>
<view class="card-body">
|
5b5a4862
刘淇
按钮放大
|
135
136
137
138
139
140
141
142
|
<!-- <view class=" ">-->
<!-- <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>-->
<!-- </view>-->
<view class="common-custom-btn " style="--btn-top: 130px;" @click="handleDetail(item)">
工单详情
</view>
|
5059c4dd
刘淇
养护员提交养护工单
|
143
144
145
146
147
148
|
<view class="u-body-item u-flex">
<view class="u-body-item-title">工单编号:</view>
<view class="u-line-1 u-body-value">{{ item.orderNo || '-' }}</view>
</view>
<view class="u-body-item u-flex">
<view class="u-body-item-title">工单位置:</view>
|
4f475013
刘淇
k线图
|
149
|
<view class="u-line-1 u-body-value">{{ item.lonLatAddress || '-' }}</view>
|
5059c4dd
刘淇
养护员提交养护工单
|
150
151
152
153
154
155
156
157
158
|
</view>
<view class="u-body-item u-flex">
<view class="u-body-item-title">工单名称:</view>
<view class="u-line-1 u-body-value">{{ item.orderName || '未填写' }}</view>
</view>
<view class="u-body-item u-flex">
<view class="u-body-item-title">情况描述:</view>
<view class="u-line-1 u-body-value">{{ item.remark || '无' }}</view>
</view>
|
ff65dc6c
刘淇
快速工单 样式优化
|
159
|
|
5059c4dd
刘淇
养护员提交养护工单
|
160
|
<view class="u-body-item u-flex common-justify-between common-item-center">
|
eaaa8665
刘淇
全域巡查员
|
161
|
<view class="u-body-item-title">紧急程度:{{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) }}
|
5059c4dd
刘淇
养护员提交养护工单
|
162
|
</view>
|
5b5a4862
刘淇
按钮放大
|
163
164
165
|
<!-- <view class=" ">-->
<!-- <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>-->
<!-- </view>-->
|
5059c4dd
刘淇
养护员提交养护工单
|
166
167
|
</view>
<view class="u-body-item u-flex">
|
4fa8cf12
刘淇
巡查员结束工单
|
168
169
170
171
|
<view class="u-body-item-title">工单状态:</view>
<view class="u-line-1 u-body-value">{{buzStatusMap[item.buzStatus] }}</view>
</view>
<view class="u-body-item u-flex">
|
5059c4dd
刘淇
养护员提交养护工单
|
172
173
174
|
<view class="u-body-item-title">提交时间:</view>
<view class="u-line-1 u-body-value">{{ timeFormat(item.createTime, 'yyyy-mm-dd hh:MM:ss') }}</view>
</view>
|
7b1f488f
刘淇
封装下图片上传
|
175
|
</view>
|
5059c4dd
刘淇
养护员提交养护工单
|
176
177
178
|
</template>
</up-card>
</view>
|
7b1f488f
刘淇
封装下图片上传
|
179
180
181
182
183
184
185
186
187
|
</z-paging>
<!-- 底部新增工单按钮(仅巡查员显示) -->
<view v-if="isInspector" class="fixed-bottom-btn-wrap">
<up-button type="primary" size="large" @click="handleAddOrder">
新增工单
</up-button>
</view>
|
7a96cf50
刘淇
重新提交
|
188
189
190
191
192
193
194
195
196
197
198
199
|
<!-- 回退原因弹窗:替换为up-modal(核心修改) -->
<up-modal
:show="rejectModalShow"
title="回退原因"
:closeOnClickOverlay="false"
:showConfirmButton="true"
:showCancelButton="true"
@cancel="handleRejectModalCancel"
@confirm="confirmReject"
>
<view class="reject-modal-content">
<!-- 回退原因 必填textarea -->
|
7b1f488f
刘淇
封装下图片上传
|
200
|
<up-textarea
|
7a96cf50
刘淇
重新提交
|
201
|
v-model.trim="rejectReason"
|
7b1f488f
刘淇
封装下图片上传
|
202
|
placeholder="请输入回退原因(必填)"
|
1f1f236c
刘淇
工单详情
|
203
|
rows="6"
|
7a96cf50
刘淇
重新提交
|
204
205
206
|
:count="200"
maxlength="200"
class="reject-textarea"
|
7b1f488f
刘淇
封装下图片上传
|
207
|
/>
|
2b13ab68
刘淇
回退加上 回退图片非必传
|
208
209
210
211
|
<!-- 上传图片(选填)- 按照参考页面改造 -->
<view class="upload-wrap mt-20">
<view class="upload-title">上传图片(选填)</view>
<up-upload
|
3d474e84
刘淇
快速工单 加上业务线
|
212
|
:file-list="rejectImgs.rawImgList.value|| []"
|
2b13ab68
刘淇
回退加上 回退图片非必传
|
213
214
215
216
217
218
219
220
221
222
|
@after-read="rejectImgs.uploadImgs"
@delete="rejectImgs.deleteImg"
multiple
width="70"
height="70"
:max-count="rejectImgs.uploadConfig.maxCount"
:upload-text="rejectImgs.uploadConfig.uploadText"
:size-type="rejectImgs.uploadConfig.sizeType"
/>
</view>
|
7b1f488f
刘淇
封装下图片上传
|
223
|
</view>
|
7a96cf50
刘淇
重新提交
|
224
|
</up-modal>
|
1f1f236c
刘淇
工单详情
|
225
|
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
226
|
<!-- 验收弹窗 up-modal(含图片上传) -->
|
1f1f236c
刘淇
工单详情
|
227
228
229
230
231
232
|
<up-modal
:show="acceptModalShow"
title="验收"
:closeOnClickOverlay="false"
:showConfirmButton="true"
:showCancelButton="true"
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
233
|
@cancel="handleAcceptModalCancel"
|
1f1f236c
刘淇
工单详情
|
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
|
@confirm="handleAcceptModalConfirm"
>
<view class="accept-modal-content">
<!-- 第一行:单选框(通过/不通过,默认通过) -->
<view class="radio-group-wrap">
<up-radio-group v-model="acceptRadioValue">
<up-radio name="0" label="通过"></up-radio>
<up-radio name="1" label="不通过"></up-radio>
</up-radio-group>
</view>
<!-- 第二行:必填textarea,最多200字 -->
<view class="textarea-wrap mt-30">
<up-textarea
v-model.trim="acceptReason"
placeholder="请输入验收原因(必填,最多200字)"
:required="true"
maxlength="200"
rows="5"
count
/>
</view>
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
256
257
258
259
260
|
<!-- 验收图片上传(选填,参考回退弹窗样式) -->
<view class="upload-wrap mt-20">
<view class="upload-title">上传验收图片(选填)</view>
<up-upload
|
3d474e84
刘淇
快速工单 加上业务线
|
261
|
:file-list="acceptImgs.rawImgList.value || []"
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
262
263
|
@after-read="acceptImgs.uploadImgs"
@delete="acceptImgs.deleteImg"
|
e6a04285
刘淇
单图情况 宽高70*70
|
264
|
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
265
266
267
268
269
270
271
272
|
multiple
width="70"
height="70"
:max-count="acceptImgs.uploadConfig.maxCount"
:upload-text="acceptImgs.uploadConfig.uploadText"
:size-type="acceptImgs.uploadConfig.sizeType"
/>
</view>
|
1f1f236c
刘淇
工单详情
|
273
274
|
</view>
</up-modal>
|
7b1f488f
刘淇
封装下图片上传
|
275
276
277
278
|
</view>
</template>
<script setup>
|
dacff5e3
刘淇
养护员退回
|
279
|
import { ref, computed, watch } from 'vue';
|
e6a04285
刘淇
单图情况 宽高70*70
|
280
|
import { onShow, onLoad } from '@dcloudio/uni-app';
|
7b1f488f
刘淇
封装下图片上传
|
281
|
import { timeFormat } from '@/uni_modules/uview-plus';
|
1f1f236c
刘淇
工单详情
|
282
283
284
285
286
287
|
import {
myBuzSimplePage,
todoBuzSimplePage,
doneBuzSimplePage,
universalApproval
} from '@/api/work-order-manage/work-order-manage'
|
e6a04285
刘淇
单图情况 宽高70*70
|
288
|
// 从用户store获取角色信息
|
7b1f488f
刘淇
封装下图片上传
|
289
|
import { useUserStore } from '@/pinia/user';
|
4fa8cf12
刘淇
巡查员结束工单
|
290
|
import { nextStepMap, buzStatusMap } from '@/common/utils/common'
|
dacff5e3
刘淇
养护员退回
|
291
292
293
|
// 引入图片上传组合式函数(与参考页面一致)
import { useUploadImgs } from '@/common/utils/useUploadImgs'
|
7b1f488f
刘淇
封装下图片上传
|
294
295
296
|
// ========== 状态管理 ==========
const userStore = useUserStore();
// 标签页切换
|
5b5a4862
刘淇
按钮放大
|
297
|
const activeTab = ref(0); //0-待办 1-已办 2-我发起的任务
|
7b1f488f
刘淇
封装下图片上传
|
298
|
const tabList = ref([
|
5059c4dd
刘淇
养护员提交养护工单
|
299
|
{name: '待办'},
|
5b5a4862
刘淇
按钮放大
|
300
|
{name: '已办'},
|
d6406a70
刘淇
快速工单 详情 照片处理
|
301
|
{name: '我发起的'}
|
7b1f488f
刘淇
封装下图片上传
|
302
303
304
305
|
]);
// 排序下拉框
const selectedSortValue = ref(1);
const sortOptions = ref([
|
5059c4dd
刘淇
养护员提交养护工单
|
306
307
308
309
|
{name: '位置', id: 1},
{name: '名称', id: 2},
{name: '描述', id: 3},
{name: '编号', id: 4},
|
7b1f488f
刘淇
封装下图片上传
|
310
311
312
313
314
315
316
317
|
]);
// 搜索
const searchValue = ref('');
// 分页
const paging = ref(null);
const orderList = ref([]);
// 角色控制(巡查员显示新增按钮)
const isInspector = computed(() => {
|
7a96cf50
刘淇
重新提交
|
318
|
// 增加可选链,避免用户信息不存在报错
|
f0ec74d6
刘淇
大区经理派单
|
319
320
321
|
// patrol_global 全域巡查员
// regional_manager 大区经理
|
7a96cf50
刘淇
重新提交
|
322
|
return userStore.userInfo?.roles?.includes('yl_inspector') || false;
|
7b1f488f
刘淇
封装下图片上传
|
323
|
});
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
324
|
// 回退弹窗相关
|
7a96cf50
刘淇
重新提交
|
325
326
|
const rejectModalShow = ref(false); // 回退modal显示开关
const rejectReason = ref(''); // 回退原因
|
7a96cf50
刘淇
重新提交
|
327
|
const currentRejectItem = ref(null); // 当前回退工单
|
dacff5e3
刘淇
养护员退回
|
328
|
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
329
|
// 回退图片上传配置(与参考页面风格一致)
|
dacff5e3
刘淇
养护员退回
|
330
|
const rejectImgs = useUploadImgs({
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
331
|
maxCount: 3, // 最多上传3张
|
dacff5e3
刘淇
养护员退回
|
332
|
uploadText: '选择回退图片', // 自定义上传提示文字
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
333
334
335
|
sizeType: ['compressed'], // 仅上传压缩图
formRef: null, // 该弹窗无表单校验
fieldName: 'rejectImgs' // 自定义字段名
|
dacff5e3
刘淇
养护员退回
|
336
337
|
})
|
dacff5e3
刘淇
养护员退回
|
338
|
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
339
|
// ========== 验收弹窗相关状态(含图片上传) ==========
|
1f1f236c
刘淇
工单详情
|
340
341
342
343
|
const acceptModalShow = ref(false); // 验收弹窗显示开关
const acceptRadioValue = ref('0'); // 单选框值,默认0(通过)
const acceptReason = ref(''); // 验收原因
const currentAcceptItem = ref(null); // 当前验收的工单项
|
dacff5e3
刘淇
养护员退回
|
344
|
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
345
346
347
348
349
350
351
352
353
|
// 验收图片上传配置(独立实例,参考回退弹窗)
const acceptImgs = useUploadImgs({
maxCount: 3, // 最多上传3张,与回退弹窗一致
uploadText: '选择验收图片', // 自定义上传提示文字
sizeType: ['compressed'], // 仅上传压缩图,优化性能
formRef: null, // 验收弹窗无表单校验
fieldName: 'acceptImgs' // 自定义字段名,区分回退图片
})
|
7b1f488f
刘淇
封装下图片上传
|
354
355
356
357
358
359
360
361
362
|
// 分页查询列表
const queryList = async (pageNo, pageSize) => {
try {
const apiParams = {
searchContent: searchValue.value.trim() || '',
pageNo,
pageSize,
type: selectedSortValue.value // 1-位置 2-工单名称 3-情况描述 4-工单编号
};
|
7b1f488f
刘淇
封装下图片上传
|
363
|
let res;
|
5b5a4862
刘淇
按钮放大
|
364
|
// 0-待办 1-已办 2-我发起的任务
|
ff65dc6c
刘淇
快速工单 样式优化
|
365
|
if (activeTab.value == 0) {
|
7b1f488f
刘淇
封装下图片上传
|
366
|
// 待办工单
|
ff65dc6c
刘淇
快速工单 样式优化
|
367
|
res = await todoBuzSimplePage(apiParams);
|
5b5a4862
刘淇
按钮放大
|
368
|
} else if (activeTab.value == 2) {
|
2764b83e
刘淇
分配养护员
|
369
370
|
// 我发起的任务
res = await myBuzSimplePage(apiParams);
|
5059c4dd
刘淇
养护员提交养护工单
|
371
|
} else {
|
7b1f488f
刘淇
封装下图片上传
|
372
|
// 已办工单
|
ff65dc6c
刘淇
快速工单 样式优化
|
373
|
res = await doneBuzSimplePage(apiParams);
|
7b1f488f
刘淇
封装下图片上传
|
374
|
}
|
7b1f488f
刘淇
封装下图片上传
|
375
376
377
378
379
|
// 适配z-paging分页
paging.value.complete(res.list, res.total);
} catch (error) {
console.error('加载工单失败:', error);
paging.value?.complete(false);
|
5059c4dd
刘淇
养护员提交养护工单
|
380
|
uni.showToast({title: '加载失败,请重试', icon: 'none'});
|
7b1f488f
刘淇
封装下图片上传
|
381
382
|
}
};
|
dacff5e3
刘淇
养护员退回
|
383
|
|
7b1f488f
刘淇
封装下图片上传
|
384
385
|
// ========== 事件处理 ==========
// 标签页切换
|
ff65dc6c
刘淇
快速工单 样式优化
|
386
|
const handleTabChange = (item) => {
|
3ddb854c
刘淇
全域巡查员
|
387
|
orderList.value = [];
|
ff65dc6c
刘淇
快速工单 样式优化
|
388
389
|
console.log(item)
activeTab.value = item.index;
|
7b1f488f
刘淇
封装下图片上传
|
390
391
|
paging.value?.reload(); // 切换标签页刷新列表
};
|
7b1f488f
刘淇
封装下图片上传
|
392
393
394
395
396
397
|
// 排序变更
const handleSortChange = (val) => {
selectedSortValue.value = val.id;
searchValue.value = '';
paging.value?.reload(); // 排序变更刷新列表
};
|
7b1f488f
刘淇
封装下图片上传
|
398
399
400
401
402
|
// 搜索
const handleSearch = (val) => {
searchValue.value = val;
paging.value?.reload(); // 搜索刷新列表
};
|
4570c70a
刘淇
消息中心
|
403
404
405
406
407
408
409
410
411
412
|
// const isRefreshing = ref(false);
// const refreshList = () => {
// if (isRefreshing.value) return;
// isRefreshing.value = true;
// paging.value?.reload().finally(() => {
// setTimeout(() => {
// isRefreshing.value = false;
// }, 500);
// });
// };
|
7b1f488f
刘淇
封装下图片上传
|
413
414
|
// 工单详情
const handleDetail = (item) => {
|
5b5a4862
刘淇
按钮放大
|
415
|
// 0-待办 1-已办 2-我发起的任务
|
7b1f488f
刘淇
封装下图片上传
|
416
|
uni.navigateTo({
|
e6a04285
刘淇
单图情况 宽高70*70
|
417
418
419
420
421
422
423
424
425
426
|
url: `/pages-sub/problem/work-order-manage/order-detail?taskId=${item.taskId}&activeTab=${activeTab.value}&processInstanceId=${item.processInstanceId}`,
events: {
// 自定义事件名:needRefresh(与详情页保持一致)
needRefresh: () => {
console.log('详情页返回,触发工单列表刷新');
if (paging.value) {
paging.value.reload(); // 刷新z-paging列表
}
}
}
|
7b1f488f
刘淇
封装下图片上传
|
427
428
|
});
};
|
7a96cf50
刘淇
重新提交
|
429
|
|
dacff5e3
刘淇
养护员退回
|
430
|
// 生成临时key
|
7a96cf50
刘淇
重新提交
|
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
|
const generateTempKey = () => {
return 'renew_order_' + Date.now() + '_' + Math.floor(Math.random() * 10000);
};
// 待办-重新提交工单(改造后:大数据存本地,仅传唯一标识)
const handleRenew = (item) => {
// 校验工单有效性
if (!item || !item.id) {
uni.showToast({title: '工单信息异常,无法重新提交', icon: 'none'});
return;
}
// 1. 生成唯一临时标识
const tempKey = generateTempKey();
// 2. 将完整工单数据存入本地临时存储(同步存储,确保数据立即生效)
try {
uni.setStorageSync(tempKey, item);
} catch (error) {
console.error('存储工单数据失败:', error);
uni.showToast({title: '数据存储异常,无法重新提交', icon: 'none'});
return;
}
// 3. URL 仅传递「唯一标识」和「重新提交标记」(数据量极小,无长度问题)
uni.navigateTo({
url: `/pages-sub/problem/work-order-manage/add-order?isRenew=1&tempKey=${tempKey}`
});
};
|
7b1f488f
刘淇
封装下图片上传
|
461
462
|
// 待办-处理工单
const handleProcess = async (item) => {
|
1f1f236c
刘淇
工单详情
|
463
|
console.log(nextStepMap[item.taskKey].name)
|
7b1f488f
刘淇
封装下图片上传
|
464
|
try {
|
7a96cf50
刘淇
重新提交
|
465
|
if (nextStepMap[item.taskKey]?.name == '养护组长分配') {
|
2764b83e
刘淇
分配养护员
|
466
|
uni.navigateTo({
|
3d474e84
刘淇
快速工单 加上业务线
|
467
|
url: `/pages-sub/problem/work-order-manage/distribution-order?taskId=${item.taskId}&orderNo=${item.orderNo}&id=${item.id}&busiLine=${item.busiLine}`
|
2764b83e
刘淇
分配养护员
|
468
469
|
})
}
|
7a96cf50
刘淇
重新提交
|
470
|
if (nextStepMap[item.taskKey]?.name == '养护员待实施') {
|
dacff5e3
刘淇
养护员退回
|
471
472
473
474
475
476
477
478
479
480
481
482
483
484
|
// ① 生成唯一临时key(和重新提交工单逻辑一致,避免冲突)
const tempKey = `maintain_order_${Date.now()}_${Math.floor(Math.random() * 10000)}`;
// ② 存储完整item到本地缓存(同步存储,确保立即生效)
try {
uni.setStorageSync(tempKey, item);
} catch (error) {
console.error('存储养护工单数据失败:', error);
uni.showToast({title: '数据存储异常,无法跳转', icon: 'none'});
return;
}
// ③ URL仅传递临时key(可选:携带必要简单参数,方便目标页面快速使用)
|
2764b83e
刘淇
分配养护员
|
485
|
uni.navigateTo({
|
dacff5e3
刘淇
养护员退回
|
486
|
url: `/pages-sub/problem/work-order-manage/add-maintain-order?tempKey=${tempKey}`
|
2764b83e
刘淇
分配养护员
|
487
|
})
|
7b1f488f
刘淇
封装下图片上传
|
488
|
}
|
1f1f236c
刘淇
工单详情
|
489
|
// 养护组长验收 - 打开弹窗
|
7a96cf50
刘淇
重新提交
|
490
|
if (nextStepMap[item.taskKey]?.name == '养护组长验收') {
|
1f1f236c
刘淇
工单详情
|
491
492
493
494
495
|
currentAcceptItem.value = item; // 存储当前工单信息
acceptReason.value = ''; // 清空上次的验收原因
acceptRadioValue.value = '0'; // 重置默认选中“通过”
acceptModalShow.value = true; // 显示验收弹窗
}
|
1f1f236c
刘淇
工单详情
|
496
|
// 巡查员验收 - 打开弹窗
|
7a96cf50
刘淇
重新提交
|
497
|
if (nextStepMap[item.taskKey]?.name == '巡查员验收') {
|
1f1f236c
刘淇
工单详情
|
498
499
500
501
502
503
|
currentAcceptItem.value = item; // 存储当前工单信息
acceptReason.value = ''; // 清空上次的验收原因
acceptRadioValue.value = '0'; // 重置默认选中“通过”
acceptModalShow.value = true; // 显示验收弹窗
}
|
7a96cf50
刘淇
重新提交
|
504
505
506
|
// 发起人确认
if (nextStepMap[item.taskKey]?.name == '发起人确认') {
console.log(item)
|
7a96cf50
刘淇
重新提交
|
507
508
509
510
511
512
513
|
uni.showModal({
title: "结束工单",
content: "请确定是否结束工单?",
success: async function (res) {
if (res.confirm) {
// 构建请求参数
const requestData = {
|
dacff5e3
刘淇
养护员退回
|
514
|
"returnImgs": rejectImgs.getSuccessImgUrls(), // 改造后:获取上传成功的图片URL
|
7a96cf50
刘淇
重新提交
|
515
|
"workerDataId": item.id,
|
4fa8cf12
刘淇
巡查员结束工单
|
516
|
"taskKey":'ylInspectorStart',
|
7a96cf50
刘淇
重新提交
|
517
|
"taskId": item.taskId,
|
4fa8cf12
刘淇
巡查员结束工单
|
518
|
"operateType": 200,
|
7a96cf50
刘淇
重新提交
|
519
520
521
522
523
524
525
526
527
528
529
530
531
532
|
"agree": 1,
"reason": '结束工单'
};
// 调用回退工单接口
const res = await universalApproval(requestData);
uni.showToast({title: '结束成功', icon: 'success', duration: 1000});
rejectModalShow.value = false;
paging.value?.reload(); // 刷新列表
} else if (res.cancel) {
console.log("用户点击取消");
}
},
});
}
|
7b1f488f
刘淇
封装下图片上传
|
533
534
|
} catch (error) {
console.error('处理工单失败:', error);
|
4570c70a
刘淇
消息中心
|
535
|
uni.showToast({title: error.msg||'处理失败,请重试', icon: 'none'});
|
7b1f488f
刘淇
封装下图片上传
|
536
537
|
}
};
|
dacff5e3
刘淇
养护员退回
|
538
|
|
7a96cf50
刘淇
重新提交
|
539
|
// 待办-回退工单(打开回退modal)
|
7b1f488f
刘淇
封装下图片上传
|
540
|
const handleReject = (item) => {
|
7a96cf50
刘淇
重新提交
|
541
542
543
544
545
546
|
console.log('123213')
// 校验工单有效性
if (!item || !item.id) {
uni.showToast({title: '工单信息异常,无法回退', icon: 'none'});
return;
}
|
7b1f488f
刘淇
封装下图片上传
|
547
|
currentRejectItem.value = item;
|
7a96cf50
刘淇
重新提交
|
548
|
rejectReason.value = ''; // 清空上次输入
|
dacff5e3
刘淇
养护员退回
|
549
|
rejectImgs.clearImgs(); // 改造后:使用组合式函数的清空方法
|
7a96cf50
刘淇
重新提交
|
550
551
|
rejectModalShow.value = true; // 显示回退modal
};
|
dacff5e3
刘淇
养护员退回
|
552
|
|
7a96cf50
刘淇
重新提交
|
553
554
555
|
// 回退modal - 取消按钮
const handleRejectModalCancel = () => {
rejectModalShow.value = false;
|
7b1f488f
刘淇
封装下图片上传
|
556
|
rejectReason.value = '';
|
dacff5e3
刘淇
养护员退回
|
557
|
rejectImgs.clearImgs(); // 改造后:使用组合式函数的清空方法
|
7b1f488f
刘淇
封装下图片上传
|
558
|
};
|
dacff5e3
刘淇
养护员退回
|
559
|
|
7b1f488f
刘淇
封装下图片上传
|
560
561
|
// 确认回退工单
const confirmReject = async () => {
|
7a96cf50
刘淇
重新提交
|
562
563
564
|
// 严格校验回退原因(去除首尾空格)
const rejectReasonTrim = rejectReason.value.trim();
if (!rejectReasonTrim) {
|
2f1e3176
刘淇
图片参数处理
|
565
|
uni.showToast({title: '请填写回退原因', icon: 'none', duration: 1000});
|
7a96cf50
刘淇
重新提交
|
566
567
568
569
|
return;
}
// 校验当前工单有效性
if (!currentRejectItem.value || !currentRejectItem.value.id) {
|
2f1e3176
刘淇
图片参数处理
|
570
|
uni.showToast({title: '工单信息异常,无法提交', icon: 'none', duration:1000});
|
7a96cf50
刘淇
重新提交
|
571
|
rejectModalShow.value = false;
|
7b1f488f
刘淇
封装下图片上传
|
572
573
|
return;
}
|
7b1f488f
刘淇
封装下图片上传
|
574
|
try {
|
7a96cf50
刘淇
重新提交
|
575
576
|
// 显示加载中,防止重复提交
uni.showLoading({title: '提交中...', mask: true});
|
2e2b95d3
刘淇
修改接口路径 和命名
|
577
|
console.log( currentRejectItem.value.roadId)
|
7a96cf50
刘淇
重新提交
|
578
579
|
// 构建请求参数
const requestData = {
|
dacff5e3
刘淇
养护员退回
|
580
|
"returnImgs": rejectImgs.getSuccessImgUrls(), // 改造后:获取上传成功的图片URL数组
|
7a96cf50
刘淇
重新提交
|
581
582
583
584
585
|
"workerDataId": currentRejectItem.value.id,
"taskKey": currentRejectItem.value.taskKey,
"taskId": currentRejectItem.value.taskId,
"operateType": nextStepMap[currentRejectItem.value.taskKey].operateTypeNoPass,
"agree": 1,
|
2e2b95d3
刘淇
修改接口路径 和命名
|
586
587
|
"reason": rejectReasonTrim,
"roadId": currentRejectItem.value.roadId, // 给督察员回退的 要加上
|
7a96cf50
刘淇
重新提交
|
588
|
};
|
7b1f488f
刘淇
封装下图片上传
|
589
|
// 调用回退工单接口
|
7a96cf50
刘淇
重新提交
|
590
591
592
|
const res = await universalApproval(requestData);
uni.showToast({title: '回退成功', icon: 'success', duration: 1000});
rejectModalShow.value = false;
|
7b1f488f
刘淇
封装下图片上传
|
593
594
595
|
paging.value?.reload(); // 刷新列表
} catch (error) {
console.error('回退工单失败:', error);
|
4570c70a
刘淇
消息中心
|
596
|
uni.showToast({title: error.msg||'回退失败', icon: 'none', duration: 1000});
|
7a96cf50
刘淇
重新提交
|
597
598
599
|
} finally {
// 隐藏加载中
uni.hideLoading();
|
7b1f488f
刘淇
封装下图片上传
|
600
601
|
}
};
|
dacff5e3
刘淇
养护员退回
|
602
|
|
7b1f488f
刘淇
封装下图片上传
|
603
604
605
|
// 新增工单
const handleAddOrder = () => {
uni.navigateTo({
|
d433e7f6
刘淇
工单
|
606
|
url: '/pages-sub/problem/work-order-manage/add-order'
|
7b1f488f
刘淇
封装下图片上传
|
607
608
|
});
};
|
dacff5e3
刘淇
养护员退回
|
609
|
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
610
611
612
613
614
615
616
617
618
|
// 验收弹窗 - 取消按钮(清空状态)
const handleAcceptModalCancel = () => {
acceptModalShow.value = false;
acceptReason.value = ''; // 清空验收原因
acceptRadioValue.value = '0'; // 重置单选框为“通过”
acceptImgs.clearImgs(); // 清空验收图片
};
// 验收弹窗 - 确定按钮(含returnImgs传参)
|
1f1f236c
刘淇
工单详情
|
619
620
|
const handleAcceptModalConfirm = async () => {
// 1. 校验验收原因是否为空
|
5b5a4862
刘淇
按钮放大
|
621
|
if (acceptRadioValue.value == 1 && !acceptReason.value.trim()) {
|
2f1e3176
刘淇
图片参数处理
|
622
|
uni.showToast({title: '请填写验收原因', icon: 'none', duration: 1000});
|
1f1f236c
刘淇
工单详情
|
623
624
|
return;
}
|
7a96cf50
刘淇
重新提交
|
625
|
// 2. 校验验收原因长度
|
1f1f236c
刘淇
工单详情
|
626
|
if (acceptReason.value.length > 200) {
|
2f1e3176
刘淇
图片参数处理
|
627
|
uni.showToast({title: '验收原因最多200字', icon: 'none', duration: 1000});
|
1f1f236c
刘淇
工单详情
|
628
629
630
|
return;
}
try {
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
631
|
// 3. 构建请求参数(含returnImgs)
|
1f1f236c
刘淇
工单详情
|
632
633
|
console.log(currentAcceptItem.value)
let postData = {}
|
7a96cf50
刘淇
重新提交
|
634
|
if (currentAcceptItem.value?.taskKey == 'ylTeamLeaderConfirm') { // 养护组长验收
|
1f1f236c
刘淇
工单详情
|
635
|
postData = {
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
636
637
|
"returnImgs": acceptImgs.getSuccessImgUrls(), // 验收图片URL数组
"taskKey": currentAcceptItem.value.taskKey,
|
dacff5e3
刘淇
养护员退回
|
638
|
"workerDataId": currentAcceptItem.value.id,
|
1f1f236c
刘淇
工单详情
|
639
|
"taskId": currentAcceptItem.value.taskId,
|
4fa8cf12
刘淇
巡查员结束工单
|
640
|
"operateType": acceptRadioValue.value == 0 ? nextStepMap[currentAcceptItem.value.taskKey].operateTypePass : nextStepMap[currentAcceptItem.value.taskKey].operateTypeNoPass,
|
1f1f236c
刘淇
工单详情
|
641
642
643
|
"reason": acceptReason.value.trim()
}
}
|
7a96cf50
刘淇
重新提交
|
644
|
if (currentAcceptItem.value?.taskKey == 'ylInspector') { // 巡查员验收
|
1f1f236c
刘淇
工单详情
|
645
|
postData = {
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
646
647
|
"returnImgs": acceptImgs.getSuccessImgUrls(), // 验收图片URL数组
"taskKey": currentAcceptItem.value.taskKey,
|
1f1f236c
刘淇
工单详情
|
648
|
"taskId": currentAcceptItem.value.taskId,
|
dacff5e3
刘淇
养护员退回
|
649
|
"workerDataId": currentAcceptItem.value.id,
|
4fa8cf12
刘淇
巡查员结束工单
|
650
|
"operateType": acceptRadioValue.value == 0 ? nextStepMap[currentAcceptItem.value.taskKey].operateTypePass : nextStepMap[currentAcceptItem.value.taskKey].operateTypeNoPass,
|
1f1f236c
刘淇
工单详情
|
651
|
"reason": acceptReason.value.trim(),
|
7a96cf50
刘淇
重新提交
|
652
|
"agree": acceptRadioValue.value
|
1f1f236c
刘淇
工单详情
|
653
654
|
}
}
|
1f1f236c
刘淇
工单详情
|
655
656
|
const acceptRes = await universalApproval(postData);
// 4. 操作成功处理
|
2f1e3176
刘淇
图片参数处理
|
657
|
uni.showToast({title: '提交成功', icon: 'success', duration: 1000});
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
658
|
handleAcceptModalCancel(); // 清空状态
|
1f1f236c
刘淇
工单详情
|
659
660
661
|
paging.value?.reload(); // 刷新工单列表
} catch (error) {
// 5. 操作失败处理
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
662
|
console.error('验收失败:', error);
|
4570c70a
刘淇
消息中心
|
663
|
uni.showToast({title: error.msg||'验收提交失败,请重试', icon: 'none', duration: 1000});
|
1f1f236c
刘淇
工单详情
|
664
665
|
}
};
|
dacff5e3
刘淇
养护员退回
|
666
|
|
7b1f488f
刘淇
封装下图片上传
|
667
|
// 页面初始化
|
e6a04285
刘淇
单图情况 宽高70*70
|
668
|
onLoad(() => {
|
7b1f488f
刘淇
封装下图片上传
|
669
670
671
672
673
674
675
676
|
// 初始化加载列表
paging.value?.reload();
});
</script>
<style scoped lang="scss">
.page-container {
min-height: 100vh;
|
7a96cf50
刘淇
重新提交
|
677
|
background-color: #fafafa;
|
7b1f488f
刘淇
封装下图片上传
|
678
679
680
681
682
|
}
// 顶部固定区域
.header-wrap {
background-color: #fff;
|
7b1f488f
刘淇
封装下图片上传
|
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
|
}
// 搜索栏样式
.search-header {
display: flex;
align-items: center;
padding: 20rpx;
box-sizing: border-box;
.select-wrap {
width: 120rpx;
margin-right: 20rpx;
:deep(.u-select) {
width: 100%;
font-size: 28rpx;
}
:deep(.u-input__placeholder) {
font-size: 28rpx;
}
}
.search-input-wrap {
flex: 1;
}
}
|
7a96cf50
刘淇
重新提交
|
711
712
713
714
715
716
717
|
// 工单卡片样式
.order-card {
margin: 0 20rpx 20rpx;
background: #fff;
border-radius: 12rpx;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
}
|
5b5a4862
刘淇
按钮放大
|
718
719
720
|
.u-body-item-btn-wrap :deep(.u-button--large){
height: 28px;
}
|
7a96cf50
刘淇
重新提交
|
721
|
|
7a96cf50
刘淇
重新提交
|
722
|
|
7a96cf50
刘淇
重新提交
|
723
|
|
7a96cf50
刘淇
重新提交
|
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
|
// 回退modal样式
.reject-modal-content {
width: 100%;
box-sizing: border-box;
padding: 10rpx 0;
}
.textarea-label {
font-size: 28rpx;
color: #333;
margin-bottom: 10rpx;
.required-mark {
color: #f56c6c;
margin-left: 4rpx;
}
}
|
7a96cf50
刘淇
重新提交
|
742
743
744
745
746
747
748
749
750
751
752
753
754
755
|
.upload-wrap {
margin-top: 20rpx;
.upload-title {
font-size: 28rpx;
color: #333;
margin-bottom: 10rpx;
}
}
.mt-20 {
margin-top: 20rpx;
}
|
dfa5aac5
刘淇
验收加上 验收图片非必传
|
756
757
758
759
|
.mt-30 {
margin-top: 30rpx;
}
|
7a96cf50
刘淇
重新提交
|
760
|
// 养护组长验收弹窗样式
|
1f1f236c
刘淇
工单详情
|
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
|
.accept-modal-content {
width: 100%;
box-sizing: border-box;
}
.radio-group-wrap {
display: flex;
align-items: center;
gap: 40rpx; // 单选框之间的间距
font-size: 28rpx;
margin-bottom: 20rpx;
}
.textarea-wrap {
width: 100%;
|
7a96cf50
刘淇
重新提交
|
776
|
margin-top: 30rpx;
|
1f1f236c
刘淇
工单详情
|
777
|
}
|
7b1f488f
刘淇
封装下图片上传
|
778
|
|
1f1f236c
刘淇
工单详情
|
779
780
781
782
783
784
|
.modal-btn-wrap {
display: flex;
align-items: center;
justify-content: flex-end;
padding-right: 10rpx;
}
|
7b1f488f
刘淇
封装下图片上传
|
785
|
</style>
|