Commit 8d0834be1e623a32ba8eaf5f0b22f0a5bf861aef

Authored by 刘淇
1 parent 5822009a

工单管理--新增工单 优化

pages-sub/problem/work-order-manage/add-order.vue
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 prop="roadName" 31 prop="roadName"
32 border-bottom 32 border-bottom
33 required 33 required
34 - @click="workOrderForm.workLocation ? (showRoadName = true, hideKeyboard()) : uni.showToast({title: '请先选择工单位置', icon: 'none'})" 34 + @click="handleActionSheetOpen('roadName'); hideKeyboard()"
35 > 35 >
36 <up-input 36 <up-input
37 v-model="workOrderForm.roadName" 37 v-model="workOrderForm.roadName"
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 prop="orderName" 52 prop="orderName"
53 border-bottom 53 border-bottom
54 required 54 required
55 - @click="showOrderName = true; hideKeyboard()" 55 + @click="handleActionSheetOpen('orderName'); hideKeyboard()"
56 > 56 >
57 <up-input 57 <up-input
58 v-model="workOrderForm.orderName" 58 v-model="workOrderForm.orderName"
@@ -72,7 +72,7 @@ @@ -72,7 +72,7 @@
72 prop="pressingType" 72 prop="pressingType"
73 border-bottom 73 border-bottom
74 required 74 required
75 - @click="showPressingType = true; hideKeyboard()" 75 + @click="handleActionSheetOpen('pressingType'); hideKeyboard()"
76 > 76 >
77 <up-input 77 <up-input
78 v-model="workOrderForm.pressingTypeName" 78 v-model="workOrderForm.pressingTypeName"
@@ -86,7 +86,6 @@ @@ -86,7 +86,6 @@
86 </template> 86 </template>
87 </up-form-item> 87 </up-form-item>
88 88
89 -  
90 <!-- 4. 情况描述(文本域) --> 89 <!-- 4. 情况描述(文本域) -->
91 <up-form-item 90 <up-form-item
92 label="情况描述" 91 label="情况描述"
@@ -115,8 +114,6 @@ @@ -115,8 +114,6 @@
115 ></up-upload> 114 ></up-upload>
116 </up-form-item> 115 </up-form-item>
117 116
118 -  
119 -  
120 <!-- 完成时间 --> 117 <!-- 完成时间 -->
121 <up-form-item 118 <up-form-item
122 label="完成时间" 119 label="完成时间"
@@ -128,15 +125,11 @@ @@ -128,15 +125,11 @@
128 border="none" 125 border="none"
129 readonly 126 readonly
130 placeholder="点击选择时间" 127 placeholder="点击选择时间"
131 - >  
132 -  
133 - </up-input> 128 + ></up-input>
134 <template #right> 129 <template #right>
135 <up-icon name="arrow-right" size="16"></up-icon> 130 <up-icon name="arrow-right" size="16"></up-icon>
136 </template> 131 </template>
137 </up-form-item> 132 </up-form-item>
138 -  
139 -  
140 </up-form> 133 </up-form>
141 </view> 134 </view>
142 135
@@ -149,44 +142,24 @@ @@ -149,44 +142,24 @@
149 ></up-button> 142 ></up-button>
150 </view> 143 </view>
151 144
152 - <!-- 道路名称下拉弹窗 --> 145 + <!-- 合并后的通用下拉弹窗 -->
153 <up-action-sheet 146 <up-action-sheet
154 - :show="showRoadName"  
155 - :actions="roadNameList"  
156 - title="请选择道路名称"  
157 - @close="showRoadName = false"  
158 - @select="handleRoadNameSelect" 147 + :show="showActionSheet"
  148 + :actions="currentActionSheetData.list"
  149 + :title="currentActionSheetData.title"
  150 + @close="handleActionSheetClose"
  151 + @select="handleActionSheetSelect"
159 ></up-action-sheet> 152 ></up-action-sheet>
160 153
161 - <!-- 工单名称下拉弹窗 -->  
162 - <up-action-sheet  
163 - :show="showOrderName"  
164 - :actions="orderNameList"  
165 - title="请选择工单名称"  
166 - @close="showOrderName = false"  
167 - @select="handleOrderNameSelect"  
168 - ></up-action-sheet>  
169 -  
170 - <!-- 紧急程度下拉弹窗 -->  
171 - <up-action-sheet  
172 - :show="showPressingType"  
173 - :actions="pressingTypeList"  
174 - title="请选择紧急程度"  
175 - @close="showPressingType = false"  
176 - @select="handlePressingTypeSelect"  
177 - ></up-action-sheet>  
178 <!-- 完成时间选择器 --> 154 <!-- 完成时间选择器 -->
179 <up-datetime-picker 155 <up-datetime-picker
180 :show="show" 156 :show="show"
181 v-model="finishTime" 157 v-model="finishTime"
182 mode="datetime" 158 mode="datetime"
183 :min-date="new Date()" 159 :min-date="new Date()"
184 -  
185 @cancel="show = false" 160 @cancel="show = false"
186 @confirm="finishTimeConfirm" 161 @confirm="finishTimeConfirm"
187 ></up-datetime-picker> 162 ></up-datetime-picker>
188 -  
189 -  
190 </view> 163 </view>
191 </template> 164 </template>
192 165
@@ -208,17 +181,21 @@ export default { @@ -208,17 +181,21 @@ export default {
208 return { 181 return {
209 // 问题照片列表 182 // 问题照片列表
210 problemImgsList: [], 183 problemImgsList: [],
211 - // 弹窗显隐控制  
212 - showRoadName: false,  
213 - showOrderName: false,  
214 - showPressingType: false, 184 + // 通用弹窗控制
  185 + showActionSheet: false,
  186 + // 当前弹窗配置(类型 + 数据 + 标题)
  187 + currentActionSheetData: {
  188 + type: '', // roadName / orderName / pressingType
  189 + list: [], // 对应类型的选项列表
  190 + title: '' // 弹窗标题
  191 + },
  192 + // 完成时间选择器控制
215 show: false, 193 show: false,
216 - showBirthday: false, // 生日弹窗控制 194 + finishTime: Date.now(),
217 // 下拉列表数据 195 // 下拉列表数据
218 roadNameList: [], 196 roadNameList: [],
219 orderNameList: [], 197 orderNameList: [],
220 pressingTypeList: [], 198 pressingTypeList: [],
221 - finishTime:Date.now(),  
222 // 工单表单数据 199 // 工单表单数据
223 workOrderForm: { 200 workOrderForm: {
224 roadId: 0, // 道路ID 201 roadId: 0, // 道路ID
@@ -247,9 +224,6 @@ export default { @@ -247,9 +224,6 @@ export default {
247 pressingType: [ 224 pressingType: [
248 {type: 'number', required: true, message: '请选择紧急程度', trigger: ['change']} 225 {type: 'number', required: true, message: '请选择紧急程度', trigger: ['change']}
249 ], 226 ],
250 - birthday: [ // 新增:生日校验规则  
251 - {type: 'string', required: true, message: '请选择生日', trigger: ['change']}  
252 - ],  
253 problemDesc: [ 227 problemDesc: [
254 {type: 'string', required: true, message: '请输入情况描述', trigger: ['change', 'blur']}, 228 {type: 'string', required: true, message: '请输入情况描述', trigger: ['change', 'blur']},
255 {type: 'string', min: 3, max: 200, message: '情况描述需3-200字', trigger: ['change', 'blur']} 229 {type: 'string', min: 3, max: 200, message: '情况描述需3-200字', trigger: ['change', 'blur']}
@@ -290,6 +264,77 @@ export default { @@ -290,6 +264,77 @@ export default {
290 264
291 methods: { 265 methods: {
292 /** 266 /**
  267 + * 打开通用下拉弹窗
  268 + * @param type 弹窗类型:roadName / orderName / pressingType
  269 + */
  270 + handleActionSheetOpen(type) {
  271 + // 道路名称需先校验工单位置是否选择
  272 + if (type === 'roadName' && !this.workOrderForm.workLocation) {
  273 + uni.showToast({title: '请先选择工单位置', icon: 'none'})
  274 + return
  275 + }
  276 +
  277 + // 配置当前弹窗参数
  278 + const configMap = {
  279 + roadName: {
  280 + title: '请选择道路名称',
  281 + list: this.roadNameList
  282 + },
  283 + orderName: {
  284 + title: '请选择工单名称',
  285 + list: this.orderNameList
  286 + },
  287 + pressingType: {
  288 + title: '请选择紧急程度',
  289 + list: this.pressingTypeList
  290 + }
  291 + }
  292 +
  293 + this.currentActionSheetData = {
  294 + type,
  295 + title: configMap[type].title,
  296 + list: configMap[type].list
  297 + }
  298 + this.showActionSheet = true
  299 + },
  300 +
  301 + /**
  302 + * 关闭通用下拉弹窗
  303 + */
  304 + handleActionSheetClose() {
  305 + this.showActionSheet = false
  306 + // 重置当前弹窗配置(可选,防止数据残留)
  307 + this.currentActionSheetData = { type: '', list: [], title: '' }
  308 + },
  309 +
  310 + /**
  311 + * 通用下拉弹窗选择事件
  312 + * @param e 选择的项
  313 + */
  314 + handleActionSheetSelect(e) {
  315 + const { type } = this.currentActionSheetData
  316 + // 根据类型处理不同的选择逻辑
  317 + switch (type) {
  318 + case 'roadName':
  319 + this.workOrderForm.roadName = e.name
  320 + this.workOrderForm.roadId = e.code
  321 + this.$refs.workOrderFormRef.validateField('roadName')
  322 + break
  323 + case 'orderName':
  324 + this.workOrderForm.orderName = e.name
  325 + this.$refs.workOrderFormRef.validateField('orderName')
  326 + break
  327 + case 'pressingType':
  328 + this.workOrderForm.pressingType = Number(e.value)
  329 + this.workOrderForm.pressingTypeName = e.name
  330 + this.$refs.workOrderFormRef.validateField('pressingType')
  331 + break
  332 + }
  333 + // 关闭弹窗
  334 + this.showActionSheet = false
  335 + },
  336 +
  337 + /**
293 * 返回上一页 338 * 返回上一页
294 */ 339 */
295 navigateBack() { 340 navigateBack() {
@@ -430,47 +475,14 @@ export default { @@ -430,47 +475,14 @@ export default {
430 }, 475 },
431 476
432 /** 477 /**
433 - * 选择道路名称  
434 - */  
435 - handleRoadNameSelect(e) {  
436 - console.log('选择道路名称:', e)  
437 - this.workOrderForm.roadName = e.name  
438 - this.workOrderForm.roadId = e.code  
439 - this.showRoadName = false  
440 - this.$refs.workOrderFormRef.validateField('roadName')  
441 - },  
442 -  
443 - /**  
444 - * 选择工单名称  
445 - */  
446 - handleOrderNameSelect(e) {  
447 - console.log('选择工单名称:', e)  
448 - this.workOrderForm.orderName = e.name  
449 - this.showOrderName = false  
450 - this.$refs.workOrderFormRef.validateField('orderName')  
451 - },  
452 -  
453 - /**  
454 - * 选择紧急程度  
455 - */  
456 - handlePressingTypeSelect(e) {  
457 - console.log('选择紧急程度:', e)  
458 - this.workOrderForm.pressingType = Number(e.value)  
459 - this.workOrderForm.pressingTypeName = e.name  
460 - this.showPressingType = false  
461 - this.$refs.workOrderFormRef.validateField('pressingType')  
462 - },  
463 -  
464 - /**  
465 * 完成时间确认 478 * 完成时间确认
466 */ 479 */
467 finishTimeConfirm(e) { 480 finishTimeConfirm(e) {
468 console.log('选择的完成时间:', e) 481 console.log('选择的完成时间:', e)
469 - this.workOrderForm.finishTime = timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')  
470 - this.show = false; 482 + this.workOrderForm.finishTime = timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
  483 + this.show = false
471 }, 484 },
472 485
473 -  
474 /** 486 /**
475 * 隐藏键盘 487 * 隐藏键盘
476 */ 488 */
@@ -504,12 +516,11 @@ export default { @@ -504,12 +516,11 @@ export default {
504 lonLatAddress: this.workOrderForm.workLocation, 516 lonLatAddress: this.workOrderForm.workLocation,
505 pressingType: this.workOrderForm.pressingType, 517 pressingType: this.workOrderForm.pressingType,
506 orderName: this.workOrderForm.orderName, 518 orderName: this.workOrderForm.orderName,
507 - birthday: this.workOrderForm.birthday, // 新增:生日字段提交  
508 - finishTime: this.workOrderForm.finishTime, // 新增:完成时间提交 519 + finishTime: this.workOrderForm.finishTime,
509 sourceId: 1, 520 sourceId: 1,
510 sourceName: '园林', 521 sourceName: '园林',
511 thirdWorkNo: '', 522 thirdWorkNo: '',
512 - busiLine:'yl' 523 + busiLine: 'yl'
513 } 524 }
514 525
515 // 显示加载中 526 // 显示加载中
@@ -564,9 +575,5 @@ export default { @@ -564,9 +575,5 @@ export default {
564 background: #fff; 575 background: #fff;
565 } 576 }
566 577
567 -// 底部按钮样式  
568 -.fixed-bottom-btn-wrap {  
569 - padding: 20rpx;  
570 - background: #fff;  
571 -} 578 +
572 </style> 579 </style>
573 \ No newline at end of file 580 \ No newline at end of file