Kaynağa Gözat

增加过期弹窗提醒

fengyu 2 ay önce
ebeveyn
işleme
abc88881ec
1 değiştirilmiş dosya ile 82 ekleme ve 2 silme
  1. 82 2
      src/pages/questionnaire.vue

+ 82 - 2
src/pages/questionnaire.vue

@@ -3,7 +3,7 @@
3 3
  * @Author: Fengyu
4 4
  * @Date: 2025-12-12 10:12:59
5 5
  * @LastEditors: Fengyu
6
- * @LastEditTime: 2025-12-17 11:12:47
6
+ * @LastEditTime: 2025-12-17 14:29:31
7 7
 -->
8 8
 <template>
9 9
   <view class="questionnaire-container">
@@ -38,7 +38,7 @@
38 38
             <view class="grid-title">1.您所在的服务区</view>
39 39
             <view class="grid-desc">
40 40
               <u-select v-model="parkSelectShow" :list="parkList" @confirm="confirm"></u-select>
41
-              <span @click="parkSelectShow = true">{{ parkName || '请选择' }}&nbsp;</span>
41
+              <span @click="parkSelectShow = true">{{ parkName || '请选择' }}&nbsp;<span style="position: relative; top: -2px;">⌵</span></span>
42 42
             </view>
43 43
           </view>
44 44
         </view>
@@ -91,6 +91,18 @@
91 91
         </view>
92 92
       </view>
93 93
     </view>
94
+    <!-- 过了填报日期,弹窗提醒 -->
95
+    <u-mask :show="!isFormAvailable" :mask-click-able="false">
96
+      <view class="warp">
97
+        <view class="rect" @tap.stop>
98
+          <view class="rect-content">
99
+            <view class="rect-title">提示</view>
100
+            <view class="rect-desc">当前时间已超过截止时间,无法填写</view>
101
+            <view class="rect-btn" @click="goHome">去首页</view>
102
+          </view>
103
+        </view>
104
+      </view>
105
+	  </u-mask>
94 106
   </view>
95 107
 </template>
96 108
 
@@ -215,6 +227,38 @@
215 227
     type: 0
216 228
   })
217 229
 
230
+  // 是否超时,超时显示弹窗
231
+  const isFormAvailable = ref(true)
232
+
233
+  /**
234
+   * 验证问卷截止时间
235
+   * @param {string} endAt 截止时间字符串,格式为"YYYY-MM-DD HH:MM:SS"
236
+   */
237
+  const validateEndTime = (endAt) => {
238
+    try {
239
+      // 将字符串转换为日期对象(兼容不同浏览器)
240
+      const endDate = new Date(endAt.replace(/-/g, '/'))
241
+      const currentDate = new Date()
242
+      
243
+      // 比较当前时间与截止时间
244
+      if (currentDate <= endDate) {
245
+        isFormAvailable.value = true
246
+      } else {
247
+        isFormAvailable.value = false
248
+      }
249
+    } catch (error) {
250
+      console.error('时间验证失败:', error)
251
+      // 如果时间格式解析失败,默认允许填写
252
+      isFormAvailable.value = true
253
+    }
254
+  }
255
+
256
+  const goHome = () => {
257
+    uni.switchTab({
258
+      url: '/pages/index'
259
+    })
260
+  }
261
+
218 262
   // 根据页面参数获取问卷详情
219 263
   onMounted(() => {
220 264
     getParkListApi()
@@ -233,6 +277,7 @@
233 277
     getQuestionnaireDetailApi(questionnaireId).then(res => {
234 278
       if (res.code === 200) {
235 279
         questionnaireInfo.value = res.data
280
+        validateEndTime(questionnaireInfo.value.endAt)
236 281
         // 如果questionnaireInfo.value.type == 2,不显示‘车辆维修站’
237 282
         if (questionnaireInfo.value.type == 2) {
238 283
           dataFilledIn.value = dataList.value.filter(item => item.id != 6)
@@ -522,4 +567,39 @@
522 567
     display: flex;
523 568
     justify-content: center;
524 569
   }
570
+  .warp {
571
+		display: flex;
572
+		align-items: center;
573
+		justify-content: center;
574
+		height: 100%;
575
+	}
576
+
577
+	.rect {
578
+		width: 60vw;
579
+    max-width: 400px;
580
+    background-color: #fff;
581
+    border-radius: 12rpx;
582
+    padding: 30rpx 30rpx;
583
+
584
+    .rect-title {
585
+      font-size: 32rpx;
586
+      font-weight: 600;
587
+      color: #333;
588
+      margin-bottom: 20rpx;
589
+      text-align: center;
590
+    }
591
+
592
+    .rect-btn {
593
+      width: 100%;
594
+      height: 80rpx;
595
+      line-height: 80rpx;
596
+      text-align: center;
597
+      font-size: 32rpx;
598
+      font-weight: 600;
599
+      color: #fff;
600
+      background: linear-gradient(to bottom, #7EBBF5, #4B9EF6);
601
+      border-radius: 10rpx;
602
+      margin-top: 40rpx;
603
+    }
604
+	}
525 605
 </style>