1
This commit is contained in:
30
src/api/recruit/recruitMajorCategory.ts
Normal file
30
src/api/recruit/recruitMajorCategory.ts
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import request from "/@/utils/request"
|
||||||
|
|
||||||
|
// ========== 基础CRUD接口 ==========
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询列表数据
|
||||||
|
* @param query - 查询参数对象
|
||||||
|
* @returns Promise<分页数据>
|
||||||
|
*/
|
||||||
|
export function fetchList(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/recruit/recruitMajorCategory/page',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取专业类目树结构
|
||||||
|
* @param obj - 查询参数对象(包含ID等)
|
||||||
|
* @returns Promise<数据详情>
|
||||||
|
*/
|
||||||
|
export function majorCateTree(obj?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/recruit/recruitMajorCategory/majorCateTree',
|
||||||
|
method: 'get',
|
||||||
|
params: obj
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
@@ -176,7 +176,6 @@ const dataRules = reactive({
|
|||||||
trigger: 'blur',
|
trigger: 'blur',
|
||||||
}],
|
}],
|
||||||
path: [{validator: rule.overLength, trigger: 'blur'}, {required: true, message: '路径不能为空', trigger: 'blur'}],
|
path: [{validator: rule.overLength, trigger: 'blur'}, {required: true, message: '路径不能为空', trigger: 'blur'}],
|
||||||
icon: [{validator: rule.overLength, trigger: 'blur'}, {required: true, message: '图标不能为空', trigger: 'blur'}],
|
|
||||||
permission: [{validator: rule.overLength, trigger: 'blur'}, {
|
permission: [{validator: rule.overLength, trigger: 'blur'}, {
|
||||||
required: true,
|
required: true,
|
||||||
message: '权限代码不能为空',
|
message: '权限代码不能为空',
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
:title="dialogTitle"
|
:title="dialogTitle"
|
||||||
width="50%"
|
width="80%"
|
||||||
:show-close="false"
|
:show-close="false"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
:close-on-press-escape="false"
|
:close-on-press-escape="false"
|
||||||
@@ -122,7 +122,13 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.role-group {
|
.role-group {
|
||||||
|
width: 100%;
|
||||||
|
flex: 0 0 100%;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px 12px;
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
@@ -137,8 +143,9 @@ defineExpose({
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
align-items: flex-start;
|
||||||
|
|
||||||
/* 每个按钮独立边框,换行后左侧也有边线 */
|
/* 每个分组内按钮可换行,分组之间不重叠 */
|
||||||
:deep(.el-radio-button) {
|
:deep(.el-radio-button) {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
129
src/views/recruit/recruitMajorCategory/index.vue
Normal file
129
src/views/recruit/recruitMajorCategory/index.vue
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
<template>
|
||||||
|
<div class="layout-padding">
|
||||||
|
<div class="layout-padding-auto layout-padding-view">
|
||||||
|
|
||||||
|
<!-- 操作按钮区域 -->
|
||||||
|
<el-row>
|
||||||
|
<div class="mb8" style="width: 100%">
|
||||||
|
<right-toolbar
|
||||||
|
v-model:showSearch="showSearch"
|
||||||
|
:export="'recruit_recruitMajorCategory_export'"
|
||||||
|
@exportExcel="exportExcel"
|
||||||
|
class="ml10 mr20"
|
||||||
|
style="float: right;"
|
||||||
|
@queryTable="getDataList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<!-- 数据表格区域 -->
|
||||||
|
<el-table
|
||||||
|
:data="state.dataList"
|
||||||
|
v-loading="state.loading"
|
||||||
|
border
|
||||||
|
:cell-style="tableStyle.cellStyle"
|
||||||
|
:header-cell-style="tableStyle.headerCellStyle"
|
||||||
|
@selection-change="selectionChangHandle"
|
||||||
|
@sort-change="sortChangeHandle"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" label="#" width="40" />
|
||||||
|
<el-table-column
|
||||||
|
prop="oneCategory"
|
||||||
|
label="一级类目"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="twoCategory"
|
||||||
|
label="二级类目"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="oneTitle"
|
||||||
|
label="一级类目名称"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="twoTitle"
|
||||||
|
label="二级类目"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<pagination
|
||||||
|
@size-change="sizeChangeHandle"
|
||||||
|
@current-change="currentChangeHandle"
|
||||||
|
v-bind="state.pagination"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 导入excel弹窗 (需要在 upms-biz/resources/file 下维护模板) -->
|
||||||
|
<upload-excel
|
||||||
|
ref="excelUploadRef"
|
||||||
|
title="导入"
|
||||||
|
url="/recruit/recruitMajorCategory/import"
|
||||||
|
temp-url="/admin/sys-file/local/file/recruitMajorCategory.xlsx"
|
||||||
|
@refreshDataList="getDataList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts" name="systemRecruitMajorCategory">
|
||||||
|
// ========== 导入声明 ==========
|
||||||
|
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||||
|
import { fetchList } from "/@/api/recruit/recruitMajorCategory";
|
||||||
|
|
||||||
|
// ========== 组件声明 ==========
|
||||||
|
// 异步加载表单弹窗组件
|
||||||
|
|
||||||
|
// ========== 字典数据 ==========
|
||||||
|
|
||||||
|
// ========== 组件引用 ==========
|
||||||
|
const excelUploadRef = ref(); // Excel上传弹窗引用
|
||||||
|
const queryRef = ref(); // 查询表单引用
|
||||||
|
|
||||||
|
// ========== 响应式数据 ==========
|
||||||
|
const showSearch = ref(true); // 是否显示搜索区域
|
||||||
|
const selectObjs = ref([]) as any; // 表格多选数据
|
||||||
|
const multiple = ref(true); // 是否多选
|
||||||
|
|
||||||
|
// ========== 表格状态 ==========
|
||||||
|
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||||
|
queryForm: {}, // 查询参数
|
||||||
|
pageList: fetchList // 分页查询方法
|
||||||
|
});
|
||||||
|
|
||||||
|
// ========== Hook引用 ==========
|
||||||
|
// 表格相关Hook
|
||||||
|
const {
|
||||||
|
getDataList,
|
||||||
|
currentChangeHandle,
|
||||||
|
sizeChangeHandle,
|
||||||
|
sortChangeHandle,
|
||||||
|
downBlobFile,
|
||||||
|
tableStyle
|
||||||
|
} = useTable(state);
|
||||||
|
|
||||||
|
// ========== 方法定义 ==========
|
||||||
|
/**
|
||||||
|
* 重置查询条件
|
||||||
|
*/
|
||||||
|
const resetQuery = () => {
|
||||||
|
// 清空搜索条件
|
||||||
|
queryRef.value?.resetFields();
|
||||||
|
// 清空多选
|
||||||
|
selectObjs.value = [];
|
||||||
|
// 重新查询
|
||||||
|
getDataList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表格多选事件处理
|
||||||
|
* @param objs 选中的数据行
|
||||||
|
*/
|
||||||
|
const selectionChangHandle = (objs: { id: string }[]) => {
|
||||||
|
selectObjs.value = objs.map(({ id }) => id);
|
||||||
|
multiple.value = !objs.length;
|
||||||
|
};
|
||||||
|
|
||||||
|
</script>
|
||||||
@@ -1,253 +1,189 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog :title="!dataForm.id ? '新增' : '修改'" :close-on-click-modal="false" v-model="visible" width="800px">
|
||||||
:title="!dataForm.id ? '新增' : '修改'"
|
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="100px">
|
||||||
:close-on-click-modal="false"
|
<el-form-item label="招生计划" prop="groupId">
|
||||||
v-model="visible"
|
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划">
|
||||||
width="800px"
|
<el-option v-for="item in planList" :key="item.id" :label="item.groupName" :value="item.id"> </el-option>
|
||||||
>
|
</el-select>
|
||||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
</el-form-item>
|
||||||
label-width="100px">
|
<el-form-item label="专业序号" prop="majorCode">
|
||||||
|
<el-input v-model="dataForm.majorCode" placeholder="专业序号"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="专业名称" prop="majorName">
|
||||||
|
<el-input v-model="dataForm.majorName" placeholder="专业名称"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="专业规范名称" class="form-item-cascader">
|
||||||
|
<el-cascader v-model="chooseMajorCate" :options="majorCateTreeData" @change="handleChange" style="width: 100%" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="所属学院" prop="deptCode">
|
||||||
|
<el-select v-model="dataForm.deptCode" filterable placeholder="请选择">
|
||||||
|
<el-option v-for="item in deptList" :key="item.deptCode" :label="item.deptName" :value="item.deptCode"> </el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="学制" prop="learnYear">
|
||||||
|
<el-select v-model="dataForm.learnYear" filterable placeholder="请选择学制">
|
||||||
|
<el-option v-for="item in majorYears" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="层次" prop="majorLevel">
|
||||||
|
<el-select v-model="dataForm.majorLevel" filterable placeholder="请选择层次">
|
||||||
|
<el-option v-for="item in ccList" :key="item.label" :label="item.label" :value="item.label"> </el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="中德班" prop="isZd">
|
||||||
|
<el-radio-group v-model="dataForm.isZd">
|
||||||
|
<el-radio v-for="item in yes_no_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="订单班" prop="isOrder">
|
||||||
|
<el-radio-group v-model="dataForm.isOrder">
|
||||||
|
<el-radio v-for="item in yes_no_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="联院班" prop="isUnion">
|
||||||
|
<el-radio-group v-model="dataForm.isUnion">
|
||||||
|
<el-radio v-for="item in yes_no_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-form-item label="正式专业代码" prop="stuworkMajorCode">
|
||||||
|
<el-select v-model="dataForm.stuworkMajorCode" filterable placeholder="请选择正式专业代码">
|
||||||
|
<el-option v-for="item in offcialZydmList" :key="item.majorCode" :label="item.majorCodeAndName" :value="item.majorCode"> </el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="初中费用" prop="czFee">
|
||||||
|
<el-input-number v-model="dataForm.czFee" controls-position="right" :min="0" :max="999999" :precision="2" placeholder="请输入初中费用">
|
||||||
|
</el-input-number>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="高中费用" prop="gzFee">
|
||||||
|
<el-input-number v-model="dataForm.gzFee" controls-position="right" :min="0" :max="999999" :precision="2" placeholder="请输入高中费用">
|
||||||
|
</el-input-number>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="技职校费用" prop="jzxFee">
|
||||||
|
<el-input-number v-model="dataForm.jzxFee" controls-position="right" :min="0" :max="999999" :precision="2" placeholder="请输入技职校费用">
|
||||||
|
</el-input-number>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-form-item label="招生计划" prop="groupId">
|
<el-form-item label="排序" prop="sort">
|
||||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划">
|
<el-input-number :min="0" :max="999" v-model="dataForm.sort" placeholder="排序"></el-input-number>
|
||||||
<el-option
|
</el-form-item>
|
||||||
v-for="item in planList"
|
<el-form-item label="备注" prop="remarks">
|
||||||
:key="item.id"
|
<el-input type="textarea" :rows="3" placeholder="请输入备注信息" v-model="dataForm.remarks"></el-input>
|
||||||
:label="item.groupName"
|
</el-form-item>
|
||||||
:value="item.id">
|
</el-form>
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="专业代码" prop="majorCode">
|
|
||||||
<el-input v-model="dataForm.majorCode" placeholder="专业代码"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="专业名称" prop="majorName">
|
|
||||||
<el-input v-model="dataForm.majorName" placeholder="专业名称"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="所属学院" prop="deptCode">
|
|
||||||
<el-select v-model="dataForm.deptCode" filterable placeholder="请选择">
|
|
||||||
<el-option
|
|
||||||
v-for="item in deptList"
|
|
||||||
:key="item.deptCode"
|
|
||||||
:label="item.deptName"
|
|
||||||
:value="item.deptCode">
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="学制" prop="learnYear">
|
|
||||||
<el-select v-model="dataForm.learnYear" filterable placeholder="请选择学制">
|
|
||||||
<el-option
|
|
||||||
v-for="item in majorYears"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value">
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="层次" prop="majorLevel">
|
|
||||||
<el-select v-model="dataForm.majorLevel" filterable placeholder="请选择层次">
|
|
||||||
<el-option
|
|
||||||
v-for="item in ccList"
|
|
||||||
:key="item.label"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.label">
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="中德班" prop="isZd">
|
|
||||||
<el-radio-group v-model="dataForm.isZd">
|
|
||||||
<el-radio v-for="item in yes_no_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
</el-col>
|
<template #footer>
|
||||||
<el-col :span="8">
|
<div class="dialog-footer">
|
||||||
<el-form-item label="订单班" prop="isOrder">
|
<el-button @click="visible = false">取消</el-button>
|
||||||
<el-radio-group v-model="dataForm.isOrder">
|
<el-button type="primary" @click="dataFormSubmit" v-if="canSubmit">确定</el-button>
|
||||||
<el-radio v-for="item in yes_no_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
</div>
|
||||||
</el-radio-group>
|
</template>
|
||||||
</el-form-item>
|
</el-dialog>
|
||||||
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="联院班" prop="isUnion">
|
|
||||||
<el-radio-group v-model="dataForm.isUnion">
|
|
||||||
<el-radio v-for="item in yes_no_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-form-item label="正式专业代码" prop="stuworkMajorCode">
|
|
||||||
<el-select v-model="dataForm.stuworkMajorCode" filterable placeholder="请选择正式专业代码">
|
|
||||||
<el-option
|
|
||||||
v-for="item in offcialZydmList"
|
|
||||||
:key="item.majorCode"
|
|
||||||
:label="item.majorCodeAndName"
|
|
||||||
:value="item.majorCode">
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="初中费用" prop="czFee">
|
|
||||||
<el-input-number
|
|
||||||
v-model="dataForm.czFee"
|
|
||||||
controls-position="right"
|
|
||||||
:min="0"
|
|
||||||
:max="999999"
|
|
||||||
:precision="2"
|
|
||||||
placeholder="请输入初中费用"
|
|
||||||
>
|
|
||||||
</el-input-number>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="高中费用" prop="gzFee">
|
|
||||||
<el-input-number
|
|
||||||
v-model="dataForm.gzFee"
|
|
||||||
controls-position="right"
|
|
||||||
:min="0"
|
|
||||||
:max="999999"
|
|
||||||
:precision="2"
|
|
||||||
placeholder="请输入高中费用"
|
|
||||||
>
|
|
||||||
</el-input-number>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="技职校费用" prop="jzxFee">
|
|
||||||
<el-input-number
|
|
||||||
v-model="dataForm.jzxFee"
|
|
||||||
controls-position="right"
|
|
||||||
:min="0"
|
|
||||||
:max="999999"
|
|
||||||
:precision="2"
|
|
||||||
placeholder="请输入技职校费用" >
|
|
||||||
</el-input-number>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-form-item label="排序" prop="sort">
|
|
||||||
<el-input-number :min="0" :max="999" v-model="dataForm.sort" placeholder="排序"></el-input-number>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remarks">
|
|
||||||
<el-input type="textarea" :rows="3" placeholder="请输入备注信息" v-model="dataForm.remarks"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button @click="visible = false">取消</el-button>
|
|
||||||
<el-button type="primary" @click="dataFormSubmit" v-if="canSubmit">确定</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, nextTick } from 'vue'
|
import { ref, reactive, nextTick } from 'vue';
|
||||||
import { ElNotification } from 'element-plus'
|
import { ElNotification } from 'element-plus';
|
||||||
import { addObj, getObj, putObj } from '/@/api/recruit/recruitstudentplan'
|
import { addObj, getObj, putObj } from '/@/api/recruit/recruitstudentplan';
|
||||||
import { getDeptList } from '/@/api/basic/basicclass'
|
import { getDeptList } from '/@/api/basic/basicclass';
|
||||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
import { getList } from '/@/api/recruit/recruitstudentplangroup';
|
||||||
import { getMajorNameList } from '/@/api/basic/major'
|
import { getMajorNameList } from '/@/api/basic/major';
|
||||||
import { getDictsByTypes } from '/@/api/admin/dict'
|
import { getDictsByTypes } from '/@/api/admin/dict';
|
||||||
import { useDict } from '/@/hooks/dict'
|
import { useDict } from '/@/hooks/dict';
|
||||||
|
import { majorCateTree } from '/@/api/recruit/recruitMajorCategory';
|
||||||
|
|
||||||
// Emits
|
// Emits
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'refreshDataList'): void
|
(e: 'refreshDataList'): void;
|
||||||
}>()
|
}>();
|
||||||
|
|
||||||
// 字典数据
|
// 字典数据
|
||||||
const { yes_no_type } = useDict('yes_no_type')
|
const { yes_no_type } = useDict('yes_no_type');
|
||||||
|
|
||||||
// 表单引用
|
// 表单引用
|
||||||
const dataFormRef = ref()
|
const dataFormRef = ref();
|
||||||
|
|
||||||
// 响应式数据
|
// 响应式数据
|
||||||
const visible = ref(false)
|
const visible = ref(false);
|
||||||
const canSubmit = ref(false)
|
const canSubmit = ref(false);
|
||||||
const cityPlanIdList = ref<any[]>([])
|
const cityPlanIdList = ref<any[]>([]);
|
||||||
const offcialZydmList = ref<any[]>([])
|
const offcialZydmList = ref<any[]>([]);
|
||||||
const planList = ref<any[]>([])
|
const planList = ref<any[]>([]);
|
||||||
const deptList = ref<any[]>([])
|
const deptList = ref<any[]>([]);
|
||||||
const ccList = ref<any[]>([])
|
const ccList = ref<any[]>([]);
|
||||||
const majorYears = ref<any[]>([])
|
const majorYears = ref<any[]>([]);
|
||||||
const tuitionFeeList = ref<any[]>([])
|
const tuitionFeeList = ref<any[]>([]);
|
||||||
|
const majorCateTreeData = ref<any[]>([]);
|
||||||
|
const chooseMajorCate = ref<any[]>([]);
|
||||||
|
|
||||||
const dataForm = reactive({
|
const dataForm = reactive({
|
||||||
id: "",
|
id: '',
|
||||||
groupId: "",
|
groupId: '',
|
||||||
majorCode: "",
|
majorCode: '',
|
||||||
majorName: "",
|
standardMajorCode: '',
|
||||||
deptCode: "",
|
standardMajorTwoCode: '',
|
||||||
learnYear: "",
|
majorName: '',
|
||||||
majorLevel: "",
|
deptCode: '',
|
||||||
isZd: "0",
|
learnYear: '',
|
||||||
isOrder: "0",
|
majorLevel: '',
|
||||||
remarks: "",
|
isZd: '0',
|
||||||
stuworkMajorCode: "",
|
isOrder: '0',
|
||||||
isUnion: "0",
|
remarks: '',
|
||||||
tuitionFee: 0,
|
stuworkMajorCode: '',
|
||||||
czFee: 0,
|
isUnion: '0',
|
||||||
gzFee: 0,
|
tuitionFee: 0,
|
||||||
jzxFee: 0,
|
czFee: 0,
|
||||||
sort: 0
|
gzFee: 0,
|
||||||
})
|
jzxFee: 0,
|
||||||
|
sort: 0,
|
||||||
|
});
|
||||||
|
|
||||||
const dataRule = {
|
const dataRule = {
|
||||||
majorCode: [
|
majorCode: [
|
||||||
{ required: true, message: '专业代码不能为空', trigger: 'blur' },
|
{ required: true, message: '专业代码不能为空', trigger: 'blur' },
|
||||||
{ min: 1, max: 6, message: '专业代码长度不大于6个字符', trigger: 'blur' }
|
{ min: 1, max: 6, message: '专业代码长度不大于6个字符', trigger: 'blur' },
|
||||||
],
|
],
|
||||||
tuitionFee: [
|
tuitionFee: [{ required: true, message: '学费不能为空', trigger: 'blur' }],
|
||||||
{ required: true, message: '学费不能为空', trigger: 'blur' }
|
majorName: [
|
||||||
],
|
{ required: true, message: '专业名称不能为空', trigger: 'blur' },
|
||||||
majorName: [
|
{ min: 1, max: 200, message: '专业名称长度不大于200个字符', trigger: 'blur' },
|
||||||
{ required: true, message: '专业名称不能为空', trigger: 'blur' },
|
],
|
||||||
{ min: 1, max: 200, message: '专业名称长度不大于200个字符', trigger: 'blur' }
|
groupId: [{ required: true, message: '招生计划不能为空', trigger: 'blur' }],
|
||||||
],
|
learnYear: [{ required: true, message: '学制不能为空', trigger: 'blur' }],
|
||||||
groupId: [
|
deptCode: [{ required: true, message: '学院不能为空', trigger: 'blur' }],
|
||||||
{ required: true, message: '招生计划不能为空', trigger: 'blur' }
|
majorLevel: [{ required: true, message: '层次不能为空', trigger: 'blur' }],
|
||||||
],
|
isOrder: [{ required: true, message: '订单班不能为空', trigger: 'blur' }],
|
||||||
learnYear: [
|
isZd: [{ required: true, message: '订单班不能为空', trigger: 'blur' }],
|
||||||
{ required: true, message: '学制不能为空', trigger: 'blur' }
|
isUnion: [{ required: true, message: '联院班不能为空', trigger: 'blur' }],
|
||||||
],
|
czFee: [
|
||||||
deptCode: [
|
{ required: true, message: '初中费用不能为空', trigger: 'blur' },
|
||||||
{ required: true, message: '学院不能为空', trigger: 'blur' }
|
{ type: 'number', min: 0, message: '初中费用不能小于0', trigger: 'blur' },
|
||||||
],
|
],
|
||||||
majorLevel: [
|
gzFee: [
|
||||||
{ required: true, message: '层次不能为空', trigger: 'blur' }
|
{ required: true, message: '高中费用不能为空', trigger: 'blur' },
|
||||||
],
|
{ type: 'number', min: 0, message: '高中费用不能小于0', trigger: 'blur' },
|
||||||
isOrder: [
|
],
|
||||||
{ required: true, message: '订单班不能为空', trigger: 'blur' }
|
jzxFee: [
|
||||||
],
|
{ required: true, message: '技职校费用不能为空', trigger: 'blur' },
|
||||||
isZd: [
|
{ type: 'number', min: 0, message: '技职校费用不能小于0', trigger: 'blur' },
|
||||||
{ required: true, message: '订单班不能为空', trigger: 'blur' }
|
],
|
||||||
],
|
remarks: [{ min: 1, max: 100, message: '备注长度不大于100个字符', trigger: 'blur' }],
|
||||||
isUnion: [
|
};
|
||||||
{ required: true, message: '联院班不能为空', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
czFee: [
|
|
||||||
{ required: true, message: '初中费用不能为空', trigger: 'blur' },
|
|
||||||
{ type: 'number', min: 0, message: '初中费用不能小于0', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
gzFee: [
|
|
||||||
{ required: true, message: '高中费用不能为空', trigger: 'blur' },
|
|
||||||
{ type: 'number', min: 0, message: '高中费用不能小于0', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
jzxFee: [
|
|
||||||
{ required: true, message: '技职校费用不能为空', trigger: 'blur' },
|
|
||||||
{ type: 'number', min: 0, message: '技职校费用不能小于0', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
remarks: [
|
|
||||||
{ min: 1, max: 100, message: '备注长度不大于100个字符', trigger: 'blur' }
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断市平台招生专业是否占用,占用不可选
|
* 判断市平台招生专业是否占用,占用不可选
|
||||||
@@ -261,143 +197,174 @@ const dataRule = {
|
|||||||
|
|
||||||
// 设置费用默认值
|
// 设置费用默认值
|
||||||
const setFeeDefaults = () => {
|
const setFeeDefaults = () => {
|
||||||
if (tuitionFeeList.value.length > 0) {
|
if (tuitionFeeList.value.length > 0) {
|
||||||
// 初中费用:字典值 1
|
// 初中费用:字典值 1
|
||||||
const czFeeItem = tuitionFeeList.value.find((item: any) => item.label === '1')
|
const czFeeItem = tuitionFeeList.value.find((item: any) => item.label === '1');
|
||||||
|
|
||||||
if (czFeeItem) {
|
if (czFeeItem) {
|
||||||
dataForm.czFee = Number(czFeeItem.value) || 0
|
dataForm.czFee = Number(czFeeItem.value) || 0;
|
||||||
}
|
}
|
||||||
// 高中费用:字典值 2
|
// 高中费用:字典值 2
|
||||||
const gzFeeItem = tuitionFeeList.value.find((item: any) => item.label === '2')
|
const gzFeeItem = tuitionFeeList.value.find((item: any) => item.label === '2');
|
||||||
if (gzFeeItem) {
|
if (gzFeeItem) {
|
||||||
dataForm.gzFee = Number(gzFeeItem.value) || 0
|
dataForm.gzFee = Number(gzFeeItem.value) || 0;
|
||||||
}
|
}
|
||||||
// 技职校费用:字典值 3
|
// 技职校费用:字典值 3
|
||||||
const jzxFeeItem = tuitionFeeList.value.find((item: any) => item.label === '3')
|
const jzxFeeItem = tuitionFeeList.value.find((item: any) => item.label === '3');
|
||||||
if (jzxFeeItem) {
|
if (jzxFeeItem) {
|
||||||
dataForm.jzxFee = Number(jzxFeeItem.value) || 0
|
dataForm.jzxFee = Number(jzxFeeItem.value) || 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 初始化数据
|
// 初始化数据
|
||||||
const initData = (id: string | null) => {
|
const initData = (id: string | null) => {
|
||||||
// 查询二级学院信息
|
// 查询二级学院信息
|
||||||
getDeptList().then((data: any) => {
|
getDeptList().then((data: any) => {
|
||||||
deptList.value = data.data
|
deptList.value = data.data;
|
||||||
})
|
});
|
||||||
|
|
||||||
// 获取招生计划列表
|
// 获取招生计划列表
|
||||||
getList().then((data: any) => {
|
getList().then((data: any) => {
|
||||||
planList.value = data.data
|
planList.value = data.data;
|
||||||
// 新增时,默认选中第一个招生计划
|
// 新增时,默认选中第一个招生计划
|
||||||
if (!id && data.data && data.data.length > 0) {
|
if (!id && data.data && data.data.length > 0) {
|
||||||
dataForm.groupId = data.data[0]?.id || ''
|
dataForm.groupId = data.data[0]?.id || '';
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
// 获取正式专业代码列表
|
// 获取正式专业代码列表
|
||||||
getMajorNameList().then((data: any) => {
|
getMajorNameList().then((data: any) => {
|
||||||
offcialZydmList.value = data.data
|
offcialZydmList.value = data.data;
|
||||||
})
|
});
|
||||||
|
|
||||||
// 获取数据字典(一次获取多个)
|
// 获取数据字典(一次获取多个)
|
||||||
getDictsByTypes(['basic_major_years', 'basic_major_level', 'tuition_fee']).then((res: any) => {
|
getDictsByTypes(['basic_major_years', 'basic_major_level', 'tuition_fee']).then((res: any) => {
|
||||||
majorYears.value = res.data?.basic_major_years || []
|
majorYears.value = res.data?.basic_major_years || [];
|
||||||
ccList.value = res.data?.basic_major_level || []
|
ccList.value = res.data?.basic_major_level || [];
|
||||||
tuitionFeeList.value = res.data?.tuition_fee || []
|
tuitionFeeList.value = res.data?.tuition_fee || [];
|
||||||
|
|
||||||
// 新增时,根据学费字典设置费用默认值
|
// 新增时,根据学费字典设置费用默认值
|
||||||
if (!id) {
|
if (!id) {
|
||||||
setFeeDefaults()
|
setFeeDefaults();
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}
|
|
||||||
|
//查询专业目录树结构
|
||||||
|
majorCateTree({}).then((res: any) => {
|
||||||
|
majorCateTreeData.value = res.data;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// 表单提交
|
// 表单提交
|
||||||
const dataFormSubmit = () => {
|
const dataFormSubmit = () => {
|
||||||
// if (dataForm.cityPlanId != null) {
|
// if (dataForm.cityPlanId != null) {
|
||||||
// cityPlanIdList.value.forEach(e => {
|
// cityPlanIdList.value.forEach(e => {
|
||||||
// if (e.id == dataForm.cityPlanId) {
|
// if (e.id == dataForm.cityPlanId) {
|
||||||
// dataForm.cityPlanName = e.schoolMajorName
|
// dataForm.cityPlanName = e.schoolMajorName
|
||||||
// dataForm.cityPlanYear = e.educational
|
// dataForm.cityPlanYear = e.educational
|
||||||
// }
|
// }
|
||||||
// })
|
// })
|
||||||
// }
|
// }
|
||||||
dataFormRef.value?.validate((valid: boolean) => {
|
dataFormRef.value?.validate((valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
canSubmit.value = false
|
canSubmit.value = false;
|
||||||
if (dataForm.id) {
|
if (dataForm.id) {
|
||||||
putObj(dataForm).then(() => {
|
putObj(dataForm)
|
||||||
ElNotification.success({
|
.then(() => {
|
||||||
title: '成功',
|
ElNotification.success({
|
||||||
message: '修改成功'
|
title: '成功',
|
||||||
})
|
message: '修改成功',
|
||||||
visible.value = false
|
});
|
||||||
emit('refreshDataList')
|
visible.value = false;
|
||||||
}).catch(() => {
|
emit('refreshDataList');
|
||||||
canSubmit.value = true
|
})
|
||||||
})
|
.catch(() => {
|
||||||
} else {
|
canSubmit.value = true;
|
||||||
addObj(dataForm).then(() => {
|
});
|
||||||
ElNotification.success({
|
} else {
|
||||||
title: '成功',
|
addObj(dataForm)
|
||||||
message: '添加成功'
|
.then(() => {
|
||||||
})
|
ElNotification.success({
|
||||||
visible.value = false
|
title: '成功',
|
||||||
emit('refreshDataList')
|
message: '添加成功',
|
||||||
}).catch(() => {
|
});
|
||||||
canSubmit.value = true
|
visible.value = false;
|
||||||
})
|
emit('refreshDataList');
|
||||||
}
|
})
|
||||||
}
|
.catch(() => {
|
||||||
})
|
canSubmit.value = true;
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleChange = (value: any) => {
|
||||||
|
dataForm.standardMajorCode = value[0];
|
||||||
|
dataForm.standardMajorTwoCode = value[1];
|
||||||
|
};
|
||||||
|
|
||||||
// 初始化方法
|
// 初始化方法
|
||||||
const init = (id: string | null) => {
|
const init = (id: string | null) => {
|
||||||
visible.value = true
|
visible.value = true;
|
||||||
canSubmit.value = true
|
canSubmit.value = true;
|
||||||
dataForm.id = ""
|
dataForm.id = '';
|
||||||
|
|
||||||
// 重置表单数据
|
// 重置表单数据
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
dataFormRef.value?.resetFields()
|
dataFormRef.value?.resetFields();
|
||||||
})
|
});
|
||||||
|
|
||||||
initData(id)
|
initData(id);
|
||||||
|
|
||||||
// 获取详情数据
|
// 获取详情数据
|
||||||
if (id) {
|
if (id) {
|
||||||
dataForm.id = id
|
dataForm.id = id;
|
||||||
getObj(id).then((response: any) => {
|
getObj(id)
|
||||||
if (response && response.data) {
|
.then((response: any) => {
|
||||||
Object.assign(dataForm, response.data)
|
if (response && response.data) {
|
||||||
// 获取市平台对应年份下的招生计划
|
Object.assign(dataForm, response.data);
|
||||||
// getCityPlan({ id: dataForm.id }).then((data: any) => {
|
if (dataForm.standardMajorCode && dataForm.standardMajorTwoCode) {
|
||||||
// cityPlanIdList.value = data.data
|
chooseMajorCate.value = [dataForm.standardMajorCode, dataForm.standardMajorTwoCode];
|
||||||
// })
|
}else{
|
||||||
}
|
chooseMajorCate.value = [];
|
||||||
}).catch(() => {
|
}
|
||||||
// 错误处理
|
// 获取市平台对应年份下的招生计划
|
||||||
})
|
// getCityPlan({ id: dataForm.id }).then((data: any) => {
|
||||||
} else {
|
// cityPlanIdList.value = data.data
|
||||||
// 新增模式:initData 中已处理默认招生计划和费用默认值
|
// })
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
|
.catch(() => {
|
||||||
|
// 错误处理
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// 新增模式:initData 中已处理默认招生计划和费用默认值
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 暴露方法给父组件
|
// 暴露方法给父组件
|
||||||
defineExpose({
|
defineExpose({
|
||||||
init
|
init,
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.form-item-cascader {
|
||||||
|
:deep(.el-form-item__content) {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
:deep(.el-cascader) {
|
||||||
|
width: 100%;
|
||||||
|
min-width: 360px;
|
||||||
|
}
|
||||||
|
}
|
||||||
.dialog-footer {
|
.dialog-footer {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
.el-row {
|
.el-row {
|
||||||
margin-bottom: 18px !important;
|
margin-bottom: 18px !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog title="招生计划专业调整" append-to-body width="70%" :close-on-click-modal="false" v-model="visible">
|
<el-dialog title="招生计划专业调整" append-to-body width="98%" :close-on-click-modal="false" v-model="visible">
|
||||||
<el-form :model="dataForm" ref="dataFormRef" class="mb4">
|
<el-form :model="dataForm" ref="dataFormRef" class="mb4">
|
||||||
<el-form-item label="招生计划名称" prop="groupName">
|
<el-form-item label="招生计划名称" prop="groupName">
|
||||||
<el-input v-model="dataForm.groupName" placeholder="招生计划名称" disabled style="width: 200px"></el-input>
|
<el-input v-model="dataForm.groupName" placeholder="招生计划名称" disabled style="width: 200px"></el-input>
|
||||||
|
|||||||
Reference in New Issue
Block a user