331 lines
11 KiB
Vue
331 lines
11 KiB
Vue
<template>
|
||
<div class="file-detail-container">
|
||
<lay-card title="员工档案详情" shadow="always">
|
||
<template #title>
|
||
<div class="card-title">
|
||
<div>员工档案详情</div>
|
||
<lay-button type="primary" size="sm" @click="goBack">返回</lay-button>
|
||
</div>
|
||
</template>
|
||
<div class="user-detail">
|
||
<!-- 基本信息区域 -->
|
||
<div class="detail-section">
|
||
<h3 class="section-title">基本信息</h3>
|
||
<div class="user-header">
|
||
<div class="avatar-container">
|
||
<img :src="userInfo.avatar || defaultAvatar" alt="用户头像" class="user-avatar">
|
||
</div>
|
||
<div class="basic-info">
|
||
<div class="info-grid">
|
||
<div class="info-item">
|
||
<span class="label">姓名:</span>
|
||
<span class="value">{{ userInfo.nickname || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">工号:</span>
|
||
<span class="value">{{ userInfo.work_number || userInfo.code || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">性别:</span>
|
||
<span class="value">{{ genderText }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">手机号:</span>
|
||
<span class="value">{{ userInfo.mobile || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">邮箱:</span>
|
||
<span class="value">{{ userInfo.email || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">生日:</span>
|
||
<span class="value">{{ userInfo.birthday || '暂无' }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 工作信息区域 -->
|
||
<div class="detail-section">
|
||
<h3 class="section-title">工作信息</h3>
|
||
<div class="info-grid">
|
||
<div class="info-item">
|
||
<span class="label">科室:</span>
|
||
<span class="value">{{ groupName || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">科室级别:</span>
|
||
<span class="value">{{ userInfo.group_level || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">党支部:</span>
|
||
<span class="value">{{ partyName || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">党支部级别:</span>
|
||
<span class="value">{{ userInfo.party_level || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">岗位名称:</span>
|
||
<span class="value">{{ userInfo.position || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">行政职务:</span>
|
||
<span class="value">{{ userInfo.administrative_position || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">业务性质:</span>
|
||
<span class="value">{{ userInfo.business_nature || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">角色:</span>
|
||
<span class="value">{{ roleName || '暂无' }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 证件信息区域 -->
|
||
<div class="detail-section">
|
||
<h3 class="section-title">证件信息</h3>
|
||
<div class="info-grid">
|
||
<div class="info-item">
|
||
<span class="label">身份证号码:</span>
|
||
<span class="value">{{ userInfo.member_code || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">资格证编码:</span>
|
||
<span class="value">{{ userInfo.certificate_code || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">执业证编码:</span>
|
||
<span class="value">{{ userInfo.license_code || '暂无' }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 系统信息区域 -->
|
||
<div class="detail-section">
|
||
<h3 class="section-title">系统信息</h3>
|
||
<div class="info-grid">
|
||
<div class="info-item">
|
||
<span class="label">账户名:</span>
|
||
<span class="value">{{ userInfo.username || '暂无' }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">状态:</span>
|
||
<span class="value">
|
||
<lay-tag :type="userInfo.status === 'normal' ? 'success' : 'danger'">
|
||
{{ userInfo.status === 'normal' ? '正常' : '禁用' }}
|
||
</lay-tag>
|
||
</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">创建时间:</span>
|
||
<span class="value">{{ formatDate(userInfo.createtime) }}</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="label">更新时间:</span>
|
||
<span class="value">{{ formatDate(userInfo.updatetime) }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</lay-card>
|
||
<lay-card>
|
||
|
||
</lay-card>
|
||
</div>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { ref, computed, onMounted } from 'vue';
|
||
import { useRoute, useRouter } from 'vue-router';
|
||
|
||
const route = useRoute();
|
||
const router = useRouter();
|
||
|
||
const userId = ref(route.query.id || '1');
|
||
const userInfo = ref({});
|
||
const loading = ref(true);
|
||
const defaultAvatar = ref('/src/assets/default-avatar.png');
|
||
const groupName = ref('');
|
||
const partyName = ref('');
|
||
const roleName = ref('');
|
||
|
||
// 计算性别显示文本
|
||
const genderText = computed(() => {
|
||
if (userInfo.value.gender === 1) {
|
||
return '男';
|
||
} else if (userInfo.value.gender === 2) {
|
||
return '女';
|
||
} else {
|
||
return '未知';
|
||
}
|
||
});
|
||
|
||
// 格式化日期
|
||
const formatDate = (dateString) => {
|
||
if (!dateString) return '暂无';
|
||
return dateString;
|
||
};
|
||
|
||
// 获取用户详情(使用模拟数据)
|
||
const getUserDetail = () => {
|
||
// 模拟用户数据
|
||
userInfo.value = {
|
||
id: 1,
|
||
code: 'GH001',
|
||
auth_group_id: 2,
|
||
group_id: 3,
|
||
party_id: 1,
|
||
work_number: 'GH001',
|
||
nickname: '张医生',
|
||
email: 'zhangdoctor@example.com',
|
||
mobile: '13800138000',
|
||
avatar: 'https://picsum.photos/200',
|
||
member_code: '110101199001011234',
|
||
gender: 1,
|
||
birthday: '1990-01-01',
|
||
createtime: '2023-01-01 08:00:00',
|
||
updatetime: '2023-06-15 14:30:00',
|
||
token: 'abcdef123456',
|
||
status: 'normal',
|
||
username: 'zhangdoctor',
|
||
password: '******',
|
||
group_level: '三级',
|
||
party_level: '二级',
|
||
position: '主治医师',
|
||
business_nature: '临床',
|
||
certificate_code: 'ZG20150001',
|
||
license_code: 'ZY20150001',
|
||
administrative_position: '科室副主任'
|
||
};
|
||
|
||
// 模拟科室、党支部和角色信息
|
||
groupName.value = '内科';
|
||
partyName.value = '医院第一党支部';
|
||
roleName.value = '医生';
|
||
|
||
loading.value = false;
|
||
};
|
||
|
||
// 返回上一页
|
||
const goBack = () => {
|
||
router.go(-1);
|
||
};
|
||
|
||
// 使用模拟数据,延迟一秒模拟加载效果
|
||
onMounted(() => {
|
||
getUserDetail();
|
||
});
|
||
</script>
|
||
|
||
<style scoped>
|
||
.file-detail-container {
|
||
padding: 20px;
|
||
}
|
||
|
||
.card-title {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
width: 100%;
|
||
}
|
||
|
||
.loading-container {
|
||
padding: 20px;
|
||
}
|
||
|
||
.user-detail {
|
||
padding: 10px;
|
||
}
|
||
|
||
.detail-section {
|
||
margin-bottom: 30px;
|
||
background-color: #fff;
|
||
border-radius: 4px;
|
||
padding: 15px;
|
||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
|
||
}
|
||
|
||
.section-title {
|
||
font-size: 16px;
|
||
font-weight: bold;
|
||
margin-bottom: 15px;
|
||
padding-bottom: 10px;
|
||
border-bottom: 1px solid #eee;
|
||
color: #333;
|
||
}
|
||
|
||
.user-header {
|
||
display: flex;
|
||
margin-bottom: 20px;
|
||
align-items: center;
|
||
}
|
||
|
||
.avatar-container {
|
||
margin-right: 20px;
|
||
}
|
||
|
||
.user-avatar {
|
||
width: 100px;
|
||
height: 100px;
|
||
border-radius: 50%;
|
||
object-fit: cover;
|
||
border: 1px solid #eee;
|
||
}
|
||
|
||
.basic-info {
|
||
flex: 1;
|
||
}
|
||
|
||
.info-row {
|
||
display: flex;
|
||
}
|
||
|
||
.info-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(2, 1fr);
|
||
gap: 15px;
|
||
}
|
||
|
||
.info-item {
|
||
margin-right: 20px;
|
||
margin-bottom: 10px;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.label {
|
||
color: #666;
|
||
min-width: 90px;
|
||
display: inline-block;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.value {
|
||
color: #333;
|
||
word-break: break-all;
|
||
}
|
||
|
||
@media (max-width: 768px) {
|
||
.user-header {
|
||
flex-direction: column;
|
||
align-items: center;
|
||
}
|
||
|
||
.avatar-container {
|
||
margin-right: 0;
|
||
margin-bottom: 15px;
|
||
}
|
||
|
||
.info-row {
|
||
flex-direction: column;
|
||
}
|
||
|
||
.info-grid {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
}
|
||
</style> |