This commit is contained in:
guochunsi
2026-01-16 15:04:30 +08:00
parent 358b08bb79
commit 2169bfee92
5 changed files with 374 additions and 316 deletions

View File

@@ -4,8 +4,6 @@
:close-on-click-modal="false"
v-model="visible"
width="600px"
destroy-on-close
>
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
label-width="120px">
@@ -118,7 +116,7 @@ import { addObj, getObj, putObj } from '/@/api/recruit/recruitstudentplan'
import { getDeptList } from '/@/api/basic/basicclass'
import { getList } from '/@/api/recruit/recruitstudentplangroup'
import { getMajorNameList } from '/@/api/basic/major'
import { getDicts } from '/@/api/admin/dict'
import { getDictsByTypes } from '/@/api/admin/dict'
import { useDict } from '/@/hooks/dict'
// Emits
@@ -215,19 +213,14 @@ const initData = () => {
})
getList().then((data: any) => {
planList.value = data.data
if (!dataForm.id) {
dataForm.groupId = planList.value[0]?.id || null
}
})
getMajorNameList().then((data: any) => {
offcialZydmList.value = data.data
})
// 获取数据字典
getDicts('basic_major_years').then((res: any) => {
majorYears.value = res.data || []
})
getDicts('basic_major_level').then((res: any) => {
ccList.value = res.data || []
// 获取数据字典(一次获取多个)
getDictsByTypes(['basic_major_years', 'basic_major_level']).then((res: any) => {
majorYears.value = res.data?.basic_major_years || []
ccList.value = res.data?.basic_major_level || []
})
}
@@ -273,22 +266,39 @@ const dataFormSubmit = () => {
// 初始化方法
const init = (id: string | null) => {
dataForm.id = id || null
visible.value = true
canSubmit.value = true
initData()
dataForm.id = ""
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields()
if (dataForm.id) {
getObj(dataForm.id).then((response: any) => {
})
initData()
// 获取详情数据
if (id) {
dataForm.id = id
getObj(id).then((response: any) => {
if (response && response.data) {
Object.assign(dataForm, response.data)
// 获取市平台对应年份下的招生计划
// getCityPlan({ id: dataForm.id }).then((data: any) => {
// cityPlanIdList.value = data.data
// })
}
}).catch(() => {
// 错误处理
})
} else {
// 新增模式:设置默认招生计划
getList().then((data: any) => {
if (data.data && data.data.length > 0) {
dataForm.groupId = data.data[0]?.id || ""
}
})
}
}
// 暴露方法给父组件

View File

@@ -3,11 +3,12 @@
:title="!dataForm.id ? '新增' : '修改'"
:close-on-click-modal="false"
v-model="visible"
width="600px"
width="900px"
>
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="120px">
<el-form-item label="招生计划名称" prop="groupId">
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="招生计划" prop="groupId">
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" :disabled="!!dataForm.id">
<el-option
v-for="item in planListLocal"
@@ -17,33 +18,50 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="姓名" prop="name">
<el-input v-model="dataForm.name" placeholder="姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电话" prop="phone">
<el-input v-model="dataForm.phone" placeholder="电话"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="性别" prop="gender">
<el-radio-group v-model="dataForm.gender">
<el-radio v-for="item in sexyList" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证" prop="idCard">
<el-input v-model="dataForm.idCard" placeholder="身份证"></el-input>
</el-form-item>
<el-form-item label="性别" prop="gender">
<el-select v-model="dataForm.gender">
<el-option
v-for="item in sexyList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="准考证" prop="admission">
<el-input v-model="dataForm.admission" placeholder="准考证"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中考成绩" prop="achievement">
<el-input-number v-model="dataForm.achievement" :min="0" :max="700" placeholder="中考成绩"></el-input-number>
<el-input-number v-model="dataForm.achievement" :min="0" :max="700" placeholder="中考成绩" ></el-input-number>
</el-form-item>
<el-form-item label="对接人" prop="djUser" v-if="permissions.recruit_recruitprestudent_dj_sure">
<el-select v-model="dataForm.djUser" filterable clearable placeholder="">
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="对接人" prop="djUser" v-auth="'recruit_recruitprestudent_dj_sure'">
<el-select v-model="dataForm.djUser" filterable clearable placeholder="" >
<el-option
v-for="item in contactNameList"
:key="item.teacherNo"
@@ -52,8 +70,10 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="学校" prop="schoolId">
<el-select v-model="dataForm.schoolId" filterable placeholder="请选择学校">
<el-select v-model="dataForm.schoolId" filterable placeholder="请选择学校" >
<el-option
v-for="item in schoolList"
:key="item.id"
@@ -62,9 +82,13 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="拟报专业1" prop="planMajorOne">
<el-select v-model="dataForm.planMajorOne" filterable placeholder="请选择拟报专业1">
<el-select v-model="dataForm.planMajorOne" filterable placeholder="请选择拟报专业1" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -75,8 +99,10 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="拟报专业2" prop="planMajorTwo">
<el-select v-model="dataForm.planMajorTwo" filterable clearable placeholder="请选择拟报专业2">
<el-select v-model="dataForm.planMajorTwo" filterable clearable placeholder="请选择拟报专业2" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -87,8 +113,12 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="拟报专业3" prop="planMajorThree">
<el-select v-model="dataForm.planMajorThree" filterable clearable placeholder="请选择拟报专业3">
<el-select v-model="dataForm.planMajorThree" filterable clearable placeholder="请选择拟报专业3" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -99,8 +129,10 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="拟报专业4" prop="planMajorFour">
<el-select v-model="dataForm.planMajorFour" filterable clearable placeholder="请选择拟报专业4">
<el-select v-model="dataForm.planMajorFour" filterable clearable placeholder="请选择拟报专业4" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -111,8 +143,12 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="拟报专业5" prop="planMajorFive">
<el-select v-model="dataForm.planMajorFive" filterable clearable placeholder="请选择拟报专业5">
<el-select v-model="dataForm.planMajorFive" filterable clearable placeholder="请选择拟报专业5" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -123,9 +159,10 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="拟报专业6" prop="planMajorSix">
<el-select v-model="dataForm.planMajorSix" filterable clearable placeholder="请选择拟报专业6">
<el-select v-model="dataForm.planMajorSix" filterable clearable placeholder="请选择拟报专业6" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -136,9 +173,12 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="拟报专业7" prop="planMajorSeven">
<el-select v-model="dataForm.planMajorSeven" filterable clearable placeholder="请选择拟报专业7">
<el-select v-model="dataForm.planMajorSeven" filterable clearable placeholder="请选择拟报专业7" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -149,9 +189,10 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="拟报专业8" prop="planMajorEight">
<el-select v-model="dataForm.planMajorEight" filterable clearable placeholder="请选择拟报专业8">
<el-select v-model="dataForm.planMajorEight" filterable clearable placeholder="请选择拟报专业8" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -162,9 +203,12 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="拟报专业9" prop="planMajorNine">
<el-select v-model="dataForm.planMajorNine" filterable clearable placeholder="请选择拟报专业9">
<el-select v-model="dataForm.planMajorNine" filterable clearable placeholder="请选择拟报专业9" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -175,9 +219,10 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="拟报专业10" prop="planMajorTen">
<el-select v-model="dataForm.planMajorTen" filterable clearable placeholder="请选择拟报专业10">
<el-select v-model="dataForm.planMajorTen" filterable clearable placeholder="请选择拟报专业10" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -188,9 +233,12 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="拟报专业11" prop="planMajorEleven">
<el-select v-model="dataForm.planMajorEleven" filterable clearable placeholder="请选择拟报专业11">
<el-select v-model="dataForm.planMajorEleven" filterable clearable placeholder="请选择拟报专业11" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -201,9 +249,10 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="拟报专业12" prop="planMajorTwelve">
<el-select v-model="dataForm.planMajorTwelve" filterable clearable placeholder="请选择拟报专业12">
<el-select v-model="dataForm.planMajorTwelve" filterable clearable placeholder="请选择拟报专业12" >
<el-option
v-for="item in planMajorList"
:key="item.id"
@@ -214,6 +263,8 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
@@ -226,14 +277,12 @@
</template>
<script setup lang="ts">
import { ref, reactive, computed, nextTick } from 'vue'
import { storeToRefs } from 'pinia'
import { useUserInfo } from '/@/stores/userInfo'
import { ref, reactive, nextTick } from 'vue'
import { ElNotification } from 'element-plus'
import { getObj, addObjStu, putObj } from '/@/api/recruit/recruitprestudent'
import { queryTeacherBaseByNoByAssets } from '/@/api/professional/professionaluser/teacherbase'
import { getList } from '/@/api/recruit/recruitstudentplangroup'
import { getDicts } from '/@/api/admin/dict'
import { queryAllTeacherByRecruit } from '/@/api/professional/professionaluser/teacherbase'
// Props
const props = defineProps<{
@@ -247,19 +296,6 @@ const emit = defineEmits<{
(e: 'refreshDataList'): void
}>()
// 使用 Pinia store
const userInfoStore = useUserInfo()
const { userInfos } = storeToRefs(userInfoStore)
// 创建权限对象
const permissions = computed(() => {
const perms: Record<string, boolean> = {}
userInfos.value.authBtnList.forEach((perm: string) => {
perms[perm] = true
})
return perms
})
// 表单引用
const dataFormRef = ref()
@@ -386,7 +422,7 @@ const dataFormSubmit = () => {
// 初始化方法
const init = (id: string | null) => {
dataForm.id = id || null
dataForm.id = id || ""
visible.value = true
canSubmit.value = true
@@ -399,7 +435,12 @@ const init = (id: string | null) => {
getDicts('sexy').then((res: any) => {
sexyList.value = res.data || []
})
// 这里如果需要教师列表,可以改用新的教师接口;当前项目中常用的是 queryTeacherBaseByNoByAssets
// 获取教师列表(对接人)
queryAllTeacherByRecruit().then((res: any) => {
contactNameList.value = res.data || []
}).catch(() => {
contactNameList.value = []
})
if (dataForm.id) {
getObj(dataForm.id).then((response: any) => {
Object.assign(dataForm, response.data)
@@ -424,7 +465,12 @@ defineExpose({
})
</script>
<style scoped>
<style lang="scss" scoped>
.el-form {
.el-form-item:last-of-type {
margin-bottom: 18px!important;
}
}
.dialog-footer {
text-align: right;
}

View File

@@ -115,37 +115,7 @@
:header-cell-style="tableStyle.headerCellStyle"
>
<el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column label="操作" width="200" align="center" fixed="left">
<template #default="scope">
<el-button
v-if="permissions.recruit_recruitprestudent_edit"
type="primary"
link
icon="EditPen"
@click="addOrUpdateHandle(scope.row.id)"
>
调整
</el-button>
<el-button
v-if="permissions.recruit_recruitprestudent_dj && scope.row.isDj == '0'"
type="success"
link
icon="CircleCheck"
@click="handllSureDj(scope.row.id)"
>
确认对接
</el-button>
<el-button
v-if="permissions.recruit_recruitprestudent_del"
type="danger"
link
icon="Delete"
@click="deleteHandle(scope.row.id)"
>
删除
</el-button>
</template>
</el-table-column>
<el-table-column prop="djName" label="对接人" width="150" align="center">
<template #default="scope">
{{ scope.row.djName }} <br />
@@ -166,6 +136,37 @@
{{ getSchoolName(scope.row.schoolId) }}
</template>
</el-table-column>
<el-table-column label="操作" width="250" align="center" fixed="left">
<template #default="scope">
<el-button
v-if="permissions.recruit_recruitprestudent_edit"
type="primary"
link
icon="EditPen"
@click="addOrUpdateHandle(scope.row.id)"
>
修改
</el-button>
<el-button
v-if="permissions.recruit_recruitprestudent_dj && scope.row.isDj == '0'"
type="primary"
link
icon="Connection"
@click="handllSureDj(scope.row.id)"
>
确认对接
</el-button>
<el-button
v-if="permissions.recruit_recruitprestudent_del"
type="primary"
link
icon="Delete"
@click="deleteHandle(scope.row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->

View File

@@ -45,7 +45,7 @@
<!-- 操作按钮 -->
<div class="mb15">
<el-button
v-if="permissions.recruit_recruitschoolcode_add"
v-auth="'recruit_recruitschoolcode_add'"
type="primary"
icon="FolderAdd"
@click="addOrUpdateHandle()"
@@ -53,7 +53,7 @@
新增
</el-button>
<el-button
v-if="permissions.recruit_recruitschoolcode_add"
v-auth="'recruit_recruitschoolcode_add'"
type="primary"
plain
icon="UploadFilled"
@@ -85,7 +85,7 @@
<el-table-column label="操作" width="150" align="center" fixed="right">
<template #default="scope">
<el-button
v-if="permissions.recruit_recruitschoolcode_edit"
v-auth="'recruit_recruitschoolcode_edit'"
type="primary"
link
icon="EditPen"
@@ -94,8 +94,8 @@
修改
</el-button>
<el-button
v-if="permissions.recruit_recruitschoolcode_del"
type="danger"
v-auth="'recruit_recruitschoolcode_del'"
type="primary"
link
icon="Delete"
@click="deleteHandle(scope.row.id)"
@@ -117,7 +117,7 @@
<table-form ref="addOrUpdateRef" @refreshDataList="getDataList" />
<!-- 导入弹窗 -->
<el-dialog v-model="dialogViewVisible" title="导入学校代码" append-to-body>
<el-dialog v-model="dialogViewVisible" title="导入学校代码" append-to-body width="600px">
<el-form :model="exportForm" inline>
<el-form-item label="招生计划" prop="groupId">
<el-select v-model="exportForm.groupId" filterable clearable placeholder="请选择招生计划">
@@ -163,9 +163,7 @@
</template>
<script setup lang="ts" name="recruitschoolcode">
import { ref, reactive, computed, onMounted, defineAsyncComponent } from 'vue'
import { storeToRefs } from 'pinia'
import { useUserInfo } from '/@/stores/userInfo'
import { ref, reactive, onMounted, defineAsyncComponent } from 'vue'
import { BasicTableProps, useTable } from '/@/hooks/table'
import { useMessage, useMessageBox } from '/@/hooks/message'
import { getList } from '/@/api/recruit/recruitstudentplangroup'
@@ -174,19 +172,6 @@ import request from '/@/utils/request'
const TableForm = defineAsyncComponent(() => import('./detaiform.vue'))
// 使用 Pinia store
const userInfoStore = useUserInfo()
const { userInfos } = storeToRefs(userInfoStore)
// 创建权限对象
const permissions = computed(() => {
const perms: Record<string, boolean> = {}
userInfos.value.authBtnList.forEach((perm: string) => {
perms[perm] = true
})
return perms
})
// 消息提示 hooks
const message = useMessage()
const messageBox = useMessageBox()
@@ -198,7 +183,6 @@ const addOrUpdateRef = ref()
const uploadFormRef = ref()
// 弹窗状态
const addOrUpdateVisible = ref(false)
const dialogViewVisible = ref(false)
const impoerLoadinBtn = ref(false)
@@ -254,7 +238,7 @@ const init = async () => {
}
getDataList()
} catch (error) {
console.error('初始化失败', error)
message.error('初始化失败')
}
}
@@ -353,9 +337,9 @@ const deleteHandle = async (id: string) => {
// 重置查询
const resetQuery = () => {
searchFormRef.value?.resetFields()
Object.keys(queryForm).forEach(key => {
queryForm[key] = ''
})
queryForm.groupId = ''
queryForm.schoolName = ''
queryForm.schoolCode = ''
if (planList.value.length > 0) {
queryForm.groupId = planList.value[0].id
}

View File

@@ -4,7 +4,6 @@
:close-on-click-modal="false"
v-model="visible"
width="600px"
destroy-on-close
>
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="120px">
<el-form-item label="招生计划" prop="groupId">
@@ -103,9 +102,6 @@ const initData = () => {
})
getList().then((data: any) => {
planList.value = data.data
if (!dataForm.id) {
dataForm.groupId = planList.value[0]?.id || null
}
})
// 获取所有省
areaList({ type: "0", parentId: 112 }).then((res: any) => {
@@ -147,21 +143,42 @@ const dataFormSubmit = () => {
// 初始化方法
const init = (id: string | null) => {
dataForm.id = id || null
visible.value = true
canSubmit.value = true
initData()
dataForm.id = ""
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields()
if (dataForm.id) {
getObj(dataForm.id).then((response: any) => {
})
initData()
// 获取详情数据
if (id) {
dataForm.id = id
getObj(id).then((response: any) => {
if (response && response.data) {
Object.assign(dataForm, response.data)
if (dataForm.area) {
dataForm.area = String(dataForm.area)
}
// 确保 deptCode 正确映射(如果 API 返回的是 xy 字段)
if (response.data.xy && !response.data.deptCode) {
dataForm.deptCode = response.data.xy
}
}
}).catch(() => {
// 错误处理
})
} else {
// 新增模式:设置默认招生计划
getList().then((data: any) => {
if (data.data && data.data.length > 0) {
dataForm.groupId = data.data[0]?.id || ""
}
})
}
}
// 暴露方法给父组件