@@ -134,6 +134,7 @@
< el-button size = "mini" type = "text" icon = "el-icon-delete" @click ="handleDelete(scope.row)" > 删除 < / el -button >
< el-button size = "mini" type = "text" icon = "el-icon-refresh" @click ="doInitPwdOne(scope.row)" > 初始化密码 < / el -button >
< el-button size = "mini" type = "text" icon = "el-icon-view" @click ="picVClick(scope.row)" > 查看画像 < / el -button >
< el-button size = "mini" type = "text" icon = "el-icon-search" @click ="detailVClick(scope.row)" > 查新详情 < / el -button >
< / template >
< / el-table-column >
< / el-table >
@@ -245,13 +246,225 @@
< / el-form >
< / el-dialog >
<!-- 查新详情弹窗 -- >
< el-dialog :visible.sync = "detailV" title = "学生查新详情" width = "800px" append -to -body >
< el-tabs v-model = "activeDetailTab" @tab-click="handleTabClick" >
< el -tab -pane label = "重要信息" name = "important" >
< el-form v-if = "detailInfo" size="mini" label-width="100px" >
< el -row >
< el-col :span = "12" >
< el-form-item label = "手机号" >
< el-input v-model = "detailInfo.phone" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "身份证号" >
< el-input v-model = "detailInfo.idCard" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "出生日期" >
< el-input v-model = "detailInfo.birthday" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "中国农业银行卡号" >
< el-input v-model = "detailInfo.xhk" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "开户行" >
< el-input v-model = "detailInfo.bankAddr" readonly / >
< / el-form-item >
< / el-col >
< / el-row >
< div style = "border-bottom: 1px dotted lightskyblue;margin-bottom: 0.5rem;" / >
< el-row >
< el-col :span = "12" >
< el-form-item label = "学院" >
< el-input v-model = "detailInfoView.deptName" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "专业" >
< el-input v-model = "detailInfoView.majorName" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "班级" >
< el-input v-model = "detailInfoView.className" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "学号" >
< el-input v-model = "detailInfoView.stuNo" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "姓名" >
< el-input v-model = "detailInfoView.stuName" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "年级" >
< el-input v-model = "detailInfoView.gradeName" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "辅导员" >
< el-input v-model = "detailInfoView.teacherName" readonly / >
< / el-form-item >
< / el-col >
< / el-row >
< / el-form >
< / el-tab-pane >
< el-tab-pane label = "其他信息" name = "other" >
< el-form v-if = "detailExtraInfo" size="mini" label-width="120px" >
< el -row >
< el-col :span = "12" >
< el-form-item label = "民族" >
< el-input v-model = "detailExtraInfo.mz" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "政治面貌" >
< el-input v-model = "detailExtraInfo.zzmm" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "血型" >
< el-input v-model = "detailExtraInfo.xx" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "考生号" >
< el-input v-model = "detailExtraInfo.ksh" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "籍贯" >
< el-input v-model = "detailExtraInfo.jg" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "户口性质" >
< el-input v-model = "detailExtraInfo.hkxz" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "户口所在地" >
< el-input v-model = "detailExtraInfo.hkszd" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "户口所在省" >
< el-input v-model = "detailExtraInfo.hksz1" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "户口所在市/区" >
< el-input v-model = "detailExtraInfo.hksz2" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "户口所在区/县" >
< el-input v-model = "detailExtraInfo.hksz3" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "24" >
< el-form-item label = "户口所在地区县以下详细地址" >
< el-input v-model = "detailExtraInfo.hkxxdz" readonly type="textarea" / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "所属派出所" >
< el-input v-model = "detailExtraInfo.sspcs" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "所属街道" >
< el-input v-model = "detailExtraInfo.ssjd" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "乘火车区间" >
< el-input v-model = "detailExtraInfo.chcqj" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "24" >
< el-form-item label = "详细联系地址" >
< el-input v-model = "detailExtraInfo.xxlxdz" readonly type="textarea" / >
< / el-form-item >
< / el-col >
< el-col :span = "24" >
< el-form-item label = "现家庭地址" >
< el-input v-model = "detailExtraInfo.xjtdz" readonly type="textarea" / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "家庭邮政编码" >
< el-input v-model = "detailExtraInfo.jtyzbm" readonly / >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "家庭电话" >
< el-input v-model = "detailExtraInfo.jtdh" readonly / >
< / el-form-item >
< / el-col >
< / el-row >
< / el-form >
< / el-tab-pane >
< el-tab-pane label = "家庭成员" name = "family" >
< div v-if = "detailFamilyInfo && detailFamilyInfo.length > 0" >
< el -table :data = "detailFamilyInfo" style = "width: 100%" >
< el-table-column prop = "familyName" label = "姓名" width = "80" / >
< el-table-column prop = "familyRelation" label = "与学生关系" width = "100" / >
< el-table-column prop = "age" label = "年龄" width = "60" / >
< el-table-column prop = "zzmm" label = "政治面貌" width = "100" / >
< el-table-column prop = "job" label = "职业" width = "80" / >
< el-table-column prop = "workPlace" label = "工作单位" min -width = " 150 " / >
< el-table-column prop = "yearMoney" label = "年收入" width = "100" / >
< el-table-column prop = "phone" label = "联系方式" width = "120" / >
< el-table-column prop = "health" label = "健康情况" width = "100" / >
< / el-table >
< / div >
< div v-else style = "text-align: center; color: #999;" >
暂无家庭成员信息
< / div >
< / el-tab-pane >
< el-tab-pane label = "教育经历" name = "edu" >
< div v-if = "detailEduInfo && detailEduInfo.length > 0" >
< el -table :data = "detailEduInfo" style = "width: 100%" >
< el-table-column prop = "startTime" label = "开始时间" width = "170" / >
< el-table-column prop = "endTime" label = "结束时间" width = "170" / >
< el-table-column prop = "schoolName" label = "学校" width = "170" / >
< el-table-column prop = "post" label = "职务" width = "170" / >
< el-table-column prop = "certifier" label = "证明人" width = "170" / >
< / el-table >
< / div >
< div v-else style = "text-align: center; color: #999;" >
暂无教育经历信息
< / div >
< / el-tab-pane >
< / el-tabs >
< / el-dialog >
< / div >
< / template >
< script >
import { addStudent , delStudent , doDept , getClassName , getStatus , getStudent , initOnePwd , initPwd , listStudent , updateStudent } from '@/api/stuCQS/basedata/student'
import { addStudent , delStudent , doDept , getClassName , getStatus , getStudent , initOnePwd , initPwd , listStudent , updateStudent , getOwnInfoByStuNo } from '@/api/stuCQS/basedata/student'
import { getStuInfo } from '@/api/stuCQS/basedata/stuInfoView'
import { getOwnInfo as getExtraInfo , getOwnInfoByStuNo as getStudentExtraInfoByStuNo } from '@/api/stuCQS/basedata/extraInfo'
import { getOwnExpFdy } from '@/api/stuCQS/basedata/experience'
import { getOwnFamilyFdy } from '@/api/stuCQS/basedata/member'
import StuPic from '@/views/basedata/private/StuPic'
import EduExp from '@/views/basedata/private/components/EduExp.vue'
import FamilyMember from '@/views/basedata/private/components/FamilyMember.vue'
import { listGrade } from '@/api/stuCQS/basedata/grade'
@@ -268,7 +481,7 @@ export default {
name : 'Student' ,
dicts : [ 'srs_stu_status' ] ,
components : {
StuPic , Treeselect
StuPic , Treeselect , EduExp , FamilyMember
} ,
data ( ) {
return {
@@ -369,7 +582,16 @@ export default {
dept _list : [ ] ,
deptOptions : undefined ,
status _list : [ ] ,
selectedStatus : '01'
selectedStatus : '01' ,
// 查新详情相关
detailV : false ,
detailInfo : { } ,
detailInfoView : { } ,
detailExtraInfo : { } ,
detailFamilyInfo : [ ] ,
detailEduInfo : [ ] ,
activeDetailTab : 'important' ,
}
} ,
created ( ) {
@@ -603,6 +825,149 @@ export default {
// 提交上传文件
submitFileForm ( ) {
this . $refs . upload . submit ( )
} ,
// 查新详情按钮点击事件
async detailVClick ( row ) {
this . detailV = true ;
try {
// 使用getStuInfo接口获取学生基础信息( 包含辅导员信息)
const baseRes = await getStuInfo ( row . stuNo ) ;
// 同时使用getOwnInfoByStuNo接口获取完整的学生敏感信息
const res = await getOwnInfoByStuNo ( row . stuNo ) ;
if ( baseRes . code === 200 && res . code === 200 ) {
// 根据实际API返回的数据结构调整字段名
this . detailInfo = {
phone : res . data . phone || res . data . stuPhone || res . data . phoneNumber || res . data . mobile || res . data . tel || res . data . telephone || res . data . contactNumber || res . data . mobilePhone || '-' ,
idCard : res . data . idCard || res . data . idNumber || res . data . identityCard || '-' ,
birthday : res . data . birthday || res . data . birthDate || '-' ,
xhk : res . data . xhk || res . data . bankCard || res . data . cardNumber || res . data . agriculturalBankCard || res . data . bankAccount || res . data . cardNo || '-' ,
bankAddr : res . data . bankAddr || res . data . openingBank || res . data . accountOpeningBank || res . data . bankName || res . data . depositBank || '-'
} ;
// 使用getStuInfo的结果获取辅导员信息
this . detailInfoView = {
deptName : baseRes . data . deptName || ( res . data . dept && res . data . dept . deptName ) || res . data . collegeName || res . data . department || '-' ,
majorName : baseRes . data . majorName || ( res . data . srsMajors && res . data . srsMajors . majorName ) || res . data . major || '-' ,
className : baseRes . data . className || ( res . data . srsClass ? . className ) || res . data . class || '-' ,
stuNo : baseRes . data . stuNo || res . data . studentNo || res . data . studentNumber || '-' ,
stuName : baseRes . data . stuName || res . data . name || res . data . studentName || '-' ,
gradeName : baseRes . data . gradeName || res . data . grade || '-' ,
teacherName : baseRes . data . teacherName || baseRes . data . counselorName || baseRes . data . supervisor || ( res . data . cphTeacher && res . data . cphTeacher . name ) || res . data . teacherName || res . data . cphName || '-'
} ;
// 获取额外的学生信息
try {
const extraRes = await getStudentExtraInfoByStuNo ( row . stuNo ) ;
if ( extraRes . code === 200 ) {
this . detailExtraInfo = extraRes . data || { } ;
// 处理户口所在地和籍贯的显示
if ( this . detailExtraInfo . hksz1 && this . detailExtraInfo . hksz2 && this . detailExtraInfo . hksz3 ) {
this . detailExtraInfo . fullHkszd = ` ${ this . detailExtraInfo . hksz1 } ${ this . detailExtraInfo . hksz2 === '市辖区' ? '' : this . detailExtraInfo . hksz2 } ${ this . detailExtraInfo . hksz3 } ` ;
}
if ( this . detailExtraInfo . jg ) {
const jgParts = this . detailExtraInfo . jg . split ( ' ' ) ;
if ( jgParts . length >= 3 ) {
this . detailExtraInfo . fullJg = ` ${ jgParts [ 0 ] } ${ jgParts [ 1 ] === '市辖区' ? '' : jgParts [ 1 ] } ${ jgParts [ 2 ] } ` ;
} else {
this . detailExtraInfo . fullJg = this . detailExtraInfo . jg ;
}
}
// 确保所有字段都有默认值, 防止显示undefined
const fields = [ 'mz' , 'zzmm' , 'xx' , 'ksh' , 'hkxz' , 'hksz1' , 'hksz2' , 'hksz3' , 'hkxxdz' , 'sspcs' , 'ssjd' , 'chcqj' , 'xxlxdz' , 'xjtdz' , 'jtyzbm' , 'jtdh' ] ;
fields . forEach ( field => {
if ( ! this . detailExtraInfo [ field ] ) {
this . detailExtraInfo [ field ] = '-' ;
}
} ) ;
// 处理可能为null的地址字段
if ( ! this . detailExtraInfo . hkszd ) {
this . detailExtraInfo . hkszd = this . detailExtraInfo . fullHkszd || '-' ;
}
if ( ! this . detailExtraInfo . jg ) {
this . detailExtraInfo . jg = this . detailExtraInfo . fullJg || '-' ;
}
} else {
this . detailExtraInfo = { } ;
}
// 获取家庭成员信息
try {
const familyRes = await getOwnFamilyFdy ( row . stuNo ) ;
if ( familyRes . code === 200 ) {
this . detailFamilyInfo = Array . isArray ( familyRes . data ) ? familyRes . data : [ ] ;
} else {
this . detailFamilyInfo = [ ] ;
}
} catch ( familyError ) {
console . error ( '获取家庭成员信息失败:' , familyError ) ;
this . detailFamilyInfo = [ ] ;
}
// 获取教育经历信息
try {
const eduRes = await getOwnExpFdy ( row . stuNo ) ;
if ( eduRes . code === 200 ) {
this . detailEduInfo = Array . isArray ( eduRes . data ) ? eduRes . data : [ ] ;
} else {
this . detailEduInfo = [ ] ;
}
} catch ( eduError ) {
console . error ( '获取教育经历信息失败:' , eduError ) ;
this . detailEduInfo = [ ] ;
}
} catch ( extraError ) {
console . error ( '获取额外学生信息失败:' , extraError ) ;
this . detailExtraInfo = { } ;
this . detailFamilyInfo = [ ] ;
this . detailEduInfo = [ ] ;
}
} else {
this . $message . error ( baseRes . msg || res . msg || '获取学生信息失败' ) ;
// 初始化为空值,确保弹窗有数据展示
this . initEmptyDetailInfo ( ) ;
}
} catch ( error ) {
console . error ( '获取学生信息失败:' , error ) ;
this . $message . error ( '获取学生信息失败' ) ;
// 初始化为空值
this . initEmptyDetailInfo ( ) ;
}
} ,
// 初始化空的详情信息
initEmptyDetailInfo ( ) {
this . detailInfo = {
phone : '-' ,
idCard : '-' ,
birthday : '-' ,
xhk : '-' ,
bankAddr : '-'
} ;
this . detailInfoView = {
deptName : '-' ,
majorName : '-' ,
className : '-' ,
stuNo : '-' ,
stuName : '-' ,
gradeName : '-' ,
teacherName : '-'
} ;
this . detailExtraInfo = { } ;
this . detailFamilyInfo = [ ] ;
this . detailEduInfo = [ ] ;
} ,
// 标签页点击事件
handleTabClick ( tab ) {
// 这里可以添加当切换到特定标签页时加载数据的逻辑
// 目前只是记录当前标签页, 如果需要懒加载可以在这里添加API调用
this . activeDetailTab = tab . name ;
}
}
}