学生页面补全

This commit is contained in:
yaojian
2026-03-10 17:09:43 +08:00
parent d92cb8634b
commit 7e4f5e1e9b
4 changed files with 449 additions and 14 deletions

View File

@@ -52,6 +52,18 @@ export const getObj = (id: string | number) => {
}); });
}; };
/**
* 根据学号获取学生详细信息(用于详情页面)
* @param query
*/
export const getStudentInfoDetail = (query: any) => {
return request({
url: '/basic/basicstudentinfo/page',
method: 'get',
params: query,
});
};
/** /**
* 根据学号获取信息 * 根据学号获取信息
* @param stuNo * @param stuNo

View File

@@ -35,6 +35,7 @@ const loading = ref(false);
// 提交表单数据 // 提交表单数据
const form = reactive({ const form = reactive({
id: '', id: '',
stuNo: '',
realName: '', realName: '',
oldName: '', oldName: '',
idCard: '', idCard: '',
@@ -58,6 +59,7 @@ const openDialog = (rowData: any) => {
Object.assign(form, { Object.assign(form, {
id: rowData.id || '', id: rowData.id || '',
realName: rowData.realName || '', realName: rowData.realName || '',
stuNo: rowData.stuNo || '',
oldName: rowData.oldName || '', oldName: rowData.oldName || '',
idCard: rowData.idCard || '', idCard: rowData.idCard || '',
}); });

View File

@@ -0,0 +1,333 @@
<template>
<el-dialog title="学生详情" v-model="visible" :close-on-click-modal="false" draggable width="1200px" top="5vh">
<div v-loading="loading" class="student-detail-container">
<!-- 左侧导航 -->
<div class="detail-sidebar">
<el-menu :default-active="activeTab" @select="handleMenuSelect">
<el-menu-item index="basic">
<el-icon><User /></el-icon>
<span>基本信息</span>
</el-menu-item>
<el-menu-item index="education">
<el-icon><School /></el-icon>
<span>教育经历</span>
</el-menu-item>
<el-menu-item index="family">
<el-icon><HomeFilled /></el-icon>
<span>家庭信息</span>
</el-menu-item>
<el-menu-item index="major">
<el-icon><Briefcase /></el-icon>
<span>专业信息</span>
</el-menu-item>
<el-menu-item index="class">
<el-icon><Grid /></el-icon>
<span>班级信息</span>
</el-menu-item>
<el-menu-item index="adult">
<el-icon><Document /></el-icon>
<span>成教信息</span>
</el-menu-item>
</el-menu>
</div>
<!-- 右侧内容 -->
<div class="detail-content">
<!-- 基本信息 -->
<div v-show="activeTab === 'basic'" class="detail-panel">
<el-descriptions :column="3" border>
<el-descriptions-item label="姓名">{{ detailData.realName || '-' }}</el-descriptions-item>
<el-descriptions-item label="曾用名">{{ detailData.oldName || '-' }}</el-descriptions-item>
<el-descriptions-item label="性别">
<el-tag v-if="detailData.gender === '1' || detailData.gender === 1" size="small" type="primary"></el-tag>
<el-tag v-else-if="detailData.gender === '0' || detailData.gender === 0" size="small" type="danger"></el-tag>
<span v-else>-</span>
</el-descriptions-item>
<el-descriptions-item label="身份证号">{{ detailData.idCard || '-' }}</el-descriptions-item>
<el-descriptions-item label="出生日期">{{ basicInfo?.birthday || '-' }}</el-descriptions-item>
<el-descriptions-item label="民族">{{ basicInfo?.national || '-' }}</el-descriptions-item>
<el-descriptions-item label="政治面貌">{{ basicInfo?.politicsStatus || '-' }}</el-descriptions-item>
<el-descriptions-item label="籍贯">{{ detailData.householdAddress || '-' }}</el-descriptions-item>
<el-descriptions-item label="本人电话">{{ detailData.phone || '-' }}</el-descriptions-item>
<el-descriptions-item label="电子邮箱">{{ basicInfo?.email || '-' }}</el-descriptions-item>
<el-descriptions-item label="QQ号/微信号">{{ basicInfo?.qq || '-' }}</el-descriptions-item>
<el-descriptions-item label="退伍军人">
<el-tag v-if="basicInfo?.veteran === '1' || basicInfo?.veteran === 1" size="small" type="success"></el-tag>
<el-tag v-else-if="basicInfo?.veteran === '0' || basicInfo?.veteran === 0" size="small" type="info"></el-tag>
<span v-else>-</span>
</el-descriptions-item>
<el-descriptions-item label="辨色力">{{ basicInfo?.colourSense || '-' }}</el-descriptions-item>
<el-descriptions-item label="裸眼视力(左)">{{ basicInfo?.eyeLeft || '-' }}</el-descriptions-item>
<el-descriptions-item label="裸眼视力(右)">{{ basicInfo?.eyeRight || '-' }}</el-descriptions-item>
<el-descriptions-item label="身高(cm)">{{ basicInfo?.height || '-' }}</el-descriptions-item>
<el-descriptions-item label="体重(kg)">{{ basicInfo?.weight || '-' }}</el-descriptions-item>
<el-descriptions-item label="既往病史">{{ basicInfo?.seekText || '-' }}</el-descriptions-item>
<el-descriptions-item label="本人特长" :span="3">{{ basicInfo?.advantage || '-' }}</el-descriptions-item>
</el-descriptions>
</div>
<!-- 教育经历 -->
<div v-show="activeTab === 'education'" class="detail-panel">
<el-descriptions :column="3" border>
<el-descriptions-item label="入学前文化程度">{{ educationInfo?.education || '-' }}</el-descriptions-item>
<el-descriptions-item label="中考分数">{{ educationInfo?.examScore || '-' }}</el-descriptions-item>
<el-descriptions-item label="中考准考证号">{{ educationInfo?.examNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="本校借读学年">{{ educationInfo?.temporaryyeYear || '-' }}</el-descriptions-item>
<el-descriptions-item label="入学前毕业学校">{{ educationInfo?.schoolName || '-' }}</el-descriptions-item>
<el-descriptions-item label="毕业学校省市">{{ educationInfo?.schoolProvince || '-' }}</el-descriptions-item>
<el-descriptions-item label="曾任职务" :span="3">{{ educationInfo?.position || '-' }}</el-descriptions-item>
</el-descriptions>
</div>
<!-- 家庭信息 -->
<div v-show="activeTab === 'family'" class="detail-panel">
<el-descriptions :column="3" border class="mb20">
<el-descriptions-item label="户口详细地址" :span="3">{{ homeInfo?.detailedHouseholdAddress || '-' }}</el-descriptions-item>
<el-descriptions-item label="户口性质">{{ homeInfo?.householdProperties || '-' }}</el-descriptions-item>
<el-descriptions-item label="是否租住">
<el-tag v-if="homeInfo?.isTemp === '1' || homeInfo?.isTemp === 1" size="small" type="success"></el-tag>
<el-tag v-else-if="homeInfo?.isTemp === '0' || homeInfo?.isTemp === 0" size="small" type="info"></el-tag>
<span v-else>-</span>
</el-descriptions-item>
<el-descriptions-item label="居住详细地址">{{ homeInfo?.liveAddress || '-' }}</el-descriptions-item>
<el-descriptions-item label="家庭主要收入来源">{{ homeInfo?.incomeSource || '-' }}</el-descriptions-item>
<el-descriptions-item label="家庭年收入(万)">{{ homeInfo?.incomeMoney || '-' }}</el-descriptions-item>
<el-descriptions-item label="家庭人均收入(万)">{{ homeInfo?.incomePerMoney || '-' }}</el-descriptions-item>
<el-descriptions-item label="是否低保">
<el-tag v-if="homeInfo?.homeDifficulty === '1' || homeInfo?.homeDifficulty === 1" size="small" type="warning"></el-tag>
<el-tag v-else-if="homeInfo?.homeDifficulty === '0' || homeInfo?.homeDifficulty === 0" size="small" type="info"></el-tag>
<span v-else>-</span>
</el-descriptions-item>
<el-descriptions-item label="共同居住人">{{ homeInfo?.livewith || '-' }}</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">父母信息</el-divider>
<el-descriptions :column="3" border>
<el-descriptions-item label="父亲姓名">{{ homeInfo?.fatherName || '-' }}</el-descriptions-item>
<el-descriptions-item label="父亲手机号">{{ homeInfo?.fatherPhone || '-' }}</el-descriptions-item>
<el-descriptions-item label="父亲身份证号">{{ homeInfo?.fatcherIdCard || '-' }}</el-descriptions-item>
<el-descriptions-item label="父亲工作单位" :span="3">{{ homeInfo?.fatherWorkAddress || '-' }}</el-descriptions-item>
<el-descriptions-item label="母亲姓名">{{ homeInfo?.matherName || '-' }}</el-descriptions-item>
<el-descriptions-item label="母亲手机号">{{ homeInfo?.matherPhone || '-' }}</el-descriptions-item>
<el-descriptions-item label="母亲身份证号">{{ homeInfo?.matherIdCard || '-' }}</el-descriptions-item>
<el-descriptions-item label="母亲工作单位" :span="3">{{ homeInfo?.matherWorkAddress || '-' }}</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">家庭成员列表</el-divider>
<el-table :data="homeDetailList" border style="width: 100%" max-height="300">
<el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="appellation" label="关系" width="100" />
<el-table-column prop="realName" label="姓名" width="100" />
<el-table-column prop="tel" label="手机号" width="130" />
<el-table-column prop="idCard" label="身份证号" width="180" />
<el-table-column prop="workAddress" label="工作单位" show-overflow-tooltip />
<el-table-column prop="politicsStatus" label="政治面貌" width="100" />
<el-table-column prop="health" label="身体状况" width="80" />
</el-table>
<div v-if="homeDetailList.length === 0" class="empty-tip">暂无家庭成员信息</div>
</div>
<!-- 专业信息 -->
<div v-show="activeTab === 'major'" class="detail-panel">
<el-descriptions :column="3" border>
<el-descriptions-item label="入学日期">{{ majorInfo?.enterDate || '-' }}</el-descriptions-item>
<el-descriptions-item label="学院">{{ detailData.deptName || '-' }}</el-descriptions-item>
<el-descriptions-item label="专业名称">{{ detailData.majorName || '-' }}</el-descriptions-item>
<el-descriptions-item label="学号">{{ detailData.stuNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="学籍号">{{ majorInfo?.schoolRollNumber || '-' }}</el-descriptions-item>
<el-descriptions-item label="学籍">{{ majorInfo?.schoolRoll || '-' }}</el-descriptions-item>
<el-descriptions-item label="状态">{{ majorInfo?.studentStatus || '-' }}</el-descriptions-item>
<el-descriptions-item label="培养层次">{{ majorInfo?.majorLevel || '-' }}</el-descriptions-item>
<el-descriptions-item label="学制">{{ majorInfo?.majorYears || '-' }}</el-descriptions-item>
<el-descriptions-item label="学习形式">{{ majorInfo?.studyType || '-' }}</el-descriptions-item>
<el-descriptions-item label="联院学号">{{ majorInfo?.unionStuNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="中技证号">{{ majorInfo?.middleNumber || '-' }}</el-descriptions-item>
<el-descriptions-item label="中技段结束时间">{{ majorInfo?.middleTime || '-' }}</el-descriptions-item>
<el-descriptions-item label="高技证号">{{ majorInfo?.highNumber || '-' }}</el-descriptions-item>
<el-descriptions-item label="高技段结束时间">{{ majorInfo?.highTime || '-' }}</el-descriptions-item>
<el-descriptions-item label="技师证号">{{ majorInfo?.technicianNumber || '-' }}</el-descriptions-item>
<el-descriptions-item label="毕业证号">{{ detailData.graduateNumber || '-' }}</el-descriptions-item>
<el-descriptions-item label="毕业时间">{{ majorInfo?.graduateDate || '-' }}</el-descriptions-item>
<el-descriptions-item label="结业时间">{{ majorInfo?.pauseDate || '-' }}</el-descriptions-item>
</el-descriptions>
</div>
<!-- 班级信息 -->
<div v-show="activeTab === 'class'" class="detail-panel">
<el-descriptions :column="3" border>
<el-descriptions-item label="班级名称">{{ detailData.className || '-' }}</el-descriptions-item>
<el-descriptions-item label="班号">{{ majorInfo?.classNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="教室位置">{{ majorInfo?.classRoomPosition || '-' }}</el-descriptions-item>
<el-descriptions-item label="就读方式">{{ majorInfo?.isRoomNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="班主任">{{ detailData.teacherRealName || majorInfo?.teacherRealName || '-' }}</el-descriptions-item>
<el-descriptions-item label="班主任联系电话">{{ majorInfo?.teacherTel || '-' }}</el-descriptions-item>
<el-descriptions-item label="宿舍号">{{ detailData.roomNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="宿舍联系电话">{{ majorInfo?.dormBuildingPhone || '-' }}</el-descriptions-item>
<el-descriptions-item label="中职卡开户行">{{ majorInfo?.bankName || '-' }}</el-descriptions-item>
<el-descriptions-item label="中职卡号">{{ majorInfo?.bankCard || '-' }}</el-descriptions-item>
<el-descriptions-item label="社保卡开户行">{{ majorInfo?.socialBank || '-' }}</el-descriptions-item>
<el-descriptions-item label="社保卡号">{{ majorInfo?.socialBankNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="停车证号">{{ detailData.parkingNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="班级QQ群号">{{ detailData.classQQ || majorInfo?.classQq || '-' }}</el-descriptions-item>
<el-descriptions-item label="年级">{{ majorInfo?.currentGrade || '-' }}</el-descriptions-item>
</el-descriptions>
</div>
<!-- 成教信息 -->
<div v-show="activeTab === 'adult'" class="detail-panel">
<el-descriptions :column="3" border>
<el-descriptions-item label="成教学院">{{ adultInfo?.schoolName || '-' }}</el-descriptions-item>
<el-descriptions-item label="成教学历">{{ adultInfo?.adultEducation || '-' }}</el-descriptions-item>
<el-descriptions-item label="成教考试号">{{ adultInfo?.adultExamNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="成教入籍日期">{{ adultInfo?.adultEnterDate || '-' }}</el-descriptions-item>
<el-descriptions-item label="成教学号">{{ adultInfo?.adultNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="成教专业">{{ adultInfo?.adultMajorName || '-' }}</el-descriptions-item>
<el-descriptions-item label="成教计算机成绩">{{ adultInfo?.computerScore || '-' }}</el-descriptions-item>
<el-descriptions-item label="成教英语成绩">{{ adultInfo?.englishScore || '-' }}</el-descriptions-item>
</el-descriptions>
</div>
</div>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="StudentDetailDialog">
import { ref } from 'vue';
import { User, School, HomeFilled, Briefcase, Grid, Document } from '@element-plus/icons-vue';
import { getStudentInfoDetail } from '/@/api/basic/basicstudent';
import { useMessage } from '/@/hooks/message';
// 定义变量内容
const visible = ref(false);
const loading = ref(false);
const activeTab = ref('basic');
// 学生数据
const detailData = ref<any>({});
const basicInfo = ref<any>(null);
const educationInfo = ref<any>(null);
const homeInfo = ref<any>(null);
const homeDetailList = ref<any[]>([]);
const majorInfo = ref<any>(null);
const adultInfo = ref<any>(null);
// 菜单选择
const handleMenuSelect = (index: string) => {
activeTab.value = index;
};
// 打开弹窗
const openDialog = async (rowData: any) => {
visible.value = true;
activeTab.value = 'basic';
detailData.value = rowData || {};
// 重置数据
basicInfo.value = null;
educationInfo.value = null;
homeInfo.value = null;
homeDetailList.value = [];
majorInfo.value = null;
adultInfo.value = null;
// 加载详情数据
if (rowData?.stuNo) {
await loadDetailData(rowData.stuNo);
}
};
// 加载详情数据
const loadDetailData = async (stuNo: string) => {
loading.value = true;
try {
const res = await getStudentInfoDetail({ stuNo });
if (res.data && res.data.records && res.data.records.length > 0) {
const data = res.data.records[0];
// 主数据
detailData.value = data;
// 基本信息
basicInfo.value = data.basicStudentInfoDetailVO || data.basicStudentInfo || null;
// 教育经历
educationInfo.value = data.basicStudentEducation || null;
// 家庭信息
homeInfo.value = data.basicStudentHome || null;
homeDetailList.value = data.homeDetailList || [];
// 专业/班级信息
majorInfo.value = data.basicStudentMajorClassVO || data.basicStudentMajorClass || null;
// 成教信息
adultInfo.value = data.basicStudentAdultEducation || null;
}
} catch (err: any) {
console.error('获取学生详情失败', err);
useMessage().error(err.msg || '获取学生详情失败');
} finally {
loading.value = false;
}
};
// 暴露方法给父组件
defineExpose({
openDialog,
});
</script>
<style lang="scss" scoped>
.student-detail-container {
display: flex;
min-height: 500px;
max-height: 70vh;
.detail-sidebar {
width: 180px;
border-right: 1px solid #e4e7ed;
flex-shrink: 0;
.el-menu {
border-right: none;
}
.el-menu-item {
height: 50px;
line-height: 50px;
&.is-active {
background-color: #ecf5ff;
}
}
}
.detail-content {
flex: 1;
padding: 0 20px;
overflow-y: auto;
.detail-panel {
padding: 10px 0;
}
}
}
.mb20 {
margin-bottom: 20px;
}
.empty-tip {
text-align: center;
padding: 20px;
color: #909399;
}
:deep(.el-descriptions__label) {
width: 140px;
font-weight: 500;
}
:deep(.el-descriptions__content) {
word-break: break-all;
}
</style>

View File

@@ -62,8 +62,8 @@
<el-option label="否" value="0" /> <el-option label="否" value="0" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="姓名/学号/身份证号" prop="keyword"> <el-form-item label="姓名/学号/身份证号" prop="total">
<el-input v-model="searchForm.keyword" placeholder="请输入姓名/学号/身份证号" clearable style="width: 200px" /> <el-input v-model="searchForm.total" placeholder="请输入姓名/学号/身份证号" clearable style="width: 200px" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" plain icon="Search" @click="handleSearch">查询</el-button> <el-button type="primary" plain icon="Search" @click="handleSearch">查询</el-button>
@@ -199,7 +199,16 @@
取消班干部 取消班干部
</el-button> </el-button>
<el-button v-else icon="User" text type="success" @click="handleSetLeader(scope.row)"> 设为班干部 </el-button> <el-button v-else icon="User" text type="success" @click="handleSetLeader(scope.row)"> 设为班干部 </el-button>
<el-button icon="Lock" text type="danger" @click="handleForbidInout(scope.row)"> 禁止进出 </el-button> <el-button
v-if="scope.row.isInout == 1 || scope.row.isInout === '1'"
icon="Lock"
text
type="danger"
@click="handleForbidInout(scope.row)"
>
禁止进出
</el-button>
<el-button v-else icon="Unlock" text type="success" @click="handleForbidInout(scope.row)"> 允许进出 </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -291,6 +300,7 @@ import {
Tickets, Tickets,
Medal, Medal,
Lock, Lock,
Unlock,
DataAnalysis, DataAnalysis,
Setting, Setting,
Menu, Menu,
@@ -324,7 +334,7 @@ import { makeExportClassRoomHygieneMonthlyTask } from '/@/api/stuwork/file';
// 引入组件 // 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue')); const FormDialog = defineAsyncComponent(() => import('./form.vue'));
const DetailDialog = defineAsyncComponent(() => import('./detail.vue')); const DetailDialog = defineAsyncComponent(() => import('./components/StudentDetail.vue'));
const SimpleEditDialog = defineAsyncComponent(() => import('./components/SimpleEdit.vue')); const SimpleEditDialog = defineAsyncComponent(() => import('./components/SimpleEdit.vue'));
// 定义变量内容 // 定义变量内容
@@ -504,7 +514,7 @@ const searchForm = reactive({
parkingCard: '', parkingCard: '',
completion: '', completion: '',
isUnionClass: '', isUnionClass: '',
keyword: '', total: '',
}); });
// 配置 useTable // 配置 useTable
@@ -546,7 +556,7 @@ const handleReset = () => {
parkingCard: '', parkingCard: '',
completion: '', completion: '',
isUnionClass: '', isUnionClass: '',
keyword: '', total: '',
}); });
getDataList(); getDataList();
}; };
@@ -692,37 +702,115 @@ const handleExportCertificate = async () => {
// 简单信息维护 // 简单信息维护
const handleSimpleEdit = (row: any) => { const handleSimpleEdit = (row: any) => {
useMessage().warning('功能开发中'); simpleEditDialogRef.value?.openDialog(row);
}; };
// 查看详情 // 查看详情
const handleViewDetail = (row: any) => { const handleViewDetail = (row: any) => {
useMessage().warning('功能开发中'); detailDialogRef.value?.openDialog(row);
}; };
// 打印证件照 // 打印证件照
const handlePrintPhoto = async (row: any) => { const handlePrintPhoto = async (row: any) => {
useMessage().warning('功能开发中'); if (!row.stuNo) {
useMessage().warning('学号不存在');
return;
}
try {
const res = await prePrint(row.stuNo);
if (res.data) {
// 打开新窗口进行打印
const printWindow = window.open('', '_blank');
if (printWindow) {
printWindow.document.write(`
<html>
<head><title>学生证件照打印</title></head>
<body>
<h2 style="text-align:center;">学生证打印</h2>
<div style="text-align:center;">
<p><strong>姓名:</strong>${res.data.realName || row.realName || '-'}</p>
<p><strong>学号:</strong>${res.data.stuNo || row.stuNo || '-'}</p>
<p><strong>班级:</strong>${res.data.className || row.className || '-'}</p>
<p><strong>身份证号:</strong>${res.data.idCard || row.idCard || '-'}</p>
</div>
<script>window.onload = function() { window.print(); }<\/script>
</body>
</html>
`);
printWindow.document.close();
}
}
} catch (err: any) {
useMessage().error(err.msg || '获取打印信息失败');
}
}; };
// 重置密码 // 重置密码
const handleResetPassword = async (row: any) => { const handleResetPassword = async (row: any) => {
useMessage().warning('功能开发中'); try {
await useMessageBox().confirm(`确定要重置学生【${row.realName}】的密码吗?重置后密码将变为默认密码。`);
await resetPassWord(row);
useMessage().success('密码重置成功');
} catch (err: any) {
if (err !== 'cancel') {
useMessage().error(err.msg || '密码重置失败');
}
}
}; };
// 设为班干部 // 设为班干部
const handleSetLeader = async (row: any) => { const handleSetLeader = async (row: any) => {
useMessage().warning('功能开发中'); try {
await useMessageBox().confirm(`确定要将学生【${row.realName}】设为班干部吗?`);
await editIsleader({
id: row.id,
stuNo: row.stuNo,
isClassLeader: 1
});
useMessage().success('设置成功');
getDataList();
} catch (err: any) {
if (err !== 'cancel') {
useMessage().error(err.msg || '设置失败');
}
}
}; };
// 取消班干部 // 取消班干部
const handleCancelLeader = async (row: any) => { const handleCancelLeader = async (row: any) => {
useMessage().warning('功能开发中'); try {
await useMessageBox().confirm(`确定要取消学生【${row.realName}】的班干部身份吗?`);
await editIsleader({
id: row.id,
stuNo: row.stuNo,
isClassLeader: 0
});
useMessage().success('取消成功');
getDataList();
} catch (err: any) {
if (err !== 'cancel') {
useMessage().error(err.msg || '取消失败');
}
}
}; };
// 禁止进出 // 禁止进出/允许进出
const handleForbidInout = async (row: any) => { const handleForbidInout = async (row: any) => {
useMessage().warning('功能开发中'); const isForbid = row.isInout === 1 || row.isInout === '1';
const action = isForbid ? '禁止' : '允许';
try {
await useMessageBox().confirm(`确定要${action}学生【${row.realName}】进出吗?`);
await updateInout({
stuNo: row.stuNo,
isInout: isForbid ? 0 : 1
});
useMessage().success(`${action}进出设置成功`);
getDataList();
} catch (err: any) {
if (err !== 'cancel') {
useMessage().error(err.msg || '设置失败');
}
}
}; };
// 获取学院列表 // 获取学院列表