school_website/ruoyi-ui/src/views/hit/registrationStudentInfo/index.vue

476 lines
17 KiB
Vue
Raw Normal View History

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="110px">
<el-form-item label="学生姓名" prop="stuName">
<el-input
v-model="queryParams.stuName"
placeholder="请输入学生姓名"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="学生专业" prop="stuMajor">
<el-input
v-model="queryParams.stuMajor"
placeholder="请输入学生专业"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="学生手机号" prop="stuNumber">
<el-input
v-model="queryParams.stuNumber"
placeholder="请输入学生手机号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="学校及院系名称" prop="schoolName">
<el-input
v-model="queryParams.schoolName"
placeholder="请输入学校及院系名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
2024-08-03 13:51:47 +08:00
<!-- <el-form-item label="大赛类型" prop="">-->
<!-- <el-select-->
<!-- v-model="queryParams.competitionType"-->
<!-- placeholder="大赛类型"-->
<!-- clearable-->
<!-- style="width: 125px">-->
<!-- <el-option-->
<!-- v-for="dict in dict.type.competition_type"-->
<!-- :key="dict.value"-->
<!-- :label="dict.label"-->
<!-- :value="dict.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="所属赛区" prop="division">
<el-input
v-model="queryParams.division"
placeholder="请输入所属赛区"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="团队名称" prop="teamName">
<el-input
v-model="queryParams.teamName"
placeholder="请输入团队名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
2024-07-27 18:02:04 +08:00
<el-form-item label="教师名称" prop="teachName">
<el-input
v-model="queryParams.teachName"
placeholder="请输入团队名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
2024-08-03 13:51:47 +08:00
<!-- <el-form-item label="大赛名称" prop="competitionName">-->
<!-- <el-input-->
<!-- v-model="queryParams.competitionName"-->
<!-- placeholder="请输入团队名称"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
2024-08-02 16:40:13 +08:00
<el-form-item label="大赛年份" prop="competitionYear">
<el-select v-model="queryParams.createTime" placeholder="请选择">
<el-option
v-for="item in yearList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
2024-08-03 13:51:47 +08:00
<el-form-item label="学生性别" prop="stuGender">
<el-select
v-model="queryParams.stuGender"
placeholder="学生性别"
clearable
style="width: 125px">
<el-option
v-for="dict in dict.type.sys_user_sex"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
2024-07-30 09:25:39 +08:00
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置刷新</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
2024-07-29 16:42:21 +08:00
v-hasPermi="['hit:hitRegistrationStudentInfo:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
2024-07-29 16:42:21 +08:00
v-hasPermi="['hit:hitRegistrationStudentInfo:export']"
>导出</el-button>
</el-col>
2024-08-02 16:40:13 +08:00
<el-col :span="1.5">
<el-switch
v-model="registerStatus"
@change="updateRegisterStatus"
active-value="1"
inactive-value="0"
active-text="开启报名"
inactive-text="关闭报名">
</el-switch>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
2024-07-27 18:02:04 +08:00
<el-table @expand-change="getTeachInfo" style="width: 100%; table-layout: auto" v-loading="loading" :data="HitRegistrationStudentInfoList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
2024-07-27 18:02:04 +08:00
<el-table-column type="expand">
<template slot-scope="props">
2024-08-03 13:51:47 +08:00
<el-descriptions title="学生信息" style="margin-left: 10%">
<!-- <el-descriptions-item label="比赛名称">{{props.row.competitionName}}</el-descriptions-item>-->
2024-07-27 18:02:04 +08:00
<el-descriptions-item label="学生姓名">{{props.row.stuName}}</el-descriptions-item>
<el-descriptions-item label="学生性别">
<dict-tag :options="dict.type.sys_user_sex" :value="props.row.stuGender"/>
</el-descriptions-item>
<el-descriptions-item label="学生专业">{{props.row.stuMajor}}</el-descriptions-item>
<el-descriptions-item label="学生手机号">{{props.row.stuNumber}}</el-descriptions-item>
<el-descriptions-item label="学校及院系名称">{{props.row.schoolName}}</el-descriptions-item>
<el-descriptions-item label="所属赛区">{{props.row.division}}</el-descriptions-item>
<el-descriptions-item label="团队名称">{{props.row.teamName}}</el-descriptions-item>
</el-descriptions>
2024-08-03 13:51:47 +08:00
<el-descriptions :title="'领队教师' + (index + 1)" v-for="(item, index) in leaderTeachList" style="margin-left: 10%" v-show="leaderTeachList !== null && leaderTeachList.length !== 0">
2024-07-27 18:02:04 +08:00
<el-descriptions-item label="教师姓名">{{item.teacherName}}</el-descriptions-item>
<el-descriptions-item label="教师职务">{{item.teacherJob}}</el-descriptions-item>
<el-descriptions-item label="教师手机号">{{item.teacherNumber}}</el-descriptions-item>
<el-descriptions-item label="教师邮箱">{{item.teacherEmail}}</el-descriptions-item>
<el-descriptions-item label="教师所在系及专业">{{item.teacherSchool}}</el-descriptions-item>
</el-descriptions>
2024-08-03 13:51:47 +08:00
<el-descriptions :title="'指导教师' + (index + 1)" v-for="(item, index) in guideTeachList" style="margin-left: 10%" v-show="guideTeachList !== null && guideTeachList.length !== 0">
2024-07-27 18:02:04 +08:00
<el-descriptions-item label="教师姓名">{{item.teacherName}}</el-descriptions-item>
<el-descriptions-item label="教师职务">{{item.teacherJob}}</el-descriptions-item>
<el-descriptions-item label="教师手机号">{{item.teacherNumber}}</el-descriptions-item>
<el-descriptions-item label="教师邮箱">{{item.teacherEmail}}</el-descriptions-item>
<el-descriptions-item label="教师所在系及专业">{{item.teacherSchool}}</el-descriptions-item>
</el-descriptions>
2024-08-03 20:30:55 +08:00
<el-descriptions title="盲样邮寄地址" style="margin-left: 10%">
<el-descriptions-item label="收件人">{{props.row.sampleConcat}}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{props.row.sampleNumber}}</el-descriptions-item>
<el-descriptions-item label="邮寄地址">{{props.row.sampleAddress}}</el-descriptions-item>
</el-descriptions>
2024-07-27 18:02:04 +08:00
</template>
</el-table-column>
2024-08-03 13:51:47 +08:00
<!-- <el-table-column label="比赛名称" align="center" prop="competitionName" />-->
<el-table-column label="学生姓名" align="center" prop="stuName" />
2024-07-27 18:02:04 +08:00
<el-table-column label="学生性别" align="center" prop="stuGender" width="100px">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_user_sex" :value="scope.row.stuGender"/>
</template>
</el-table-column>
<el-table-column label="学生专业" align="center" prop="stuMajor" />
<el-table-column label="学生手机号" align="center" prop="stuNumber" />
2024-07-27 18:02:04 +08:00
<el-table-column label="学校及院系名称" align="center" prop="schoolName" width="120px"/>
<el-table-column label="所属赛区" align="center" prop="division" />
<el-table-column label="团队名称" align="center" prop="teamName" />
2024-07-27 18:02:04 +08:00
<el-table-column label="领队教师" align="center" prop="leaderNames" />
<el-table-column label="指导教师" align="center" prop="guideNames" width="120px" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
2024-07-29 16:42:21 +08:00
v-hasPermi="['hit:hitRegistrationStudentInfo:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
2024-07-27 18:02:04 +08:00
import {
listHitRegistrationStudentInfo,
getHitRegistrationStudentInfo,
delHitRegistrationStudentInfo,
addHitRegistrationStudentInfo,
updateHitRegistrationStudentInfo,
getTeachInfoByIds
} from "@/api/hit/registrationStudentInfo";
2024-08-02 16:40:13 +08:00
import {selectBaseInfo, editStatus} from '@/api/cms/baseInfo'
export default {
name: "HitRegistrationStudentInfo",
dicts: ['sys_user_sex', 'competition_type'],
data() {
return {
2024-08-02 16:40:13 +08:00
yearList: [],
registerStatus:"",
2024-07-27 18:02:04 +08:00
leaderTeachList:[],
guideTeachList:[],
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 报名信息表格数据
HitRegistrationStudentInfoList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
competitionName: null,
stuName: null,
stuGender: null,
stuMajor: null,
stuNumber: null,
schoolName: null,
division: null,
teamName: null,
leaderIds: null,
guideIds: null,
teachName:null,
2024-08-02 16:40:13 +08:00
createTime: null
},
// 表单参数
form: {},
// 表单校验
rules: {
competitionId: [
{ required: true, message: "大赛ID不能为空", trigger: "blur" }
],
stuName: [
{ required: true, message: "学生姓名不能为空", trigger: "blur" }
],
stuGender: [
{ required: true, message: "学生性别不能为空", trigger: "blur" }
],
stuMajor: [
{ required: true, message: "学生专业不能为空", trigger: "blur" }
],
stuNumber: [
{ required: true, message: "学生手机号不能为空", trigger: "blur" }
],
schoolName: [
{ required: true, message: "学校及院系名称不能为空", trigger: "blur" }
],
division: [
{ required: true, message: "所属赛区不能为空", trigger: "blur" }
],
delFlag: [
{ required: true, message: "逻辑删除0未删除1真删除不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
2024-08-02 16:40:13 +08:00
selectBaseInfo().then(res => {
this.registerStatus = res.data.registerStatus
})
this.yearList = this.years();
},
methods: {
/** 查询报名信息列表 */
getList() {
this.loading = true;
listHitRegistrationStudentInfo(this.queryParams).then(response => {
this.HitRegistrationStudentInfoList = response.rows;
2024-07-27 18:02:04 +08:00
this.HitRegistrationStudentInfoList.forEach(item => {
2024-07-29 16:42:21 +08:00
if (item.leaderNames !== null) item.leaderNames = item.leaderNames.join(",");
if (item.guideNames !== null) item.guideNames = item.guideNames.join(",");
2024-07-27 18:02:04 +08:00
})
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
competitionId: null,
stuName: null,
stuGender: null,
stuMajor: null,
stuNumber: null,
schoolName: null,
division: null,
teamName: null,
leaderIds: null,
guideIds: null,
remark: null,
delFlag: null,
createBy: null,
updateTime: null,
2024-08-02 16:40:13 +08:00
updateBy: null,
createTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
2024-08-02 16:40:13 +08:00
this.queryParams.createTime = null
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加报名信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getHitRegistrationStudentInfo(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改报名信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateHitRegistrationStudentInfo(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addHitRegistrationStudentInfo(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除报名信息编号为"' + ids + '"的数据项?').then(function() {
return delHitRegistrationStudentInfo(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
2024-07-27 18:02:04 +08:00
this.download('hit/hitRegistrationStudentInfo/export', {
...this.queryParams
}, `HitRegistrationStudentInfo_${new Date().getTime()}.xlsx`)
2024-07-27 18:02:04 +08:00
},
getTeachInfo(row){
if (row.leaderIds !== null && row.leaderIds.length !== 0){
getTeachInfoByIds(row.leaderIds).then(res => {
this.leaderTeachList = res.data
})
}
if (row.guideIds !== null && row.guideIds.length !== 0){
getTeachInfoByIds(row.guideIds).then(res => {
this.guideTeachList = res.data
})
}
},
2024-08-02 16:40:13 +08:00
updateRegisterStatus(){
editStatus(this.registerStatus).then(res => {
if (res.code === 200 ){
this.$modal.msgSuccess(this.registerStatus === "1" ? "报名已开启" : "报名已关闭")
}
})
},
years() {
const currentYear = new Date().getFullYear();
const startYear = currentYear - 40; // 假设从当前年份往前 20 年
const endYear = currentYear;
const years = [];
for (let year = startYear; year <= endYear; year++) {
years.push({
label: year,
value: year + "-01-01",
});
}
return years.sort((a, b) => b.label - a.label);
},
}
};
</script>
2024-07-27 18:02:04 +08:00
<style scoped lang="scss">
.demo-table-expand {
font-size: 0;
}
.demo-table-expand label {
width: 90px;
color: #99a9bf;
}
.demo-table-expand .el-form-item {
margin-right: 0;
margin-bottom: 0;
width: 50%;
}
</style>