From b74d628be8ff57a22e4e4a5a164e755a509820ec Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 07 七月 2026 16:50:18 +0800
Subject: [PATCH] 银川 1.员工管理页面开发、联调 2.薪资发放页面开发联调 3.薪酬管理页面开发联调 4.添加请假扣薪管理页面开发联调

---
 src/views/hrm/employee/modules/detail.vue |  102 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 102 insertions(+), 0 deletions(-)

diff --git a/src/views/hrm/employee/modules/detail.vue b/src/views/hrm/employee/modules/detail.vue
new file mode 100644
index 0000000..ca20c47
--- /dev/null
+++ b/src/views/hrm/employee/modules/detail.vue
@@ -0,0 +1,102 @@
+<script lang="ts" setup>
+import type { HrmEmployeeApi } from '#/api/hrm/employee';
+
+import { computed } from 'vue';
+
+import { Descriptions, DescriptionsItem, Tabs, TabPane, Tag } from 'ant-design-vue';
+
+import { DICT_TYPE } from '#/packages/constants/src';
+import { getDictLabel } from '#/packages/effects/hooks/src';
+
+import EducationList from './education-list.vue';
+import WorkHistoryList from './work-history-list.vue';
+import EmergencyContactList from './emergency-contact-list.vue';
+import SocialSecurityList from './social-security-list.vue';
+
+const props = defineProps<{
+  employee: HrmEmployeeApi.Employee;
+}>();
+
+const genderLabel = computed(() =>
+  getDictLabel(DICT_TYPE.HRM_GENDER, props.employee.gender),
+);
+
+const employeeStatusLabel = computed(() =>
+  getDictLabel(DICT_TYPE.HRM_EMPLOYEE_STATUS, props.employee.employeeStatus),
+);
+
+const employeeStatusColor = computed(() => {
+  const status = props.employee.employeeStatus;
+  if (status === 1) return 'success';
+  if (status === 2) return 'processing';
+  if (status === 3) return 'default';
+  return 'default';
+});
+</script>
+
+<template>
+  <div class="employee-detail">
+    <!-- 鍩烘湰淇℃伅 -->
+    <Descriptions title="鍩烘湰淇℃伅" bordered :column="2" class="mb-4">
+      <DescriptionsItem label="鍛樺伐缂栧彿">{{ employee.employeeNo }}</DescriptionsItem>
+      <DescriptionsItem label="鍛樺伐濮撳悕">{{ employee.name }}</DescriptionsItem>
+      <DescriptionsItem label="鎬у埆">{{ genderLabel }}</DescriptionsItem>
+      <DescriptionsItem label="鍑虹敓鏃ユ湡">{{ employee.birthday || '-' }}</DescriptionsItem>
+      <DescriptionsItem label="鎵嬫満鍙风爜">{{ employee.phone }}</DescriptionsItem>
+      <DescriptionsItem label="閭">{{ employee.email || '-' }}</DescriptionsItem>
+      <DescriptionsItem label="韬唤璇佸彿">{{ employee.idCard || '-' }}</DescriptionsItem>
+      <DescriptionsItem label="鍛樺伐鐘舵��">
+        <Tag :color="employeeStatusColor">{{ employeeStatusLabel }}</Tag>
+      </DescriptionsItem>
+    </Descriptions>
+
+    <!-- 宸ヤ綔淇℃伅 -->
+    <Descriptions title="宸ヤ綔淇℃伅" bordered :column="2" class="mb-4">
+      <DescriptionsItem label="褰掑睘閮ㄩ棬">{{ employee.deptName || '-' }}</DescriptionsItem>
+      <DescriptionsItem label="宀椾綅">{{ employee.postName || '-' }}</DescriptionsItem>
+      <DescriptionsItem label="鍏ヨ亴鏃ユ湡">{{ employee.hireDate }}</DescriptionsItem>
+      <DescriptionsItem label="杞鏃ユ湡">{{ employee.regularDate || '-' }}</DescriptionsItem>
+      <DescriptionsItem label="绂昏亴鏃ユ湡">{{ employee.leaveDate || '-' }}</DescriptionsItem>
+      <DescriptionsItem label="鍩烘湰宸ヨ祫">{{ employee.baseSalary ? `楼${employee.baseSalary.toFixed(2)}` : '-' }}</DescriptionsItem>
+      <DescriptionsItem label="鐢ㄦ埛瑙掕壊" :span="2">
+        {{ Array.isArray(employee.roleNames) ? employee.roleNames.join('銆�') : employee.roleNames || '-' }}
+      </DescriptionsItem>
+      <DescriptionsItem label="骞村亣浣欓">{{ employee.annualLeaveBalance ?? 0 }} 澶�</DescriptionsItem>
+      <DescriptionsItem label="鐥呭亣浣欓">{{ employee.sickLeaveBalance ?? 0 }} 澶�</DescriptionsItem>
+    </Descriptions>
+
+    <!-- 璐㈠姟淇℃伅 -->
+    <Descriptions title="璐㈠姟淇℃伅" bordered :column="2" class="mb-4">
+      <DescriptionsItem label="寮�鎴烽摱琛�">{{ employee.bankName || '-' }}</DescriptionsItem>
+      <DescriptionsItem label="閾惰璐﹀彿">{{ employee.bankAccount || '-' }}</DescriptionsItem>
+      <DescriptionsItem label="灞呬綇鍦板潃" :span="2">{{ employee.address || '-' }}</DescriptionsItem>
+    </Descriptions>
+
+    <!-- 澶囨敞 -->
+    <Descriptions title="鍏朵粬淇℃伅" bordered :column="1" class="mb-4">
+      <DescriptionsItem label="澶囨敞">{{ employee.remark || '-' }}</DescriptionsItem>
+    </Descriptions>
+
+    <!-- 瀛愯〃淇℃伅 -->
+    <Tabs v-if="employee.id" class="mt-4">
+      <Tabs.TabPane key="education" tab="鏁欒偛缁忓巻">
+        <EducationList form-type="detail" :employee-id="employee.id" />
+      </Tabs.TabPane>
+      <Tabs.TabPane key="workHistory" tab="宸ヤ綔缁忓巻">
+        <WorkHistoryList form-type="detail" :employee-id="employee.id" />
+      </Tabs.TabPane>
+      <Tabs.TabPane key="emergencyContact" tab="绱ф�ヨ仈绯讳汉">
+        <EmergencyContactList form-type="detail" :employee-id="employee.id" />
+      </Tabs.TabPane>
+      <Tabs.TabPane key="socialSecurity" tab="绀句繚鍏Н閲戞。妗�">
+        <SocialSecurityList form-type="detail" :employee-id="employee.id" :user-id="employee.userId" />
+      </Tabs.TabPane>
+    </Tabs>
+  </div>
+</template>
+
+<style scoped>
+.employee-detail {
+  padding: 0 16px;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3