浏览代码

feat(违禁品上报): 添加常见违禁品选择及相关字段

新增是否常见违禁品单选组及相关逻辑,包括:
1. 添加常见违禁品单选组及选项
2. 根据选择显示违禁品描述输入框
3. 添加相关验证规则
4. 调整照片上传组件的显示逻辑
5. 优化表单数据结构
huoyi 1 周之前
父节点
当前提交
cc48f91708
共有 1 个文件被更改,包括 112 次插入59 次删除
  1. 112 59
      src/pages/seizedReported/index.vue

+ 112 - 59
src/pages/seizedReported/index.vue

@@ -138,11 +138,35 @@
138 138
               <uni-forms-item label="数量" name="quantity" required>
139 139
                 <view class="number-input">
140 140
                   <uni-easyinput :disabled="isDetailMode" v-model="formData.quantity" type="number" placeholder="1"
141
-                    class="input-number" />
141
+                    class="input-number" @input="onQuantityInput" />
142 142
                   <!-- <uni-data-picker :localdata="item_unit_options" :map="dataOptionMap" popup-title="请选择单位"
143 143
                     v-model="formData.unit" @change="onUnitChange" name="unit" required /> -->
144 144
                 </view>
145 145
               </uni-forms-item>
146
+
147
+              <uni-forms-item label="是否常见违禁品" name="commonContraband" required>
148
+                <radio-group @change="onCommonForbiddenChange" class="radio-group"
149
+                  :class="{ 'disabled-group': isDetailMode }">
150
+                  <label class="radio-item" v-for="(item, index) in commonForbiddenOptions" :key="index">
151
+                    <radio :value="item.value" :checked="formData.commonContraband === item.value" color="#409EFF" />
152
+                    <text>{{ item.text }}</text>
153
+                  </label>
154
+                </radio-group>
155
+              </uni-forms-item>
156
+
157
+              <uni-forms-item v-if="formData.commonContraband === '0'" label="违禁品描述" name="contrabandDesc" required>
158
+                <uni-easyinput :disabled="isDetailMode" placeholder="请输入违禁品详细描述" v-model="formData.contrabandDesc" />
159
+              </uni-forms-item>
160
+
161
+              <!-- 违禁品照片 (当选择"否"时显示) -->
162
+              <uni-forms-item
163
+                v-if="(!isDetailMode || isDetailMode && formData.images.length > 0) && formData.commonContraband === '0'"
164
+                label="违禁品照片">
165
+                <view style="padding: 0 15px 15px 15px;">
166
+                  <uni-file-picker :disabled="isDetailMode" v-model="formData.images" limit="3" title="最多上传3张"
167
+                    :image-styles="imageStyles" fileMediatype="image" mode="grid" @select="onSelect" />
168
+                </view>
169
+              </uni-forms-item>
146 170
             </uni-collapse-item>
147 171
           </uni-collapse>
148 172
         </view>
@@ -191,7 +215,7 @@
191 215
         </view>
192 216
 
193 217
         <!-- 违禁品照片分组 -->
194
-        <view class="card" v-if="!isDetailMode || isDetailMode && formData.images.length > 0">
218
+         <!--<view class="card" v-if="!isDetailMode || isDetailMode && formData.images.length > 0">
195 219
           <uni-collapse class="collapse" :accordion="false" :value="['group4']">
196 220
             <uni-collapse-item class="collapse-item" title="违禁品照片 (可选)" name="group4" :show-animation="true">
197 221
               <view style="padding: 0 15px 15px 15px;margin-bottom: 150rpx;">
@@ -200,7 +224,7 @@
200 224
               </view>
201 225
             </uni-collapse-item>
202 226
           </uni-collapse>
203
-        </view>
227
+        </view>-->
204 228
 
205 229
         <!-- 5. 审批历史分组 -->
206 230
         <view class="card" v-if="type !== 'add'">
@@ -305,6 +329,73 @@ export default {
305 329
     isDetailMode() {
306 330
 
307 331
       return !!this.businessId; // 如果有id则为详情模式,否则为新增模式
332
+    },
333
+    // 验证规则
334
+    rules() {
335
+      return {
336
+        seizureTime: {
337
+          rules: [{ required: true, errorMessage: '请选择查获时间' }]
338
+        },
339
+        checkMethodText: {
340
+          rules: [{ required: true, errorMessage: '请选择安检位置' }]
341
+        },
342
+        reportTeam: {
343
+          rules: [{ required: true, errorMessage: '请选择上报班组' }]
344
+        },
345
+        powerOnInstruction: {
346
+          rules: [{ required: true, errorMessage: '请选择开机指令' }]
347
+        },
348
+        xrayOperatorId: {
349
+          rules: [{ required: true, errorMessage: '请选择X光开机员' }]
350
+        },
351
+        forbiddenCategory: {
352
+          rules: [{ required: true, errorMessage: '请选择违禁品类别' }]
353
+        },
354
+        forbiddenType: {
355
+          rules: [{ required: true, errorMessage: '请选择违禁品类型' }]
356
+        },
357
+        // forbiddenName: {
358
+        //   rules: [{ required: true, errorMessage: '请输入违禁品名称' }]
359
+        // },
360
+        quantity: {
361
+          rules: [
362
+            { required: true, errorMessage: '请输入数量' },
363
+            { format: 'number', errorMessage: '数量必须为数字' }
364
+          ]
365
+        },
366
+        partCategory: {
367
+          rules: [{ required: true, errorMessage: '请选择部位类别' }]
368
+        },
369
+        unit: {
370
+          rules: [{ required: true, errorMessage: '请选择违禁品数量单位' }]
371
+        },
372
+        partType: {
373
+          rules: [{ required: true, errorMessage: '请选择部位类型' }]
374
+        },
375
+        // location: {
376
+        //   rules: [{ required: true, errorMessage: '请选择或输入具体位置' }]
377
+        // },
378
+        handlingMethod: {
379
+          rules: [{ required: true, errorMessage: '请选择处理方式' }]
380
+        },
381
+        isActiveConcealment: {
382
+          rules: [{ required: true, errorMessage: '请选择是否有意隐匿' }]
383
+        },
384
+        // passengerName: {
385
+        //   rules: [{ required: true, errorMessage: '请输入旅客姓名' }]
386
+        // }
387
+        commonContraband: {
388
+          rules: [{ required: true, errorMessage: '请选择是否常见违禁品' }]
389
+        },
390
+        contrabandDesc: {
391
+          rules: [
392
+            {
393
+              required: this.formData.commonContraband === '0',
394
+              errorMessage: '请填写违禁品描述'
395
+            }
396
+          ]
397
+        }
398
+      };
308 399
     }
309 400
   },
310 401
   data() {
@@ -361,7 +452,8 @@ export default {
361 452
         passengerName: '',
362 453
         passengerId: '',
363 454
         flightNumber: '',
364
-
455
+        commonContraband: '1', // 是否常见违禁品:1-是,0-否
456
+        contrabandDesc: '', // 违禁品描述(选择否时必填)
365 457
         // 照片
366 458
         images: [],
367 459
 
@@ -384,62 +476,10 @@ export default {
384 476
         checkMethodDesc: '无',
385 477
         passengerCard: '',
386 478
         flightNumber: '',
387
-
388
-      },
389
-      // 验证规则
390
-      rules: {
391
-        seizureTime: {
392
-          rules: [{ required: true, errorMessage: '请选择查获时间' }]
393
-        },
394
-        checkMethodText: {
395
-          rules: [{ required: true, errorMessage: '请选择安检位置' }]
396
-        },
397
-        reportTeam: {
398
-          rules: [{ required: true, errorMessage: '请选择上报班组' }]
399
-        },
400
-        powerOnInstruction: {
401
-          rules: [{ required: true, errorMessage: '请选择开机指令' }]
402
-        },
403
-        xrayOperatorId: {
404
-          rules: [{ required: true, errorMessage: '请选择X光开机员' }]
405
-        },
406
-        forbiddenCategory: {
407
-          rules: [{ required: true, errorMessage: '请选择违禁品类别' }]
408
-        },
409
-        forbiddenType: {
410
-          rules: [{ required: true, errorMessage: '请选择违禁品类型' }]
411
-        },
412
-        // forbiddenName: {
413
-        //   rules: [{ required: true, errorMessage: '请输入违禁品名称' }]
414
-        // },
415
-        quantity: {
416
-          rules: [
417
-            { required: true, errorMessage: '请输入数量' },
418
-            { format: 'number', errorMessage: '数量必须为数字' }
419
-          ]
420
-        },
421
-        partCategory: {
422
-          rules: [{ required: true, errorMessage: '请选择部位类别' }]
423
-        },
424
-        unit: {
425
-          rules: [{ required: true, errorMessage: '请选择违禁品数量单位' }]
426
-        },
427
-        partType: {
428
-          rules: [{ required: true, errorMessage: '请选择部位类型' }]
429
-        },
430
-        // location: {
431
-        //   rules: [{ required: true, errorMessage: '请选择或输入具体位置' }]
432
-        // },
433
-        handlingMethod: {
434
-          rules: [{ required: true, errorMessage: '请选择处理方式' }]
435
-        },
436
-        isActiveConcealment: {
437
-          rules: [{ required: true, errorMessage: '请选择是否有意隐匿' }]
438
-        },
439
-        // passengerName: {
440
-        //   rules: [{ required: true, errorMessage: '请输入旅客姓名' }]
441
-        // }
479
+        commonContraband: '1', // 是否常见违禁品:1-是,0-否
480
+        contrabandDesc: '', // 违禁品描述(选择否时必填)
442 481
       },
482
+
443 483
       // 数据选项
444 484
       item_check_method_options: [],   // 检查岗位
445 485
       position_options: [],  // 位置通道
@@ -462,6 +502,11 @@ export default {
462 502
         { text: '指令', value: '0' },
463 503
         { text: '非指令', value: '1' }
464 504
       ],
505
+      // 是否常见违禁品选项
506
+      commonForbiddenOptions: [
507
+        { text: '是', value: '1' },
508
+        { text: '否', value: '0' }
509
+      ],
465 510
       // X光开机员选项
466 511
       xrayOperatorOptions: [],
467 512
       // 其他数据
@@ -530,6 +575,14 @@ export default {
530 575
 
531 576
   },
532 577
   methods: {
578
+    // 处理是否常见违禁品选择变化
579
+    onCommonForbiddenChange(e) {
580
+      this.formData.commonContraband = e.detail.value
581
+      // 如果选择"是",清空违禁品描述
582
+      if (e.detail.value === '1') {
583
+        this.formData.contrabandDesc = ''
584
+      }
585
+    },
533 586
     // 处理驳回确认
534 587
     // handleRejectConfirm(rejectReason) {
535 588
     //   this.formData.comment = rejectReason