edu/admin/src/views/student/freshman/stuRegistration.admission/index.vue

202 lines
7.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="index-lists">
<el-card class="!border-none" shadow="never">
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
<el-form-item label="报名编号" prop="applicationNumber">
<el-input class="w-[280px]" v-model="queryParams.applicationNumber" />
</el-form-item>
<el-form-item label="姓名" prop="name">
<el-input class="w-[280px]" v-model="queryParams.name" />
</el-form-item>
<el-form-item label="录取状态" prop="admissionStatus">
<el-select
v-model="queryParams.admissionStatus"
class="w-[280px]"
clearable
@change="getLists()"
>
<el-option label="未录取" :value="0" />
<el-option label="已录取" :value="1" />
<el-option label="拒绝录取" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="报名时间" prop="applicationTime">
<daterange-picker
v-model:startTime="queryParams.applicationTimeStart"
v-model:endTime="queryParams.applicationTimeEnd"
/>
</el-form-item>
<el-form-item label="审核时间" prop="approvedTime">
<daterange-picker
v-model:startTime="queryParams.approvedTimeStart"
v-model:endTime="queryParams.approvedTimeEnd"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<el-table
class="mt-4"
size="large"
v-loading="pager.loading"
:data="pager.lists"
border
>
<el-table-column label="报名编号" min-width="100">
<template #default="{ row }">
<el-button
type="primary"
link
@click="handleShowDetail(row.baseInfoId)"
style="text-decoration: underline"
>
{{ row.applicationNumber }}
</el-button>
</template>
</el-table-column>
<el-table-column label="名称" prop="name" min-width="100" />
<el-table-column
label="性别"
prop="gender"
min-width="100"
:formatter="formatGender"
/>
<el-table-column label="籍贯" prop="nativePlace" min-width="100" />
<el-table-column
label="录取状态"
prop="admissionStatus"
min-width="100"
:formatter="formatRegistrationStatus"
/>
<el-table-column label="报名时间" prop="applicationTime" min-width="100" />
<el-table-column label="审核时间" prop="approvedTime" min-width="100" />
<el-table-column label="审核操作人" prop="approvedName" min-width="100" />
<el-table-column label="操作" width="240" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['stuRegistration/edit']"
@click="handleRoEdit(row)"
:disabled="row.admissionStatus == 0"
>
撤销
</el-button>
<el-button
v-perms="['stuRegistration/edit']"
type="success"
@click="handleYesEdit(row)"
:disabled="row.admissionStatus != 0"
>
通过
</el-button>
<el-button
v-perms="['stuRegistration/edit']"
type="danger"
@click="handleNoEdit(row)"
:disabled="row.admissionStatus != 0"
>
拒绝
</el-button>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
<base-popup ref="detailRef" />
</div>
</template>
<script lang="ts" setup name="stuRegistration">
import { stuRegistrationAdmission, stuRegistrationAdmissionLists } from '@/api/stuRegistration'
import { usePaging } from '@/hooks/usePaging'
import BasePopup from '../Base.vue'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = shallowRef<InstanceType<typeof BasePopup>>()
const showEdit = ref(false)
const queryParams = reactive({
name: '',
baseInfoId: '',
approvalStatus: '',
applicationNumber: '',
rejectionReason: '',
admissionStatus: '',
paymentStatus: '',
registrationStatus: 0,
applicationTimeStart: '',
applicationTimeEnd: '',
approvedTimeStart: '',
approvedTimeEnd: ''
})
const formData = reactive({
id: '',
operation: 0,
reason: ''
})
const formatRegistrationStatus = (row: any, column: any, cellValue: any) => {
const statusMap: Record<string | number, string> = {
'0': '未录取',
'1': '已录取',
'2': '拒绝录取'
}
const statusText = statusMap[String(cellValue)] || cellValue
// 当录取状态为2不通过显示拒绝原因
if (cellValue === 2 && row.rejectionReason) {
return `${statusText} ${row.rejectionReason}`
}
return statusText
}
const formatGender = (row: any, column: any, cellValue: any) => {
const statusMap: Record<string | number, string> = {
0: '未知',
1: '男',
2: '女'
}
return statusMap[String(cellValue)]
}
const { pager, getLists, resetPage, resetParams } = usePaging({
fetchFun: stuRegistrationAdmissionLists,
params: queryParams
})
const handleShowDetail = async (id: number) => {
await nextTick()
detailRef.value?.open(id)
}
const handleRoEdit = async (data: any) => {
formData.id = data.id
formData.operation = 0
const editData: any = { ...formData }
await stuRegistrationAdmission(editData)
getLists()
}
const handleYesEdit = async (data: any) => {
formData.id = data.id
formData.operation = 1
const editData: any = { ...formData }
await stuRegistrationAdmission(editData)
getLists()
}
const handleNoEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open()
editRef.value?.getDetail(data)
}
getLists()
</script>