This commit is contained in:
吴红兵
2026-03-07 12:35:45 +08:00
parent 271710e870
commit b997b3ba48
423 changed files with 79612 additions and 91574 deletions

View File

@@ -16,51 +16,51 @@
-->
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane label="回校列表" name="tab">
<TabIndex ref="tabIndexRef" />
</el-tab-pane>
<el-tab-pane label="回校统计" name="static">
<StaticIndex ref="staticIndexRef" />
</el-tab-pane>
</el-tabs>
</div>
</div>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane label="回校列表" name="tab">
<TabIndex ref="tabIndexRef" />
</el-tab-pane>
<el-tab-pane label="回校统计" name="static">
<StaticIndex ref="staticIndexRef" />
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script setup lang="ts" name="backSchool">
import { ref, nextTick, defineAsyncComponent } from 'vue'
import { ref, nextTick, defineAsyncComponent } from 'vue';
const TabIndex = defineAsyncComponent(() => import('./tabIndex.vue'))
const StaticIndex = defineAsyncComponent(() => import('./staticIndex.vue'))
const TabIndex = defineAsyncComponent(() => import('./tabIndex.vue'));
const StaticIndex = defineAsyncComponent(() => import('./staticIndex.vue'));
const activeName = ref('tab')
const tabIndexRef = ref()
const staticIndexRef = ref()
const activeName = ref('tab');
const tabIndexRef = ref();
const staticIndexRef = ref();
const handleTabClick = (tab: any) => {
if (tab.paneName == 'tab') {
nextTick(() => {
tabIndexRef.value?.init()
})
} else {
nextTick(() => {
staticIndexRef.value?.init()
})
}
}
if (tab.paneName == 'tab') {
nextTick(() => {
tabIndexRef.value?.init();
});
} else {
nextTick(() => {
staticIndexRef.value?.init();
});
}
};
</script>
<style lang="scss" scoped>
:deep(.el-tabs) {
height: 100%;
display: flex;
flex-direction: column;
.el-tab-pane {
height: 100%;
}
height: 100%;
display: flex;
flex-direction: column;
.el-tab-pane {
height: 100%;
}
}
</style>

View File

@@ -16,174 +16,169 @@
-->
<template>
<div class="static-index-container">
<!-- 搜索表单 -->
<div class="search-form-wrapper">
<el-form :model="queryForm" inline ref="searchFormRef">
<el-form-item label="招生计划" prop="groupId">
<el-select v-model="queryForm.groupId" filterable clearable placeholder="请选择招生计划" @change="getTabStaticDataList">
<el-option
v-for="item in planList"
:key="item.id"
:label="item.groupName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="getTabStaticDataList">查询</el-button>
<el-button icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
<div class="static-index-container">
<!-- 搜索表单 -->
<div class="search-form-wrapper">
<el-form :model="queryForm" inline ref="searchFormRef">
<el-form-item label="招生计划" prop="groupId">
<el-select v-model="queryForm.groupId" filterable clearable placeholder="请选择招生计划" @change="getTabStaticDataList">
<el-option v-for="item in planList" :key="item.id" :label="item.groupName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="getTabStaticDataList">查询</el-button>
<el-button icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
<!-- 表格 -->
<div class="table-wrapper">
<el-table
ref="tableRef"
:data="tableData"
v-loading="dataListLoading"
border
stripe
show-summary
:summary-method="getSummaries"
:cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle"
height="100%"
>
<el-table-column prop="groupId" label="招生计划" align="center" show-overflow-tooltip>
<template #default="scope">
{{ getPlanName(scope.row.groupId) }}
</template>
</el-table-column>
<el-table-column prop="majorName" label="专业名称" align="center" show-overflow-tooltip />
<el-table-column prop="wlx" label="未联系" align="center" show-overflow-tooltip />
<el-table-column prop="yjbd" label="已经报到" align="center" show-overflow-tooltip />
<el-table-column prop="tcbd" label="推迟报到" align="center" show-overflow-tooltip />
<el-table-column prop="fqbd" label="放弃报到" align="center" show-overflow-tooltip />
<el-table-column prop="fwlx" label="无法联系" align="center" show-overflow-tooltip />
</el-table>
</div>
</div>
<!-- 表格 -->
<div class="table-wrapper">
<el-table
ref="tableRef"
:data="tableData"
v-loading="dataListLoading"
border
stripe
show-summary
:summary-method="getSummaries"
:cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle"
height="100%"
>
<el-table-column prop="groupId" label="招生计划" align="center" show-overflow-tooltip>
<template #default="scope">
{{ getPlanName(scope.row.groupId) }}
</template>
</el-table-column>
<el-table-column prop="majorName" label="专业名称" align="center" show-overflow-tooltip />
<el-table-column prop="wlx" label="未联系" align="center" show-overflow-tooltip />
<el-table-column prop="yjbd" label="已经报到" align="center" show-overflow-tooltip />
<el-table-column prop="tcbd" label="推迟报到" align="center" show-overflow-tooltip />
<el-table-column prop="fqbd" label="放弃报到" align="center" show-overflow-tooltip />
<el-table-column prop="fwlx" label="无法联系" align="center" show-overflow-tooltip />
</el-table>
</div>
</div>
</template>
<script setup lang="ts" name="backSchoolCheckinStaticIndex">
import { ref, reactive, onMounted } from 'vue'
import { getList } from '/@/api/recruit/recruitstudentplangroup'
import { getTabStaticDataList as getTabStaticDataListApi } from '/@/api/recruit/recruitstudentsignup'
import { useTable } from '/@/hooks/table'
import { ref, reactive, onMounted } from 'vue';
import { getList } from '/@/api/recruit/recruitstudentplangroup';
import { getTabStaticDataList as getTabStaticDataListApi } from '/@/api/recruit/recruitstudentsignup';
import { useTable } from '/@/hooks/table';
// 表格引用
const tableRef = ref()
const searchFormRef = ref()
const tableRef = ref();
const searchFormRef = ref();
// 数据
const planList = ref<any[]>([])
const tableData = ref<any[]>([])
const dataListLoading = ref(false)
const planList = ref<any[]>([]);
const tableData = ref<any[]>([]);
const dataListLoading = ref(false);
// 查询表单
const queryForm = reactive({
groupId: ''
})
groupId: '',
});
// 获取计划名称
const getPlanName = (groupId: string) => {
const item = planList.value.find(item => item.id === groupId)
return item ? item.groupName : ''
}
const item = planList.value.find((item) => item.id === groupId);
return item ? item.groupName : '';
};
// 表格样式
const { tableStyle } = useTable({ queryForm: queryForm, pageList: async () => ({ data: { records: [], total: 0 } }), createdIsNeed: false })
const { tableStyle } = useTable({ queryForm: queryForm, pageList: async () => ({ data: { records: [], total: 0 } }), createdIsNeed: false });
// 获取汇总数据
const getSummaries = (param: any) => {
const { columns, data } = param
const sums: any[] = []
columns.forEach((column: any, index: number) => {
if (index === 0) {
sums[index] = '总计'
} else if (index != 1) {
const values = data.map((item: any) => Number(item[column.property]))
if (!values.every((value: any) => isNaN(value))) {
sums[index] = values.reduce((prev: number, curr: number) => {
const value = Number(curr)
if (!isNaN(value)) {
return prev + curr
} else {
return prev
}
}, 0)
} else {
sums[index] = '--'
}
} else {
sums[index] = '--'
}
})
return sums
}
const { columns, data } = param;
const sums: any[] = [];
columns.forEach((column: any, index: number) => {
if (index === 0) {
sums[index] = '总计';
} else if (index != 1) {
const values = data.map((item: any) => Number(item[column.property]));
if (!values.every((value: any) => isNaN(value))) {
sums[index] = values.reduce((prev: number, curr: number) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
} else {
sums[index] = '--';
}
} else {
sums[index] = '--';
}
});
return sums;
};
// 获取统计数据
const getTabStaticDataList = async () => {
try {
tableData.value = []
dataListLoading.value = true
const response = await getTabStaticDataListApi(queryForm)
tableData.value = response.data || []
} catch (error) {
// 获取统计数据失败
} finally {
dataListLoading.value = false
}
}
try {
tableData.value = [];
dataListLoading.value = true;
const response = await getTabStaticDataListApi(queryForm);
tableData.value = response.data || [];
} catch (error) {
// 获取统计数据失败
} finally {
dataListLoading.value = false;
}
};
// 重置查询
const resetQuery = () => {
searchFormRef.value?.resetFields()
queryForm.groupId = ''
if (planList.value.length > 0) {
queryForm.groupId = planList.value[0].id
}
getTabStaticDataList()
}
searchFormRef.value?.resetFields();
queryForm.groupId = '';
if (planList.value.length > 0) {
queryForm.groupId = planList.value[0].id;
}
getTabStaticDataList();
};
// 初始化
const init = async () => {
try {
const data = await getList()
planList.value = data.data || []
if (planList.value.length > 0) {
queryForm.groupId = planList.value[0].id
getTabStaticDataList()
}
} catch (error) {
// 初始化失败
}
}
try {
const data = await getList();
planList.value = data.data || [];
if (planList.value.length > 0) {
queryForm.groupId = planList.value[0].id;
getTabStaticDataList();
}
} catch (error) {
// 初始化失败
}
};
defineExpose({
init
})
init,
});
onMounted(() => {
init()
})
init();
});
</script>
<style lang="scss" scoped>
.static-index-container {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
}
.search-form-wrapper {
flex-shrink: 0;
flex-shrink: 0;
}
.table-wrapper {
flex: 1;
overflow: auto;
min-height: 0;
flex: 1;
overflow: auto;
min-height: 0;
}
</style>

View File

@@ -16,248 +16,228 @@
-->
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-form :model="queryForm" inline class="mb-4" ref="searchFormRef">
<el-form-item label="入学年份" prop="grade">
<el-select v-model="queryForm.grade" filterable clearable placeholder="请选择入学年份">
<el-option
v-for="item in gradeList"
:key="item.year"
:label="item.year"
:value="item.year"
/>
</el-select>
</el-form-item>
<el-form-item label="学院" prop="deptCode">
<el-select v-model="queryForm.deptCode" filterable clearable placeholder="请选择学院">
<el-option
v-for="item in deptList"
:key="item.deptCode"
:label="item.deptName"
:value="item.deptCode"
/>
</el-select>
</el-form-item>
<el-form-item label="班级" prop="classCode">
<el-select v-model="queryForm.classCode" filterable clearable placeholder="请选择班级">
<el-option
v-for="item in classData"
:key="item.classCode"
:label="item.classNo"
:value="item.classCode"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="searchData">查询</el-button>
<el-button type="primary" plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-form :model="queryForm" inline class="mb-4" ref="searchFormRef">
<el-form-item label="入学年份" prop="grade">
<el-select v-model="queryForm.grade" filterable clearable placeholder="请选择入学年份">
<el-option v-for="item in gradeList" :key="item.year" :label="item.year" :value="item.year" />
</el-select>
</el-form-item>
<el-form-item label="学院" prop="deptCode">
<el-select v-model="queryForm.deptCode" filterable clearable placeholder="请选择学院">
<el-option v-for="item in deptList" :key="item.deptCode" :label="item.deptName" :value="item.deptCode" />
</el-select>
</el-form-item>
<el-form-item label="班级" prop="classCode">
<el-select v-model="queryForm.classCode" filterable clearable placeholder="请选择班级">
<el-option v-for="item in classData" :key="item.classCode" :label="item.classNo" :value="item.classCode" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="searchData">查询</el-button>
<el-button type="primary" plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<div class="mb15">
<el-button
v-if="hasAuth('recruit_newstucheckin_statistics_output')"
type="warning"
plain
icon="Download"
:loading="exportLoading"
@click="handleExportOut"
>
导出
</el-button>
</div>
<div class="mb15">
<el-button
v-if="hasAuth('recruit_newstucheckin_statistics_output')"
type="warning"
plain
icon="Download"
:loading="exportLoading"
@click="handleExportOut"
>
导出
</el-button>
</div>
<el-table
:data="tableData"
height="650"
show-summary
:summary-method="getSummaries"
stripe
border
v-loading="tableLoading"
:header-cell-style="{ 'text-align': 'center' }"
:cell-style="{ 'text-align': 'center' }"
class="el_table_job_fair_stu"
>
<el-table-column type="index" width="50" fixed label="序号" />
<el-table-column prop="deptName" label="学院" />
<el-table-column prop="classNo" label="班级" />
<el-table-column prop="classNum" label="预计报到人数" />
<el-table-column prop="checkInOk" label="已经报到" />
<el-table-column prop="postpone" label="推迟报到" />
<el-table-column prop="abandon" label="放弃报到" />
<el-table-column prop="missing" label="无法联系" />
<el-table-column prop="contact" label="未联系" />
<el-table-column prop="checkInRate" label="报到率" />
</el-table>
</div>
</div>
<el-table
:data="tableData"
height="650"
show-summary
:summary-method="getSummaries"
stripe
border
v-loading="tableLoading"
:header-cell-style="{ 'text-align': 'center' }"
:cell-style="{ 'text-align': 'center' }"
class="el_table_job_fair_stu"
>
<el-table-column type="index" width="50" fixed label="序号" />
<el-table-column prop="deptName" label="学院" />
<el-table-column prop="classNo" label="班级" />
<el-table-column prop="classNum" label="预计报到人数" />
<el-table-column prop="checkInOk" label="已经报到" />
<el-table-column prop="postpone" label="推迟报到" />
<el-table-column prop="abandon" label="放弃报到" />
<el-table-column prop="missing" label="无法联系" />
<el-table-column prop="contact" label="未联系" />
<el-table-column prop="checkInRate" label="报到率" />
</el-table>
</div>
</div>
</template>
<script setup lang="ts" name="backSchoolCheckin-statistics">
import { ref, reactive, computed, onMounted } from 'vue'
import { useAuth } from '/@/hooks/auth'
import { useMessage } from '/@/hooks/message'
import { getDataStatistics } from '/@/api/recruit/newstucheckin'
import { getList } from '/@/api/recruit/recruitstudentplangroup'
import { getDeptList } from '/@/api/basic/basicclass'
import { queryAllClass } from '/@/api/basic/basicclass'
import axios from 'axios'
import { ref, reactive, computed, onMounted } from 'vue';
import { useAuth } from '/@/hooks/auth';
import { useMessage } from '/@/hooks/message';
import { getDataStatistics } from '/@/api/recruit/newstucheckin';
import { getList } from '/@/api/recruit/recruitstudentplangroup';
import { getDeptList } from '/@/api/basic/basicclass';
import { queryAllClass } from '/@/api/basic/basicclass';
import axios from 'axios';
const { hasAuth } = useAuth()
const { hasAuth } = useAuth();
// 消息提示 hooks
const message = useMessage()
const message = useMessage();
// 引用
const searchFormRef = ref()
const searchFormRef = ref();
// 状态
const tableData = ref<any[]>([])
const tableLoading = ref(false)
const exportLoading = ref(false)
const gradeList = ref<any[]>([])
const deptList = ref<any[]>([])
const classData = ref<any[]>([])
const tableData = ref<any[]>([]);
const tableLoading = ref(false);
const exportLoading = ref(false);
const gradeList = ref<any[]>([]);
const deptList = ref<any[]>([]);
const classData = ref<any[]>([]);
// 查询表单
const queryForm = reactive({
grade: '',
deptCode: '',
classCode: ''
})
grade: '',
deptCode: '',
classCode: '',
});
// 初始化
const init = async () => {
await Promise.all([
getGradeData(),
getDeptData(),
getClassData()
])
getList()
}
await Promise.all([getGradeData(), getDeptData(), getClassData()]);
getList();
};
// 查看所有入学年份
const getGradeData = async () => {
try {
const data = await getList()
gradeList.value = data.data || []
} catch (error) {
console.error('获取入学年份失败', error)
}
}
try {
const data = await getList();
gradeList.value = data.data || [];
} catch (error) {
console.error('获取入学年份失败', error);
}
};
// 查找所有二级学院
const getDeptData = async () => {
try {
const data = await getDeptList()
deptList.value = data.data || []
} catch (error) {
console.error('获取学院列表失败', error)
}
}
try {
const data = await getDeptList();
deptList.value = data.data || [];
} catch (error) {
console.error('获取学院列表失败', error);
}
};
// 查找所有班级
const getClassData = async () => {
try {
const data = await queryAllClass()
classData.value = data.data || []
} catch (error) {
console.error('获取班级列表失败', error)
}
}
try {
const data = await queryAllClass();
classData.value = data.data || [];
} catch (error) {
console.error('获取班级列表失败', error);
}
};
// 获取数据列表
const getList = async () => {
try {
tableLoading.value = true
const response = await getDataStatistics(queryForm)
tableData.value = response.data || []
} catch (error) {
console.error('获取数据失败', error)
} finally {
tableLoading.value = false
}
}
try {
tableLoading.value = true;
const response = await getDataStatistics(queryForm);
tableData.value = response.data || [];
} catch (error) {
console.error('获取数据失败', error);
} finally {
tableLoading.value = false;
}
};
// 查询
const searchData = () => {
getList()
}
getList();
};
// 重置查询
const resetQuery = () => {
searchFormRef.value?.resetFields()
queryForm.grade = ''
queryForm.deptCode = ''
queryForm.classCode = ''
getList()
}
searchFormRef.value?.resetFields();
queryForm.grade = '';
queryForm.deptCode = '';
queryForm.classCode = '';
getList();
};
// 导出
const handleExportOut = async () => {
try {
exportLoading.value = true
const res = await axios({
method: 'post',
url: '/recruit/newstucheckin/exportDataStatistics',
data: queryForm,
responseType: 'blob',
headers: {
'Content-Type': 'application/json'
}
})
const blob = new Blob([res.data])
const fileName = '新生报到统计.xls'
const elink = document.createElement('a')
elink.download = fileName
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href)
document.body.removeChild(elink)
} catch (error: any) {
message.error(error.msg || '导出失败')
} finally {
exportLoading.value = false
}
}
try {
exportLoading.value = true;
const res = await axios({
method: 'post',
url: '/recruit/newstucheckin/exportDataStatistics',
data: queryForm,
responseType: 'blob',
headers: {
'Content-Type': 'application/json',
},
});
const blob = new Blob([res.data]);
const fileName = '新生报到统计.xls';
const elink = document.createElement('a');
elink.download = fileName;
elink.style.display = 'none';
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href);
document.body.removeChild(elink);
} catch (error: any) {
message.error(error.msg || '导出失败');
} finally {
exportLoading.value = false;
}
};
// 合计方法
const getSummaries = (param: any) => {
const { columns, data } = param
const sums: any[] = []
columns.forEach((column: any, index: number) => {
if (index === 0) {
sums[index] = '合计'
return
}
if (index === 1 || index === 2) {
sums[index] = ''
return
}
const values = data.map((item: any) => Number(item[column.property]))
if (!values.every((value: any) => isNaN(value))) {
sums[index] = values.reduce((prev: number, curr: any) => {
const value = Number(curr)
if (!isNaN(value)) {
return prev + curr
} else {
return prev
}
}, 0)
sums[index] += ''
}
})
return sums
}
const { columns, data } = param;
const sums: any[] = [];
columns.forEach((column: any, index: number) => {
if (index === 0) {
sums[index] = '合计';
return;
}
if (index === 1 || index === 2) {
sums[index] = '';
return;
}
const values = data.map((item: any) => Number(item[column.property]));
if (!values.every((value: any) => isNaN(value))) {
sums[index] = values.reduce((prev: number, curr: any) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] += '';
}
});
return sums;
};
onMounted(() => {
init()
})
init();
});
</script>
<style lang="scss" scoped>
</style>
<style lang="scss" scoped></style>

View File

@@ -1,146 +1,130 @@
<template>
<div>
<el-dialog v-model="newStuCheckInDialog" width="600">
<el-form :model="form" :rules="rules" ref="formRef" label-width="100px" class="demo-ruleForm">
<el-form-item label="姓名" prop="name">
<el-input v-model="form.name" disabled/>
</el-form-item>
<div>
<el-dialog v-model="newStuCheckInDialog" width="600">
<el-form :model="form" :rules="rules" ref="formRef" label-width="100px" class="demo-ruleForm">
<el-form-item label="姓名" prop="name">
<el-input v-model="form.name" disabled />
</el-form-item>
<el-form-item label="性别" prop="gender">
<el-radio-group v-model="form.gender">
<el-radio v-for="item in genderData" :key="item.value" :label="item.value" :disabled="true">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="性别" prop="gender">
<el-radio-group v-model="form.gender">
<el-radio v-for="item in genderData" :key="item.value" :label="item.value" :disabled="true">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="身份证号" prop="idNumber">
<el-input v-model="form.idNumber" disabled/>
</el-form-item>
<el-form-item label="身份证号" prop="idNumber">
<el-input v-model="form.idNumber" disabled />
</el-form-item>
<el-form-item label="报到状态" prop="backSchoolState">
<el-select v-model="form.backSchoolState" filterable placeholder="请选择报到状态">
<el-option
v-for="item in checkInStatusData"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="报到状态" prop="backSchoolState">
<el-select v-model="form.backSchoolState" filterable placeholder="请选择报到状态">
<el-option v-for="item in checkInStatusData" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="回校备注" prop="backSchoolRemark">
<el-input v-model="form.backSchoolRemark" :rows="2" type="textarea"/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="newStuCheckInDialog = false">取消</el-button>
<el-button type="primary" @click="checkIn" :loading="submitLoading">确定</el-button>
</template>
</el-dialog>
</div>
<el-form-item label="回校备注" prop="backSchoolRemark">
<el-input v-model="form.backSchoolRemark" :rows="2" type="textarea" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="newStuCheckInDialog = false">取消</el-button>
<el-button type="primary" @click="checkIn" :loading="submitLoading">确定</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts" name="backSchoolCheckin-stu-check-in">
import { ref, reactive } from 'vue'
import { useMessage } from '/@/hooks/message'
import { useDict } from '/@/hooks/dict'
import { putBackObj } from '/@/api/recruit/recruitstudentsignup'
import { getDicts } from '/@/api/admin/dict'
import { ref, reactive } from 'vue';
import { useMessage } from '/@/hooks/message';
import { useDict } from '/@/hooks/dict';
import { putBackObj } from '/@/api/recruit/recruitstudentsignup';
import { getDicts } from '/@/api/admin/dict';
// 性别字典
const { sexy:genderData } = useDict('sexy')
const { sexy: genderData } = useDict('sexy');
// 消息提示 hooks
const message = useMessage()
const message = useMessage();
// 定义 emits
const emit = defineEmits(['reload'])
const emit = defineEmits(['reload']);
// 引用
const formRef = ref()
const formRef = ref();
// 状态
const newStuCheckInDialog = ref(false)
const checkInStatusData = ref<any[]>([])
const submitLoading = ref(false)
const page = ref<any>({})
const newStuCheckInDialog = ref(false);
const checkInStatusData = ref<any[]>([]);
const submitLoading = ref(false);
const page = ref<any>({});
// 表单数据
const form = reactive({
id: '',
name: '',
backSchoolState: '',
gender: '',
idNumber: '',
backSchoolRemark: ''
})
id: '',
name: '',
backSchoolState: '',
gender: '',
idNumber: '',
backSchoolRemark: '',
});
// 表单验证规则
const rules = reactive({
name: [
{ required: true, message: '请输入姓名', trigger: ['blur', 'change'] }
],
gender: [
{ required: true, message: '请输入性别', trigger: ['blur', 'change'] }
],
idNumber: [
{ required: true, message: '请输入身份证号', trigger: ['blur', 'change'] }
],
backSchoolState: [
{ required: true, message: '请输入报到状态', trigger: ['blur', 'change'] }
]
})
name: [{ required: true, message: '请输入姓名', trigger: ['blur', 'change'] }],
gender: [{ required: true, message: '请输入性别', trigger: ['blur', 'change'] }],
idNumber: [{ required: true, message: '请输入身份证号', trigger: ['blur', 'change'] }],
backSchoolState: [{ required: true, message: '请输入报到状态', trigger: ['blur', 'change'] }],
});
// 初始化表单
const initForm = () => {
form.id = ''
form.name = ''
form.backSchoolState = ''
form.gender = ''
form.idNumber = ''
form.backSchoolRemark = ''
}
form.id = '';
form.name = '';
form.backSchoolState = '';
form.gender = '';
form.idNumber = '';
form.backSchoolRemark = '';
};
// 初始化
const init = async (formData: any, pageData: any) => {
initForm()
page.value = pageData
submitLoading.value = false
newStuCheckInDialog.value = true
checkInStatusData.value = []
try {
const dictData = await getDicts('check_in_status')
checkInStatusData.value = dictData.data || []
} catch (error) {
console.error('获取字典数据失败', error)
}
Object.assign(form, formData)
}
initForm();
page.value = pageData;
submitLoading.value = false;
newStuCheckInDialog.value = true;
checkInStatusData.value = [];
try {
const dictData = await getDicts('check_in_status');
checkInStatusData.value = dictData.data || [];
} catch (error) {
console.error('获取字典数据失败', error);
}
Object.assign(form, formData);
};
// 报到
const checkIn = async () => {
if (!formRef.value) return
try {
await formRef.value.validate()
submitLoading.value = true
await putBackObj(form)
message.success('报到成功')
emit('reload')
newStuCheckInDialog.value = false
} finally {
submitLoading.value = false
}
}
if (!formRef.value) return;
try {
await formRef.value.validate();
submitLoading.value = true;
await putBackObj(form);
message.success('报到成功');
emit('reload');
newStuCheckInDialog.value = false;
} finally {
submitLoading.value = false;
}
};
// 暴露方法
defineExpose({
init
})
init,
});
</script>
<style scoped>
</style>
<style scoped></style>

View File

@@ -528,11 +528,11 @@ const resetQuery = () => {
};
const handleLeaveSchool = (row: any, force: any) => {
var str = force? '强制' : '';
var str = force ? '强制' : '';
useMessageBox()
.confirm('是否确认'+str+'办理退档操作?请谨慎操作')
.confirm('是否确认' + str + '办理退档操作?请谨慎操作')
.then(() => {
return leaveSchool({ 'id':row.id,'force':force });
return leaveSchool({ id: row.id, force: force });
})
.then(() => {
message.success('操作成功');