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">
|
e6a04285
刘淇
单图情况 宽高70*70
|
5
|
<!-- 业务线单选框:移入form内,作为第一个表单项(核心调整) -->
|
3cbb8754
刘淇
动态字典
|
6
7
8
9
|
<up-form-item label="业务线" prop="busiLine" border-bottom required>
<up-radio-group v-model="busiLineDisplay" placement="row" @change="handleBusiLineChange">
<up-radio v-for="item in busiLineOptions" :key="item.value" :label="item.label"
:name="item.label"></up-radio>
|
6cc0ab0e
刘淇
养护任务
|
10
|
</up-radio-group>
|
e6a04285
刘淇
单图情况 宽高70*70
|
11
|
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
12
|
<!-- 1. 工单位置(地图选择) -->
|
6cc0ab0e
刘淇
养护任务
|
13
14
15
16
|
<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
刘淇
养护计划调整
|
17
|
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
18
|
<!-- 2. 道路名称(下拉框) -->
|
6cc0ab0e
刘淇
养护任务
|
19
20
21
22
|
<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
刘淇
养护计划调整
|
23
|
<template #right>
|
6cc0ab0e
刘淇
养护任务
|
24
|
<up-icon name="arrow-right" size="16"></up-icon>
|
fa775c6b
刘淇
养护计划调整
|
25
26
|
</template>
</up-form-item>
|
c64da17b
刘淇
新的业务线
|
27
|
<!-- 3. 问题类型(下拉框) -->
|
6cc0ab0e
刘淇
养护任务
|
28
29
30
31
|
<up-form-item label="问题类型" prop="orderName" border-bottom required
@click="handleActionSheetOpen('orderName'); hideKeyboard()">
<up-input v-model="workOrderForm.orderName" disabled disabled-color="#ffffff" placeholder="请选择问题类型"
border="none"></up-input>
|
fa775c6b
刘淇
养护计划调整
|
32
33
34
|
<template #right>
<up-icon name="arrow-right" size="16"></up-icon>
</template>
|
5822009a
刘淇
工单管理--新增工单
|
35
|
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
36
|
<!-- 新增:紧急程度选择 -->
|
6cc0ab0e
刘淇
养护任务
|
37
38
39
40
|
<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
刘淇
工单管理--新增工单
|
41
42
43
44
|
<template #right>
<up-icon name="arrow-right" size="16"></up-icon>
</template>
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
45
|
<!-- 4. 情况描述(文本域) -->
|
6cc0ab0e
刘淇
养护任务
|
46
47
48
|
<up-form-item label="情况描述" prop="problemDesc" required>
<up-textarea placeholder="请输入情况描述(最多200字)" v-model.trim="workOrderForm.problemDesc" count maxlength="200"
rows="4" @blur="() => workOrderFormRef.validateField('problemDesc')"></up-textarea>
|
5822009a
刘淇
工单管理--新增工单
|
49
|
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
50
|
<!-- 问题照片(核心修复:绑定纯数组) -->
|
e6a04285
刘淇
单图情况 宽高70*70
|
51
|
<up-form-item label="问题照片" prop="problemImgs" border-bottom required>
|
6cc0ab0e
刘淇
养护任务
|
52
53
54
55
|
<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
刘淇
养护计划调整
|
56
|
</up-form-item>
|
fa775c6b
刘淇
养护计划调整
|
57
|
<!-- 完成时间 -->
|
6cc0ab0e
刘淇
养护任务
|
58
59
|
<up-form-item label="希望完成时间" prop="expectedFinishDate" @click="show = true; hideKeyboard()">
<up-input v-model="workOrderForm.expectedFinishDate" border="none" readonly placeholder="点击选择时间"></up-input>
|
fa775c6b
刘淇
养护计划调整
|
60
|
<template #right>
|
e6a04285
刘淇
单图情况 宽高70*70
|
61
62
|
<!-- 核心修复:用view包裹图标,添加双重@click.stop -->
<view v-if="workOrderForm.expectedFinishDate" @click.stop>
|
6cc0ab0e
刘淇
养护任务
|
63
|
<up-icon name="close" size="20" @click.stop="clearExpectedFinishDate"></up-icon>
|
e6a04285
刘淇
单图情况 宽高70*70
|
64
65
|
</view>
<up-icon name="arrow-right" size="16" v-else></up-icon>
|
fa775c6b
刘淇
养护计划调整
|
66
67
|
</template>
</up-form-item>
|
5822009a
刘淇
工单管理--新增工单
|
68
69
|
</up-form>
</view>
|
5822009a
刘淇
工单管理--新增工单
|
70
71
|
<!-- 底部提交按钮 -->
<view class="fixed-bottom-btn-wrap">
|
6cc0ab0e
刘淇
养护任务
|
72
|
<up-button type="primary" text="提交工单" @click="submitWorkOrder"></up-button>
|
5822009a
刘淇
工单管理--新增工单
|
73
|
</view>
|
fa775c6b
刘淇
养护计划调整
|
74
|
<!-- 合并后的通用下拉弹窗 -->
|
6cc0ab0e
刘淇
养护任务
|
75
76
77
|
<up-action-sheet :show="showActionSheet" :actions="currentActionSheetData.list"
:title="currentActionSheetData.title" @close="handleActionSheetClose"
@select="handleActionSheetSelect"></up-action-sheet>
|
fa775c6b
刘淇
养护计划调整
|
78
|
<!-- 完成时间选择器 -->
|
6cc0ab0e
刘淇
养护任务
|
79
80
|
<up-datetime-picker :show="show" v-model="expectedFinishDate" mode="datetime" :min-date="new Date()"
@cancel="show = false" @confirm="expectedFinishDateConfirm"></up-datetime-picker>
|
5822009a
刘淇
工单管理--新增工单
|
81
82
|
</view>
</template>
|
c7df828a
刘淇
快速工单 样式优化
|
83
|
<script setup>
|
3cbb8754
刘淇
动态字典
|
84
|
import { ref, reactive, computed } from 'vue'
|
7a96cf50
刘淇
重新提交
|
85
|
import { onReady, onShow, onLoad } from '@dcloudio/uni-app';
|
e6a04285
刘淇
单图情况 宽高70*70
|
86
|
import { useUploadImgs } from '@/common/utils/useUploadImgs'
|
fa775c6b
刘淇
养护计划调整
|
87
|
import { getRoadListByLatLng } from '@/api/common'
|
7a96cf50
刘淇
重新提交
|
88
|
import { universalApproval, workorderCreate } from '@/api/work-order-manage/work-order-manage'
|
fa775c6b
刘淇
养护计划调整
|
89
|
import { timeFormat } from '@/uni_modules/uview-plus'
|
5059c4dd
刘淇
养护员提交养护工单
|
90
|
import { nextStepMap } from '@/common/utils/common'
|
e6a04285
刘淇
单图情况 宽高70*70
|
91
|
import { useUserStore } from '@/pinia/user';
|
e6a04285
刘淇
单图情况 宽高70*70
|
92
93
|
// ========== 状态管理 ==========
const userStore = useUserStore();
|
3cbb8754
刘淇
动态字典
|
94
95
96
97
|
// 业务线选项,直接从pinia dictList拿
const busiLineOptions = computed(() => {
return userStore.dictList || []
})
|
c7df828a
刘淇
快速工单 样式优化
|
98
99
|
// ========== 表单Ref ==========
const workOrderFormRef = ref(null)
|
3cbb8754
刘淇
动态字典
|
100
101
|
// 业务线单选框展示用(存中文label)
const busiLineDisplay = ref('')
|
fa775c6b
刘淇
养护计划调整
|
102
103
104
105
106
107
108
109
|
// ========== 公共上传逻辑复用 ==========
const problemImgs = useUploadImgs({
maxCount: 3,
uploadText: '选择问题照片',
sizeType: ['compressed'],
formRef: workOrderFormRef,
fieldName: 'problemImgs'
})
|
4c54ad5d
刘淇
转工单 选择是 传紧急程度和...
|
110
111
112
113
|
// 无需再手动初始化普通数组,直接使用 ref 响应式数据
if (!Array.isArray(problemImgs.rawImgList.value)) {
problemImgs.rawImgList.value = [];
}
|
c7df828a
刘淇
快速工单 样式优化
|
114
|
// ========== 页面状态 ==========
|
fa775c6b
刘淇
养护计划调整
|
115
|
// 通用弹窗控制
|
c7df828a
刘淇
快速工单 样式优化
|
116
|
const showActionSheet = ref(false)
|
fa775c6b
刘淇
养护计划调整
|
117
|
// 当前弹窗配置
|
c7df828a
刘淇
快速工单 样式优化
|
118
119
120
121
122
|
const currentActionSheetData = reactive({
type: '',
list: [],
title: ''
})
|
fa775c6b
刘淇
养护计划调整
|
123
124
|
// 完成时间选择器控制
const show = ref(false)
|
2f1e3176
刘淇
图片参数处理
|
125
|
const expectedFinishDate = ref(Date.now())
|
7a96cf50
刘淇
重新提交
|
126
127
128
|
// ========== 重新提交相关状态(核心:本地存储读取) ==========
const isRenew = ref(false); // 是否为重新提交状态
const renewOrderData = ref(null); // 重新提交的原有工单数据
|
c7df828a
刘淇
快速工单 样式优化
|
129
|
// ========== 下拉列表数据 ==========
|
fa775c6b
刘淇
养护计划调整
|
130
131
132
|
const roadNameList = ref([])
const orderNameList = ref([])
const pressingTypeList = ref([])
|
3cbb8754
刘淇
动态字典
|
133
|
// ========== 工单表单数据 ==========
|
c7df828a
刘淇
快速工单 样式优化
|
134
|
const workOrderForm = reactive({
|
3cbb8754
刘淇
动态字典
|
135
|
busiLine: '', // 业务线value,yl / sz / wy
|
e6a04285
刘淇
单图情况 宽高70*70
|
136
137
138
139
140
141
142
143
144
145
|
roadId: 0, // 原有字段
roadName: '', // 原有字段
workLocation: '', // 原有字段
orderName: '', // 原有字段
pressingType: '', // 原有字段
pressingTypeName: '', // 原有字段
problemDesc: '', // 原有字段
lat: 0, // 原有字段
lon: 0, // 原有字段
expectedFinishDate: '', // 原有字段
|
c7df828a
刘淇
快速工单 样式优化
|
146
|
})
|
3cbb8754
刘淇
动态字典
|
147
|
// ========== 表单校验规则 ==========
|
c7df828a
刘淇
快速工单 样式优化
|
148
|
const workOrderFormRules = reactive({
|
3cbb8754
刘淇
动态字典
|
149
|
busiLine: [
|
e6a04285
刘淇
单图情况 宽高70*70
|
150
151
|
{ type: 'string', required: true, message: '请选择业务线', trigger: ['change', 'blur'] }
],
|
fa775c6b
刘淇
养护计划调整
|
152
153
|
workLocation: [
{ type: 'string', required: true, message: '请选择工单位置', trigger: ['change', 'blur'] }
|
c7df828a
刘淇
快速工单 样式优化
|
154
|
],
|
fa775c6b
刘淇
养护计划调整
|
155
156
157
158
|
roadName: [
{ type: 'string', required: true, message: '请选择道路名称', trigger: ['change', 'blur'] }
],
orderName: [
|
c64da17b
刘淇
新的业务线
|
159
|
{ type: 'string', required: true, message: '请选择问题类型', trigger: ['change', 'blur'] }
|
fa775c6b
刘淇
养护计划调整
|
160
161
162
163
164
165
166
167
168
|
],
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'] }
],
problemImgs: [problemImgs.imgValidateRule] // 复用上传校验规则
|
c7df828a
刘淇
快速工单 样式优化
|
169
|
})
|
fa775c6b
刘淇
养护计划调整
|
170
|
// ========== 生命周期 ==========
|
3cbb8754
刘淇
动态字典
|
171
|
// 页面加载
|
7a96cf50
刘淇
重新提交
|
172
|
onLoad((options) => {
|
3cbb8754
刘淇
动态字典
|
173
|
// 默认选中第一个业务线
|
e6a04285
刘淇
单图情况 宽高70*70
|
174
|
if (busiLineOptions.value.length > 0) {
|
3cbb8754
刘淇
动态字典
|
175
176
177
|
// ✅ 业务线:表单存value,单选展示中文label
workOrderForm.busiLine = busiLineOptions.value[0].value
busiLineDisplay.value = busiLineOptions.value[0].label
|
e6a04285
刘淇
单图情况 宽高70*70
|
178
|
}
|
7a96cf50
刘淇
重新提交
|
179
|
// 判断是否为重新提交状态
|
7a96cf50
刘淇
重新提交
|
180
|
console.log(options)
|
e6a04285
刘淇
单图情况 宽高70*70
|
181
|
if (options.isRenew == 1 && options.tempKey) {
|
7a96cf50
刘淇
重新提交
|
182
183
|
isRenew.value = true;
const tempKey = options.tempKey;
|
7a96cf50
刘淇
重新提交
|
184
185
186
187
188
|
// 1. 从本地同步存储中读取完整工单数据
try {
const orderData = uni.getStorageSync(tempKey);
if (orderData && typeof orderData === 'object') {
renewOrderData.value = orderData;
|
7a96cf50
刘淇
重新提交
|
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
console.log(orderData)
// 2. 回显工单数据到表单
echoOrderData(renewOrderData.value);
} else {
uni.showToast({ title: '工单数据不存在,无法重新提交', icon: 'none' });
// 跳转回列表页
setTimeout(() => uni.navigateBack(), 1000);
return;
}
} catch (error) {
console.error('读取工单数据失败:', error);
uni.showToast({ title: '数据读取异常,无法重新提交', icon: 'none' });
setTimeout(() => uni.navigateBack(), 1000);
return;
} finally {
// 3. 关键:用完即删,避免本地冗余存储和数据泄露
uni.removeStorageSync(tempKey);
}
}
});
|
c7df828a
刘淇
快速工单 样式优化
|
209
210
211
212
213
|
onReady(() => {
// 设置表单校验规则
if (workOrderFormRef.value) {
workOrderFormRef.value.setRules(workOrderFormRules)
}
|
fa775c6b
刘淇
养护计划调整
|
214
|
console.log('工单表单规则初始化完成')
|
c7df828a
刘淇
快速工单 样式优化
|
215
|
})
|
c7df828a
刘淇
快速工单 样式优化
|
216
|
onShow(() => {
|
fa775c6b
刘淇
养护计划调整
|
217
218
|
console.log(uni.$dict.getDictLabel('ai_image_status', 20))
console.log(uni.$dict.getDictSimpleList('work_name'))
|
c64da17b
刘淇
新的业务线
|
219
|
// 初始化问题类型列表
|
fa775c6b
刘淇
养护计划调整
|
220
|
orderNameList.value = uni.$dict.transformLabelValueToNameValue(uni.$dict.getDictSimpleList('work_name'))
|
c64da17b
刘淇
新的业务线
|
221
|
console.log('问题类型列表:', orderNameList.value)
|
fa775c6b
刘淇
养护计划调整
|
222
223
224
|
// 初始化紧急程度列表
pressingTypeList.value = uni.$dict.transformLabelValueToNameValue(uni.$dict.getDictSimpleList('workorder_pressing_type'))
console.log('紧急程度列表:', pressingTypeList.value)
|
c7df828a
刘淇
快速工单 样式优化
|
225
|
})
|
3cbb8754
刘淇
动态字典
|
226
|
// ========== 核心方法:工单数据回显 ==========
|
7a96cf50
刘淇
重新提交
|
227
|
const echoOrderData = (orderItem) => {
|
3cbb8754
刘淇
动态字典
|
228
|
// 业务线回显,后端给的是value,需要自动找到中文赋值给单选框
|
e6a04285
刘淇
单图情况 宽高70*70
|
229
|
if (orderItem.busiLine) {
|
3cbb8754
刘淇
动态字典
|
230
231
232
233
234
|
workOrderForm.busiLine = orderItem.busiLine;
const findItem = busiLineOptions.value.find(item => item.value === orderItem.busiLine)
if (findItem) {
busiLineDisplay.value = findItem.label
}
|
e6a04285
刘淇
单图情况 宽高70*70
|
235
|
}
|
e6a04285
刘淇
单图情况 宽高70*70
|
236
|
// 2. 原有基础表单字段回显
|
7a96cf50
刘淇
重新提交
|
237
238
239
240
241
242
243
244
245
|
workOrderForm.roadId = orderItem.roadId || 0;
workOrderForm.roadName = orderItem.roadName || '';
workOrderForm.workLocation = orderItem.lonLatAddress || orderItem.roadName || '';
workOrderForm.orderName = orderItem.orderName || '';
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
刘淇
养护任务
|
246
|
workOrderForm.expectedFinishDate = orderItem.expectedFinishDate ? timeFormat(orderItem.expectedFinishDate, 'yyyy-mm-dd hh:MM:ss') : '';
|
e6a04285
刘淇
单图情况 宽高70*70
|
247
|
// 3. 上传图片回显(兼容useUploadImgs格式)
|
7a96cf50
刘淇
重新提交
|
248
249
250
251
252
253
|
if (orderItem.problemsImgs && Array.isArray(orderItem.problemsImgs) && orderItem.problemsImgs.length > 0) {
const imgList = orderItem.problemsImgs.map((imgUrl, index) => ({
url: imgUrl,
name: `renew_img_${index}`,
status: 'success' // 标记为已上传状态
}));
|
4c54ad5d
刘淇
转工单 选择是 传紧急程度和...
|
254
|
problemImgs.imgList.value = imgList;
|
7a96cf50
刘淇
重新提交
|
255
256
|
problemImgs.rawImgList.value = imgList;
}
|
3cbb8754
刘淇
动态字典
|
257
|
// 4. 自动获取道路列表
|
7a96cf50
刘淇
重新提交
|
258
|
if (orderItem.lat && orderItem.lon) {
|
3cbb8754
刘淇
动态字典
|
259
|
getRoadListByBusiLine();
|
7a96cf50
刘淇
重新提交
|
260
261
|
}
};
|
3cbb8754
刘淇
动态字典
|
262
|
// ========== 业务线相关方法 ==========
|
e6a04285
刘淇
单图情况 宽高70*70
|
263
264
|
/**
* 业务线切换事件:清空道路信息 + 重新请求道路列表
|
3cbb8754
刘淇
动态字典
|
265
|
* selectedLabel 是选中的中文label
|
e6a04285
刘淇
单图情况 宽高70*70
|
266
|
*/
|
3cbb8754
刘淇
动态字典
|
267
268
269
270
271
272
|
const handleBusiLineChange = (selectedLabel) => {
// 根据中文label反向找到对应的value存入表单
const selectedItem = busiLineOptions.value.find(item => item.label === selectedLabel)
if (selectedItem) {
workOrderForm.busiLine = selectedItem.value
}
|
e6a04285
刘淇
单图情况 宽高70*70
|
273
274
275
276
277
278
279
280
281
282
|
// 1. 清空已渲染的道路名称和表单字段
workOrderForm.roadName = '';
workOrderForm.roadId = 0;
// 2. 清空道路名称列表数据
roadNameList.value = [];
// 3. 若已选择工单位置,重新请求对应业务线的道路列表
if (workOrderForm.workLocation) {
getRoadListByBusiLine();
}
};
|
e6a04285
刘淇
单图情况 宽高70*70
|
283
|
/**
|
3cbb8754
刘淇
动态字典
|
284
|
* 封装:根据当前选中业务线,请求道路列表
|
e6a04285
刘淇
单图情况 宽高70*70
|
285
286
|
*/
const getRoadListByBusiLine = async () => {
|
3cbb8754
刘淇
动态字典
|
287
|
if (!workOrderForm.lat || !workOrderForm.lon || !workOrderForm.busiLine) {
|
e6a04285
刘淇
单图情况 宽高70*70
|
288
289
|
return;
}
|
e6a04285
刘淇
单图情况 宽高70*70
|
290
291
292
|
try {
uni.showLoading({ title: '获取道路名称中...' });
const roadRes = await getRoadListByLatLng({
|
3cbb8754
刘淇
动态字典
|
293
|
busiLine: workOrderForm.busiLine,
|
e6a04285
刘淇
单图情况 宽高70*70
|
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
|
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 }];
}
};
|
e6a04285
刘淇
单图情况 宽高70*70
|
315
|
// ========== 通用弹窗方法 ==========
|
c7df828a
刘淇
快速工单 样式优化
|
316
|
/**
|
fa775c6b
刘淇
养护计划调整
|
317
|
* 打开通用下拉弹窗
|
c7df828a
刘淇
快速工单 样式优化
|
318
319
|
*/
const handleActionSheetOpen = (type) => {
|
fa775c6b
刘淇
养护计划调整
|
320
321
322
|
// 道路名称需先校验工单位置是否选择
if (type === 'roadName' && !workOrderForm.workLocation) {
uni.showToast({ title: '请先选择工单位置', icon: 'none' })
|
c7df828a
刘淇
快速工单 样式优化
|
323
324
|
return
}
|
fa775c6b
刘淇
养护计划调整
|
325
|
// 配置当前弹窗参数
|
c7df828a
刘淇
快速工单 样式优化
|
326
|
const configMap = {
|
fa775c6b
刘淇
养护计划调整
|
327
328
329
330
331
|
roadName: {
title: '请选择道路名称',
list: roadNameList.value
},
orderName: {
|
c64da17b
刘淇
新的业务线
|
332
|
title: '请选择问题类型',
|
fa775c6b
刘淇
养护计划调整
|
333
334
335
336
337
|
list: orderNameList.value
},
pressingType: {
title: '请选择紧急程度',
list: pressingTypeList.value
|
d433e7f6
刘淇
工单
|
338
|
}
|
c7df828a
刘淇
快速工单 样式优化
|
339
|
}
|
c7df828a
刘淇
快速工单 样式优化
|
340
341
342
343
344
|
currentActionSheetData.type = type
currentActionSheetData.title = configMap[type].title
currentActionSheetData.list = configMap[type].list
showActionSheet.value = true
}
|
c7df828a
刘淇
快速工单 样式优化
|
345
|
/**
|
fa775c6b
刘淇
养护计划调整
|
346
|
* 关闭通用下拉弹窗
|
c7df828a
刘淇
快速工单 样式优化
|
347
348
349
|
*/
const handleActionSheetClose = () => {
showActionSheet.value = false
|
fa775c6b
刘淇
养护计划调整
|
350
|
// 重置当前弹窗配置
|
c7df828a
刘淇
快速工单 样式优化
|
351
352
353
354
|
currentActionSheetData.type = ''
currentActionSheetData.list = []
currentActionSheetData.title = ''
}
|
c7df828a
刘淇
快速工单 样式优化
|
355
|
/**
|
fa775c6b
刘淇
养护计划调整
|
356
|
* 通用下拉弹窗选择事件
|
c7df828a
刘淇
快速工单 样式优化
|
357
358
|
*/
const handleActionSheetSelect = (e) => {
|
fa775c6b
刘淇
养护计划调整
|
359
360
361
362
363
364
365
366
367
368
369
370
371
372
|
const { type } = currentActionSheetData
// 根据类型处理不同的选择逻辑
switch (type) {
case 'roadName':
workOrderForm.roadName = e.name
workOrderForm.roadId = e.code
workOrderFormRef.value?.validateField('roadName')
break
case 'orderName':
workOrderForm.orderName = e.name
workOrderFormRef.value?.validateField('orderName')
break
case 'pressingType':
console.log(e)
|
7a96cf50
刘淇
重新提交
|
373
|
workOrderForm.pressingType = e.value
|
fa775c6b
刘淇
养护计划调整
|
374
|
workOrderForm.pressingTypeName = e.name
|
7a96cf50
刘淇
重新提交
|
375
|
workOrderFormRef.value?.validateField('pressingTypeName')
|
fa775c6b
刘淇
养护计划调整
|
376
|
break
|
c7df828a
刘淇
快速工单 样式优化
|
377
|
}
|
fa775c6b
刘淇
养护计划调整
|
378
|
// 关闭弹窗
|
c7df828a
刘淇
快速工单 样式优化
|
379
380
|
showActionSheet.value = false
}
|
fa775c6b
刘淇
养护计划调整
|
381
382
383
384
|
/**
* 返回上一页
*/
const navigateBack = () => {
|
e6a04285
刘淇
单图情况 宽高70*70
|
385
386
387
388
389
390
391
392
|
uni.reLaunch({
url: '/pages-sub/problem/work-order-manage/index', // 列表页路径
fail: () => {
// 兜底:若 reLaunch 失败,返回2层(跳过提交页)
uni.navigateBack({ delta: 2 });
}
});
}
|
3cbb8754
刘淇
动态字典
|
393
394
395
|
/**
* 清除希望完成时间的方法
*/
|
6cc0ab0e
刘淇
养护任务
|
396
|
const clearExpectedFinishDate = () => {
|
e6a04285
刘淇
单图情况 宽高70*70
|
397
|
workOrderForm.expectedFinishDate = ''
|
fa775c6b
刘淇
养护计划调整
|
398
|
}
|
fa775c6b
刘淇
养护计划调整
|
399
400
401
402
403
404
405
406
407
|
/**
* 选择工单位置
*/
const chooseWorkLocation = () => {
uni.chooseLocation({
success: async (res) => {
workOrderForm.roadName = ''
workOrderForm.roadId = 0
roadNameList.value = []
|
fa775c6b
刘淇
养护计划调整
|
408
409
410
|
workOrderForm.workLocation = res.name
workOrderForm.lat = res.latitude
workOrderForm.lon = res.longitude
|
fa775c6b
刘淇
养护计划调整
|
411
412
|
workOrderFormRef.value?.validateField('workLocation')
workOrderFormRef.value?.validateField('roadName')
|
e6a04285
刘淇
单图情况 宽高70*70
|
413
|
await getRoadListByBusiLine();
|
fa775c6b
刘淇
养护计划调整
|
414
415
416
417
418
419
420
|
},
fail: (err) => {
console.error('选择位置失败:', err)
uni.showToast({ title: '选择位置失败:' + err.errMsg, icon: 'none' })
}
})
}
|
fa775c6b
刘淇
养护计划调整
|
421
422
423
|
/**
* 完成时间确认
*/
|
2f1e3176
刘淇
图片参数处理
|
424
|
const expectedFinishDateConfirm = (e) => {
|
fa775c6b
刘淇
养护计划调整
|
425
|
console.log('选择的完成时间:', e)
|
2f1e3176
刘淇
图片参数处理
|
426
|
workOrderForm.expectedFinishDate = timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
|
fa775c6b
刘淇
养护计划调整
|
427
428
|
show.value = false
}
|
c7df828a
刘淇
快速工单 样式优化
|
429
430
431
432
433
434
|
/**
* 隐藏键盘
*/
const hideKeyboard = () => {
uni.hideKeyboard()
}
|
c7df828a
刘淇
快速工单 样式优化
|
435
|
/**
|
3cbb8754
刘淇
动态字典
|
436
|
* 提交工单
|
c7df828a
刘淇
快速工单 样式优化
|
437
438
439
|
*/
const submitWorkOrder = async () => {
try {
|
3cbb8754
刘淇
动态字典
|
440
|
// 先执行表单校验
|
c7df828a
刘淇
快速工单 样式优化
|
441
|
await workOrderFormRef.value.validate()
|
3cbb8754
刘淇
动态字典
|
442
|
if (!workOrderForm.busiLine) {
|
e6a04285
刘淇
单图情况 宽高70*70
|
443
444
445
|
uni.showToast({ title: '业务线选择异常,请重新选择', icon: 'none' });
return;
}
|
6cc0ab0e
刘淇
养护任务
|
446
|
console.log('完成时间:' + workOrderForm.expectedFinishDate)
|
7a96cf50
刘淇
重新提交
|
447
448
|
// 构建公共提交数据
const commonSubmitData = {
|
fa775c6b
刘淇
养护计划调整
|
449
450
|
roadId: workOrderForm.roadId,
roadName: workOrderForm.roadName,
|
3cbb8754
刘淇
动态字典
|
451
|
problemsImgs: problemImgs.getSuccessImgUrls(),
|
fa775c6b
刘淇
养护计划调整
|
452
453
454
455
456
457
458
|
remark: workOrderForm.problemDesc.trim(),
latLonType: 2,
lat: workOrderForm.lat,
lon: workOrderForm.lon,
lonLatAddress: workOrderForm.workLocation,
pressingType: workOrderForm.pressingType,
orderName: workOrderForm.orderName,
|
6cc0ab0e
刘淇
养护任务
|
459
|
expectedFinishDate: workOrderForm.expectedFinishDate == "" ? "" : new Date(workOrderForm.expectedFinishDate).getTime(),
|
fa775c6b
刘淇
养护计划调整
|
460
|
sourceId: 1,
|
3cbb8754
刘淇
动态字典
|
461
462
|
sourceName: busiLineOptions.value.find(item => item.value === workOrderForm.busiLine)?.label || '',
busiLine: workOrderForm.busiLine
|
c7df828a
刘淇
快速工单 样式优化
|
463
|
}
|
34d239d6
刘淇
全域巡查员
|
464
|
console.log('工单数据')
|
6cc0ab0e
刘淇
养护任务
|
465
|
console.log('完成时间:' + workOrderForm.expectedFinishDate)
|
34d239d6
刘淇
全域巡查员
|
466
|
console.log(commonSubmitData)
|
fa775c6b
刘淇
养护计划调整
|
467
468
|
// 显示加载中
uni.showLoading({ title: '提交中...' })
|
7a96cf50
刘淇
重新提交
|
469
|
let res
|
7a96cf50
刘淇
重新提交
|
470
471
472
|
if (isRenew.value) {
// 重新提交:调用 universalApproval 接口
const renewSubmitData = {
|
7a96cf50
刘淇
重新提交
|
473
474
475
476
477
|
workerDataId: renewOrderData.value.id,
taskKey: renewOrderData.value.taskKey,
taskId: renewOrderData.value.taskId,
operateType: nextStepMap[renewOrderData.value.taskKey]?.operateTypeRenew || '',
agree: 0,
|
34d239d6
刘淇
全域巡查员
|
478
|
reason: workOrderForm.problemDesc.trim(),
|
7a96cf50
刘淇
重新提交
|
479
480
481
482
|
...commonSubmitData
}
res = await universalApproval(renewSubmitData)
} else {
|
3cbb8754
刘淇
动态字典
|
483
|
// 新增工单:调用原有 workorderCreate 接口
|
7a96cf50
刘淇
重新提交
|
484
485
|
res = await workorderCreate(commonSubmitData)
}
|
c7df828a
刘淇
快速工单 样式优化
|
486
487
|
uni.hideLoading()
uni.showToast({
|
7a96cf50
刘淇
重新提交
|
488
|
title: isRenew.value ? '重新提交成功' : '工单提交成功',
|
c7df828a
刘淇
快速工单 样式优化
|
489
490
491
|
icon: 'success',
duration: 1000
})
|
7a96cf50
刘淇
重新提交
|
492
|
// 延迟跳转回列表页
|
c7df828a
刘淇
快速工单 样式优化
|
493
|
setTimeout(() => {
|
4fa8cf12
刘淇
巡查员结束工单
|
494
|
uni.reLaunch({
|
fa775c6b
刘淇
养护计划调整
|
495
|
url: '/pages-sub/problem/work-order-manage/index'
|
c7df828a
刘淇
快速工单 样式优化
|
496
497
498
|
})
}, 1000)
} catch (error) {
|
fa775c6b
刘淇
养护计划调整
|
499
|
// 隐藏加载框
|
c7df828a
刘淇
快速工单 样式优化
|
500
|
uni.hideLoading()
|
fa775c6b
刘淇
养护计划调整
|
501
|
// 区分是表单校验失败还是接口调用失败
|
c7df828a
刘淇
快速工单 样式优化
|
502
|
if (!Array.isArray(error)) {
|
fa775c6b
刘淇
养护计划调整
|
503
|
// 接口调用失败
|
7a96cf50
刘淇
重新提交
|
504
|
console.error(isRenew.value ? '工单重新提交失败:' : '工单提交失败:', error)
|
c7df828a
刘淇
快速工单 样式优化
|
505
|
uni.showToast({
|
3cbb8754
刘淇
动态字典
|
506
|
title: error.msg || '提交失败',
|
c7df828a
刘淇
快速工单 样式优化
|
507
508
509
|
icon: 'none',
duration: 2000
})
|
d433e7f6
刘淇
工单
|
510
511
|
}
}
|
d433e7f6
刘淇
工单
|
512
|
}
|
5822009a
刘淇
工单管理--新增工单
|
513
|
</script>
|
5822009a
刘淇
工单管理--新增工单
|
514
515
|
<style lang="scss" scoped>
// 全局页面样式
|
c7df828a
刘淇
快速工单 样式优化
|
516
|
.page-container {
|
fa775c6b
刘淇
养护计划调整
|
517
518
|
min-height: 100vh;
padding-bottom: 100rpx; // 给底部按钮留空间
|
d433e7f6
刘淇
工单
|
519
520
|
}
|
fa775c6b
刘淇
养护计划调整
|
521
|
// 工单表单内容容器
|
5822009a
刘淇
工单管理--新增工单
|
522
523
|
.work-order-form-content {
background: #fff;
|
d433e7f6
刘淇
工单
|
524
|
}
|
3cbb8754
刘淇
动态字典
|
525
|
</style>
|