diff --git a/src/views/mes/cal/calendar/TeamView.vue b/src/views/mes/cal/calendar/TeamView.vue
index c847ae889..2557ad839 100644
--- a/src/views/mes/cal/calendar/TeamView.vue
+++ b/src/views/mes/cal/calendar/TeamView.vue
@@ -33,26 +33,16 @@
diff --git a/src/views/mes/cal/calendar/TypeView.vue b/src/views/mes/cal/calendar/TypeView.vue
index 70de72522..ea06668c9 100644
--- a/src/views/mes/cal/calendar/TypeView.vue
+++ b/src/views/mes/cal/calendar/TypeView.vue
@@ -33,91 +33,38 @@
diff --git a/src/views/mes/cal/calendar/useCalendar.ts b/src/views/mes/cal/calendar/useCalendar.ts
new file mode 100644
index 000000000..2f9db7f98
--- /dev/null
+++ b/src/views/mes/cal/calendar/useCalendar.ts
@@ -0,0 +1,90 @@
+import { ref, watch } from 'vue'
+import { CalCalendarApi, CalCalendarDayVO } from '@/api/mes/cal/calendar'
+import { CalHolidayApi, CalHolidayVO } from '@/api/mes/cal/holiday'
+import { formatDate } from '@/utils/formatTime'
+import { HolidayType } from '@/views/mes/utils/constants'
+
+/**
+ * 排班日历通用 composable
+ *
+ * 封装日历组件中通用的响应式状态、假期加载、排班查询、月份切换逻辑
+ */
+export function useCalendar() {
+ const loading = ref(false)
+ const currentDate = ref(new Date())
+ const calendarDayMap = ref