普通招生
This commit is contained in:
@@ -33,8 +33,8 @@
|
||||
<el-form-item label="报名时段" prop="startDate">
|
||||
<el-date-picker
|
||||
v-model="dataForm.startDate"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
:disabled-date="startDateDisabledDate"
|
||||
type="date"
|
||||
@@ -42,8 +42,8 @@
|
||||
<span style="margin: 0 8px;">-</span>
|
||||
<el-date-picker
|
||||
v-model="dataForm.endDate"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
:disabled-date="endDateDisabledDate"
|
||||
type="date"
|
||||
@@ -52,20 +52,23 @@
|
||||
<el-form-item label="录取时段" prop="lqStartDate">
|
||||
<el-date-picker
|
||||
v-model="dataForm.lqStartDate"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
type="date"
|
||||
/>
|
||||
<span style="margin: 0 8px;">-</span>
|
||||
<el-date-picker
|
||||
v-model="dataForm.lqEndDate"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
type="date"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<!-- 可折叠的高级筛选条件 -->
|
||||
<template v-if="!visible">
|
||||
<el-form-item label="录取专业" prop="confirmedMajor">
|
||||
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="请选择录取专业">
|
||||
<el-option
|
||||
@@ -113,7 +116,7 @@
|
||||
<el-form-item label="是否住宿" prop="isAccommodation">
|
||||
<el-select v-model="dataForm.isAccommodation" filterable clearable placeholder="请选择是否住宿">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -123,7 +126,7 @@
|
||||
<el-form-item label="是否低保" prop="isMinimumLivingSecurity">
|
||||
<el-select v-model="dataForm.isMinimumLivingSecurity" filterable clearable placeholder="请选择是否低保">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -160,7 +163,7 @@
|
||||
<el-form-item label="新市民材料已上传" prop="isNewCity">
|
||||
<el-select v-model="dataForm.isNewCity" filterable clearable placeholder="请选择新市民材料已上传">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -170,7 +173,7 @@
|
||||
<el-form-item label="毕业证已上传" prop="graPic">
|
||||
<el-select v-model="dataForm.graPic" filterable clearable placeholder="请选择毕业证已上传">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -212,7 +215,7 @@
|
||||
<el-form-item label="是否同步学工" prop="isTb">
|
||||
<el-select v-model="dataForm.isTb" filterable clearable placeholder="请选择是否同步学工">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -252,15 +255,14 @@
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<template #actions>
|
||||
<el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="handleFilter" icon="Search">查询</el-button>
|
||||
<el-button type="primary" plain @click="resetForm('searchForm')" icon="Refresh" class="ml10">重置</el-button>
|
||||
<el-button @click="resetForm('searchForm')" icon="Refresh" class="ml10">重置</el-button>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</search-form>
|
||||
@@ -269,32 +271,25 @@
|
||||
<el-row>
|
||||
<div class="mb15" style="width: 100%;">
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="FolderAdd"
|
||||
@click="addOrUpdateHandle()"
|
||||
v-if="permissions.recruit_recruitstudentsignup_add">新 增
|
||||
</el-button>
|
||||
<el-button
|
||||
class="ml10"
|
||||
type="warning"
|
||||
plain
|
||||
v-if="permissions.zipExport"
|
||||
icon="Download"
|
||||
@click="downZip()">招生名单打包导出
|
||||
@click="downZip()">招生名单打包导出
|
||||
</el-button>
|
||||
<el-button
|
||||
class="ml10"
|
||||
type="warning"
|
||||
plain
|
||||
icon="Download"
|
||||
@click="handleExport()">名单导出
|
||||
@click="handleExport()">名单导出
|
||||
</el-button>
|
||||
<el-button
|
||||
class="ml10"
|
||||
type="primary"
|
||||
plain
|
||||
icon="UploadFilled"
|
||||
v-if="permissions.recruit_send_img"
|
||||
v-if="permissions.recruit_send_img"
|
||||
@click="handleSendImg()">图片同步
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -303,11 +298,11 @@
|
||||
<!-- 表格 -->
|
||||
<el-table
|
||||
ref="tableRef"
|
||||
:data="dataList"
|
||||
v-loading="dataListLoading"
|
||||
:data="state.dataList"
|
||||
v-loading="state.loading"
|
||||
border
|
||||
:cell-style="tableStyle?.cellStyle"
|
||||
:header-cell-style="tableStyle?.headerCellStyle">
|
||||
:cell-style="tableStyle.cellStyle"
|
||||
:header-cell-style="tableStyle.headerCellStyle">
|
||||
|
||||
<el-table-column
|
||||
header-align="center"
|
||||
@@ -490,31 +485,31 @@
|
||||
|
||||
<!-- 分页 -->
|
||||
<pagination
|
||||
v-bind="pagination"
|
||||
@current-change="currentChangeHandle"
|
||||
v-bind="state.pagination"
|
||||
@current-change="currentChangeHandle"
|
||||
@size-change="sizeChangeHandle"
|
||||
/>
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<table-form v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></table-form>
|
||||
<TableForm ref="addOrUpdateRef" @refreshDataList="getDataList"></TableForm>
|
||||
|
||||
<major-change v-if="majorChangeVisible" ref="majorChange" @refreshDataList="getDataList"></major-change>
|
||||
<MajorChange ref="majorChangeRef" @refreshDataList="getDataList"></MajorChange>
|
||||
|
||||
<update v-if="updateVisible" ref="update" @refreshDataList="getDataList"></update>
|
||||
<Update ref="updateRef" @refreshDataList="getDataList"></Update>
|
||||
|
||||
<!-- 支付二维码弹窗 -->
|
||||
<pay-qrcode-dialog ref="payQrcodeDialogRef" @refresh="getDataList"></pay-qrcode-dialog>
|
||||
<PayQrcodeDialog ref="payQrcodeDialogRef" @refresh="getDataList"></PayQrcodeDialog>
|
||||
|
||||
<!-- 延迟缴费弹窗 -->
|
||||
<delay-pay-time-dialog ref="delayPayTimeDialogRef" @refresh="getDataList"></delay-pay-time-dialog>
|
||||
<DelayPayTimeDialog ref="delayPayTimeDialogRef" @refresh="getDataList"></DelayPayTimeDialog>
|
||||
|
||||
|
||||
<!-- 录取通知书弹窗 -->
|
||||
<admission-notice-dialog ref="admissionNoticeDialogRef" :permissions="permissions" @refresh="getDataList"></admission-notice-dialog>
|
||||
<AdmissionNoticeDialog ref="admissionNoticeDialogRef" :permissions="permissions" @refresh="getDataList"></AdmissionNoticeDialog>
|
||||
|
||||
<dorm-f-w v-if="dormFWRefVisible" ref="dormFWRef"></dorm-f-w>
|
||||
<show-map v-if="baiduMapVisible" ref="baiduMapRef"></show-map>
|
||||
<interview-form ref="interviewFormRef" @refresh="getDataList"></interview-form>
|
||||
</div>
|
||||
<DormFW ref="dormFWRef"></DormFW>
|
||||
<ShowMap ref="baiduMapRef"></ShowMap>
|
||||
<InterviewForm ref="interviewFormRef" @refresh="getDataList"></InterviewForm>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -523,8 +518,9 @@ import { ref, reactive, computed, onMounted, nextTick, defineAsyncComponent, wat
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import axios from 'axios'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import {
|
||||
delObj,
|
||||
exportZip,
|
||||
@@ -539,21 +535,14 @@ import {
|
||||
pushCity as pushCityApi
|
||||
} from '/@/api/recruit/recruitstudentsignup'
|
||||
import { getLabelValue, getLabelValueByProps, getMajorLabelWithYears } from '/@/utils/dictLabel'
|
||||
import {getDeptList} from "/@/api/basic/basicclass";
|
||||
import {listPlanByCondition as planMajor} from "/@/api/recruit/recruitstudentplan";
|
||||
import {getTypeValue, getDictsByTypes} from "/@/api/admin/dict";
|
||||
import {getUserListByRole} from "/@/api/admin/user";
|
||||
import {queryTeacherBaseByNo} from "/@/api/professional/professionaluser/teacherbase";
|
||||
|
||||
// ROLE_CODE 常量定义
|
||||
const ROLE_CODE = {
|
||||
ROLE_RECRUIT_SECOND: 'ROLE_RECRUIT_SECOND',
|
||||
ROLE_RECRUIT: 'ROLE_RECRUIT'
|
||||
}
|
||||
|
||||
// Loading 函数(如果模块不存在,使用空函数)
|
||||
const showLoading = () => {}
|
||||
const hideLoading = () => {}
|
||||
import { getDeptList } from "/@/api/basic/basicclass";
|
||||
import { listPlanByCondition as planMajor } from "/@/api/recruit/recruitstudentplan";
|
||||
import { getDictsByTypes } from "/@/api/admin/dict";
|
||||
import { getUserListByRole } from "/@/api/admin/user";
|
||||
import { queryTeacherBaseByNo } from "/@/api/professional/professionaluser/teacherbase";
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
import { ROLE_CODE } from '/@/config/global'
|
||||
import { showLoading, hideLoading } from '/@/api/asset/loading'
|
||||
|
||||
// 定义组件
|
||||
const TableForm = defineAsyncComponent(() => import('./detaiform.vue'))
|
||||
@@ -628,32 +617,25 @@ const dataForm = reactive({
|
||||
isBackTz: ''
|
||||
})
|
||||
|
||||
// 数据列表
|
||||
const dataList = ref<any[]>([])
|
||||
const pageIndex = ref(1)
|
||||
const pageSize = ref(10)
|
||||
const totalPage = ref(0)
|
||||
const dataListLoading = ref(false)
|
||||
|
||||
// 分页对象(用于 pagination 组件)
|
||||
const pagination = computed(() => ({
|
||||
current: pageIndex.value,
|
||||
size: pageSize.value,
|
||||
total: totalPage.value
|
||||
}))
|
||||
|
||||
// 表格样式(可选)
|
||||
const tableStyle = ref({
|
||||
cellStyle: {},
|
||||
headerCellStyle: {}
|
||||
// 表格状态
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: dataForm,
|
||||
pageList: async (params: any) => {
|
||||
const response = await fetchList(params)
|
||||
return {
|
||||
data: {
|
||||
records: response.data.records || [],
|
||||
total: response.data.total || 0
|
||||
}
|
||||
}
|
||||
},
|
||||
createdIsNeed: false
|
||||
})
|
||||
|
||||
// 弹窗状态
|
||||
const addOrUpdateVisible = ref(false)
|
||||
const majorChangeVisible = ref(false)
|
||||
const updateVisible = ref(false)
|
||||
const dormFWRefVisible = ref(false)
|
||||
const baiduMapVisible = ref(false)
|
||||
// 使用 table hook
|
||||
const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTable(state)
|
||||
|
||||
// 弹窗状态(已移除,组件内部通过 v-model="visible" 控制)
|
||||
|
||||
// 列表数据
|
||||
const auditorList = ref<any[]>([])
|
||||
@@ -666,10 +648,12 @@ const interviewDicList = ref<any[]>([])
|
||||
const zlshList = ref<any[]>([])
|
||||
const paystatusList = ref<any[]>([])
|
||||
|
||||
// 字典数据
|
||||
const { yes_no_type } = useDict('yes_no_type')
|
||||
|
||||
// 静态数据
|
||||
const isBackTzList = [{ label: '未发放', value: '0' }, { label: '已发放', value: '1' }]
|
||||
const auditStatusList = [{ label: '未录取', value: '-20' }, { label: '待审核', value: '0' }, { label: '已录取', value: '20' }]
|
||||
const yesNoList = [{ label: '否', value: '0' }, { label: '是', value: '1' }]
|
||||
const cityExamTypeList = [{ label: '待审核', value: '0' }, { label: '通过', value: '1' }, { label: '驳回', value: '2' }]
|
||||
const pushedList = [{ label: '未推送', value: '0' }, { label: '已推送', value: '1' }]
|
||||
const isOutFwList = [{ label: '待确认', value: '0' }, { label: '范围内', value: '1' }, { label: '范围外', value: '2' }]
|
||||
@@ -705,9 +689,9 @@ const remoteTeacherByQuery = (query: string) => {
|
||||
teacherList.value = response.data || []
|
||||
}).catch(() => {
|
||||
teacherList.value = []
|
||||
})
|
||||
})
|
||||
}, 200)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 发送图片
|
||||
@@ -780,18 +764,18 @@ const downZip = () => {
|
||||
|
||||
// 百度地图
|
||||
const baiduMap = (row: any) => {
|
||||
baiduMapVisible.value = true
|
||||
// 组件内部通过 v-model="visible" 控制显示
|
||||
nextTick(() => {
|
||||
baiduMapRef.value?.init(row)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 设置宿舍
|
||||
const setDormFW = () => {
|
||||
dormFWRefVisible.value = true
|
||||
// 组件内部通过 v-model="visible" 控制显示
|
||||
nextTick(() => {
|
||||
dormFWRef.value?.init()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 一键判断是否超出住宿范围
|
||||
@@ -805,7 +789,7 @@ const handleYjOut = () => {
|
||||
}).then(() => {
|
||||
message.success('操作成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 导出审核
|
||||
@@ -871,13 +855,6 @@ const unique = (arr: any[]) => {
|
||||
return arr.filter((item) => !rese.has(item.username) && rese.set(item.username, 1))
|
||||
}
|
||||
|
||||
// 性别
|
||||
const getGender = (gender: string) => {
|
||||
if (gender == '2') return '女'
|
||||
if (gender == '1') return '男'
|
||||
return ''
|
||||
}
|
||||
|
||||
// 切换专业
|
||||
const chanMajor = () => {
|
||||
planMajorList.value = []
|
||||
@@ -890,62 +867,32 @@ const chanMajor = () => {
|
||||
|
||||
// 查询
|
||||
const handleFilter = () => {
|
||||
pageIndex.value = 1
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 获取数据列表
|
||||
const getDataList = () => {
|
||||
dataList.value = []
|
||||
dataListLoading.value = true
|
||||
fetchList({
|
||||
current: pageIndex.value,
|
||||
size: pageSize.value,
|
||||
...dataForm
|
||||
}).then(response => {
|
||||
dataList.value = response.data.records
|
||||
totalPage.value = response.data.total
|
||||
dataListLoading.value = false
|
||||
}).catch(() => {
|
||||
dataListLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 每页数
|
||||
const sizeChangeHandle = (val: number) => {
|
||||
pageSize.value = val
|
||||
pageIndex.value = 1
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 当前页
|
||||
const currentChangeHandle = (val: number) => {
|
||||
pageIndex.value = val
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 新增 / 修改
|
||||
const addOrUpdateHandle = (id?: string, type?: number) => {
|
||||
addOrUpdateVisible.value = true
|
||||
nextTick(() => {
|
||||
addOrUpdateRef.value?.init(id, type)
|
||||
})
|
||||
// 新增时默认 type=1(可编辑),查看时 type=0(只读),审核时 type=1(可编辑)
|
||||
const finalType = type !== undefined ? type : (id ? 0 : 1)
|
||||
addOrUpdateRef.value?.init(id || null, finalType)
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑
|
||||
const edit = (id: string) => {
|
||||
updateVisible.value = true
|
||||
nextTick(() => {
|
||||
updateRef.value?.init(id)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 专业调整
|
||||
const majorChange = (id: string) => {
|
||||
majorChangeVisible.value = true
|
||||
nextTick(() => {
|
||||
majorChangeRef.value?.init(id)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 退学
|
||||
@@ -955,17 +902,17 @@ const handleUpdate = (id: string, groupId: string, feeAgency: string) => {
|
||||
}).then(() => {
|
||||
message.success('操作成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 删除
|
||||
// 删除
|
||||
const deleteHandle = (id: string) => {
|
||||
messageBox.confirm('是否确认删除本条数据?请谨慎操作').then(() => {
|
||||
return delObj(id)
|
||||
}).then(() => {
|
||||
message.success('删除成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
@@ -977,10 +924,7 @@ const resetForm = (formName: string) => {
|
||||
|
||||
// 缴费状态
|
||||
const getStatus = (type: string) => {
|
||||
if (type == '0') return '未缴费'
|
||||
if (type == '5') return '部分缴费'
|
||||
if (type == '10') return '已缴费'
|
||||
return ''
|
||||
return getLabelValue(paystatusList.value, type)
|
||||
}
|
||||
|
||||
// 推送状态
|
||||
@@ -1018,7 +962,7 @@ const handlePushCity = (id: string) => {
|
||||
}).then(() => {
|
||||
message.success('推送成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 重新推送
|
||||
@@ -1028,7 +972,7 @@ const handleRePush = (row: any) => {
|
||||
}).then(() => {
|
||||
message.success('推送成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 延迟缴费
|
||||
@@ -1047,7 +991,9 @@ const showPayCode = (row: any) => {
|
||||
|
||||
// 面试
|
||||
const interviewForm = (row: any) => {
|
||||
interviewFormRef.value?.init(row)
|
||||
nextTick(() => {
|
||||
interviewFormRef.value?.init(row)
|
||||
})
|
||||
}
|
||||
|
||||
// 初始化
|
||||
@@ -1058,7 +1004,7 @@ const init = async () => {
|
||||
})
|
||||
|
||||
// 获取招生计划列表
|
||||
list().then(data => {
|
||||
getList().then(data => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
@@ -1067,13 +1013,10 @@ const init = async () => {
|
||||
}
|
||||
})
|
||||
|
||||
// 获取文化程度字典
|
||||
getTypeValue('finance_student_source').then(res => {
|
||||
eduList.value = res.data
|
||||
})
|
||||
|
||||
// 批量获取字典数据:面试结果、资料审核状态、缴费状态
|
||||
getDictsByTypes(['interview_dic', 'recruit_zlsh', 'recruit_pay_status']).then((res) => {
|
||||
|
||||
// 批量获取字典数据:文化程度、面试结果、资料审核状态、缴费状态
|
||||
getDictsByTypes(['finance_student_source','interview_dic', 'recruit_zlsh', 'recruit_pay_status']).then((res) => {
|
||||
eduList.value = res.data.finance_student_source || []
|
||||
interviewDicList.value = res.data.interview_dic || []
|
||||
zlshList.value = res.data.recruit_zlsh || []
|
||||
paystatusList.value = res.data.recruit_pay_status || []
|
||||
|
||||
Reference in New Issue
Block a user