From 1f55a1dc8273985685b79604dc9d60b908319934 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 16 九月 2025 16:21:08 +0800
Subject: [PATCH] 打卡记录页面

---
 src/views/collaborativeApproval/attendanceManagement/index.vue |  321 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 321 insertions(+), 0 deletions(-)

diff --git a/src/views/collaborativeApproval/attendanceManagement/index.vue b/src/views/collaborativeApproval/attendanceManagement/index.vue
index ce6709d..f6a3e3c 100644
--- a/src/views/collaborativeApproval/attendanceManagement/index.vue
+++ b/src/views/collaborativeApproval/attendanceManagement/index.vue
@@ -129,6 +129,52 @@
           </el-table>
         </div>
       </el-tab-pane>
+
+      <!-- 鎵撳崱璁板綍 -->
+      <el-tab-pane label="鎵撳崱璁板綍" name="attendance">
+        <div class="tab-content">
+          <div style="margin-bottom: 20px;">
+            <el-date-picker
+              v-model="attendanceDate"
+              type="date"
+              placeholder="閫夋嫨鏃ユ湡"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              style="margin-right: 10px;"
+              @change="filterAttendanceData"
+            />
+            <el-select
+              v-model="attendanceStatus"
+              placeholder="閫夋嫨鐘舵��"
+              style="width: 120px; margin-right: 10px;"
+              @change="filterAttendanceData"
+            >
+              <el-option label="鍏ㄩ儴" value="" />
+              <el-option label="姝e父" value="normal" />
+              <el-option label="杩熷埌" value="late" />
+              <el-option label="鏃╅��" value="early" />
+              <el-option label="缂哄嫟" value="absent" />
+            </el-select>
+            <el-button type="primary" @click="exportAttendance">瀵煎嚭璁板綍</el-button>
+          </div>
+
+          <el-table :data="filteredAttendanceData" border style="width: 100%;">
+            <el-table-column prop="employeeName" label="鍛樺伐濮撳悕" width="120" />
+            <el-table-column prop="department" label="閮ㄩ棬" width="120" />
+            <el-table-column prop="date" label="鏃ユ湡" width="120" />
+            <el-table-column prop="clockInTime" label="涓婄彮鎵撳崱" width="120" />
+            <el-table-column prop="clockOutTime" label="涓嬬彮鎵撳崱" width="120" />
+            <el-table-column prop="workHours" label="宸ヤ綔鏃堕暱" width="100" align="center" />
+            <el-table-column prop="status" label="鐘舵��" width="100" align="center">
+              <template #default="scope">
+                <el-tag :type="getAttendanceTagType(scope.row.status)">{{ getAttendanceStatusLabel(scope.row.status) }}</el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column prop="location" label="鎵撳崱鍦扮偣" width="150" />
+            <el-table-column prop="remark" label="澶囨敞" min-width="150" />
+          </el-table>
+        </div>
+      </el-tab-pane>
     </el-tabs>
 
     <!-- 閫氱敤寮圭獥 -->
@@ -290,6 +336,12 @@
 const overtimeData = ref([])
 const worktimeData = ref([])
 
+// 鎵撳崱璁板綍鐩稿叧鏁版嵁
+const attendanceData = ref([])
+const filteredAttendanceData = ref([])
+const attendanceDate = ref('')
+const attendanceStatus = ref('')
+
 // 琛ㄥ崟鏁版嵁
 const form = reactive({
   name: '',
@@ -389,6 +441,27 @@
     regular: '姝e紡鍛樺伐', probation: '璇曠敤鏈熷憳宸�', intern: '瀹炰範鐢�'
   }
   return labelMap[type] || type
+}
+
+// 鎵撳崱璁板綍鐩稿叧宸ュ叿鍑芥暟
+const getAttendanceTagType = (status) => {
+  const tagMap = {
+    normal: 'success',
+    late: 'warning', 
+    early: 'warning',
+    absent: 'danger'
+  }
+  return tagMap[status] || 'info'
+}
+
+const getAttendanceStatusLabel = (status) => {
+  const labelMap = {
+    normal: '姝e父',
+    late: '杩熷埌',
+    early: '鏃╅��', 
+    absent: '缂哄嫟'
+  }
+  return labelMap[status] || status
 }
 
 const getTypeOptions = () => {
@@ -773,6 +846,253 @@
   }
 }
 
+// 鎵撳崱璁板綍杩囨护鍔熻兘
+const filterAttendanceData = () => {
+  let filtered = attendanceData.value
+  
+  // 鎸夋棩鏈熻繃婊�
+  if (attendanceDate.value) {
+    filtered = filtered.filter(item => item.date === attendanceDate.value)
+  }
+  
+  // 鎸夌姸鎬佽繃婊�
+  if (attendanceStatus.value) {
+    filtered = filtered.filter(item => item.status === attendanceStatus.value)
+  }
+  
+  filteredAttendanceData.value = filtered
+}
+
+// 瀵煎嚭鎵撳崱璁板綍
+const exportAttendance = () => {
+  ElMessage.success('瀵煎嚭鍔熻兘寮�鍙戜腑...')
+}
+
+// 鍒濆鍖栨墦鍗¤褰曞亣鏁版嵁
+const initAttendanceData = () => {
+  const mockData = [
+    {
+      id: 1,
+      employeeName: '闄堝織寮�',
+      department: '鎶�鏈儴',
+      date: '2025-08-15',
+      clockInTime: '09:00:00',
+      clockOutTime: '18:00:00',
+      workHours: '8.0h',
+      status: 'normal',
+      location: '鍏徃鎬婚儴',
+      remark: ''
+    },
+    {
+      id: 2,
+      employeeName: '鏉庨洩姊�',
+      department: '甯傚満閮�',
+      date: '2025-08-16',
+       clockInTime: '08:58:00',
+       clockOutTime: '18:05:00',
+       workHours: '8.12h',
+       status: 'normal',
+       location: '鍏徃鎬婚儴',
+       remark: ''
+     },
+     {
+       id: 3,
+       employeeName: '鐜嬪缓鍗�',
+       department: '浜轰簨閮�',
+       date: '2025-08-16',
+       clockInTime: '09:02:00',
+       clockOutTime: '18:00:00',
+       workHours: '7.97h',
+       status: 'normal',
+       location: '鍏徃鎬婚儴',
+       remark: ''
+     },
+     {
+       id: 4,
+       employeeName: '璧垫檽涓�',
+       department: '璐㈠姟閮�',
+       date: '2025-09-02',
+       clockInTime: '08:55:00',
+       clockOutTime: '18:10:00',
+       workHours: '8.25h',
+       status: 'normal',
+       location: '鍏徃鎬婚儴',
+       remark: ''
+     },
+     {
+       id: 5,
+       employeeName: '寮犲浗搴�',
+       department: '鎶�鏈儴',
+       date: '2025-09-02',
+       clockInTime: '09:00:00',
+       clockOutTime: '18:30:00',
+       workHours: '8.5h',
+       status: 'normal',
+       location: '鍏徃鎬婚儴',
+       remark: '鍔犵彮'
+     },
+     {
+       id: 6,
+       employeeName: '鍒樻槑杈�',
+       department: '杩愯惀閮�',
+       date: '2025-09-03',
+       clockInTime: '09:05:00',
+       clockOutTime: '18:00:00',
+       workHours: '7.92h',
+       status: 'normal',
+       location: '鍏徃鎬婚儴',
+       remark: ''
+     },
+     {
+       id: 7,
+       employeeName: '瀛欎附鍗�',
+       department: '璁捐閮�',
+       date: '2025-09-03',
+       clockInTime: '08:59:00',
+       clockOutTime: '18:02:00',
+       workHours: '8.05h',
+       status: 'normal',
+       location: '鍏徃鎬婚儴',
+       remark: ''
+     },
+     {
+       id: 8,
+       employeeName: '鍛ㄥ缓鍐�',
+       department: '閿�鍞儴',
+       date: '2025-09-04',
+       clockInTime: '09:15:00',
+       clockOutTime: '18:00:00',
+       workHours: '7.75h',
+       status: 'late',
+       location: '鍏徃鎬婚儴',
+       remark: '浜ら�氬牭濉�'
+     },
+     {
+       id: 9,
+       employeeName: '鍚村皬鑺�',
+       department: '瀹㈡湇閮�',
+       date: '2025-09-04',
+       clockInTime: '09:01:00',
+       clockOutTime: '18:00:00',
+       workHours: '7.98h',
+       status: 'normal',
+       location: '鍏徃鎬婚儴',
+       remark: ''
+     },
+     {
+       id: 10,
+       employeeName: '椹枃鏉�',
+       department: '鎶�鏈儴',
+       date: '2025-09-05',
+       clockInTime: '08:57:00',
+       clockOutTime: '17:30:00',
+       workHours: '7.55h',
+       status: 'early',
+       location: '鍏徃鎬婚儴',
+       remark: '鏈夋�ヤ簨鎻愬墠绂诲紑'
+     },
+     {
+       id: 11,
+       employeeName: '鏋楁檽涓�',
+       department: '琛屾斂閮�',
+       date: '2025-09-05',
+       clockInTime: '09:03:00',
+       clockOutTime: '18:08:00',
+       workHours: '8.08h',
+       status: 'normal',
+       location: '鍏徃鎬婚儴',
+       remark: ''
+     },
+     {
+       id: 12,
+       employeeName: '榛勭編鐜�',
+       department: '璐㈠姟閮�',
+       date: '2025-09-06',
+       clockInTime: '',
+       clockOutTime: '',
+       workHours: '0h',
+       status: 'absent',
+       location: '',
+       remark: '璇风梾鍋�'
+     },
+    {
+      id: 13,
+      employeeName: '閮戞捣娑�',
+      department: '甯傚満閮�',
+      date: '2025-08-14',
+      clockInTime: '09:00:00',
+      clockOutTime: '18:00:00',
+      workHours: '8.0h',
+      status: 'normal',
+      location: '鍏徃鎬婚儴',
+      remark: ''
+    },
+    {
+      id: 14,
+      employeeName: '璋附濞�',
+      department: '浜轰簨閮�',
+      date: '2025-08-20',
+      clockInTime: '08:58:00',
+      clockOutTime: '18:03:00',
+      workHours: '8.08h',
+      status: 'normal',
+      location: '鍏徃鎬婚儴',
+      remark: ''
+    },
+    {
+      id: 15,
+      employeeName: '浣曞織浼�',
+      department: '鎶�鏈儴',
+      date: '2025-08-21',
+      clockInTime: '09:10:00',
+      clockOutTime: '18:00:00',
+      workHours: '7.83h',
+      status: 'late',
+      location: '鍏徃鎬婚儴',
+      remark: ''
+    },
+    {
+      id: 16,
+      employeeName: '璁搁泤鑺�',
+      department: '璁捐閮�',
+      date: '2025-08-22',
+      clockInTime: '09:01:00',
+      clockOutTime: '18:00:00',
+      workHours: '7.98h',
+      status: 'normal',
+      location: '鍏徃鎬婚儴',
+      remark: ''
+    },
+    {
+      id: 17,
+      employeeName: '閭撳缓骞�',
+      department: '杩愯惀閮�',
+      date: '2025-09-10',
+      clockInTime: '08:59:00',
+      clockOutTime: '18:05:00',
+      workHours: '8.1h',
+      status: 'normal',
+      location: '鍏徃鎬婚儴',
+      remark: ''
+    },
+    {
+      id: 18,
+      employeeName: '鏇惧皬绾�',
+      department: '瀹㈡湇閮�',
+      date: '2025-09-11',
+      clockInTime: '09:02:00',
+      clockOutTime: '18:00:00',
+      workHours: '7.97h',
+      status: 'normal',
+      location: '鍏徃鎬婚儴',
+      remark: ''
+    }
+  ]
+  
+  attendanceData.value = mockData
+  filteredAttendanceData.value = mockData
+}
+
 // 鍒犻櫎椤圭洰
 const deleteItem = (type, row) => {
   ElMessageBox.confirm('纭畾瑕佸垹闄よ繖涓」鐩悧锛�', '鎻愮ず', {
@@ -888,6 +1208,7 @@
   getAnnualLeaveSettingList()
   getOvertimeSettingList()
   getWorkingHoursSettingList()
+  initAttendanceData()
   console.log('鑰冨嫟绠$悊椤甸潰鍔犺浇瀹屾垚')
 })
 

--
Gitblit v1.9.3