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