From c832bf2e80ac465e71b7a1c1f7a59d4252030989 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 05 Aug 2025 17:33:08 +0800
Subject: [PATCH] feat:事件工单滚动条

---
 src/views/wel/components/calendarBox.vue |  134 ++++++++++++++++++++++++++------------------
 1 files changed, 79 insertions(+), 55 deletions(-)

diff --git a/src/views/wel/components/calendarBox.vue b/src/views/wel/components/calendarBox.vue
index 4e9db2c..899c4fa 100644
--- a/src/views/wel/components/calendarBox.vue
+++ b/src/views/wel/components/calendarBox.vue
@@ -1,6 +1,9 @@
 <template>
   <div class="calenBox">
-    <el-calendar ref="calendar" v-model="currentMonth">
+    <el-calendar ref="calendar" v-model="currentMonth"  :class="{
+    'five-rows': weeksNeeded === 5,
+    'six-rows': weeksNeeded === 6
+  }">
       <template #header="{ date }">
         <div>
           <img :src="caleft" alt="" @click="selectDate('prev-month')" />
@@ -10,6 +13,7 @@
             :clearable="false"
             :prefix-icon="''"
             @change="handleMonthChange"
+            :format="'YYYY年M月'"
           />
           <img :src="caright" alt="" @click="selectDate('next-month')" />
         </div>
@@ -36,7 +40,6 @@
     </el-calendar>
   </div>
 </template>
-
 <script setup>
 import dayjs from 'dayjs';
 import { ref, watch, onMounted, nextTick } from 'vue';
@@ -46,7 +49,6 @@
 import ev2 from '@/assets/images/workbench/ev2.svg';
 import caleft from '@/assets/images/workbench/caleft.png';
 import caright from '@/assets/images/workbench/caright.png';
-
 const router = useRouter();
 const calendar = ref();
 const events = ref({});
@@ -61,31 +63,29 @@
   'work-order': ev1,
   task: ev2,
 });
+
+const monthRange = getCurrentMonthRange();
+params.value = monthRange;
 // 检查日期是否是当前月份
 const isCurrentMonth = date => {
   return dayjs(date).isSame(dayjs(), 'month');
 };
 // 处理月份选择器变化
 const handleMonthChange = val => {
-  const selectedDate = new Date(val);
-  const now = new Date();
-
+  const selectedMonth = new Date(val);
+  currentMonth.value = selectedMonth;
+  
   // 如果是当前月份,则选中当天;否则不选中
-  if (
-    selectedDate.getFullYear() === now.getFullYear() &&
-    selectedDate.getMonth() === now.getMonth()
-  ) {
-    currentMonth.value = selectedDate;
+  if (isCurrentMonth(selectedMonth)) {
+    selectedDate.value = new Date();
   } else {
-    currentMonth.value = selectedDate;
-    // 清除选中状态
-    nextTick(() => {
-      const selectedCells = document.querySelectorAll('.el-calendar-table td.is-selected');
-      selectedCells.forEach(cell => {
-        cell.classList.remove('is-selected');
-      });
-    });
+    selectedDate.value = null;
   }
+  
+  // 强制更新日历视图
+  nextTick(() => {
+    updateCalendarSelection();
+  });
 };
 
 // 获取日历数据
@@ -124,18 +124,34 @@
     currentMonth.value = dayjs(currentMonth.value).add(1, 'month').toDate();
   }
 
-  // 等待DOM更新
-  await nextTick();
+  // 如果是当前月份,则选中当天;否则不选中
+  if (isCurrentMonth(currentMonth.value)) {
+    selectedDate.value = new Date();
+  } else {
+    selectedDate.value = null;
+  }
 
-  // 强制清除所有选中状态
+  await nextTick();
+  updateCalendarSelection();
+};
+const updateCalendarSelection = () => {
+  // 清除所有选中状态
   const selectedCells = document.querySelectorAll('.el-calendar-table td.is-selected');
   selectedCells.forEach(cell => {
     cell.classList.remove('is-selected');
   });
 
-  // 如果是当前月份才设置选中
-  if (isCurrentMonth(currentMonth.value)) {
-    selectedDate.value = new Date();
+  // 如果是当前月份,设置当前日为选中状态
+  if (isCurrentMonth(currentMonth.value) && selectedDate.value) {
+    const currentDay = dayjs(selectedDate.value).date();
+    const calendarCells = document.querySelectorAll('.el-calendar-table td');
+    
+    calendarCells.forEach(cell => {
+      const day = parseInt(cell.querySelector('.date-number').textContent);
+      if (day === currentDay) {
+        cell.classList.add('is-selected');
+      }
+    });
   }
 };
 
@@ -148,14 +164,16 @@
       start_date: newDate.startOf('month').format('YYYY-MM-DD HH:mm:ss'),
       end_date: newDate.endOf('month').format('YYYY-MM-DD HH:mm:ss'),
     };
-
     // 如果是当前月份,则选中当天;否则清除选中
     if (isCurrentMonth(newMonth)) {
       selectedDate.value = new Date();
     } else {
       selectedDate.value = null;
     }
-
+    nextTick(() => {
+      updateCalendarSelection();
+    });
+    
     getJobEventBar();
   },
   { deep: true, immediate: true }
@@ -170,11 +188,6 @@
 const getEvents = dateString => {
   return events.value[dateString] || [];
 };
-
-// 初始化月份范围
-const monthRange = getCurrentMonthRange();
-params.value = monthRange;
-
 const jumpcalendar = (event, day) => {
   if (event.name === '工单') {
     router.push({
@@ -193,6 +206,20 @@
   }
 };
 
+const weeksNeeded = computed(() => {
+  const date = dayjs(currentMonth.value);
+  const firstDay = date.startOf('month').day(); // 0-6 (周日到周六)
+  const days = date.daysInMonth();
+
+  // 强制 2025 年 6 月显示六行
+   //if (date.year() === 2025 && date.month() === 5) {
+   //  return 6;
+  // }
+
+  // 其他月份按原逻辑计算
+  return Math.ceil((firstDay + days) / 7);
+})
+const isSixRows = computed(() => weeksNeeded.value > 5);
 onMounted(() => {
   // 初始化时如果是当前月份,选中当天;否则不选中
   if (isCurrentMonth(currentMonth.value)) {
@@ -200,19 +227,24 @@
   } else {
     selectedDate.value = null;
   }
+  
+  nextTick(() => {
+    updateCalendarSelection();
+  });
+  
   getJobEventBar();
 });
 </script>
 
 <style lang="scss">
 .calenBox {
-  height: pxToVh(660);
+  height: pxToVh(670);
   // 隐藏按钮组中间按钮
   .el-button-group > .el-button:not(:first-child):not(:last-child) {
     display: none;
   }
   .el-calendar__body {
-    padding-top: 0;
+    padding-top: 0 !important;
   }
   .date-number {
     font-size: 13px !important;
@@ -247,25 +279,12 @@
   }
   .el-calendar-table .el-calendar-day {
     box-sizing: border-box;
-    padding: 0.8rem;
+    padding: 0.4rem 0.8rem 0.8rem 0.8rem;
     background: #f5f7fa;
     border-radius: 6px 6px 6px 6px;
     border: 1px solid #efefef;
     margin-right: 5px;
     margin-bottom: 8px;
-  }
-
-  // 非选中日期的样式
-  .el-calendar-table td:not(.is-selected) {
-    .el-calendar-day {
-      background: #f5f7fa;
-      border: 1px solid #efefef;
-
-      .date-number {
-        font-weight: normal;
-        color: inherit;
-      }
-    }
   }
   .el-input__prefix-inner {
     display: none !important;
@@ -290,7 +309,7 @@
   .el-date-editor.el-input__wrapper {
     height: var(--el-input-height, var(--el-component-size));
 
-    width: 150px !important;
+    width: 170px !important;
   }
 }
 </style>
@@ -298,7 +317,7 @@
 <style lang="scss" scoped>
 .calenBox {
   margin-top: 10px;
-  height: pxToVh(622);
+  height: pxToVh(632);
   border-radius: 10px;
   overflow: hidden;
   background-color: #fff;
@@ -312,10 +331,14 @@
       font-size: 14px;
       color: #363636;
     }
-    .el-calendar-table .el-calendar-day {
-      height: pxToVh(85) !important;
-    }
-
+   
+ &.five-rows .el-calendar-table .el-calendar-day {
+    height: pxToVh(92) !important;
+  }
+  
+  &.six-rows .el-calendar-table .el-calendar-day {
+    height: pxToVh(78) !important;
+  }
     // 选中日期样式
     .el-calendar-table td.is-selected {
       .el-calendar-day {
@@ -331,6 +354,7 @@
     .el-calendar-table td.is-selected {
       background-color: transparent;
     }
+    
   }
 
   .event-item {
@@ -361,7 +385,7 @@
 
       span {
         font-weight: 600;
-        font-size: 18px;
+        font-size: 17px;
         color: #029d36;
         margin-left: 2px;
       }

--
Gitblit v1.9.3