提交
This commit is contained in:
1 parent
f3869785ff
commit
4ada3c6f01
8 files changed
+724
-5
No files matched your search
@@ -49,6 +49,17 @@
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['classMsg:classMsg:add']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-dropdown v-hasPermi="['classMsg:classMsg:add']" split-button type="info" plain @click="handleImport">
|
||||
导入
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item icon="Download" @click="importTemplate">下载模板</el-dropdown-item>
|
||||
<el-dropdown-item icon="Upload" @click="handleImport">导入数据</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['classMsg:classMsg:edit']"
|
||||
>修改</el-button
|
||||
@@ -194,13 +205,13 @@
|
||||
<el-input v-model="form.grade" placeholder="请输入年级" />
|
||||
</el-form-item>
|
||||
<el-form-item label="入学年份" prop="enrollmentYear">
|
||||
<el-input v-model="form.enrollmentYear" placeholder="请输入入学年份" />
|
||||
<el-input v-model="form.enrollmentYear" placeholder="请输入入学年份" @input="syncGraduationYear" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学制(年)" prop="schoolSystem">
|
||||
<el-input v-model="form.schoolSystem" placeholder="请输入学制(年)" />
|
||||
<el-input v-model="form.schoolSystem" placeholder="请输入学制(年)" @input="syncGraduationYear" />
|
||||
</el-form-item>
|
||||
<el-form-item label="毕业年份" prop="graduationYear">
|
||||
<el-input v-model="form.graduationYear" placeholder="请输入毕业年份" />
|
||||
<el-input v-model="form.graduationYear" placeholder="入学年份+学制自动计算,可修改" />
|
||||
</el-form-item>
|
||||
<el-form-item label="辅导员ID" prop="counselorId" v-if="false">
|
||||
<el-input v-model="form.counselorId" placeholder="请输入辅导员ID" />
|
||||
@@ -386,6 +397,41 @@
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 班级信息导入对话框 -->
|
||||
<el-dialog v-model="upload.open" :title="upload.title" width="420px" append-to-body>
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
:limit="1"
|
||||
accept=".xlsx, .xls"
|
||||
:headers="upload.headers"
|
||||
:action="upload.url"
|
||||
:disabled="upload.isUploading"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
:on-error="handleFileError"
|
||||
:auto-upload="false"
|
||||
drag
|
||||
>
|
||||
<el-icon class="el-icon--upload"><i-ep-upload-filled /></el-icon>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<template #tip>
|
||||
<div class="el-upload__tip text-center">
|
||||
<div>请先下载模板,通过下拉框选择学院、专业及字典项后上传。</div>
|
||||
<span>仅允许导入 xls、xlsx 格式文件。</span>
|
||||
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">
|
||||
下载模板
|
||||
</el-link>
|
||||
</div>
|
||||
</template>
|
||||
</el-upload>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" :loading="upload.isUploading" @click="submitFileForm">确 定</el-button>
|
||||
<el-button @click="upload.open = false">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 设置辅导员对话框 -->
|
||||
<el-dialog title="设置辅导员" v-model="counselorDialog.visible" width="500px" append-to-body>
|
||||
<el-descriptions title="班级信息" :column="1" border>
|
||||
@@ -446,7 +492,9 @@ import {
|
||||
import { listColleges, collegeTree, listMajorsByCollegeId } from '@/api/xg/xsjcxx/classmsg/college';
|
||||
import { ClassMsgVO, ClassMsgQuery, ClassMsgForm, SysDeptVo } from '@/api/xg/xsjcxx/classmsg/types';
|
||||
import { ComponentInternalInstance, ref, reactive, toRefs, onMounted, getCurrentInstance, watch } from 'vue';
|
||||
import type { FormInstance as ElFormInstance } from 'element-plus';
|
||||
import type { FormInstance as ElFormInstance, UploadFile, UploadInstance } from 'element-plus';
|
||||
import { ElMessageBox } from 'element-plus';
|
||||
import { globalHeaders } from '@/utils/request';
|
||||
import { getActiveUserList } from '@/api/xg/sysUser'; // 添加用户API导入
|
||||
import { addClassTeacherCounselorRel, updateClassTeacherCounselorRel } from '@/api/xg/classTeacherCounselorRel'; // 添加班级辅导员关联API导入
|
||||
|
||||
@@ -526,6 +574,16 @@ const collegeTreeData = ref<SysDeptVo[]>([]); // 学院专业树形数据
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const classMsgFormRef = ref<ElFormInstance>();
|
||||
const uploadRef = ref<UploadInstance>();
|
||||
|
||||
/** 班级导入参数 */
|
||||
const upload = reactive({
|
||||
open: false,
|
||||
title: '',
|
||||
isUploading: false,
|
||||
headers: globalHeaders(),
|
||||
url: import.meta.env.VITE_APP_BASE_API + '/classMsg/classMsg/importData'
|
||||
});
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
@@ -705,6 +763,15 @@ watch(
|
||||
}
|
||||
);
|
||||
|
||||
/** 根据入学年份 + 学制自动计算毕业年份 */
|
||||
const syncGraduationYear = () => {
|
||||
const enrollmentYear = Number(form.value.enrollmentYear);
|
||||
const schoolSystem = Number(form.value.schoolSystem);
|
||||
if (Number.isFinite(enrollmentYear) && Number.isFinite(schoolSystem) && schoolSystem > 0) {
|
||||
form.value.graduationYear = enrollmentYear + schoolSystem;
|
||||
}
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
@@ -744,6 +811,46 @@ const handleAdd = () => {
|
||||
dialog.title = '添加班级信息';
|
||||
};
|
||||
|
||||
/** 导入按钮操作 */
|
||||
const handleImport = () => {
|
||||
upload.title = '班级信息导入';
|
||||
upload.open = true;
|
||||
};
|
||||
|
||||
/** 下载导入模板 */
|
||||
const importTemplate = () => {
|
||||
proxy?.download('classMsg/classMsg/importTemplate', {}, `班级信息导入模板_${new Date().getTime()}.xlsx`);
|
||||
};
|
||||
|
||||
/** 文件上传中处理 */
|
||||
const handleFileUploadProgress = () => {
|
||||
upload.isUploading = true;
|
||||
};
|
||||
|
||||
/** 文件上传成功处理 */
|
||||
const handleFileSuccess = (response: any, file: UploadFile) => {
|
||||
upload.open = false;
|
||||
upload.isUploading = false;
|
||||
uploadRef.value?.handleRemove(file);
|
||||
ElMessageBox.alert(
|
||||
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + (response.msg || '导入完成') + '</div>',
|
||||
'导入结果',
|
||||
{ dangerouslyUseHTMLString: true }
|
||||
);
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 文件上传失败处理 */
|
||||
const handleFileError = () => {
|
||||
upload.isUploading = false;
|
||||
proxy?.$modal.msgError('导入失败,请检查文件格式或网络连接');
|
||||
};
|
||||
|
||||
/** 提交上传文件 */
|
||||
const submitFileForm = () => {
|
||||
uploadRef.value?.submit();
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: ClassMsgVO) => {
|
||||
reset();
|
||||
|
||||
Reference in new issue
Block a user