新增档案相关
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>
|
<template>
|
||||||
<Dialog v-model="dialogVisible" :title="dialogTitle">
|
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
v-loading="formLoading"
|
|
||||||
:model="formData"
|
:model="formData"
|
||||||
:rules="formRules"
|
: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-form-item label="姓名" prop="name">
|
||||||
<el-input v-model="formData.name" placeholder="请输入姓名" />
|
<el-input v-model="formData.name" placeholder="请输入姓名" />
|
||||||
</el-form-item>
|
</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">
|
<el-form-item label="地址" prop="address">
|
||||||
<div class="flex items-center gap-2">
|
<el-input v-model="formData.address" placeholder="请输入地址" />
|
||||||
<el-cascader
|
</el-form-item>
|
||||||
v-model="selectedOptions"
|
<el-form-item label="机构ID" prop="orgid">
|
||||||
:options="options"
|
<el-input v-model="formData.orgid" placeholder="请输入机构ID" />
|
||||||
@change="handleAddressChange"
|
</el-form-item>
|
||||||
placeholder="请选择省/市/区"
|
<el-form-item label="机构名称" prop="orgname">
|
||||||
clearable
|
<el-input v-model="formData.orgname" placeholder="请输入机构名称" />
|
||||||
class="w-[450px]"
|
</el-form-item>
|
||||||
/>
|
<el-form-item label="家庭组号" prop="familyid">
|
||||||
<el-input
|
<el-input v-model="formData.familyid" placeholder="请输入家庭组号" />
|
||||||
v-model="formData.detailAddress"
|
</el-form-item>
|
||||||
placeholder="请输入详细地址"
|
<el-form-item label="家庭关系" prop="familyrelation">
|
||||||
class="w-[450px]"
|
<el-input v-model="formData.familyrelation" placeholder="请输入家庭关系" />
|
||||||
/>
|
</el-form-item>
|
||||||
</div>
|
<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-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<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>
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</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' })
|
defineOptions({ name: 'PersonForm' })
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
@ -73,47 +82,31 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||||||
const dialogTitle = ref('') // 弹窗的标题
|
const dialogTitle = ref('') // 弹窗的标题
|
||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||||
|
const formData = ref({
|
||||||
const formRef = ref<FormInstance>()
|
|
||||||
const formData = reactive({
|
|
||||||
id: undefined,
|
id: undefined,
|
||||||
name: '',
|
phone: undefined,
|
||||||
mobile: '',
|
password: undefined,
|
||||||
age: 18,
|
name: undefined,
|
||||||
gender: 'male',
|
address: undefined,
|
||||||
address: '',
|
orgid: undefined,
|
||||||
detailAddress: ''
|
orgname: undefined,
|
||||||
|
familyid: undefined,
|
||||||
|
familyrelation: undefined,
|
||||||
|
isvip: undefined,
|
||||||
|
idcard: undefined,
|
||||||
|
createtime: undefined,
|
||||||
|
updatetime: undefined,
|
||||||
|
createby: undefined,
|
||||||
|
updateby: undefined,
|
||||||
})
|
})
|
||||||
|
const formRules = reactive({
|
||||||
const selectedOptions = ref<string[]>([])
|
phone: [{ required: true, message: '手机号(登录账号)不能为空', trigger: 'blur' }],
|
||||||
const options = ref<CascaderOption[]>(regionData as unknown as CascaderOption[])
|
password: [{ required: true, message: '密码不能为空', trigger: 'blur' }],
|
||||||
|
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
||||||
// 表单校验规则
|
orgid: [{ required: true, message: '机构ID不能为空', trigger: 'blur' }],
|
||||||
const formRules = {
|
orgname: [{ required: true, message: '机构名称不能为空', trigger: 'blur' }],
|
||||||
name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
|
})
|
||||||
mobile: [
|
const formRef = ref() // 表单 Ref
|
||||||
{ 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 open = async (type: string, id?: number) => {
|
const open = async (type: string, id?: number) => {
|
||||||
@ -125,34 +118,7 @@ const open = async (type: string, id?: number) => {
|
|||||||
if (id) {
|
if (id) {
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
// 这里模拟API调用,实际项目中需要替换为真实的API
|
formData.value = await PersonApi.getPerson(id)
|
||||||
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]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
@ -164,17 +130,16 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
|||||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||||
const submitForm = async () => {
|
const submitForm = async () => {
|
||||||
// 校验表单
|
// 校验表单
|
||||||
if (!formRef.value) return
|
await formRef.value.validate()
|
||||||
const valid = await formRef.value.validate()
|
|
||||||
if (!valid) return
|
|
||||||
// 提交请求
|
// 提交请求
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
// 这里模拟API调用,实际项目中需要替换为真实的API
|
const data = formData.value as unknown as PersonVO
|
||||||
await new Promise(resolve => setTimeout(resolve, 500))
|
|
||||||
if (formType.value === 'create') {
|
if (formType.value === 'create') {
|
||||||
|
await PersonApi.createPerson(data)
|
||||||
message.success(t('common.createSuccess'))
|
message.success(t('common.createSuccess'))
|
||||||
} else {
|
} else {
|
||||||
|
await PersonApi.updatePerson(data)
|
||||||
message.success(t('common.updateSuccess'))
|
message.success(t('common.updateSuccess'))
|
||||||
}
|
}
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
@ -187,14 +152,23 @@ const submitForm = async () => {
|
|||||||
|
|
||||||
/** 重置表单 */
|
/** 重置表单 */
|
||||||
const resetForm = () => {
|
const resetForm = () => {
|
||||||
formData.id = undefined
|
formData.value = {
|
||||||
formData.name = ''
|
id: undefined,
|
||||||
formData.mobile = ''
|
phone: undefined,
|
||||||
formData.age = 18
|
password: undefined,
|
||||||
formData.gender = 'male'
|
name: undefined,
|
||||||
formData.address = ''
|
address: undefined,
|
||||||
formData.detailAddress = ''
|
orgid: undefined,
|
||||||
selectedOptions.value = []
|
orgname: undefined,
|
||||||
|
familyid: undefined,
|
||||||
|
familyrelation: undefined,
|
||||||
|
isvip: undefined,
|
||||||
|
idcard: undefined,
|
||||||
|
createtime: undefined,
|
||||||
|
updatetime: undefined,
|
||||||
|
createby: undefined,
|
||||||
|
updateby: undefined,
|
||||||
|
}
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
@ -19,18 +19,18 @@
|
|||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="手机号码" prop="mobile">
|
<el-form-item label="手机号码" prop="phone">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.mobile"
|
v-model="queryParams.phone"
|
||||||
placeholder="请输入手机号码"
|
placeholder="请输入手机号码"
|
||||||
clearable
|
clearable
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="创建时间" prop="createTime">
|
<el-form-item label="创建时间" prop="createtime">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="queryParams.createTime"
|
v-model="queryParams.createtime"
|
||||||
value-format="YYYY-MM-DD HH:mm:ss"
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
type="datetimerange"
|
type="datetimerange"
|
||||||
start-placeholder="开始日期"
|
start-placeholder="开始日期"
|
||||||
@ -61,20 +61,42 @@
|
|||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list">
|
<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
|
<el-table-column
|
||||||
label="姓名"
|
label="姓名"
|
||||||
align="center"
|
align="center"
|
||||||
prop="name"
|
prop="name"
|
||||||
:show-overflow-tooltip="true"
|
: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"
|
width="120"
|
||||||
/>
|
/>
|
||||||
<el-table-column label="手机号码" align="center" prop="mobile" width="140" />
|
<el-table-column
|
||||||
<el-table-column label="年龄" align="center" prop="age" width="80" />
|
label="家庭组号"
|
||||||
<el-table-column label="性别" align="center" prop="gender" width="80">
|
align="center"
|
||||||
|
prop="familyid"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
width="120"
|
||||||
|
/>
|
||||||
|
<el-table-column label="家庭关系" align="center" prop="familyrelation" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag :type="scope.row.gender === 'male' ? 'primary' : 'success'">
|
<el-tag :type="getFamilyRelationType(scope.row.familyrelation)">
|
||||||
{{ scope.row.gender === 'male' ? '男' : '女' }}
|
{{ 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>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -88,11 +110,30 @@
|
|||||||
<el-table-column
|
<el-table-column
|
||||||
label="创建时间"
|
label="创建时间"
|
||||||
align="center"
|
align="center"
|
||||||
prop="createTime"
|
prop="createtime"
|
||||||
:formatter="dateFormatter"
|
: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">
|
<template #default="scope">
|
||||||
<div class="flex items-center justify-center">
|
<div class="flex items-center justify-center">
|
||||||
<el-button
|
<el-button
|
||||||
@ -140,6 +181,7 @@
|
|||||||
import { dateFormatter } from '@/utils/formatTime'
|
import { dateFormatter } from '@/utils/formatTime'
|
||||||
import PersonForm from './PersonFrom.vue'
|
import PersonForm from './PersonFrom.vue'
|
||||||
import PersonMember from './Personmember.vue'
|
import PersonMember from './Personmember.vue'
|
||||||
|
import { PersonApi, PersonVO } from '@/api/person'
|
||||||
|
|
||||||
defineOptions({ name: 'FamilyMember' })
|
defineOptions({ name: 'FamilyMember' })
|
||||||
|
|
||||||
@ -148,74 +190,34 @@ const { t } = useI18n() // 国际化
|
|||||||
|
|
||||||
const loading = ref(false) // 列表的加载中
|
const loading = ref(false) // 列表的加载中
|
||||||
const total = ref(0) // 列表的总页数
|
const total = ref(0) // 列表的总页数
|
||||||
const list = ref<FamilyMember[]>([]) // 列表的数据
|
const list = ref<PersonVO[]>([]) // 列表的数据
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
phone: undefined,
|
||||||
|
password: undefined,
|
||||||
name: undefined,
|
name: undefined,
|
||||||
mobile: undefined,
|
address: undefined,
|
||||||
createTime: []
|
orgid: undefined,
|
||||||
|
orgname: undefined,
|
||||||
|
familyid: undefined,
|
||||||
|
familyrelation: undefined,
|
||||||
|
isvip: undefined,
|
||||||
|
idcard: undefined,
|
||||||
|
createtime: [],
|
||||||
|
updatetime: [],
|
||||||
|
createby: undefined,
|
||||||
|
updateby: undefined,
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
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 () => {
|
const getList = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
// 模拟API调用
|
const data = await PersonApi.getPersonPage(queryParams)
|
||||||
await new Promise(resolve => setTimeout(resolve, 500))
|
list.value = data.list
|
||||||
list.value = mockData
|
total.value = data.total
|
||||||
total.value = mockData.length
|
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
@ -243,10 +245,37 @@ const handleSuccess = () => {
|
|||||||
getList()
|
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) => {
|
const handleDelete = async (id: number) => {
|
||||||
try {
|
try {
|
||||||
await message.delConfirm()
|
await message.delConfirm()
|
||||||
|
await PersonApi.deletePerson(id)
|
||||||
message.success('删除成功')
|
message.success('删除成功')
|
||||||
await getList()
|
await getList()
|
||||||
} catch {}
|
} catch {}
|
||||||
@ -258,8 +287,7 @@ const handleExport = async () => {
|
|||||||
try {
|
try {
|
||||||
await message.exportConfirm()
|
await message.exportConfirm()
|
||||||
exportLoading.value = true
|
exportLoading.value = true
|
||||||
// 模拟导出
|
await PersonApi.exportPerson(queryParams)
|
||||||
await new Promise(resolve => setTimeout(resolve, 1000))
|
|
||||||
message.success('导出成功')
|
message.success('导出成功')
|
||||||
} catch {
|
} catch {
|
||||||
} finally {
|
} finally {
|
||||||
@ -269,7 +297,7 @@ const handleExport = async () => {
|
|||||||
|
|
||||||
/** 查看详情 */
|
/** 查看详情 */
|
||||||
const memberRef = ref()
|
const memberRef = ref()
|
||||||
const handleDetail = (row: FamilyMember) => {
|
const handleDetail = (row: PersonVO) => {
|
||||||
memberRef.value?.open(row)
|
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"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
@click="openForm('create')"
|
@click="openForm('create')"
|
||||||
v-hasPermi="['system:dept:create']"
|
|
||||||
>
|
>
|
||||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -84,7 +83,6 @@
|
|||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="openForm('update', scope.row.id)"
|
@click="openForm('update', scope.row.id)"
|
||||||
v-hasPermi="['system:dept:update']"
|
|
||||||
>
|
>
|
||||||
修改
|
修改
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -92,7 +90,6 @@
|
|||||||
link
|
link
|
||||||
type="danger"
|
type="danger"
|
||||||
@click="handleDelete(scope.row.id)"
|
@click="handleDelete(scope.row.id)"
|
||||||
v-hasPermi="['system:dept:delete']"
|
|
||||||
>
|
>
|
||||||
删除
|
删除
|
||||||
</el-button>
|
</el-button>
|
||||||
|
Loading…
Reference in New Issue
Block a user