Kaynağa Gözat

移动端-安全检查-新增隐患下发功能

liuzhuo 1 hafta önce
ebeveyn
işleme
c741a1ccd4
1 değiştirilmiş dosya ile 219 ekleme ve 0 silme
  1. 219
    0
      src/view/safeCheck/safeCheck_item/index.vue

+ 219
- 0
src/view/safeCheck/safeCheck_item/index.vue Dosyayı Görüntüle

@@ -34,6 +34,16 @@
34 34
                   <div>状态:{{ item.state }}</div>
35 35
                 </div>
36 36
               </template>
37
+              <template #right-icon>
38
+                <van-button
39
+                  v-if="item.state === '待下发'"
40
+                  type="success"
41
+                  size="mini"
42
+                  @click.stop="handleSubmitXF(item)"
43
+                >
44
+                  下发
45
+                </van-button>
46
+              </template>
37 47
             </van-cell>
38 48
         </div>
39 49
       </van-list>
@@ -50,6 +60,73 @@
50 60
       <div>确定要删除该项目吗?</div>
51 61
     </van-dialog>
52 62
 
63
+    <!-- 下发隐患弹窗 -->
64
+    <van-dialog
65
+      v-model:show="submitXFDialogVisible"
66
+      title="下发隐患"
67
+      :show-cancel-button="true"
68
+      :close-on-click-overlay="false"
69
+      @confirm="confirmSubmitXF"
70
+      @cancel="cancelSubmitXF"
71
+    >
72
+      <van-form ref="submitXFFormRef" @submit="confirmSubmitXF">
73
+        <van-field
74
+          v-model="submitXFForm.repairSuggest"
75
+          name="repairSuggest"
76
+          label="整改建议"
77
+          type="textarea"
78
+          placeholder="请输入整改建议"
79
+          rows="4"
80
+          :rules="[{ required: true, message: '请输入整改建议' }]"
81
+        />
82
+        <van-field
83
+          v-model="submitXFForm.repairDdlText"
84
+          name="repairDdl"
85
+          label="整改时限"
86
+          placeholder="请选择整改时限"
87
+          readonly
88
+          is-link
89
+          @click="showDateTimePicker = true"
90
+          :rules="[{ required: true, message: '请选择整改时限' }]"
91
+        />
92
+      </van-form>
93
+    </van-dialog>
94
+
95
+    <!-- 日期时间选择器 -->
96
+    <van-popup v-model:show="showDateTimePicker" position="bottom" round style="max-height: 50vh;">
97
+      <van-date-picker
98
+        v-if="!dateOrTime"
99
+        v-model="currentDate"
100
+        title="选择日期"
101
+        :min-date="minDate"
102
+        @confirm="onDateConfirm"
103
+        @cancel="cancelDatePicker"
104
+      >
105
+        <template #confirm>
106
+          <van-button type="primary" @click="onDateConfirm">下一步</van-button>
107
+        </template>
108
+        <template #cancel>
109
+          <van-button type="danger" @click="cancelDatePicker">取消</van-button>
110
+        </template>
111
+      </van-date-picker>
112
+
113
+      <van-time-picker
114
+        v-if="dateOrTime"
115
+        v-model="currentTime"
116
+        title="选择时间"
117
+        :columns-type="['hour', 'minute', 'second']"
118
+        @confirm="onConfirmDateTime"
119
+        @cancel="cancelTimePicker"
120
+      >
121
+        <template #confirm>
122
+          <van-button type="primary" @click="onConfirmDateTime">确定</van-button>
123
+        </template>
124
+        <template #cancel>
125
+          <van-button type="danger" @click="cancelTimePicker">取消</van-button>
126
+        </template>
127
+      </van-time-picker>
128
+    </van-popup>
129
+
53 130
   </div>
54 131
 </template>
55 132
 
@@ -276,6 +353,147 @@ const edits = (row) => {
276 353
   });
277 354
 };
278 355
 
356
+// 下发隐患相关变量
357
+const submitXFDialogVisible = ref(false);
358
+const submitXFFormRef = ref(null);
359
+const currentSubmitRow = ref(null);
360
+const showDateTimePicker = ref(false);
361
+const minDate = ref(new Date());
362
+const maxDate = ref(new Date(2099, 11, 31));
363
+const dateOrTime = ref(false);
364
+const currentDate = ref();
365
+const currentTime = ref();
366
+
367
+const submitXFForm = ref({
368
+  repairSuggest: '',
369
+  repairDdl: '',
370
+  repairDdlText: ''
371
+});
372
+
373
+// 打开下发弹窗
374
+const handleSubmitXF = (row) => {
375
+  currentSubmitRow.value = row;
376
+  // 重置表单
377
+  submitXFForm.value = {
378
+    repairSuggest: '',
379
+    repairDdl: '',
380
+    repairDdlText: ''
381
+  };
382
+  dateOrTime.value = false;
383
+  // 初始化日期和时间
384
+  const now = new Date();
385
+  currentDate.value = [now.getFullYear(), now.getMonth() + 1, now.getDate()];
386
+  currentTime.value = [
387
+    String(now.getHours()).padStart(2, '0'),
388
+    String(now.getMinutes()).padStart(2, '0'),
389
+    String(now.getSeconds()).padStart(2, '0')
390
+  ];
391
+  submitXFDialogVisible.value = true;
392
+};
393
+
394
+// 日期选择确认
395
+const onDateConfirm = () => {
396
+  dateOrTime.value = true;
397
+};
398
+
399
+// 取消日期选择
400
+const cancelDatePicker = () => {
401
+  showDateTimePicker.value = false;
402
+  dateOrTime.value = false;
403
+};
404
+
405
+// 取消时间选择
406
+const cancelTimePicker = () => {
407
+  showDateTimePicker.value = false;
408
+  dateOrTime.value = false;
409
+};
410
+
411
+// 确认日期时间选择
412
+const onConfirmDateTime = () => {
413
+  const year = currentDate.value[0];
414
+  const month = currentDate.value[1].toString().padStart(2, '0');
415
+  const day = currentDate.value[2].toString().padStart(2, '0');
416
+  const hours = currentTime.value[0].toString().padStart(2, '0');
417
+  const minutes = currentTime.value[1].toString().padStart(2, '0');
418
+  const seconds = currentTime.value[2].toString().padStart(2, '0');
419
+
420
+  const dateTimeStr = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
421
+  submitXFForm.value.repairDdl = dateTimeStr;
422
+  submitXFForm.value.repairDdlText = dateTimeStr;
423
+  showDateTimePicker.value = false;
424
+  dateOrTime.value = false;
425
+};
426
+
427
+// 确认下发
428
+const confirmSubmitXF = async () => {
429
+  try {
430
+    // 验证表单
431
+    if (submitXFFormRef.value) {
432
+      try {
433
+        await submitXFFormRef.value.validate();
434
+      } catch (validateError) {
435
+        // 表单验证失败,不继续执行
436
+        return;
437
+      }
438
+    }
439
+    
440
+    // 检查必填项
441
+    if (!submitXFForm.value.repairSuggest || !submitXFForm.value.repairDdl) {
442
+      showToast({
443
+        type: 'fail',
444
+        message: '请填写完整信息'
445
+      });
446
+      return;
447
+    }
448
+
449
+    // 将整改建议和整改时限添加到row数据中
450
+    const submitData = {
451
+      ...currentSubmitRow.value,
452
+      repairSuggest: submitXFForm.value.repairSuggest,
453
+      repairDdl: submitXFForm.value.repairDdl
454
+    };
455
+    
456
+    const url = 'sgsafe/CheckResultItem/saveXF';
457
+    const param = {
458
+      json: JSON.stringify(submitData)
459
+    };
460
+    
461
+    const response = await proxy.$axios.post(url, param);
462
+    if (response.data.code === 0) {
463
+      showToast({
464
+        type: 'success',
465
+        message: '下发成功'
466
+      });
467
+      submitXFDialogVisible.value = false;
468
+      // 刷新列表
469
+      basicReset();
470
+      onLoad();
471
+    } else {
472
+      showToast({
473
+        type: 'fail',
474
+        message: '操作失败!' + response.data.msg
475
+      });
476
+    }
477
+  } catch (error) {
478
+    console.error('下发失败:', error);
479
+    showToast({
480
+      type: 'fail',
481
+      message: '操作失败: ' + (error.message || '未知错误')
482
+    });
483
+  }
484
+};
485
+
486
+// 取消下发
487
+const cancelSubmitXF = () => {
488
+  submitXFDialogVisible.value = false;
489
+  submitXFForm.value = {
490
+    repairSuggest: '',
491
+    repairDdl: '',
492
+    repairDdlText: ''
493
+  };
494
+  dateOrTime.value = false;
495
+};
496
+
279 497
 </script>
280 498
 
281 499
 <style scoped>
@@ -303,6 +521,7 @@ const edits = (row) => {
303 521
   display: -webkit-box;                     /* 旧版弹性盒子模型 */
304 522
   -webkit-box-orient: vertical;             /* 内容垂直排列 */
305 523
   -webkit-line-clamp: 2;                    /* 限制显示行数 */
524
+  line-clamp: 2;                            /* 标准属性 */
306 525
   overflow: hidden;                         /* 超出隐藏 */
307 526
   text-overflow: ellipsis;                  /* 省略号 */
308 527
   line-height: 1.5;                         /* 可选:设置行高 */

Loading…
İptal
Kaydet