556 lines
19 KiB
Vue
556 lines
19 KiB
Vue
<template>
|
|
<div class="app-container" v-loading.fullscreen.lock="fullscreenLoading">
|
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="110px">
|
|
<el-form-item label="学生姓名" prop="XSXM">
|
|
<el-input v-model="queryParams.XSXM" placeholder="请输入学生姓名" clearable @keyup.enter.native="handleQuery" />
|
|
</el-form-item>
|
|
<el-form-item label="考生号" prop="KSH">
|
|
<el-input v-model="queryParams.KSH" placeholder="请输入考生号" clearable @keyup.enter.native="handleQuery" />
|
|
</el-form-item>
|
|
<el-form-item label="身份证号" prop="SFZH">
|
|
<el-input v-model="queryParams.SFZH" placeholder="请输入身份证号" clearable @keyup.enter.native="handleQuery" />
|
|
</el-form-item>
|
|
<el-form-item label="手机号" prop="SJH">
|
|
<el-input v-model="queryParams.SJH" placeholder="请输入手机号" clearable @keyup.enter.native="handleQuery" />
|
|
</el-form-item>
|
|
<el-form-item label="校编学号" prop="XH">
|
|
<el-input v-model="queryParams.XH" placeholder="请输入校编学号" clearable @keyup.enter.native="handleQuery" />
|
|
</el-form-item>
|
|
<el-form-item label="注册状态" prop="regStatus">
|
|
<el-select v-model="queryParams.regStatus" placeholder="请选择注册状态" clearable>
|
|
<el-option v-for="dict in dict.type.srs_stu_reg_status" :key="dict.value" :label="dict.label"
|
|
:value="dict.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="是否申请助学贷款" prop="isLoan">
|
|
<el-select v-model="queryParams.isLoan" placeholder="是否申请助学贷款" clearable>
|
|
<el-option label="否" value="0"></el-option>
|
|
<el-option label="是" value="1"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="是否是定向生" prop="isDirection">
|
|
<el-select v-model="queryParams.isDirection" placeholder="是否是定向生" clearable>
|
|
<el-option label="否" value="0"></el-option>
|
|
<el-option label="是" value="1"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
<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="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
|
|
v-hasPermi="['system:reg:export']">导出</el-button>
|
|
</el-col>
|
|
<el-col :span="1.5">
|
|
<el-button type="success" plain icon="el-icon-check" size="mini" @click="checkAllDorm">
|
|
将所有已报到新生安排入住
|
|
</el-button>
|
|
</el-col>
|
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
</el-row>
|
|
<div>
|
|
<span v-for="(v, i) in regStatusCompare" :key="i">{{ v.label }}人数:{{ v.value }}
|
|
</span>
|
|
</div>
|
|
<el-table v-loading="loading" :data="regList" @selection-change="handleSelectionChange">
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
<el-table-column label="查看任务" align="center" class-name="small-padding fixed-width" fixed="left">
|
|
<template slot-scope="scope">
|
|
<el-button size="mini" type="text" icon="el-icon-view" @click="lookTask(scope.row)">查看</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="学号" align="center" prop="xh" width="80" />
|
|
<el-table-column label="学生姓名" align="center" prop="xsxm" width="100" />
|
|
<el-table-column label="注册状态" align="center" prop="regStatus" width="120">
|
|
<template slot-scope="scope">
|
|
<dict-tag :options="dict.type.srs_stu_reg_status" :value="scope.row.regStatus" />
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="分配的宿舍" align="center" prop="dorm" width="100" />
|
|
<el-table-column label="考生号" align="center" prop="ksh" width="130" />
|
|
<el-table-column label="班级代码" align="center" prop="bjdm" width="90" />
|
|
<el-table-column label="手机号" align="center" prop="SJH" width="120" />
|
|
<el-table-column label="性别" align="center" prop="xb" width="70"/>
|
|
<el-table-column label="政治面貌" align="center" prop="zzmm" width="80"/>
|
|
<el-table-column label="民族" align="center" prop="mz" width="70"/>
|
|
<el-table-column label="毕业学校" align="center" prop="lastSchool" width="150" />
|
|
<el-table-column label="毕业学校所在地" align="center" prop="lastSchoolAddr" width="150" />
|
|
<el-table-column label="家庭联系人姓名" align="center" prop="famName" width="120" />
|
|
<el-table-column label="与本人关系" align="center" prop="famRelation" width="100" />
|
|
<el-table-column label="家庭联系人电话" align="center" prop="famPhone" width="120" />
|
|
<el-table-column label="家庭现居地址" align="center" prop="famNowAddr" width="180" />
|
|
<el-table-column label="户籍所在地" align="center" prop="sfzAddr" width="180" />
|
|
<el-table-column label="助学贷款" align="center" prop="isLoan" width="80">
|
|
<template slot-scope="scope">
|
|
<div>{{scope.row.isLoan=='1'?'是':'否'}}</div>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="贷款编号" align="center" prop="loanNo" />
|
|
<el-table-column label="定向生" align="center" prop="isDirection" >
|
|
<template slot-scope="scope">
|
|
<div>{{scope.row.isDirection=='1'?'是':'否'}}</div>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="退役复学" align="center" prop="isRetired" width="180" />
|
|
<el-table-column label="建档立卡户" align="center" prop="isFiling" width="180" />
|
|
<el-table-column label="是否残疾" align="center" prop="isDisability" width="180" />
|
|
<el-table-column label="残疾说明" align="center" prop="disableDescript" width="180" />
|
|
<!-- <el-table-column label="操作" align="center" width="200" fixed="right">
|
|
<template slot-scope="scope">
|
|
<el-button size="mini" v-if="scope.row.regStatus == '3'" type="text" icon="el-icon-check"
|
|
@click="checkDorm(scope.row)">安排该生入住</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" />
|
|
|
|
|
|
<el-dialog title="查看学生任务" :visible.sync="taskV">
|
|
<el-table :data="task_list">
|
|
<el-table-column label="学生姓名" align="center" prop="stuName" width="120" />
|
|
<el-table-column label="任务序号" align="center" prop="rowRank" />
|
|
<el-table-column label="任务名称" align="center" prop="taskName" />
|
|
<el-table-column label="是否完成" align="center" prop="status">
|
|
<template slot-scope="scope">
|
|
<dict-tag :options="dict.type.srs_remain_status" :value="scope.row.status" />
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { listReg, getReg, delReg, addReg, updateReg, importInfo, countStatus, importDbf, checkDorm, checkAllDorm } from "@/api/stureg/reg";
|
|
import { listStuTodo } from "@/api/stureg/stu_todo";
|
|
import * as XLSX from 'xlsx';
|
|
import { workbook2blob, openDownloadDialog, dbfToJson, isEmpty, fullLoading } from "@/api/helpFunc";
|
|
import { getClassName } from "@/api/stuCQS/basedata/student";
|
|
|
|
export default {
|
|
name: "Reg",
|
|
dicts: ['srs_stu_reg_status', 'srs_remain_status'],
|
|
data() {
|
|
return {
|
|
fullscreenLoading: false,
|
|
fileList: [],
|
|
tableData: [],
|
|
currentPage: 1,
|
|
pagesize: 10,
|
|
total: 0,
|
|
importV: false,
|
|
regStatusCompare: [],
|
|
ClassNameList:[],
|
|
// 遮罩层
|
|
loading: true,
|
|
// 选中数组
|
|
ids: [],
|
|
// 非单个禁用
|
|
single: true,
|
|
// 非多个禁用
|
|
multiple: true,
|
|
// 显示搜索条件
|
|
showSearch: true,
|
|
// 总条数
|
|
total: 0,
|
|
// 新生报到学生注册信息表格数据
|
|
regList: [],
|
|
// 弹出层标题
|
|
title: "",
|
|
// 是否显示弹出层
|
|
open: false,
|
|
// 查询参数
|
|
queryParams: {
|
|
pageNum: 1,
|
|
pageSize: 10,
|
|
XSXM: null,
|
|
KSH: null,
|
|
SFZH: null,
|
|
SJH: null,
|
|
XB: null,
|
|
ZZMM: null,
|
|
MZ: null,
|
|
XH: null,
|
|
lastSchool: null,
|
|
lastSchoolAddr: null,
|
|
famName: null,
|
|
famRelation: null,
|
|
famPhone: null,
|
|
famNowAddr: null,
|
|
sfzAddr: null,
|
|
regStatus: null,
|
|
},
|
|
// 表单参数
|
|
form: {},
|
|
// 表单校验
|
|
rules: {
|
|
},
|
|
classVlue2:[],
|
|
taskV: false,
|
|
task_list: []
|
|
};
|
|
},
|
|
created() {
|
|
this.getList();
|
|
this.countRegStatus();
|
|
this.getClassNameList();
|
|
},
|
|
methods: {
|
|
checkAllDorm() {
|
|
this.$confirm('此操作将把所有已报到学生安排入住,如已入住将修改宿舍信息, 是否继续?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(async () => {
|
|
let loading = fullLoading(this);
|
|
let res = await checkAllDorm();
|
|
loading.close();
|
|
if (res.code == 200) {
|
|
this.$message.success(res.msg);
|
|
|
|
let data = [...res.data];
|
|
let fileName = "";
|
|
let fileHeader = [];
|
|
let fileHeaderZh = {};
|
|
let fileCol = [];
|
|
|
|
fileHeader = ['stuName', 'ksh', 'status', 'remark'];
|
|
fileHeaderZh = {
|
|
'stuName': "学生姓名",
|
|
"ksh": "考生号",
|
|
"status": "状态",
|
|
"remark": "备注"
|
|
};
|
|
fileCol = [
|
|
{ wch: 20 },
|
|
{ wch: 17 },
|
|
{ wch: 20 },
|
|
{ wch: 60 }
|
|
];
|
|
fileName = "入住情况";
|
|
|
|
const arrayWithHeader = [fileHeaderZh, ...data];
|
|
|
|
var sheet1 = XLSX.utils.json_to_sheet(arrayWithHeader,
|
|
{
|
|
header: fileHeader,
|
|
skipHeader: true
|
|
});
|
|
sheet1["!cols"] = fileCol;
|
|
|
|
// 创建一个新的空的workbook
|
|
var wb = XLSX.utils.book_new();
|
|
// 为每一个工作簿设置名称并添加到workbook(excel表)中
|
|
XLSX.utils.book_append_sheet(wb, sheet1, fileName);
|
|
const workbookBlob = workbook2blob(wb); // 辅助函数workbook2blob
|
|
// 下载文档并添加文件名称
|
|
openDownloadDialog(workbookBlob, fileName + ".xlsx"); // 辅助函数openDownloadDialog
|
|
|
|
|
|
|
|
}
|
|
}).catch(() => {
|
|
|
|
});
|
|
},
|
|
getClassNameList() {
|
|
getClassName().then(res => {
|
|
this.ClassNameList = res.data
|
|
})
|
|
},
|
|
checkDorm(row) {
|
|
this.$confirm('此操作将把学生安排入住,如已入住将修改宿舍信息, 是否继续?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(async () => {
|
|
let loading = fullLoading(this);
|
|
let res = await checkDorm(row.ksh);
|
|
loading.close();
|
|
if (res.code == 200) {
|
|
this.$message.success(res.msg);
|
|
}
|
|
}).catch(() => {
|
|
|
|
});
|
|
},
|
|
|
|
async lookTask(val) {
|
|
let loading = fullLoading(this);
|
|
let res = await listStuTodo(val.ksh);
|
|
loading.close();
|
|
if (res.code == 200) {
|
|
this.task_list = [...res.data];
|
|
console.log(this.task_list)
|
|
this.taskV = true;
|
|
}
|
|
},
|
|
|
|
async countRegStatus() {
|
|
let res = await countStatus();
|
|
let data = { ...res.data };
|
|
let arr = Array.from(Object.values(data), x => x);
|
|
let temp = [];
|
|
arr.map((v, i) => {
|
|
temp.push({
|
|
label: this.dict.type.srs_stu_reg_status[i].label,
|
|
value: v
|
|
});
|
|
});
|
|
this.regStatusCompare = [...temp];
|
|
},
|
|
|
|
// 下载申请信息模板
|
|
downloadMode() {
|
|
// 第一个sheet工作簿,如果需要创建多个,对应let多个sheetXdata即可
|
|
let sheet1data = [
|
|
{
|
|
XH: "20200318211",
|
|
XSXM: "张三",
|
|
KSH: "21451234567890",
|
|
SFZH: "32022222222222222",
|
|
SJH: "17877777777",
|
|
XB: "男",
|
|
ZZMM: "群众",
|
|
MZ: "汉族",
|
|
XY: "电信",
|
|
XYDM: "03",
|
|
ZY: "软件",
|
|
ZYDM: "18",
|
|
BJ: "23软件3",
|
|
BJDM: "01",
|
|
"操作提示": "第一条为样板数据,XH表示学号,XSXM表示学生姓名,KSH表示考生号,SFZH表示身份证号,SJH表示手机号,XB表示性别,ZZMM表示政治面貌,MZ表示民族,XY表示学院,XYDM表示学院代码,ZY表示,ZYDM表示专业代码,BJ表示班级,BJDM表示班级代码"
|
|
},
|
|
];
|
|
// let sheet2data = []; // 第二个sheet工作簿
|
|
// 转换sheet格式
|
|
var sheet1 = XLSX.utils.json_to_sheet(sheet1data);
|
|
// 创建一个新的空的workbook
|
|
var wb = XLSX.utils.book_new();
|
|
// 为每一个工作簿设置名称并添加到workbook(excel表)中
|
|
XLSX.utils.book_append_sheet(wb, sheet1, "学生信息导入模板");
|
|
const workbookBlob = workbook2blob(wb); // 辅助函数workbook2blob
|
|
// 下载文档并添加文件名称
|
|
openDownloadDialog(workbookBlob, "学生信息导入模板.xlsx"); // 辅助函数openDownloadDialog
|
|
},
|
|
|
|
//班级选择添加修改
|
|
handleChange2(value) {
|
|
//console.log(value);
|
|
this.form.classId = value[2];
|
|
this.form.deptId=value[0];
|
|
this.form.majorId=value[1];
|
|
},
|
|
|
|
//导入学生成绩
|
|
async doImport() {
|
|
this.fullscreenLoading = true;
|
|
this.loading = true;
|
|
// let temp = [...this.tableData];
|
|
// let jsonStr = JSON.stringify(temp);
|
|
console.log(this.fileList)
|
|
let res = await importInfo(jsonStr);
|
|
this.loading = false;
|
|
this.$message(res.msg);
|
|
this.getList();
|
|
this.fullscreenLoading = false;
|
|
this.importV = false;
|
|
this.fileList = [];
|
|
},
|
|
//点击导入弹窗按钮
|
|
importVClick() {
|
|
this.importV = true;
|
|
},
|
|
handleSizeChange(val) {
|
|
this.pagesize = val;
|
|
},
|
|
handleCurrentChange(val) {
|
|
this.currentPage = val;
|
|
},
|
|
async fileChoose(file, fileList) {
|
|
this.loading = true;
|
|
let [name, format] = file.name.split('.');
|
|
|
|
if ('.dbf'.includes(format)) {
|
|
let formData = new FormData();
|
|
formData.set("file", file.raw);
|
|
let res = await importDbf(formData);
|
|
//console.log(res);
|
|
|
|
} else {
|
|
let data = await this.handleData(file);
|
|
this.tableData = data;
|
|
this.total = data.length;
|
|
}
|
|
|
|
this.loading = false;
|
|
},
|
|
|
|
handleData(file) {
|
|
let reader = new FileReader();
|
|
reader.readAsArrayBuffer(file.raw);
|
|
return new Promise((resolve, reject) => {
|
|
reader.onload = (e) => {
|
|
let data = e.target.result;
|
|
let workbook = XLSX.read(data, { //手动转化
|
|
type: 'binary'
|
|
});
|
|
//获取json格式的Excel数据
|
|
let jsonData = XLSX.utils.sheet_to_json(workbook.Sheets[workbook
|
|
.SheetNames[0]], {
|
|
defval: 'null' //单元格为空时的默认值
|
|
});
|
|
resolve(jsonData);
|
|
};
|
|
})
|
|
},
|
|
handleExceed(files, fileList) {
|
|
this.$message.warning(
|
|
`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`
|
|
);
|
|
},
|
|
|
|
|
|
handleClose(done) {
|
|
this.$confirm('确认关闭?').then(_ => {
|
|
this.excelData = [];
|
|
this.fileList = [];
|
|
done();
|
|
}).catch(_ => { });
|
|
},
|
|
|
|
|
|
/** 查询新生报到学生注册信息列表 */
|
|
getList() {
|
|
this.loading = true;
|
|
listReg(this.queryParams).then(response => {
|
|
this.regList = response.rows;
|
|
this.total = response.total;
|
|
this.loading = false;
|
|
});
|
|
},
|
|
// 取消按钮
|
|
cancel() {
|
|
this.open = false;
|
|
this.reset();
|
|
},
|
|
// 表单重置
|
|
reset() {
|
|
this.form = {
|
|
id: null,
|
|
XSXM: null,
|
|
KSH: null,
|
|
SFZH: null,
|
|
SJH: null,
|
|
XB: null,
|
|
ZZMM: null,
|
|
MZ: null,
|
|
XH: null,
|
|
lastSchool: null,
|
|
lastSchoolAddr: null,
|
|
famName: null,
|
|
famRelation: null,
|
|
famPhone: null,
|
|
famNowAddr: null,
|
|
sfzAddr: null,
|
|
regStatus: null,
|
|
createTime: null,
|
|
createBy: null,
|
|
updateTime: null,
|
|
updateBy: null,
|
|
delFlag: null,
|
|
isLoan:null,
|
|
isDirection:null
|
|
};
|
|
this.resetForm("form");
|
|
},
|
|
/** 搜索按钮操作 */
|
|
handleQuery() {
|
|
this.queryParams.pageNum = 1;
|
|
this.getList();
|
|
},
|
|
/** 重置按钮操作 */
|
|
resetQuery() {
|
|
this.resetForm("queryForm");
|
|
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;
|
|
|
|
getReg(id).then(response => {
|
|
this.classVlue2 = [response.data.deptId, response.data.majorId, response.data.classId]
|
|
console.log(response);
|
|
this.form = response.data;
|
|
this.open = true;
|
|
this.title = "修改新生报到学生注册信息";
|
|
});
|
|
},
|
|
/** 提交按钮 */
|
|
submitForm() {
|
|
this.$refs["form"].validate(valid => {
|
|
if (valid) {
|
|
if (this.form.id != null) {
|
|
updateReg(this.form).then(response => {
|
|
this.$modal.msgSuccess("修改成功");
|
|
this.open = false;
|
|
this.getList();
|
|
});
|
|
} else {
|
|
addReg(this.form).then(response => {
|
|
this.$modal.msgSuccess("新增成功");
|
|
this.open = false;
|
|
this.getList();
|
|
});
|
|
}
|
|
}
|
|
});
|
|
},
|
|
/** 删除按钮操作 */
|
|
handleDelete(row) {
|
|
let ids = [row.id];
|
|
if (isEmpty(row.id)) {
|
|
ids = [...this.ids];
|
|
}
|
|
|
|
this.$modal.confirm('是否确认删除新生报到学生注册信息编号为"' + ids + '"的数据项?').then(function () {
|
|
return delReg(ids);
|
|
}).then(() => {
|
|
this.getList();
|
|
this.$modal.msgSuccess("删除成功");
|
|
}).catch(() => { });
|
|
},
|
|
/** 导出按钮操作 */
|
|
handleExport() {
|
|
this.download('system/reg/export', {
|
|
...this.queryParams
|
|
}, `reg_${new Date().getTime()}.xlsx`)
|
|
}
|
|
}
|
|
};
|
|
</script>
|