新增档案相关
This commit is contained in:
parent
f2740ec3ba
commit
3a2491a9a6
53
src/api/person/index.ts
Normal file
53
src/api/person/index.ts
Normal file
@ -0,0 +1,53 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 用户基本信息 VO
|
||||
export interface PersonVO {
|
||||
id: number // 主键ID
|
||||
phone: string // 手机号(登录账号)
|
||||
password: string // 密码
|
||||
name: string // 姓名
|
||||
address: string // 地址
|
||||
orgid: number // 机构ID
|
||||
orgname: string // 机构名称
|
||||
familyid: string // 家庭组号
|
||||
familyrelation: number // 家庭关系:1-本人,2-兄弟,3-父亲,4-母亲,5-子女,6-其他
|
||||
isvip: number // 是否会员:0-否,1-是
|
||||
idcard: string // 身份证号
|
||||
createtime: Date // 创建时间
|
||||
updatetime: Date // 更新时间
|
||||
createby: string // 创建人
|
||||
updateby: string // 更新人
|
||||
}
|
||||
|
||||
// 用户基本信息 API
|
||||
export const PersonApi = {
|
||||
// 查询用户基本信息分页
|
||||
getPersonPage: async (params: any) => {
|
||||
return await request.get({ url: `/system/person/page`, params })
|
||||
},
|
||||
|
||||
// 查询用户基本信息详情
|
||||
getPerson: async (id: number) => {
|
||||
return await request.get({ url: `/system/person/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增用户基本信息
|
||||
createPerson: async (data: PersonVO) => {
|
||||
return await request.post({ url: `/system/person/create`, data })
|
||||
},
|
||||
|
||||
// 修改用户基本信息
|
||||
updatePerson: async (data: PersonVO) => {
|
||||
return await request.put({ url: `/system/person/update`, data })
|
||||
},
|
||||
|
||||
// 删除用户基本信息
|
||||
deletePerson: async (id: number) => {
|
||||
return await request.delete({ url: `/system/person/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出用户基本信息 Excel
|
||||
exportPerson: async (params) => {
|
||||
return await request.download({ url: `/system/person/export-excel`, params })
|
||||
},
|
||||
}
|
73
src/api/personarchive/index.ts
Normal file
73
src/api/personarchive/index.ts
Normal file
@ -0,0 +1,73 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 人员档案 VO
|
||||
export interface PersonArchiveVO {
|
||||
id: number // 主键ID
|
||||
userid: number // 人员表ID
|
||||
orgid: number // 机构ID
|
||||
orgname: string // 机构名称
|
||||
name: string // 姓名
|
||||
gender: number // 性别 1男 2女
|
||||
age: number // 年龄
|
||||
idcard: string // 身份证号
|
||||
address: string // 户籍住址
|
||||
phone: string // 联系电话
|
||||
bloodtype: string // 血型
|
||||
sleepsituation: string // 睡眠情况
|
||||
height: number // 身高cm
|
||||
weight: number // 体重kg
|
||||
waist: number // 腰围cm
|
||||
hip: number // 臀围cm
|
||||
drinking: string // 饮酒情况
|
||||
disability: number // 残疾情况 0无 1有
|
||||
drugallergy: number // 药物过敏史 0无 1有
|
||||
exposure: number // 暴露史 0无 1有
|
||||
diseasehistory: number // 疾病史 0无 1有
|
||||
surgeryhistory: number // 手术史 0无 1有
|
||||
traumahistory: number // 外伤史 0无 1有
|
||||
transfusionhistory: number // 输血史 0无 1有
|
||||
disabilitydesc: string // 残疾情况描述
|
||||
drugallergydesc: string // 药物过敏史描述
|
||||
exposuredesc: string // 暴露史描述
|
||||
diseasehistorydesc: string // 疾病史描述
|
||||
surgeryhistorydesc: string // 手术史描述
|
||||
traumahistorydesc: string // 外伤史描述
|
||||
transfusionhistorydesc: string // 输血史描述
|
||||
createtime: Date // 创建时间
|
||||
updatetime: Date // 更新时间
|
||||
createby: string // 创建人
|
||||
updateby: string // 更新人
|
||||
}
|
||||
|
||||
// 人员档案 API
|
||||
export const PersonArchiveApi = {
|
||||
// 查询人员档案分页
|
||||
getPersonArchivePage: async (params: any) => {
|
||||
return await request.get({ url: `/system/person-archive/page`, params })
|
||||
},
|
||||
|
||||
// 查询人员档案详情
|
||||
getPersonArchive: async (id: number) => {
|
||||
return await request.get({ url: `/system/person-archive/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增人员档案
|
||||
createPersonArchive: async (data: PersonArchiveVO) => {
|
||||
return await request.post({ url: `/system/person-archive/create`, data })
|
||||
},
|
||||
|
||||
// 修改人员档案
|
||||
updatePersonArchive: async (data: PersonArchiveVO) => {
|
||||
return await request.put({ url: `/system/person-archive/update`, data })
|
||||
},
|
||||
|
||||
// 删除人员档案
|
||||
deletePersonArchive: async (id: number) => {
|
||||
return await request.delete({ url: `/system/person-archive/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出人员档案 Excel
|
||||
exportPersonArchive: async (params) => {
|
||||
return await request.download({ url: `/system/person-archive/export-excel`, params })
|
||||
},
|
||||
}
|
@ -1,69 +1,78 @@
|
||||
<template>
|
||||
<Dialog v-model="dialogVisible" :title="dialogTitle">
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
v-loading="formLoading"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="80px"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="手机号" prop="phone">
|
||||
<el-input v-model="formData.phone" placeholder="请输入手机号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input v-model="formData.password" placeholder="请输入密码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号码" prop="mobile">
|
||||
<el-input v-model="formData.mobile" placeholder="请输入手机号码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input v-model="formData.age" placeholder="请输入年龄" />
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-radio-group v-model="formData.gender">
|
||||
<el-radio label="male">男</el-radio>
|
||||
<el-radio label="female">女</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="地址" prop="address">
|
||||
<div class="flex items-center gap-2">
|
||||
<el-cascader
|
||||
v-model="selectedOptions"
|
||||
:options="options"
|
||||
@change="handleAddressChange"
|
||||
placeholder="请选择省/市/区"
|
||||
clearable
|
||||
class="w-[450px]"
|
||||
/>
|
||||
<el-input
|
||||
v-model="formData.detailAddress"
|
||||
placeholder="请输入详细地址"
|
||||
class="w-[450px]"
|
||||
/>
|
||||
</div>
|
||||
<el-input v-model="formData.address" placeholder="请输入地址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="机构ID" prop="orgid">
|
||||
<el-input v-model="formData.orgid" placeholder="请输入机构ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="机构名称" prop="orgname">
|
||||
<el-input v-model="formData.orgname" placeholder="请输入机构名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="家庭组号" prop="familyid">
|
||||
<el-input v-model="formData.familyid" placeholder="请输入家庭组号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="家庭关系" prop="familyrelation">
|
||||
<el-input v-model="formData.familyrelation" placeholder="请输入家庭关系" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否会员" prop="isvip">
|
||||
<el-select v-model="formData.isvip" placeholder="请选择是否会员">
|
||||
<el-option label="是" value="1" />
|
||||
<el-option label="否" value="0" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证号" prop="idcard">
|
||||
<el-input v-model="formData.idcard" placeholder="请输入身份证号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createtime">
|
||||
<el-date-picker
|
||||
v-model="formData.createtime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择创建时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新时间" prop="updatetime">
|
||||
<el-date-picker
|
||||
v-model="formData.updatetime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择更新时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建人" prop="createby">
|
||||
<el-input v-model="formData.createby" placeholder="请输入创建人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="更新人" prop="updateby">
|
||||
<el-input v-model="formData.updateby" placeholder="请输入更新人" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { PersonApi, PersonVO } from '@/api/person'
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, computed, watch } from 'vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import {
|
||||
provinceAndCityData,
|
||||
pcTextArr,
|
||||
regionData,
|
||||
pcaTextArr,
|
||||
codeToText,
|
||||
} from 'element-china-area-data'
|
||||
|
||||
interface CascaderOption {
|
||||
value: string
|
||||
label: string
|
||||
children?: CascaderOption[]
|
||||
}
|
||||
|
||||
/** 用户基本信息 表单 */
|
||||
defineOptions({ name: 'PersonForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
@ -73,47 +82,31 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
|
||||
const formRef = ref<FormInstance>()
|
||||
const formData = reactive({
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
name: '',
|
||||
mobile: '',
|
||||
age: 18,
|
||||
gender: 'male',
|
||||
address: '',
|
||||
detailAddress: ''
|
||||
phone: undefined,
|
||||
password: undefined,
|
||||
name: undefined,
|
||||
address: undefined,
|
||||
orgid: undefined,
|
||||
orgname: undefined,
|
||||
familyid: undefined,
|
||||
familyrelation: undefined,
|
||||
isvip: undefined,
|
||||
idcard: undefined,
|
||||
createtime: undefined,
|
||||
updatetime: undefined,
|
||||
createby: undefined,
|
||||
updateby: undefined,
|
||||
})
|
||||
|
||||
const selectedOptions = ref<string[]>([])
|
||||
const options = ref<CascaderOption[]>(regionData as unknown as CascaderOption[])
|
||||
|
||||
// 表单校验规则
|
||||
const formRules = {
|
||||
name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
|
||||
mobile: [
|
||||
{ required: true, message: '请输入手机号码', trigger: 'blur' },
|
||||
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' }
|
||||
],
|
||||
age: [
|
||||
{ required: true, message: '请输入年龄', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d{0,2}$/, message: '请输入1-999之间的数字', trigger: 'blur' }
|
||||
],
|
||||
gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
|
||||
address: [{ required: true, message: '请选择省市区', trigger: 'change' }]
|
||||
}
|
||||
|
||||
// 处理地址变化
|
||||
const handleAddressChange = (value: string[]) => {
|
||||
if (value && value.length > 0) {
|
||||
const province = codeToText[value[0]]
|
||||
const city = codeToText[value[1]]
|
||||
const area = codeToText[value[2]]
|
||||
formData.address = `${province}/${city}/${area}`
|
||||
} else {
|
||||
formData.address = ''
|
||||
}
|
||||
}
|
||||
const formRules = reactive({
|
||||
phone: [{ required: true, message: '手机号(登录账号)不能为空', trigger: 'blur' }],
|
||||
password: [{ required: true, message: '密码不能为空', trigger: 'blur' }],
|
||||
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
||||
orgid: [{ required: true, message: '机构ID不能为空', trigger: 'blur' }],
|
||||
orgname: [{ required: true, message: '机构名称不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
@ -125,34 +118,7 @@ const open = async (type: string, id?: number) => {
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
// 这里模拟API调用,实际项目中需要替换为真实的API
|
||||
const mockData = {
|
||||
id: id,
|
||||
name: '张三',
|
||||
mobile: '13800138001',
|
||||
age: 45,
|
||||
gender: 'male',
|
||||
address: '北京市/北京市/朝阳区',
|
||||
detailAddress: '建国路88号'
|
||||
}
|
||||
Object.assign(formData, mockData)
|
||||
|
||||
// 处理地址数据
|
||||
if (mockData.address) {
|
||||
const addressParts = mockData.address.split('/')
|
||||
if (addressParts.length >= 3) {
|
||||
// 获取省市区编码
|
||||
const provinceCode = Object.keys(codeToText).find(key => codeToText[key] === addressParts[0])
|
||||
let cityCode = Object.keys(codeToText).find(key => codeToText[key] === addressParts[1])
|
||||
if(provinceCode === '12'){
|
||||
cityCode = '1201'
|
||||
}
|
||||
const areaCode = Object.keys(codeToText).find(key => codeToText[key] === addressParts[2])
|
||||
if (provinceCode && cityCode && areaCode) {
|
||||
selectedOptions.value = [provinceCode, cityCode, areaCode]
|
||||
}
|
||||
}
|
||||
}
|
||||
formData.value = await PersonApi.getPerson(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
@ -164,17 +130,16 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
if (!formRef.value) return
|
||||
const valid = await formRef.value.validate()
|
||||
if (!valid) return
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
// 这里模拟API调用,实际项目中需要替换为真实的API
|
||||
await new Promise(resolve => setTimeout(resolve, 500))
|
||||
const data = formData.value as unknown as PersonVO
|
||||
if (formType.value === 'create') {
|
||||
await PersonApi.createPerson(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await PersonApi.updatePerson(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
@ -187,14 +152,23 @@ const submitForm = async () => {
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.id = undefined
|
||||
formData.name = ''
|
||||
formData.mobile = ''
|
||||
formData.age = 18
|
||||
formData.gender = 'male'
|
||||
formData.address = ''
|
||||
formData.detailAddress = ''
|
||||
selectedOptions.value = []
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
phone: undefined,
|
||||
password: undefined,
|
||||
name: undefined,
|
||||
address: undefined,
|
||||
orgid: undefined,
|
||||
orgname: undefined,
|
||||
familyid: undefined,
|
||||
familyrelation: undefined,
|
||||
isvip: undefined,
|
||||
idcard: undefined,
|
||||
createtime: undefined,
|
||||
updatetime: undefined,
|
||||
createby: undefined,
|
||||
updateby: undefined,
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
</script>
|
@ -19,18 +19,18 @@
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号码" prop="mobile">
|
||||
<el-form-item label="手机号码" prop="phone">
|
||||
<el-input
|
||||
v-model="queryParams.mobile"
|
||||
v-model="queryParams.phone"
|
||||
placeholder="请输入手机号码"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-form-item label="创建时间" prop="createtime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
v-model="queryParams.createtime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="datetimerange"
|
||||
start-placeholder="开始日期"
|
||||
@ -61,20 +61,42 @@
|
||||
</ContentWrap>
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list">
|
||||
<el-table-column label="编号" align="center" key="id" prop="id" width="100" />
|
||||
<el-table-column label="编号" align="center" key="id" prop="id" width="80" />
|
||||
<el-table-column
|
||||
label="姓名"
|
||||
align="center"
|
||||
prop="name"
|
||||
:show-overflow-tooltip="true"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column label="手机号码" align="center" prop="phone" width="120" />
|
||||
<el-table-column label="身份证号" align="center" prop="idcard" width="180" />
|
||||
<el-table-column label="机构ID" align="center" prop="orgid" width="80" />
|
||||
<el-table-column
|
||||
label="机构名称"
|
||||
align="center"
|
||||
prop="orgname"
|
||||
:show-overflow-tooltip="true"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column label="手机号码" align="center" prop="mobile" width="140" />
|
||||
<el-table-column label="年龄" align="center" prop="age" width="80" />
|
||||
<el-table-column label="性别" align="center" prop="gender" width="80">
|
||||
<el-table-column
|
||||
label="家庭组号"
|
||||
align="center"
|
||||
prop="familyid"
|
||||
:show-overflow-tooltip="true"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column label="家庭关系" align="center" prop="familyrelation" width="100">
|
||||
<template #default="scope">
|
||||
<el-tag :type="scope.row.gender === 'male' ? 'primary' : 'success'">
|
||||
{{ scope.row.gender === 'male' ? '男' : '女' }}
|
||||
<el-tag :type="getFamilyRelationType(scope.row.familyrelation)">
|
||||
{{ getFamilyRelationLabel(scope.row.familyrelation) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否会员" align="center" prop="isvip" width="100">
|
||||
<template #default="scope">
|
||||
<el-tag :type="scope.row.isvip === 1 ? 'success' : 'info'">
|
||||
{{ scope.row.isvip === 1 ? '是' : '否' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -88,11 +110,30 @@
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
prop="createtime"
|
||||
:formatter="dateFormatter"
|
||||
width="180"
|
||||
width="160"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" width="160">
|
||||
<el-table-column
|
||||
label="更新时间"
|
||||
align="center"
|
||||
prop="updatetime"
|
||||
:formatter="dateFormatter"
|
||||
width="160"
|
||||
/>
|
||||
<el-table-column
|
||||
label="创建人"
|
||||
align="center"
|
||||
prop="createby"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
label="更新人"
|
||||
align="center"
|
||||
prop="updateby"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" width="160" fixed="right">
|
||||
<template #default="scope">
|
||||
<div class="flex items-center justify-center">
|
||||
<el-button
|
||||
@ -140,6 +181,7 @@
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import PersonForm from './PersonFrom.vue'
|
||||
import PersonMember from './Personmember.vue'
|
||||
import { PersonApi, PersonVO } from '@/api/person'
|
||||
|
||||
defineOptions({ name: 'FamilyMember' })
|
||||
|
||||
@ -148,74 +190,34 @@ const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref<FamilyMember[]>([]) // 列表的数据
|
||||
const list = ref<PersonVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
phone: undefined,
|
||||
password: undefined,
|
||||
name: undefined,
|
||||
mobile: undefined,
|
||||
createTime: []
|
||||
address: undefined,
|
||||
orgid: undefined,
|
||||
orgname: undefined,
|
||||
familyid: undefined,
|
||||
familyrelation: undefined,
|
||||
isvip: undefined,
|
||||
idcard: undefined,
|
||||
createtime: [],
|
||||
updatetime: [],
|
||||
createby: undefined,
|
||||
updateby: undefined,
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
||||
interface FamilyMember {
|
||||
id: number
|
||||
name: string
|
||||
mobile: string
|
||||
age: number
|
||||
gender: string
|
||||
address: string
|
||||
createTime: string
|
||||
}
|
||||
|
||||
// 模拟数据
|
||||
const mockData: FamilyMember[] = [
|
||||
{
|
||||
id: 1,
|
||||
name: '张三',
|
||||
mobile: '13800138001',
|
||||
age: 45,
|
||||
gender: 'male',
|
||||
address: '北京市朝阳区建国路88号',
|
||||
createTime: '2024-03-20 10:00:00'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: '李四',
|
||||
mobile: '13800138002',
|
||||
age: 42,
|
||||
gender: 'female',
|
||||
address: '北京市朝阳区建国路88号',
|
||||
createTime: '2024-03-20 10:00:00'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: '王五',
|
||||
mobile: '13800138003',
|
||||
age: 35,
|
||||
gender: 'female',
|
||||
address: '北京市海淀区中关村大街1号',
|
||||
createTime: '2024-03-20 10:00:00'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: '张小明',
|
||||
mobile: '13800138004',
|
||||
age: 12,
|
||||
gender: 'male',
|
||||
address: '北京市朝阳区建国路88号',
|
||||
createTime: '2024-03-20 10:00:00'
|
||||
}
|
||||
]
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
// 模拟API调用
|
||||
await new Promise(resolve => setTimeout(resolve, 500))
|
||||
list.value = mockData
|
||||
total.value = mockData.length
|
||||
const data = await PersonApi.getPersonPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
@ -243,10 +245,37 @@ const handleSuccess = () => {
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 获取家庭关系标签 */
|
||||
const getFamilyRelationLabel = (relation: number) => {
|
||||
const relationMap = {
|
||||
1: '本人',
|
||||
2: '兄弟',
|
||||
3: '父亲',
|
||||
4: '母亲',
|
||||
5: '子女',
|
||||
6: '其他'
|
||||
}
|
||||
return relationMap[relation] || '未知'
|
||||
}
|
||||
|
||||
/** 获取家庭关系标签类型 */
|
||||
const getFamilyRelationType = (relation: number) => {
|
||||
const typeMap = {
|
||||
1: 'primary',
|
||||
2: 'success',
|
||||
3: 'warning',
|
||||
4: 'danger',
|
||||
5: 'info',
|
||||
6: ''
|
||||
}
|
||||
return typeMap[relation] || ''
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
await message.delConfirm()
|
||||
await PersonApi.deletePerson(id)
|
||||
message.success('删除成功')
|
||||
await getList()
|
||||
} catch {}
|
||||
@ -258,8 +287,7 @@ const handleExport = async () => {
|
||||
try {
|
||||
await message.exportConfirm()
|
||||
exportLoading.value = true
|
||||
// 模拟导出
|
||||
await new Promise(resolve => setTimeout(resolve, 1000))
|
||||
await PersonApi.exportPerson(queryParams)
|
||||
message.success('导出成功')
|
||||
} catch {
|
||||
} finally {
|
||||
@ -269,7 +297,7 @@ const handleExport = async () => {
|
||||
|
||||
/** 查看详情 */
|
||||
const memberRef = ref()
|
||||
const handleDetail = (row: FamilyMember) => {
|
||||
const handleDetail = (row: PersonVO) => {
|
||||
memberRef.value?.open(row)
|
||||
}
|
||||
|
||||
|
413
src/views/personarchive/PersonArchiveForm.vue
Normal file
413
src/views/personarchive/PersonArchiveForm.vue
Normal file
@ -0,0 +1,413 @@
|
||||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="人员表ID" prop="userid">
|
||||
<el-input v-model="formData.userid" placeholder="请输入人员表ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="机构ID" prop="orgid">
|
||||
<el-input v-model="formData.orgid" placeholder="请输入机构ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="机构名称" prop="orgname">
|
||||
<el-input v-model="formData.orgname" placeholder="请输入机构名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-select v-model="formData.gender" placeholder="请选择性别">
|
||||
<el-option label="男" :value="1" />
|
||||
<el-option label="女" :value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input v-model="formData.age" placeholder="请输入年龄" />
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证号" prop="idcard">
|
||||
<el-input v-model="formData.idcard" placeholder="请输入身份证号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="户籍住址" prop="address">
|
||||
<el-cascader
|
||||
v-model="selectedOptions"
|
||||
:options="options"
|
||||
@change="handleAddressChange"
|
||||
placeholder="请选择省/市/区"
|
||||
clearable
|
||||
class="w-[450px]"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系电话" prop="phone">
|
||||
<el-input v-model="formData.phone" placeholder="请输入联系电话" />
|
||||
</el-form-item>
|
||||
<el-form-item label="血型" prop="bloodtype">
|
||||
<el-select v-model="formData.bloodtype" placeholder="请选择血型">
|
||||
<el-option label="A型" value="A" />
|
||||
<el-option label="B型" value="B" />
|
||||
<el-option label="AB型" value="AB" />
|
||||
<el-option label="O型" value="O" />
|
||||
<el-option label="其他" value="其他" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="睡眠情况" prop="sleepsituation">
|
||||
<el-select v-model="formData.sleepsituation" placeholder="请选择睡眠情况">
|
||||
<el-option label="良好" value="良好" />
|
||||
<el-option label="一般" value="一般" />
|
||||
<el-option label="较差" value="较差" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="身高cm" prop="height">
|
||||
<el-input v-model="formData.height" placeholder="请输入身高cm" />
|
||||
</el-form-item>
|
||||
<el-form-item label="体重kg" prop="weight">
|
||||
<el-input v-model="formData.weight" placeholder="请输入体重kg" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="饮酒情况" prop="drinking">
|
||||
<el-select v-model="formData.drinking" placeholder="请选择饮酒情况">
|
||||
<el-option label="从不" value="从不" />
|
||||
<el-option label="偶尔" value="偶尔" />
|
||||
<el-option label="经常" value="经常" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="残疾情况" prop="disability">
|
||||
<el-select v-model="formData.disability" placeholder="请选择残疾情况">
|
||||
<el-option label="无" :value="0" />
|
||||
<el-option label="有" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.disability === 1" label="残疾情况描述" prop="disabilitydesc">
|
||||
<el-input v-model="formData.disabilitydesc" placeholder="请输入残疾情况描述" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="药物过敏史" prop="drugallergy">
|
||||
<el-select v-model="formData.drugallergy" placeholder="请选择药物过敏史">
|
||||
<el-option label="无" :value="0" />
|
||||
<el-option label="有" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.drugallergy === 1" label="药物过敏史描述" prop="drugallergydesc">
|
||||
<el-input v-model="formData.drugallergydesc" placeholder="请输入药物过敏史描述" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="暴露史" prop="exposure">
|
||||
<el-select v-model="formData.exposure" placeholder="请选择暴露史">
|
||||
<el-option label="无" :value="0" />
|
||||
<el-option label="有" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.exposure === 1" label="暴露史描述" prop="exposuredesc">
|
||||
<el-input v-model="formData.exposuredesc" placeholder="请输入暴露史描述" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="疾病史" prop="diseasehistory">
|
||||
<el-select v-model="formData.diseasehistory" placeholder="请选择疾病史">
|
||||
<el-option label="无" :value="0" />
|
||||
<el-option label="有" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.diseasehistory === 1" label="疾病史描述" prop="diseasehistorydesc">
|
||||
<el-input v-model="formData.diseasehistorydesc" placeholder="请输入疾病史描述" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="手术史" prop="surgeryhistory">
|
||||
<el-select v-model="formData.surgeryhistory" placeholder="请选择手术史">
|
||||
<el-option label="无" :value="0" />
|
||||
<el-option label="有" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.surgeryhistory === 1" label="手术史描述" prop="surgeryhistorydesc">
|
||||
<el-input v-model="formData.surgeryhistorydesc" placeholder="请输入手术史描述" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="外伤史" prop="traumahistory">
|
||||
<el-select v-model="formData.traumahistory" placeholder="请选择外伤史">
|
||||
<el-option label="无" :value="0" />
|
||||
<el-option label="有" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.traumahistory === 1" label="外伤史描述" prop="traumahistorydesc">
|
||||
<el-input v-model="formData.traumahistorydesc" placeholder="请输入外伤史描述" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="输血史" prop="transfusionhistory">
|
||||
<el-select v-model="formData.transfusionhistory" placeholder="请选择输血史">
|
||||
<el-option label="无" :value="0" />
|
||||
<el-option label="有" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.transfusionhistory === 1" label="输血史描述" prop="transfusionhistorydesc">
|
||||
<el-input v-model="formData.transfusionhistorydesc" placeholder="请输入输血史描述" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="创建时间" prop="createtime">
|
||||
<el-date-picker
|
||||
v-model="formData.createtime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择创建时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新时间" prop="updatetime">
|
||||
<el-date-picker
|
||||
v-model="formData.updatetime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择更新时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建人" prop="createby">
|
||||
<el-input v-model="formData.createby" placeholder="请输入创建人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="更新人" prop="updateby">
|
||||
<el-input v-model="formData.updateby" placeholder="请输入更新人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="腰围cm" prop="waist">
|
||||
<el-input v-model="formData.waist" placeholder="请输入腰围cm" />
|
||||
</el-form-item>
|
||||
<el-form-item label="臀围cm" prop="hip">
|
||||
<el-input v-model="formData.hip" placeholder="请输入臀围cm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { PersonArchiveApi, PersonArchiveVO } from '@/api/personarchive'
|
||||
import {provinceAndCityData,
|
||||
pcTextArr,
|
||||
regionData,
|
||||
pcaTextArr,
|
||||
codeToText,
|
||||
} from "element-china-area-data"
|
||||
|
||||
interface CascaderOption {
|
||||
value: string
|
||||
label: string
|
||||
children?: CascaderOption[]
|
||||
}
|
||||
|
||||
/** 人员档案 表单 */
|
||||
defineOptions({ name: 'PersonArchiveForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref<{
|
||||
id: number | undefined
|
||||
userid: number | undefined
|
||||
orgid: number | undefined
|
||||
orgname: string | undefined
|
||||
name: string | undefined
|
||||
gender: number | undefined
|
||||
age: number | undefined
|
||||
idcard: string | undefined
|
||||
address: string | undefined
|
||||
phone: string | undefined
|
||||
bloodtype: string | undefined
|
||||
sleepsituation: string | undefined
|
||||
height: number | undefined
|
||||
weight: number | undefined
|
||||
waist: number | undefined
|
||||
hip: number | undefined
|
||||
drinking: string | undefined
|
||||
disability: number | undefined
|
||||
drugallergy: number | undefined
|
||||
exposure: number | undefined
|
||||
diseasehistory: number | undefined
|
||||
surgeryhistory: number | undefined
|
||||
traumahistory: number | undefined
|
||||
transfusionhistory: number | undefined
|
||||
disabilitydesc: string | undefined
|
||||
drugallergydesc: string | undefined
|
||||
exposuredesc: string | undefined
|
||||
diseasehistorydesc: string | undefined
|
||||
surgeryhistorydesc: string | undefined
|
||||
traumahistorydesc: string | undefined
|
||||
transfusionhistorydesc: string | undefined
|
||||
createtime: number | undefined
|
||||
updatetime: number | undefined
|
||||
createby: string | undefined
|
||||
updateby: string | undefined
|
||||
}>({
|
||||
id: undefined,
|
||||
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: undefined,
|
||||
updatetime: undefined,
|
||||
createby: undefined,
|
||||
updateby: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
userid: [{ required: true, message: '人员表ID不能为空', trigger: 'blur' }],
|
||||
orgid: [{ required: true, message: '机构ID不能为空', trigger: 'blur' }],
|
||||
orgname: [{ required: true, message: '机构名称不能为空', trigger: 'blur' }],
|
||||
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
const selectedOptions = ref<string[]>([]) // 添加级联选择器的值
|
||||
const options = ref<CascaderOption[]>(regionData as unknown as CascaderOption[])
|
||||
|
||||
/** 处理地址变化 */
|
||||
const handleAddressChange = (value: any) => {
|
||||
if (value && value.length === 3) {
|
||||
const address = codeToText[value[0]] + '/' + codeToText[value[1]] + '/' + codeToText[value[2]]
|
||||
formData.value.address = address
|
||||
}
|
||||
}
|
||||
|
||||
// 监听详细地址变化
|
||||
watch(() => formData.value.address, (newValue) => {
|
||||
if (selectedOptions.value && selectedOptions.value.length === 3) {
|
||||
const address = codeToText[selectedOptions.value[0]] + '/' + codeToText[selectedOptions.value[1]] + '/' + codeToText[selectedOptions.value[2]]
|
||||
formData.value.address = address
|
||||
}
|
||||
})
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await PersonArchiveApi.getPersonArchive(id)
|
||||
// 处理地址数据
|
||||
if (formData.value.address) {
|
||||
const addressParts = formData.value.address.split('/')
|
||||
if (addressParts.length >= 3) {
|
||||
// 获取省市区编码
|
||||
const provinceCode = Object.keys(codeToText).find(key => codeToText[key] === addressParts[0])
|
||||
let cityCode = Object.keys(codeToText).find(key => codeToText[key] === addressParts[1])
|
||||
if(provinceCode == '12'){
|
||||
cityCode = '1201'
|
||||
}
|
||||
const areaCode = Object.keys(codeToText).find(key => codeToText[key] === addressParts[2])
|
||||
if (provinceCode && cityCode && areaCode) {
|
||||
selectedOptions.value = [provinceCode, cityCode, areaCode]
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as PersonArchiveVO
|
||||
if (formType.value === 'create') {
|
||||
await PersonArchiveApi.createPersonArchive(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await PersonArchiveApi.updatePersonArchive(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
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: undefined,
|
||||
updatetime: undefined,
|
||||
createby: undefined,
|
||||
updateby: undefined,
|
||||
}
|
||||
selectedOptions.value = []
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
223
src/views/personarchive/index.vue
Normal file
223
src/views/personarchive/index.vue
Normal file
@ -0,0 +1,223 @@
|
||||
<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="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
>
|
||||
<Icon icon="ep:plus" 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" :show-overflow-tooltip="true">
|
||||
<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="age" />
|
||||
<el-table-column label="血型" align="center" prop="bloodtype" >
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.bloodtype === 'A'" type="success">A</el-tag>
|
||||
<el-tag v-else-if="scope.row.bloodtype === 'B'" type="danger">B</el-tag>
|
||||
<el-tag v-else-if="scope.row.bloodtype === 'AB'" type="warning">AB</el-tag>
|
||||
<el-tag v-else type="info">O</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="联系电话" align="center" prop="phone" />
|
||||
<el-table-column label="户籍住址" align="center" prop="address" />
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
>
|
||||
详情
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</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'
|
||||
|
||||
/** 人员档案 列表 */
|
||||
defineOptions({ name: 'PersonArchive' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
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 {
|
||||
const data = await PersonArchiveApi.getPersonArchivePage(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 = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await PersonArchiveApi.deletePersonArchive(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
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
@ -39,7 +39,6 @@
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['system:dept:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
@ -84,7 +83,6 @@
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['system:dept:update']"
|
||||
>
|
||||
修改
|
||||
</el-button>
|
||||
@ -92,7 +90,6 @@
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['system:dept:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
|
Loading…
Reference in New Issue
Block a user