vue3/src/views/personarchive/index.vue
2025-06-30 17:17:32 +08:00

247 lines
7.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="姓名" prop="name">
<el-input
v-model="queryParams.name" placeholder="请输入姓名" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="身份证号" prop="idcard">
<el-input
v-model="queryParams.idcard" placeholder="请输入身份证号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
<el-button type="success" plain @click="handleExport" :loading="exportLoading">
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true">
<el-table-column label="编号" align="center" width="100">
<template #default="{ $index }">
{{ (queryParams.pageNo - 1) * queryParams.pageSize + $index + 1 }}
</template>
</el-table-column>
<el-table-column label="姓名" align="center" prop="name" />
<el-table-column label="性别" align="center" prop="gender">
<template #default="scope">
<el-tag v-if="scope.row.gender === 1" type="success">男</el-tag>
<el-tag v-else type="danger">女</el-tag>
</template>
</el-table-column>
<el-table-column label="身份证号" align="center" prop="idcard" />
<el-table-column label="联系电话" align="center" prop="phone" />
<el-table-column label="地址" align="center" prop="address" width="400"/>
<el-table-column label="操作" align="center" width="160">
<template #default="scope">
<div class="flex items-center justify-center">
<el-button type="primary" link @click="openForm('update', scope.row.id)">
详情
</el-button>
<el-dropdown @command="(command) => handleCommand(command, scope.row)">
<!-- <el-button type="primary" link>
<Icon icon="ep:d-arrow-right" /> 更多
</el-button> -->
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="handleCreate">
<Icon icon="ep:plus" />创建档案
</el-dropdown-item>
<el-dropdown-item command="handleDelete">
<el-button type="danger" link>
<Icon icon="ep:delete" />删除档案
</el-button>
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</ContentWrap>
<!-- 表单弹窗:添加/修改 -->
<PersonArchiveForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { PersonArchiveApi, PersonArchiveVO } from '@/api/personarchive'
import PersonArchiveForm from './PersonArchiveForm.vue'
import { getUserProfile } from '@/api/system/user/profile'
import { PersonApi, PersonVO } from '@/api/person'
/** 人员档案 列表 */
defineOptions({ name: 'PersonArchive' })
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
const userProfile = ref()
const loading = ref(true) // 列表的加载中
const list = ref<PersonArchiveVO[]>([]) // 列表的数据
const total = ref(0) // 列表的总页数
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
userid: undefined,
orgid: undefined,
orgname: undefined,
name: undefined,
gender: undefined,
age: undefined,
idcard: undefined,
address: undefined,
phone: undefined,
bloodtype: undefined,
sleepsituation: undefined,
height: undefined,
weight: undefined,
waist: undefined,
hip: undefined,
drinking: undefined,
disability: undefined,
drugallergy: undefined,
exposure: undefined,
diseasehistory: undefined,
surgeryhistory: undefined,
traumahistory: undefined,
transfusionhistory: undefined,
disabilitydesc: undefined,
drugallergydesc: undefined,
exposuredesc: undefined,
diseasehistorydesc: undefined,
surgeryhistorydesc: undefined,
traumahistorydesc: undefined,
transfusionhistorydesc: undefined,
createtime: [],
updatetime: [],
createby: undefined,
updateby: undefined,
})
const queryFormRef = ref() // 搜索的表单
const exportLoading = ref(false) // 导出的加载中
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
//首先获取用户信息
userProfile.value = await getUserProfile()
//如果机构ID不为0则查询该机构下的所有人员
if(userProfile.value.dept.orgid!=0){
queryParams.orgid = userProfile.value.dept.orgid
}
const data = await PersonApi.getPersonPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = async (type: string, id?: number, currentPerson?: any) => {
if (type == 'update' && id) {
const res = await PersonArchiveApi.getPersonArchiveByUserid(id)
if (!res) {
message.error('该人员没有档案')
return
}
else{
formRef.value.open(type, id, userProfile.value)
}
} else {
formRef.value.open(type, id, userProfile.value, currentPerson)
}
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
// 删除的二次确认
await message.delConfirm()
// 发起删除
await PersonArchiveApi.deletePersonArchiveByUserid(id)
message.success(t('common.delSuccess'))
// 刷新列表
await getList()
} catch { }
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
// 导出的二次确认
await message.exportConfirm()
// 发起导出
exportLoading.value = true
const data = await PersonArchiveApi.exportPersonArchive(queryParams)
download.excel(data, '人员档案.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 操作分发 */
const handleCommand = async (command: string, row:any) => {
console.log(row)
switch (command) {
case 'handleCreate':
if(row.id){
const res = await PersonArchiveApi.getPersonArchiveByUserid(row.id)
if(res){
message.error('该人员档案已存在')
return
}
else{
openForm('create', row.id, row)
}
}else{
openForm('create', row.id, row)
}
break
case 'handleDelete':
handleDelete(row.id)
break
default:
break
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>