修改人员列表和档案

This commit is contained in:
lxd 2025-06-13 10:46:38 +08:00
parent 7c382a14c5
commit 5f1ac04e0f
4 changed files with 82 additions and 21 deletions

View File

@ -12,6 +12,12 @@
<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="idcard">
<el-input v-model="formData.idcard" placeholder="请输入身份证号" />
</el-form-item>
@ -82,6 +88,7 @@ const formData = ref({
password: undefined,
name: undefined,
address: '',
gender: undefined,
detailAddress: '',
orgid: undefined,
orgname: undefined,
@ -100,6 +107,15 @@ const formRules = reactive({
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
orgid: [{ required: true, message: '机构ID不能为空', trigger: 'blur' }],
orgname: [{ required: true, message: '机构名称不能为空', trigger: 'blur' }],
gender: [{ required: true, message: '性别不能为空', trigger: 'blur' }],
idcard: [
{ required: true, message: '身份证号不能为空', trigger: 'blur' },
{
pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
message: '请输入正确的身份证号码',
trigger: 'blur'
}
],
})
const formRef = ref() // Ref
@ -138,6 +154,7 @@ watch(() => formData.value.detailAddress, (newValue) => {
/** 打开弹窗 */
const open = async (type: string, id?: number, userProfile?: any) => {
console.log(userProfile)
userdata.value = userProfile
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
@ -215,6 +232,7 @@ const resetForm = () => {
password: undefined,
name: undefined,
address: '',
gender: undefined,
detailAddress: '',
orgid: undefined,
orgname: undefined,

View File

@ -68,6 +68,13 @@
:show-overflow-tooltip="true"
width="100"
/>
<el-table-column label="性别" align="center" prop="gender" width="100">
<template #default="scope">
<el-tag :type="scope.row.gender === 1 ? 'success' : 'info'">
{{ scope.row.gender === 1 ? '男' : '女' }}
</el-tag>
</template>
</el-table-column>
<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" />
@ -219,7 +226,7 @@ const openForm = (type: string, id?: number, name?: string) => {
if (type === 'bind') {
deviceBindRef.value?.open(id, name)
} else {
formRef.value?.open(type, id)
formRef.value?.open(type, id,userProfile.value)
}
}

View File

@ -1,12 +1,6 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<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="姓名" prop="name">
@ -29,13 +23,8 @@
</el-form-item>
<el-form-item label="户籍住址" prop="address">
<el-cascader
v-model="selectedOptions"
:options="options"
@change="handleAddressChange"
placeholder="请选择省/市/区"
clearable
class="w-[450px]"
/>
v-model="selectedOptions" :options="options" @change="handleAddressChange"
placeholder="请选择省/市/区" clearable class="w-[450px]" />
</el-form-item>
<el-form-item label="血型" prop="bloodtype">
<el-select v-model="formData.bloodtype" placeholder="请选择血型">
@ -153,8 +142,9 @@
</template>
<script setup lang="ts">
import { PersonArchiveApi, PersonArchiveVO } from '@/api/personarchive'
import {provinceAndCityData,
pcTextArr,
import {
provinceAndCityData,
pcTextArr,
regionData,
pcaTextArr,
codeToText,
@ -277,6 +267,42 @@ watch(() => formData.value.address, (newValue) => {
}
})
/**
* 根据身份证号计算年龄
* @param idcard 18位身份证号
* @returns 计算出的年龄
*/
const calculateAgeFromIdcard = (idcard: string): number | undefined => {
if (!idcard || idcard.length !== 18) {
return undefined
}
//
const year = idcard.substring(6, 10)
const month = idcard.substring(10, 12)
const day = idcard.substring(12, 14)
const birthDate = new Date(`${year}-${month}-${day}`)
//
const today = new Date()
let age = today.getFullYear() - birthDate.getFullYear()
const monthDiff = today.getMonth() - birthDate.getMonth()
// 1
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--
}
return age
}
//
watch(() => formData.value.idcard, (newIdcard) => {
if (newIdcard) {
formData.value.age = calculateAgeFromIdcard(newIdcard)
}
})
/** 打开弹窗 */
const open = async (type: string, id?: number, userProfile?: any, currentPerson?: any) => {
userData.value = userProfile
@ -296,7 +322,7 @@ const open = async (type: string, id?: number, userProfile?: any, currentPerson?
//
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'){
if (provinceCode == '12') {
cityCode = '1201'
}
const areaCode = Object.keys(codeToText).find(key => codeToText[key] === addressParts[2])
@ -305,6 +331,10 @@ const open = async (type: string, id?: number, userProfile?: any, currentPerson?
}
}
}
//
if (formData.value.idcard) {
formData.value.age = calculateAgeFromIdcard(formData.value.idcard)
}
} finally {
formLoading.value = false
}
@ -347,7 +377,12 @@ const open = async (type: string, id?: number, userProfile?: any, currentPerson?
createby: undefined,
updateby: undefined
}
//
if (newFormData.idcard) {
newFormData.age = calculateAgeFromIdcard(newFormData.idcard)
}
formData.value = newFormData
}
}
defineExpose({ open }) // open

View File

@ -57,7 +57,7 @@ v-model="queryParams.idcard" placeholder="请输入身份证号" clearable @keyu
</el-dropdown-item>
<el-dropdown-item command="handleDelete">
<el-button type="danger" link>
<Icon icon="ep:delete" />删除
<Icon icon="ep:delete" />删除档案
</el-button>
</el-dropdown-item>
</el-dropdown-menu>
@ -141,9 +141,9 @@ const getList = async () => {
try {
//
userProfile.value = await getUserProfile()
console.log(userProfile.value)
queryParams.orgid = userProfile.value.dept.id
const data = await PersonApi.getPersonPage(queryParams)
console.log(data.list)
list.value = data.list
total.value = data.total
} finally {
@ -209,7 +209,8 @@ const handleExport = async () => {
}
/** 操作分发 */
const handleCommand = async (command: string, row: PersonArchiveVO) => {
const handleCommand = async (command: string, row:any) => {
console.log(row)
switch (command) {
case 'handleCreate':
if(row.id){