zhangwencui
40 分钟以前 f08a81f01bc4a4104dd9ef04e071bb0bd0eb8afe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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>