d433e7f6
刘淇
工单
|
1
|
<template>
|
c7df828a
刘淇
快速工单 样式优化
|
2
|
<view class="page-container">
|
5822009a
刘淇
工单管理--新增工单
|
3
|
<view class="work-order-form-content commonPageLRpadding">
|
6cc0ab0e
刘淇
养护任务
|
4
|
<up-form label-position="left" :model="workOrderForm" ref="workOrderFormRef" labelWidth="200rpx">
|
9441e28e
刘淇
考勤打卡
|
5
|
<!-- 业务线单选框 -->
|
6cc0ab0e
刘淇
养护任务
|
6
7
8
9
|
<up-form-item label="业务线" prop="busiLineCn" border-bottom required>
<up-radio-group v-model="workOrderForm.busiLineCn" placement="row" @change="handleBusiLineChange">
<up-radio v-for="item in busiLineOptions" :key="item.name" :label="item.name" :name="item.name"></up-radio>
</up-radio-group>
|
e6a04285
刘淇
单图情况 宽高70*70
|
10
|
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
11
|
<!-- 1. 工单位置(地图选择) -->
|
6cc0ab0e
刘淇
养护任务
|
12
13
14
15
|
<up-form-item label="工单位置" prop="workLocation" border-bottom required
@click="chooseWorkLocation(); hideKeyboard()">
<up-input v-model="workOrderForm.workLocation" border="none" readonly suffix-icon="map-fill"
placeholder="点击选择工单位置"></up-input>
|
fa775c6b
刘淇
养护计划调整
|
16
|
</up-form-item>
|
9441e28e
刘淇
考勤打卡
|
17
|
<!-- 2. 道路名称(下拉框action-sheet,保留不变) -->
|
6cc0ab0e
刘淇
养护任务
|
18
19
20
21
|
<up-form-item label="道路名称" prop="roadName" border-bottom required
@click="handleActionSheetOpen('roadName'); hideKeyboard()">
<up-input v-model="workOrderForm.roadName" readonly disabled-color="#ffffff" placeholder="请先选择工单位置"
border="none"></up-input>
|
fa775c6b
刘淇
养护计划调整
|
22
|
<template #right>
|
6cc0ab0e
刘淇
养护任务
|
23
|
<up-icon name="arrow-right" size="16"></up-icon>
|
fa775c6b
刘淇
养护计划调整
|
24
25
|
</template>
</up-form-item>
|
9441e28e
刘淇
考勤打卡
|
26
27
|
<!-- 3. 问题类型 级联选择器【对齐参考页面】 -->
<up-form-item label="问题类型" prop="orderName" border-bottom required @click="openCascader(); hideKeyboard()">
|
6cc0ab0e
刘淇
养护任务
|
28
29
|
<up-input v-model="workOrderForm.orderName" disabled disabled-color="#ffffff" placeholder="请选择问题类型"
border="none"></up-input>
|
fa775c6b
刘淇
养护计划调整
|
30
31
32
|
<template #right>
<up-icon name="arrow-right" size="16"></up-icon>
</template>
|
5822009a
刘淇
工单管理--新增工单
|
33
|
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
34
|
<!-- 新增:紧急程度选择 -->
|
6cc0ab0e
刘淇
养护任务
|
35
36
37
38
|
<up-form-item label="紧急程度" prop="pressingTypeName" border-bottom required
@click="handleActionSheetOpen('pressingType'); hideKeyboard()">
<up-input v-model="workOrderForm.pressingTypeName" disabled disabled-color="#ffffff" placeholder="请选择紧急程度"
border="none"></up-input>
|
5822009a
刘淇
工单管理--新增工单
|
39
40
41
42
|
<template #right>
<up-icon name="arrow-right" size="16"></up-icon>
</template>
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
43
|
<!-- 4. 情况描述(文本域) -->
|
6cc0ab0e
刘淇
养护任务
|
44
45
|
<up-form-item label="情况描述" prop="problemDesc" required>
<up-textarea placeholder="请输入情况描述(最多200字)" v-model.trim="workOrderForm.problemDesc" count maxlength="200"
|
9441e28e
刘淇
考勤打卡
|
46
|
rows="4" @blur="() => workOrderFormRef.value?.validateField('problemDesc')"></up-textarea>
|
5822009a
刘淇
工单管理--新增工单
|
47
|
</up-form-item>
|
9441e28e
刘淇
考勤打卡
|
48
|
<!-- 问题照片 -->
|
e6a04285
刘淇
单图情况 宽高70*70
|
49
|
<up-form-item label="问题照片" prop="problemImgs" border-bottom required>
|
6cc0ab0e
刘淇
养护任务
|
50
51
52
53
|
<up-upload :file-list="problemImgs.imgList.value || []" @after-read="problemImgs.uploadImgs"
@delete="problemImgs.deleteImg" multiple :width="70" :height="70"
:max-count="problemImgs.uploadConfig.maxCount" :upload-text="problemImgs.uploadConfig.uploadText"
:size-type="problemImgs.uploadConfig.sizeType"></up-upload>
|
fa775c6b
刘淇
养护计划调整
|
54
|
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
55
|
<!-- 完成时间 -->
|
6cc0ab0e
刘淇
养护任务
|
56
57
|
<up-form-item label="希望完成时间" prop="expectedFinishDate" @click="show = true; hideKeyboard()">
<up-input v-model="workOrderForm.expectedFinishDate" border="none" readonly placeholder="点击选择时间"></up-input>
|
fa775c6b
刘淇
养护计划调整
|
58
|
<template #right>
|
e6a04285
刘淇
单图情况 宽高70*70
|
59
|
<view v-if="workOrderForm.expectedFinishDate" @click.stop>
|
6cc0ab0e
刘淇
养护任务
|
60
|
<up-icon name="close" size="20" @click.stop="clearExpectedFinishDate"></up-icon>
|
e6a04285
刘淇
单图情况 宽高70*70
|
61
62
|
</view>
<up-icon name="arrow-right" size="16" v-else></up-icon>
|
fa775c6b
刘淇
养护计划调整
|
63
64
|
</template>
</up-form-item>
|
9441e28e
刘淇
考勤打卡
|
65
66
67
68
69
70
71
72
73
74
75
76
77
|
<!-- 重点巡检区域 -->
<up-form-item label="重点巡检区域" prop="keyInspection" border-bottom required>
<up-radio-group v-model="workOrderForm.keyInspection" @change="groupChange">
<up-radio
:customStyle="{marginBottom: '8px'}"
v-for="(item, index) in keyInspectionOptions"
:key="index"
:label="item.name"
:name="item.name"
>
</up-radio>
</up-radio-group>
</up-form-item>
|
5822009a
刘淇
工单管理--新增工单
|
78
79
|
</up-form>
</view>
|
5822009a
刘淇
工单管理--新增工单
|
80
81
|
<!-- 底部提交按钮 -->
<view class="fixed-bottom-btn-wrap">
|
6cc0ab0e
刘淇
养护任务
|
82
|
<up-button type="primary" text="提交工单" @click="submitWorkOrder"></up-button>
|
5822009a
刘淇
工单管理--新增工单
|
83
|
</view>
|
9441e28e
刘淇
考勤打卡
|
84
|
<!-- 通用下拉弹窗:道路名称、紧急程度保留 -->
|
6cc0ab0e
刘淇
养护任务
|
85
86
87
|
<up-action-sheet :show="showActionSheet" :actions="currentActionSheetData.list"
:title="currentActionSheetData.title" @close="handleActionSheetClose"
@select="handleActionSheetSelect"></up-action-sheet>
|
9441e28e
刘淇
考勤打卡
|
88
89
90
91
92
93
94
95
96
|
<!-- 级联选择器 up-cascader【对齐参考页面写法】 -->
<up-cascader
v-model:show="showCascader"
v-model="cascaderValue"
:data="cascaderOptions"
title="选择问题类型"
:auto-close="false"
@confirm="cascaderConfirm"
></up-cascader>
|
fa775c6b
刘淇
养护计划调整
|
97
|
<!-- 完成时间选择器 -->
|
6cc0ab0e
刘淇
养护任务
|
98
99
|
<up-datetime-picker :show="show" v-model="expectedFinishDate" mode="datetime" :min-date="new Date()"
@cancel="show = false" @confirm="expectedFinishDateConfirm"></up-datetime-picker>
|
5822009a
刘淇
工单管理--新增工单
|
100
101
|
</view>
</template>
|
d433e7f6
刘淇
工单
|
102
|
|
c7df828a
刘淇
快速工单 样式优化
|
103
|
<script setup>
|
e6a04285
刘淇
单图情况 宽高70*70
|
104
|
import { ref, reactive } from 'vue'
|
7a96cf50
刘淇
重新提交
|
105
|
import { onReady, onShow, onLoad } from '@dcloudio/uni-app';
|
e6a04285
刘淇
单图情况 宽高70*70
|
106
|
import { useUploadImgs } from '@/common/utils/useUploadImgs'
|
9441e28e
刘淇
考勤打卡
|
107
|
import { getRoadListByLatLng, getProblemListByType } from '@/api/common'
|
7a96cf50
刘淇
重新提交
|
108
|
import { universalApproval, workorderCreate } from '@/api/work-order-manage/work-order-manage'
|
fa775c6b
刘淇
养护计划调整
|
109
|
import { timeFormat } from '@/uni_modules/uview-plus'
|
5059c4dd
刘淇
养护员提交养护工单
|
110
|
import { nextStepMap } from '@/common/utils/common'
|
e6a04285
刘淇
单图情况 宽高70*70
|
111
|
import { useUserStore } from '@/pinia/user';
|
71518877
王彪总
业务线 小程序不用写死,从后端接口获取
|
112
|
import { getDictLabel, getDictValue } from '@/common/utils/dict';
|
e6a04285
刘淇
单图情况 宽高70*70
|
113
|
const userStore = useUserStore();
|
71518877
王彪总
业务线 小程序不用写死,从后端接口获取
|
114
|
const BUSI_LINE_DICT_TYPE = 'business_line';
|
71518877
王彪总
业务线 小程序不用写死,从后端接口获取
|
115
|
const CJK_RE = /[一-龥]/;
|
e6a04285
刘淇
单图情况 宽高70*70
|
116
|
const busiLineOptions = ref([]);
|
e6a04285
刘淇
单图情况 宽高70*70
|
117
118
119
120
121
|
const formatBusiLineOptions = () => {
if (!userStore.userInfo?.user?.busiLine) {
busiLineOptions.value = [];
return;
}
|
9441e28e
刘淇
考勤打卡
|
122
|
const rawBusiLines = userStore.userInfo.user.busiLine.split(',');
|
e6a04285
刘淇
单图情况 宽高70*70
|
123
|
busiLineOptions.value = rawBusiLines.map(item => ({
|
9441e28e
刘淇
考勤打卡
|
124
|
name: getBusiLineCnByEn(item.trim())
|
e6a04285
刘淇
单图情况 宽高70*70
|
125
|
}));
|
e6a04285
刘淇
单图情况 宽高70*70
|
126
|
};
|
3c3d6799
刘淇
重点巡检区域
|
127
|
const keyInspectionOptions = reactive([
|
9441e28e
刘淇
考勤打卡
|
128
129
|
{ name: '否', disabled: false },
{ name: '是', disabled: false },
|
3c3d6799
刘淇
重点巡检区域
|
130
|
]);
|
3c3d6799
刘淇
重点巡检区域
|
131
132
133
|
const groupChange = (n) => {
console.log('groupChange', n);
};
|
71518877
王彪总
业务线 小程序不用写死,从后端接口获取
|
134
135
136
137
|
const getBusiLineCnByEn = (busiLineEn) => {
if (!busiLineEn) return '';
return getDictLabel(BUSI_LINE_DICT_TYPE, busiLineEn) || busiLineEn;
};
|
e6a04285
刘淇
单图情况 宽高70*70
|
138
|
const getBusiLineEnByCn = (cnName) => {
|
71518877
王彪总
业务线 小程序不用写死,从后端接口获取
|
139
140
141
142
|
if (!cnName) return '';
const code = getDictValue(BUSI_LINE_DICT_TYPE, cnName);
if (code) return code;
return CJK_RE.test(cnName) ? '' : cnName;
|
e6a04285
刘淇
单图情况 宽高70*70
|
143
|
};
|
7a96cf50
刘淇
重新提交
|
144
|
|
9441e28e
刘淇
考勤打卡
|
145
146
147
148
|
// ========== 级联选择器变量(和参考页面对齐) ==========
const showCascader = ref(false);
const cascaderValue = ref([]);
const cascaderOptions = ref([]);
|
fa775c6b
刘淇
养护计划调整
|
149
|
|
9441e28e
刘淇
考勤打卡
|
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
|
// 打开级联弹窗
const openCascader = () => {
console.log('312321dasd')
const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn)
if (!busiLineEn) {
uni.showToast({ title: '请先选择业务线', icon: 'none' })
return
}
if (!cascaderOptions.value || cascaderOptions.value.length === 0) {
uni.showToast({ title: '正在加载问题类型,请稍等', icon: 'none' });
loadProblemCascader(busiLineEn);
return;
}
cascaderValue.value = [];
showCascader.value = true;
};
/**
* 级联【确认回调】,选中后点确定才赋值,和参考页面保持一致
*/
const cascaderConfirm = (selectedArr) => {
console.log('最终选中值数组:', selectedArr);
// 递归拼接多级label,用 / 分隔
const getLabelByValueList = (list, valList) => {
const labelArr = [];
let currentList = list;
for (const val of valList) {
const target = currentList.find(item => item.value === val);
if (!target) break;
labelArr.push(target.label);
currentList = target.children || [];
}
return labelArr.join('/');
};
const fullLabel = getLabelByValueList(cascaderOptions.value, selectedArr);
workOrderForm.orderName = fullLabel;
workOrderForm.orderCode = selectedArr.at(-1);
cascaderValue.value = selectedArr;
workOrderFormRef.value?.validateField('orderName');
};
/**
* 加载级联树形数据
*/
const loadProblemCascader = async (parentCode) => {
if (!parentCode) {
cascaderOptions.value = []
return
}
try {
uni.showLoading({ title: '加载类型中...' })
const res = await getProblemListByType({ parentCode })
uni.hideLoading()
cascaderOptions.value = res || []
} catch (err) {
uni.hideLoading()
console.error('获取问题类型失败', err)
uni.showToast({ title: '获取问题类型失败', icon: 'none' })
cascaderOptions.value = []
}
}
// 表单Ref
const workOrderFormRef = ref(null)
|
fa775c6b
刘淇
养护计划调整
|
214
215
216
217
218
219
220
|
const problemImgs = useUploadImgs({
maxCount: 3,
uploadText: '选择问题照片',
sizeType: ['compressed'],
formRef: workOrderFormRef,
fieldName: 'problemImgs'
})
|
4c54ad5d
刘淇
转工单 选择是 传紧急程度和...
|
221
222
223
|
if (!Array.isArray(problemImgs.rawImgList.value)) {
problemImgs.rawImgList.value = [];
}
|
c7df828a
刘淇
快速工单 样式优化
|
224
|
const showActionSheet = ref(false)
|
c7df828a
刘淇
快速工单 样式优化
|
225
226
227
228
229
|
const currentActionSheetData = reactive({
type: '',
list: [],
title: ''
})
|
fa775c6b
刘淇
养护计划调整
|
230
|
const show = ref(false)
|
2f1e3176
刘淇
图片参数处理
|
231
|
const expectedFinishDate = ref(Date.now())
|
9441e28e
刘淇
考勤打卡
|
232
233
|
const isRenew = ref(false);
const renewOrderData = ref(null);
|
fa775c6b
刘淇
养护计划调整
|
234
|
const roadNameList = ref([])
|
fa775c6b
刘淇
养护计划调整
|
235
236
|
const pressingTypeList = ref([])
|
9441e28e
刘淇
考勤打卡
|
237
|
// ========== 表单数据 ==========
|
c7df828a
刘淇
快速工单 样式优化
|
238
|
const workOrderForm = reactive({
|
9441e28e
刘淇
考勤打卡
|
239
240
241
242
243
244
245
246
247
248
249
250
|
busiLineCn: '',
roadId: 0,
roadName: '',
workLocation: '',
orderName: '',
orderCode: '',
pressingType: '',
pressingTypeName: '',
problemDesc: '',
lat: 0,
lon: 0,
expectedFinishDate: '',
|
3c3d6799
刘淇
重点巡检区域
|
251
|
keyInspection: '否'
|
c7df828a
刘淇
快速工单 样式优化
|
252
|
})
|
9441e28e
刘淇
考勤打卡
|
253
|
// 表单校验规则:prop改成 orderName,对齐参考页面
|
c7df828a
刘淇
快速工单 样式优化
|
254
|
const workOrderFormRules = reactive({
|
9441e28e
刘淇
考勤打卡
|
255
|
busiLineCn: [
|
e6a04285
刘淇
单图情况 宽高70*70
|
256
257
|
{ type: 'string', required: true, message: '请选择业务线', trigger: ['change', 'blur'] }
],
|
fa775c6b
刘淇
养护计划调整
|
258
259
|
workLocation: [
{ type: 'string', required: true, message: '请选择工单位置', trigger: ['change', 'blur'] }
|
c7df828a
刘淇
快速工单 样式优化
|
260
|
],
|
fa775c6b
刘淇
养护计划调整
|
261
262
263
264
|
roadName: [
{ type: 'string', required: true, message: '请选择道路名称', trigger: ['change', 'blur'] }
],
orderName: [
|
9441e28e
刘淇
考勤打卡
|
265
|
{ type: 'string', required: true, message: '请选择问题类型', trigger: 'change' }
|
fa775c6b
刘淇
养护计划调整
|
266
267
268
269
270
271
272
273
|
],
pressingTypeName: [
{ type: 'string', required: true, message: '请选择紧急程度', trigger: ['change'] }
],
problemDesc: [
{ type: 'string', required: true, message: '请输入情况描述', trigger: ['change', 'blur'] },
{ type: 'string', min: 3, max: 200, message: '情况描述需3-200字', trigger: ['change', 'blur'] }
],
|
9441e28e
刘淇
考勤打卡
|
274
|
problemImgs: [problemImgs.imgValidateRule]
|
c7df828a
刘淇
快速工单 样式优化
|
275
|
})
|
2764b83e
刘淇
分配养护员
|
276
|
|
7a96cf50
刘淇
重新提交
|
277
|
onLoad((options) => {
|
e6a04285
刘淇
单图情况 宽高70*70
|
278
|
formatBusiLineOptions();
|
e6a04285
刘淇
单图情况 宽高70*70
|
279
280
|
if (busiLineOptions.value.length > 0) {
workOrderForm.busiLineCn = busiLineOptions.value[0].name;
|
9441e28e
刘淇
考勤打卡
|
281
282
|
const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn)
loadProblemCascader(busiLineEn)
|
e6a04285
刘淇
单图情况 宽高70*70
|
283
|
}
|
7a96cf50
刘淇
重新提交
|
284
|
console.log(options)
|
e6a04285
刘淇
单图情况 宽高70*70
|
285
|
if (options.isRenew == 1 && options.tempKey) {
|
7a96cf50
刘淇
重新提交
|
286
287
|
isRenew.value = true;
const tempKey = options.tempKey;
|
7a96cf50
刘淇
重新提交
|
288
289
290
291
|
try {
const orderData = uni.getStorageSync(tempKey);
if (orderData && typeof orderData === 'object') {
renewOrderData.value = orderData;
|
7a96cf50
刘淇
重新提交
|
292
293
294
|
echoOrderData(renewOrderData.value);
} else {
uni.showToast({ title: '工单数据不存在,无法重新提交', icon: 'none' });
|
7a96cf50
刘淇
重新提交
|
295
296
297
298
299
300
301
302
303
|
setTimeout(() => uni.navigateBack(), 1000);
return;
}
} catch (error) {
console.error('读取工单数据失败:', error);
uni.showToast({ title: '数据读取异常,无法重新提交', icon: 'none' });
setTimeout(() => uni.navigateBack(), 1000);
return;
} finally {
|
7a96cf50
刘淇
重新提交
|
304
305
306
307
|
uni.removeStorageSync(tempKey);
}
}
});
|
c7df828a
刘淇
快速工单 样式优化
|
308
|
onReady(() => {
|
c7df828a
刘淇
快速工单 样式优化
|
309
310
311
|
if (workOrderFormRef.value) {
workOrderFormRef.value.setRules(workOrderFormRules)
}
|
fa775c6b
刘淇
养护计划调整
|
312
|
console.log('工单表单规则初始化完成')
|
c7df828a
刘淇
快速工单 样式优化
|
313
|
})
|
c7df828a
刘淇
快速工单 样式优化
|
314
|
onShow(() => {
|
fa775c6b
刘淇
养护计划调整
|
315
316
|
pressingTypeList.value = uni.$dict.transformLabelValueToNameValue(uni.$dict.getDictSimpleList('workorder_pressing_type'))
console.log('紧急程度列表:', pressingTypeList.value)
|
c7df828a
刘淇
快速工单 样式优化
|
317
|
})
|
fa775c6b
刘淇
养护计划调整
|
318
|
|
9441e28e
刘淇
考勤打卡
|
319
320
321
322
323
|
// 回显工单数据【重点对齐参考页面的递归查找级联路径】
const echoOrderData = async (orderItem) => {
const busiCode = orderItem.busiLine || '';
if (busiCode) {
workOrderForm.busiLineCn = getBusiLineCnByEn(busiCode);
|
e6a04285
刘淇
单图情况 宽高70*70
|
324
|
}
|
7a96cf50
刘淇
重新提交
|
325
326
327
328
|
workOrderForm.roadId = orderItem.roadId || 0;
workOrderForm.roadName = orderItem.roadName || '';
workOrderForm.workLocation = orderItem.lonLatAddress || orderItem.roadName || '';
workOrderForm.orderName = orderItem.orderName || '';
|
9441e28e
刘淇
考勤打卡
|
329
|
workOrderForm.orderCode = orderItem.orderCode || '';
|
7a96cf50
刘淇
重新提交
|
330
331
332
333
334
|
workOrderForm.pressingType = orderItem.pressingType || '';
workOrderForm.pressingTypeName = uni.$dict.getDictLabel('workorder_pressing_type', orderItem.pressingType) || '';
workOrderForm.problemDesc = orderItem.remark || '';
workOrderForm.lat = orderItem.lat || 0;
workOrderForm.lon = orderItem.lon || 0;
|
6cc0ab0e
刘淇
养护任务
|
335
|
workOrderForm.expectedFinishDate = orderItem.expectedFinishDate ? timeFormat(orderItem.expectedFinishDate, 'yyyy-mm-dd hh:MM:ss') : '';
|
9441e28e
刘淇
考勤打卡
|
336
337
338
|
if (orderItem.keyInspection !== undefined) {
workOrderForm.keyInspection = orderItem.keyInspection === 1 ? '是' : '否'
}
|
7a96cf50
刘淇
重新提交
|
339
340
341
342
|
if (orderItem.problemsImgs && Array.isArray(orderItem.problemsImgs) && orderItem.problemsImgs.length > 0) {
const imgList = orderItem.problemsImgs.map((imgUrl, index) => ({
url: imgUrl,
name: `renew_img_${index}`,
|
9441e28e
刘淇
考勤打卡
|
343
|
status: 'success'
|
7a96cf50
刘淇
重新提交
|
344
|
}));
|
4c54ad5d
刘淇
转工单 选择是 传紧急程度和...
|
345
|
problemImgs.imgList.value = imgList;
|
7a96cf50
刘淇
重新提交
|
346
347
348
|
problemImgs.rawImgList.value = imgList;
}
|
9441e28e
刘淇
考勤打卡
|
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
|
// ========= 回显核心:加载级联树,递归找到选中路径,赋值 cascaderValue =========
if (busiCode) {
await loadProblemCascader(busiCode);
const targetCode = orderItem.orderCode
if (targetCode && cascaderOptions.value.length) {
const findCascaderPath = (list, targetVal, path = []) => {
for (const node of list) {
const newPath = [...path, node.value]
if (node.value === targetVal) {
return newPath
}
if (node.children && node.children.length) {
const res = findCascaderPath(node.children, targetVal, newPath)
if (res) return res
}
}
return null
}
const selectPath = findCascaderPath(cascaderOptions.value, targetCode)
if (selectPath) {
cascaderValue.value = selectPath
}
}
}
|
7a96cf50
刘淇
重新提交
|
374
|
if (orderItem.lat && orderItem.lon) {
|
9441e28e
刘淇
考勤打卡
|
375
|
getRoadListByBusiLine();
|
7a96cf50
刘淇
重新提交
|
376
377
378
|
}
};
|
e6a04285
刘淇
单图情况 宽高70*70
|
379
|
/**
|
9441e28e
刘淇
考勤打卡
|
380
|
* 业务线切换:清空道路、问题类型级联数据,重新加载级联树
|
e6a04285
刘淇
单图情况 宽高70*70
|
381
382
|
*/
const handleBusiLineChange = () => {
|
9441e28e
刘淇
考勤打卡
|
383
|
// 清空道路
|
e6a04285
刘淇
单图情况 宽高70*70
|
384
385
|
workOrderForm.roadName = '';
workOrderForm.roadId = 0;
|
e6a04285
刘淇
单图情况 宽高70*70
|
386
|
roadNameList.value = [];
|
9441e28e
刘淇
考勤打卡
|
387
388
389
390
391
392
393
|
// 清空问题类型
workOrderForm.orderName = ''
workOrderForm.orderCode = ''
cascaderValue.value = []
cascaderOptions.value = []
const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn)
loadProblemCascader(busiLineEn)
|
e6a04285
刘淇
单图情况 宽高70*70
|
394
395
396
397
398
|
if (workOrderForm.workLocation) {
getRoadListByBusiLine();
}
};
|
e6a04285
刘淇
单图情况 宽高70*70
|
399
400
401
402
|
const getRoadListByBusiLine = async () => {
if (!workOrderForm.lat || !workOrderForm.lon) {
return;
}
|
e6a04285
刘淇
单图情况 宽高70*70
|
403
404
405
406
407
|
const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn);
if (!busiLineEn) {
uni.showToast({ title: '业务线标识异常', icon: 'none' });
return;
}
|
e6a04285
刘淇
单图情况 宽高70*70
|
408
409
410
|
try {
uni.showLoading({ title: '获取道路名称中...' });
const roadRes = await getRoadListByLatLng({
|
9441e28e
刘淇
考勤打卡
|
411
|
busiLine: busiLineEn,
|
e6a04285
刘淇
单图情况 宽高70*70
|
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
|
latitude: workOrderForm.lat,
longitude: workOrderForm.lon
});
uni.hideLoading();
if (Array.isArray(roadRes)) {
roadNameList.value = roadRes.map((item) => ({
name: item.roadName || '',
code: item.roadCode || '',
id: item.roadId || 0
}));
} else {
roadNameList.value = [{ name: '未查询到道路名称', code: '', id: 0 }];
uni.showToast({ title: '未查询到该位置的道路信息', icon: 'none' });
}
} catch (err) {
uni.hideLoading();
console.error('获取道路名称失败:', err);
uni.showToast({ title: '获取道路名称失败,请重试', icon: 'none' });
roadNameList.value = [{ name: '获取失败,请重新选择位置', code: '', id: 0 }];
}
};
|
9441e28e
刘淇
考勤打卡
|
434
|
// 通用action-sheet方法
|
c7df828a
刘淇
快速工单 样式优化
|
435
|
const handleActionSheetOpen = (type) => {
|
fa775c6b
刘淇
养护计划调整
|
436
437
|
if (type === 'roadName' && !workOrderForm.workLocation) {
uni.showToast({ title: '请先选择工单位置', icon: 'none' })
|
c7df828a
刘淇
快速工单 样式优化
|
438
439
|
return
}
|
c7df828a
刘淇
快速工单 样式优化
|
440
|
const configMap = {
|
fa775c6b
刘淇
养护计划调整
|
441
442
443
444
|
roadName: {
title: '请选择道路名称',
list: roadNameList.value
},
|
fa775c6b
刘淇
养护计划调整
|
445
446
447
|
pressingType: {
title: '请选择紧急程度',
list: pressingTypeList.value
|
d433e7f6
刘淇
工单
|
448
|
}
|
c7df828a
刘淇
快速工单 样式优化
|
449
|
}
|
c7df828a
刘淇
快速工单 样式优化
|
450
451
452
453
454
|
currentActionSheetData.type = type
currentActionSheetData.title = configMap[type].title
currentActionSheetData.list = configMap[type].list
showActionSheet.value = true
}
|
c7df828a
刘淇
快速工单 样式优化
|
455
456
|
const handleActionSheetClose = () => {
showActionSheet.value = false
|
c7df828a
刘淇
快速工单 样式优化
|
457
458
459
460
|
currentActionSheetData.type = ''
currentActionSheetData.list = []
currentActionSheetData.title = ''
}
|
c7df828a
刘淇
快速工单 样式优化
|
461
|
const handleActionSheetSelect = (e) => {
|
fa775c6b
刘淇
养护计划调整
|
462
|
const { type } = currentActionSheetData
|
fa775c6b
刘淇
养护计划调整
|
463
464
465
466
467
468
|
switch (type) {
case 'roadName':
workOrderForm.roadName = e.name
workOrderForm.roadId = e.code
workOrderFormRef.value?.validateField('roadName')
break
|
fa775c6b
刘淇
养护计划调整
|
469
|
case 'pressingType':
|
7a96cf50
刘淇
重新提交
|
470
|
workOrderForm.pressingType = e.value
|
fa775c6b
刘淇
养护计划调整
|
471
|
workOrderForm.pressingTypeName = e.name
|
7a96cf50
刘淇
重新提交
|
472
|
workOrderFormRef.value?.validateField('pressingTypeName')
|
fa775c6b
刘淇
养护计划调整
|
473
|
break
|
c7df828a
刘淇
快速工单 样式优化
|
474
|
}
|
c7df828a
刘淇
快速工单 样式优化
|
475
476
|
showActionSheet.value = false
}
|
fa775c6b
刘淇
养护计划调整
|
477
|
|
fa775c6b
刘淇
养护计划调整
|
478
|
const navigateBack = () => {
|
e6a04285
刘淇
单图情况 宽高70*70
|
479
|
uni.reLaunch({
|
9441e28e
刘淇
考勤打卡
|
480
|
url: '/pages-sub/problem/work-order-manage/index',
|
e6a04285
刘淇
单图情况 宽高70*70
|
481
|
fail: () => {
|
e6a04285
刘淇
单图情况 宽高70*70
|
482
483
484
485
|
uni.navigateBack({ delta: 2 });
}
});
}
|
6cc0ab0e
刘淇
养护任务
|
486
|
const clearExpectedFinishDate = () => {
|
e6a04285
刘淇
单图情况 宽高70*70
|
487
|
workOrderForm.expectedFinishDate = ''
|
fa775c6b
刘淇
养护计划调整
|
488
|
}
|
fa775c6b
刘淇
养护计划调整
|
489
490
491
492
493
494
|
const chooseWorkLocation = () => {
uni.chooseLocation({
success: async (res) => {
workOrderForm.roadName = ''
workOrderForm.roadId = 0
roadNameList.value = []
|
fa775c6b
刘淇
养护计划调整
|
495
496
497
|
workOrderForm.workLocation = res.name
workOrderForm.lat = res.latitude
workOrderForm.lon = res.longitude
|
fa775c6b
刘淇
养护计划调整
|
498
499
|
workOrderFormRef.value?.validateField('workLocation')
workOrderFormRef.value?.validateField('roadName')
|
e6a04285
刘淇
单图情况 宽高70*70
|
500
|
await getRoadListByBusiLine();
|
fa775c6b
刘淇
养护计划调整
|
501
502
503
504
505
506
507
|
},
fail: (err) => {
console.error('选择位置失败:', err)
uni.showToast({ title: '选择位置失败:' + err.errMsg, icon: 'none' })
}
})
}
|
2f1e3176
刘淇
图片参数处理
|
508
|
const expectedFinishDateConfirm = (e) => {
|
fa775c6b
刘淇
养护计划调整
|
509
|
console.log('选择的完成时间:', e)
|
2f1e3176
刘淇
图片参数处理
|
510
|
workOrderForm.expectedFinishDate = timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
|
fa775c6b
刘淇
养护计划调整
|
511
512
|
show.value = false
}
|
c7df828a
刘淇
快速工单 样式优化
|
513
514
515
|
const hideKeyboard = () => {
uni.hideKeyboard()
}
|
fa775c6b
刘淇
养护计划调整
|
516
|
|
c7df828a
刘淇
快速工单 样式优化
|
517
518
|
const submitWorkOrder = async () => {
try {
|
c7df828a
刘淇
快速工单 样式优化
|
519
|
await workOrderFormRef.value.validate()
|
e6a04285
刘淇
单图情况 宽高70*70
|
520
521
522
523
524
|
const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn);
if (!busiLineEn) {
uni.showToast({ title: '业务线选择异常,请重新选择', icon: 'none' });
return;
}
|
3c3d6799
刘淇
重点巡检区域
|
525
|
const keyInspectionVal = workOrderForm.keyInspection === '是' ? 1 : 0
|
7a96cf50
刘淇
重新提交
|
526
|
const commonSubmitData = {
|
fa775c6b
刘淇
养护计划调整
|
527
528
|
roadId: workOrderForm.roadId,
roadName: workOrderForm.roadName,
|
9441e28e
刘淇
考勤打卡
|
529
|
problemsImgs: problemImgs.getSuccessImgUrls(),
|
fa775c6b
刘淇
养护计划调整
|
530
531
532
533
534
535
536
|
remark: workOrderForm.problemDesc.trim(),
latLonType: 2,
lat: workOrderForm.lat,
lon: workOrderForm.lon,
lonLatAddress: workOrderForm.workLocation,
pressingType: workOrderForm.pressingType,
orderName: workOrderForm.orderName,
|
9441e28e
刘淇
考勤打卡
|
537
|
orderCode: workOrderForm.orderCode,
|
3c3d6799
刘淇
重点巡检区域
|
538
|
keyInspection: keyInspectionVal,
|
6cc0ab0e
刘淇
养护任务
|
539
|
expectedFinishDate: workOrderForm.expectedFinishDate == "" ? "" : new Date(workOrderForm.expectedFinishDate).getTime(),
|
fa775c6b
刘淇
养护计划调整
|
540
|
sourceId: 1,
|
9441e28e
刘淇
考勤打卡
|
541
542
|
sourceName: workOrderForm.busiLineCn,
busiLine: busiLineEn
|
c7df828a
刘淇
快速工单 样式优化
|
543
|
}
|
34d239d6
刘淇
全域巡查员
|
544
|
console.log(commonSubmitData)
|
fa775c6b
刘淇
养护计划调整
|
545
|
uni.showLoading({ title: '提交中...' })
|
7a96cf50
刘淇
重新提交
|
546
|
let res
|
7a96cf50
刘淇
重新提交
|
547
|
if (isRenew.value) {
|
7a96cf50
刘淇
重新提交
|
548
|
const renewSubmitData = {
|
7a96cf50
刘淇
重新提交
|
549
550
551
552
553
|
workerDataId: renewOrderData.value.id,
taskKey: renewOrderData.value.taskKey,
taskId: renewOrderData.value.taskId,
operateType: nextStepMap[renewOrderData.value.taskKey]?.operateTypeRenew || '',
agree: 0,
|
34d239d6
刘淇
全域巡查员
|
554
|
reason: workOrderForm.problemDesc.trim(),
|
7a96cf50
刘淇
重新提交
|
555
556
557
558
|
...commonSubmitData
}
res = await universalApproval(renewSubmitData)
} else {
|
7a96cf50
刘淇
重新提交
|
559
560
|
res = await workorderCreate(commonSubmitData)
}
|
c7df828a
刘淇
快速工单 样式优化
|
561
562
|
uni.hideLoading()
uni.showToast({
|
7a96cf50
刘淇
重新提交
|
563
|
title: isRenew.value ? '重新提交成功' : '工单提交成功',
|
c7df828a
刘淇
快速工单 样式优化
|
564
565
566
|
icon: 'success',
duration: 1000
})
|
c7df828a
刘淇
快速工单 样式优化
|
567
|
setTimeout(() => {
|
4fa8cf12
刘淇
巡查员结束工单
|
568
|
uni.reLaunch({
|
fa775c6b
刘淇
养护计划调整
|
569
|
url: '/pages-sub/problem/work-order-manage/index'
|
c7df828a
刘淇
快速工单 样式优化
|
570
571
572
|
})
}, 1000)
} catch (error) {
|
c7df828a
刘淇
快速工单 样式优化
|
573
|
uni.hideLoading()
|
c7df828a
刘淇
快速工单 样式优化
|
574
|
if (!Array.isArray(error)) {
|
7a96cf50
刘淇
重新提交
|
575
|
console.error(isRenew.value ? '工单重新提交失败:' : '工单提交失败:', error)
|
c7df828a
刘淇
快速工单 样式优化
|
576
|
uni.showToast({
|
9441e28e
刘淇
考勤打卡
|
577
|
title: error.msg || '请求异常',
|
c7df828a
刘淇
快速工单 样式优化
|
578
579
580
|
icon: 'none',
duration: 2000
})
|
d433e7f6
刘淇
工单
|
581
582
|
}
}
|
d433e7f6
刘淇
工单
|
583
|
}
|
5822009a
刘淇
工单管理--新增工单
|
584
|
</script>
|
d433e7f6
刘淇
工单
|
585
|
|
5822009a
刘淇
工单管理--新增工单
|
586
|
<style lang="scss" scoped>
|
c7df828a
刘淇
快速工单 样式优化
|
587
|
.page-container {
|
fa775c6b
刘淇
养护计划调整
|
588
|
min-height: 100vh;
|
9441e28e
刘淇
考勤打卡
|
589
|
padding-bottom: 100rpx;
|
d433e7f6
刘淇
工单
|
590
|
}
|
5822009a
刘淇
工单管理--新增工单
|
591
592
|
.work-order-form-content {
background: #fff;
|
d433e7f6
刘淇
工单
|
593
|
}
|
9441e28e
刘淇
考勤打卡
|
594
|
</style>
|