后台新增班级校区重新改版
This commit is contained in:
@@ -1,5 +1,20 @@
|
|||||||
import request from '@/utils/request';
|
import request from '@/utils/request';
|
||||||
|
|
||||||
|
// 查询学段等级
|
||||||
|
export function getPeriod () {
|
||||||
|
return request({
|
||||||
|
url: '/manager/level/period',
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 查询年级等级
|
||||||
|
export function getPeriodType (periodType) {
|
||||||
|
return request({
|
||||||
|
url: `/manager/level/grade/${periodType}`,
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 获取组织结构
|
// 获取组织结构
|
||||||
export function getClass () {
|
export function getClass () {
|
||||||
return request({
|
return request({
|
||||||
@@ -15,8 +30,34 @@ export function getClassStudent (classId, params) {
|
|||||||
params
|
params
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 校区学段年级班级新增
|
// 新增校区
|
||||||
export function postManager (data) {
|
export function postManager (data) {
|
||||||
|
return request({
|
||||||
|
url: `/manager/class/campus`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增学段
|
||||||
|
export function postPeriod (data) {
|
||||||
|
return request({
|
||||||
|
url: `/manager/class/period`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 新增年级
|
||||||
|
export function postGrade (data) {
|
||||||
|
return request({
|
||||||
|
url: `/manager/class/grade`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增班级
|
||||||
|
export function postClass (data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/manager/class`,
|
url: `/manager/class`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
|
|||||||
@@ -76,17 +76,17 @@
|
|||||||
width="30%">
|
width="30%">
|
||||||
<el-form ref="schoolForm" :model="schoolForm" label-width="80px">
|
<el-form ref="schoolForm" :model="schoolForm" label-width="80px">
|
||||||
<el-form-item v-if="addNum < 4" label="校区">
|
<el-form-item v-if="addNum < 4" label="校区">
|
||||||
<el-select @change="onChangeSchool" v-model="schoolForm.school" placeholder="请选择校区">
|
<el-select @change="onChangeSchool" v-model="schoolForm.campusId" placeholder="请选择校区">
|
||||||
<el-option v-for="item in organizeArr" :label="item.className" :value="item.classId"></el-option>
|
<el-option v-for="item in organizeArr" :label="item.className" :value="item.classId"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="addNum < 3 && schoolForm.school" label="学段">
|
<el-form-item v-if="addNum < 3 && schoolForm.campusId" label="学段">
|
||||||
<el-select @change="onChangePhase" v-model="schoolForm.phase" placeholder="请选择学段">
|
<el-select @change="onChangePhase" v-model="schoolForm.periodId" placeholder="请选择学段">
|
||||||
<el-option v-for="item in phaseArr" :label="item.className" :value="item.classId"></el-option>
|
<el-option v-for="item in phaseArr" :label="item.className" :value="item.classId"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="addNum < 2 && schoolForm.phase" label="年级">
|
<el-form-item v-if="addNum < 2 && schoolForm.periodId" label="年级">
|
||||||
<el-select @change="onChangeGrade" v-model="schoolForm.grade" placeholder="请选择年级">
|
<el-select @change="onChangeGrade" v-model="schoolForm.gradeId" placeholder="请选择年级">
|
||||||
<el-option v-for="item in gradeArr" :label="item.className" :value="item.classId"></el-option>
|
<el-option v-for="item in gradeArr" :label="item.className" :value="item.classId"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -96,18 +96,43 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item :label="labelEnum[addNum]+'名称'">
|
<el-form-item v-if="addNum == 4" :label="labelEnum[addNum]+'名称'">
|
||||||
<el-input v-model="schoolForm.name"></el-input>
|
<el-input v-model="schoolForm.name"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="排序">
|
<el-form-item v-if="addNum == 4" label="排序">
|
||||||
<el-input v-model="schoolForm.sort" placeholder="数值越小越靠前(选填)"></el-input>
|
<el-input v-model="schoolForm.sort" placeholder="数值越小越靠前(选填)"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item v-if="addNum == 3" :label="labelEnum[addNum]+'名称'">
|
||||||
|
<el-select v-model="schoolForm.levelId" placeholder="请选择学段等级">
|
||||||
|
<el-option v-for="item in periodArr" :label="item.name" :value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="addNum == 2" :label="labelEnum[addNum]+'名称'">
|
||||||
|
<el-select v-model="schoolForm.levelId" placeholder="请选择年级">
|
||||||
|
<el-option v-for="item in periodTypeArr" :label="item.name" :value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="addNum == 2" label="开始时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="schoolForm.startYear"
|
||||||
|
type="year"
|
||||||
|
value-format="yyyy"
|
||||||
|
placeholder="请选择开始时间">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="addNum == 1" label="班级">
|
||||||
|
<el-input v-model="schoolForm.classLevel" placeholder="请输入班级" type="number">
|
||||||
|
<template slot="append">班</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="isAddDialog = false">取 消</el-button>
|
<el-button @click="isAddDialog = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="onClickAffirm">确 定</el-button>
|
<el-button type="primary" @click="onClickAffirm">确 定</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog
|
||||||
title="修改名称"
|
title="修改名称"
|
||||||
:visible.sync="isUpdateDialog"
|
:visible.sync="isUpdateDialog"
|
||||||
@@ -116,7 +141,7 @@
|
|||||||
<el-form-item :label="'名称'">
|
<el-form-item :label="'名称'">
|
||||||
<el-input v-model="updateForm.name"></el-input>
|
<el-input v-model="updateForm.name"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="'排序'">
|
<el-form-item v-if="nodeData.superId == 0" :label="'排序'">
|
||||||
<el-input v-model="updateForm.sort" placeholder="数值越小越靠前"></el-input>
|
<el-input v-model="updateForm.sort" placeholder="数值越小越靠前"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
@@ -161,14 +186,13 @@
|
|||||||
<el-button type="primary" @click="onClickAffirmRule">确 定</el-button>
|
<el-button type="primary" @click="onClickAffirmRule">确 定</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<input @change="onClickFile($event)" type="file">
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import columns from "./columns";
|
import columns from "./columns";
|
||||||
import { getClass, getClassStudent, postManager, putManager, deleteManager, getGuardian } from "./api";
|
import { getClass, getClassStudent, postManager, putManager, deleteManager, getGuardian , getPeriod, getPeriodType, postPeriod, postGrade, postClass } from "./api";
|
||||||
import { getRuleGroup } from "../../regulation/api";
|
import { getRuleGroup } from "../../regulation/api";
|
||||||
import { Loading } from 'element-ui';
|
import { Loading } from 'element-ui';
|
||||||
import { formatDate } from "@/com/index";
|
import { formatDate } from "@/com/index";
|
||||||
@@ -228,13 +252,18 @@ export default {
|
|||||||
activeName: '', // 展开的规则组
|
activeName: '', // 展开的规则组
|
||||||
radio: '', // 校区选中的规则组
|
radio: '', // 校区选中的规则组
|
||||||
ruleGroupArr: [], // 规则组数据
|
ruleGroupArr: [], // 规则组数据
|
||||||
loadingText: '打包中'
|
periodArr: [], // 查询学段数据
|
||||||
|
periodTypeArr: [], // 查询年级等级数据
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
CommonHead,
|
CommonHead,
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
|
getPeriod().then(res => {
|
||||||
|
this.periodArr = res
|
||||||
|
})
|
||||||
|
|
||||||
this.ruleList()
|
this.ruleList()
|
||||||
this.classList()
|
this.classList()
|
||||||
const defaultCheckClass= localStorage.getItem('defaultCheckClass') // 设置之前选中了班级
|
const defaultCheckClass= localStorage.getItem('defaultCheckClass') // 设置之前选中了班级
|
||||||
@@ -249,32 +278,11 @@ export default {
|
|||||||
// let worker = new Worker(workerUrl);
|
// let worker = new Worker(workerUrl);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
// 查询年级等级
|
||||||
async onClickFile(e) {
|
periodTypeList(periodType){
|
||||||
loading = Loading.service({
|
getPeriodType(periodType).then(res => {
|
||||||
lock: true,
|
this.periodTypeArr = res
|
||||||
text: '打包上传中...',
|
|
||||||
spinner: 'el-icon-loading',
|
|
||||||
background: 'rgba(0, 0, 0, 0.7)'
|
|
||||||
});
|
|
||||||
const file = e.target.files[0]
|
|
||||||
|
|
||||||
cutUpload(file, true, (progressEvent) =>{
|
|
||||||
let progressNum = (progressEvent.loaded / progressEvent.total) * 100
|
|
||||||
loading.text = '上传进度' + progressNum.toFixed(2) + '%'
|
|
||||||
if(progressNum == 100){
|
|
||||||
console.log('完成')
|
|
||||||
loading.text = '上传完成!'
|
|
||||||
console.log(loading.text)
|
|
||||||
setTimeout(() => {
|
|
||||||
loading.close();
|
|
||||||
}, 1000);
|
|
||||||
}
|
|
||||||
console.log(progressEvent.loaded + '/' + progressEvent.total);
|
|
||||||
}).then(res =>{
|
|
||||||
console.log(res)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
},
|
},
|
||||||
// 点击确定修改小区规则
|
// 点击确定修改小区规则
|
||||||
onClickAffirmRule() {
|
onClickAffirmRule() {
|
||||||
@@ -345,6 +353,7 @@ export default {
|
|||||||
// 点击修改按钮
|
// 点击修改按钮
|
||||||
onClickUpdate() {
|
onClickUpdate() {
|
||||||
this.updateForm = {}
|
this.updateForm = {}
|
||||||
|
console.log(this.nodeData)
|
||||||
if(this.nodeData){ // 说明点击过节点
|
if(this.nodeData){ // 说明点击过节点
|
||||||
this.isUpdateDialog = true
|
this.isUpdateDialog = true
|
||||||
this.updateForm = {
|
this.updateForm = {
|
||||||
@@ -370,45 +379,142 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
// 点击确认新增
|
// 点击确认新增
|
||||||
|
// onClickAffirm() {
|
||||||
|
// // const { school, phase, grade, name } = this.schoolForm;
|
||||||
|
// const errorMessages = {
|
||||||
|
// school: '请选择校区',
|
||||||
|
// phase: '请选择学段',
|
||||||
|
// grade: '请选择年级',
|
||||||
|
// name: '请输入'+ this.labelEnum[this.addNum] + '名称',
|
||||||
|
// };
|
||||||
|
// const requiredFields = {
|
||||||
|
// 1: ['school', 'phase', 'grade', 'name'],
|
||||||
|
// 2: ['school', 'phase', 'name', ],
|
||||||
|
// 3: ['school', 'name', ],
|
||||||
|
// 4: ['name'],
|
||||||
|
// }
|
||||||
|
// // 过滤必填未填写的字段
|
||||||
|
// const missingFields = requiredFields[this.addNum].filter(field => !this.schoolForm[field]);
|
||||||
|
// if(missingFields.length === 0){ // 判断必填项是否填写
|
||||||
|
// let obj = { name: this.schoolForm.name, superId: 0, sort: this.schoolForm.sort }
|
||||||
|
// if(this.addNum !== 4 ){
|
||||||
|
// let len = requiredFields[this.addNum].length
|
||||||
|
// obj.superId = this.schoolForm[requiredFields[this.addNum][len-2]]
|
||||||
|
// }
|
||||||
|
// // 提交
|
||||||
|
// postManager(obj).then(res =>{
|
||||||
|
// this.classList();
|
||||||
|
// this.$message.success('新增成功');
|
||||||
|
// this.isAddDialog = false
|
||||||
|
// });
|
||||||
|
// }else { // 未填写信息提示
|
||||||
|
// this.$message.error(errorMessages[missingFields[0]]);
|
||||||
|
// }
|
||||||
|
// },
|
||||||
onClickAffirm() {
|
onClickAffirm() {
|
||||||
// const { school, phase, grade, name } = this.schoolForm;
|
console.log(this.schoolForm)
|
||||||
const errorMessages = {
|
if(this.addNum === 4){
|
||||||
school: '请选择校区',
|
if(!this.schoolForm.name){
|
||||||
phase: '请选择学段',
|
this.$message.error('请输入校区名称')
|
||||||
grade: '请选择年级',
|
return
|
||||||
name: '请输入'+ this.labelEnum[this.addNum] + '名称',
|
|
||||||
};
|
|
||||||
const requiredFields = {
|
|
||||||
1: ['school', 'phase', 'grade', 'name'],
|
|
||||||
2: ['school', 'phase', 'name', ],
|
|
||||||
3: ['school', 'name', ],
|
|
||||||
4: ['name'],
|
|
||||||
}
|
}
|
||||||
// 过滤必填未填写的字段
|
postManager(this.schoolForm).then(res =>{
|
||||||
const missingFields = requiredFields[this.addNum].filter(field => !this.schoolForm[field]);
|
|
||||||
if(missingFields.length === 0){ // 判断必填项是否填写
|
|
||||||
let obj = { name: this.schoolForm.name, superId: 0, sort: this.schoolForm.sort }
|
|
||||||
if(this.addNum !== 4 ){
|
|
||||||
let len = requiredFields[this.addNum].length
|
|
||||||
obj.superId = this.schoolForm[requiredFields[this.addNum][len-2]]
|
|
||||||
}
|
|
||||||
// 提交
|
|
||||||
postManager(obj).then(res =>{
|
|
||||||
this.classList();
|
this.classList();
|
||||||
this.$message.success('新增成功');
|
this.$message.success('新增成功');
|
||||||
this.isAddDialog = false
|
this.isAddDialog = false
|
||||||
});
|
});
|
||||||
}else { // 未填写信息提示
|
}
|
||||||
this.$message.error(errorMessages[missingFields[0]]);
|
if(this.addNum === 3){ // 新增学段
|
||||||
|
if(!this.schoolForm.campusId){
|
||||||
|
this.$message.error('请选择校区')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.schoolForm.levelId){
|
||||||
|
this.$message.error('请选择学段')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
postPeriod(this.schoolForm ).then(res =>{
|
||||||
|
this.classList();
|
||||||
|
this.isAddDialog = false
|
||||||
|
this.$message.success('新增成功');
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if(this.addNum === 2){ // 新增年级
|
||||||
|
if(!this.schoolForm.campusId){
|
||||||
|
this.$message.error('请选择校区')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.schoolForm.periodId){
|
||||||
|
this.$message.error('请选择学段')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.schoolForm.levelId){
|
||||||
|
this.$message.error('请选择年级')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.schoolForm.startYear){
|
||||||
|
this.$message.error('请选择开始时间')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
postGrade(this.schoolForm).then(res =>{
|
||||||
|
this.classList();
|
||||||
|
this.isAddDialog = false
|
||||||
|
this.$message.success('新增成功');
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if(this.addNum === 1){ // 新增班级
|
||||||
|
if(!this.schoolForm.campusId){
|
||||||
|
this.$message.error('请选择校区')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.schoolForm.periodId){
|
||||||
|
this.$message.error('请选择学段')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.schoolForm.gradeId){
|
||||||
|
this.$message.error('请选择年级')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.schoolForm.classLevel){
|
||||||
|
this.$message.error('请输入班级')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let obj = { ...this.schoolForm }
|
||||||
|
|
||||||
|
console.log('this.classArr.find(it => { return it.classId == this.schoolForm.gradeId }).feature')
|
||||||
|
console.log(this.gradeArr)
|
||||||
|
console.log(this.schoolForm.gradeId)
|
||||||
|
const feature = JSON.parse(this.gradeArr.find(it => { return it.classId == this.schoolForm.gradeId }).feature)
|
||||||
|
const levelId = this.periodTypeArr.find(item => { return item.level == feature.grade_level }).id
|
||||||
|
console.log('levelId')
|
||||||
|
console.log(levelId)
|
||||||
|
obj.levelId = levelId
|
||||||
|
postClass(obj).then(res =>{
|
||||||
|
this.classList();
|
||||||
|
this.isAddDialog = false
|
||||||
|
this.$message.success('新增成功');
|
||||||
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 选择校区
|
// 选择校区
|
||||||
onChangeSchool(value) {
|
onChangeSchool(value) {
|
||||||
|
delete this.schoolForm.gradeId // 清空年级
|
||||||
|
delete this.schoolForm.periodId // 清空学段
|
||||||
this.phaseArr = this.organizeArr.find( item => item.classId == value).childrenList
|
this.phaseArr = this.organizeArr.find( item => item.classId == value).childrenList
|
||||||
},
|
},
|
||||||
// 选择分段
|
// 选择分段
|
||||||
onChangePhase(value) {
|
onChangePhase(value) {
|
||||||
|
delete this.schoolForm.gradeId
|
||||||
|
const periodName = this.phaseArr.find( item => item.classId == value).className // 学段名
|
||||||
|
const feature = JSON.parse(this.phaseArr.find( item => item.classId == value).feature) // 学段名
|
||||||
|
this.periodTypeList(feature.period_type)
|
||||||
this.gradeArr = this.phaseArr.find( item => item.classId == value).childrenList
|
this.gradeArr = this.phaseArr.find( item => item.classId == value).childrenList
|
||||||
|
|
||||||
|
// console.log(feature)
|
||||||
|
// console.log(this.gradeArr)
|
||||||
|
// console.log(periodName)
|
||||||
|
// console.log(this.periodArr.find( item => item.name == periodName))
|
||||||
|
// this.periodTypeList(this.periodArr.find( item => item.name == periodName).type)
|
||||||
},
|
},
|
||||||
// 选择年级
|
// 选择年级
|
||||||
onChangeGrade(value) {
|
onChangeGrade(value) {
|
||||||
|
|||||||
@@ -0,0 +1,521 @@
|
|||||||
|
<template>
|
||||||
|
<div class="box">
|
||||||
|
<div class="side-nav">
|
||||||
|
<h3>班级管理</h3>
|
||||||
|
<div>
|
||||||
|
<el-tree :data="organizeArr" node-key="classId"
|
||||||
|
ref="areaTrees"
|
||||||
|
:default-expanded-keys="defaultCheckedKeys"
|
||||||
|
:default-checked-keys="defaultCheckedKeys"
|
||||||
|
accordion
|
||||||
|
:highlight-current="true"
|
||||||
|
:props="defaultProps" @node-click="handleNodeClick"
|
||||||
|
></el-tree>
|
||||||
|
<div class="add-box">
|
||||||
|
<div class="add-list">
|
||||||
|
<el-button @click="isAddDialog = true; addNum = 1; resetSchoolForm()" size="medium" class="el-icon-plus">新增班级</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="add-list">
|
||||||
|
<el-button @click="isAddDialog = true; addNum = 2;resetSchoolForm()" size="medium" class="el-icon-plus">新增年级</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="add-list">
|
||||||
|
<el-button @click="isAddDialog = true; addNum = 3;resetSchoolForm()" size="medium" class="el-icon-plus">新增学段</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="add-list">
|
||||||
|
<el-button @click="isAddDialog = true; addNum = 4;resetSchoolForm()" size="medium" class="el-icon-plus">新增校区</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-adapt-container">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<!-- <h4>{{ classData.className}}</h4> -->
|
||||||
|
<div style="display: flex;">
|
||||||
|
<div style="margin-right: 10px; font-size: 16px; line-height: 27px; font-weight: 700;">{{ nodeData.className }}</div>
|
||||||
|
<!-- <div v-else style="margin-right: 10px; font-size: 16px; line-height: 27px;font-weight: 700;">{{ classData.className}}</div> -->
|
||||||
|
<el-button @click="onClickUpdate" v-if="nodeData.className" size="mini" type="warning" class="el-icon-edit">修改名称</el-button>
|
||||||
|
<el-button @click="onClickRemove" v-if="nodeData.className" size="mini" type="danger" class="el-icon-delete">删除</el-button>
|
||||||
|
<el-button @click="onClickUpdateRule" v-if="nodeData.className && nodeData.superId === '0'" size="mini" type="primary" class="el-icon-setting">设置规则</el-button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<el-card shadow="hover" style=" margin-top: 20px;" >
|
||||||
|
<div style="margin-bottom: 10px;">
|
||||||
|
<el-button type="primary">添加学生</el-button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<el-table
|
||||||
|
:data="studentArr"
|
||||||
|
:row-style="{ height: '50px' }"
|
||||||
|
border
|
||||||
|
>
|
||||||
|
<el-table-column label="学生姓名" prop="name"></el-table-column>
|
||||||
|
<el-table-column label="学生照片" prop="faceImg">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<img :src="scope.row.faceImg" alt="" style="width: 100px; height: 100px;">
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="手机号" prop="mobile"></el-table-column>
|
||||||
|
<el-table-column label="家长" prop="relation"></el-table-column>
|
||||||
|
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
</el-card>
|
||||||
|
<Pagination
|
||||||
|
:total="total"
|
||||||
|
:pageNum="query.current"
|
||||||
|
:pageSize="query.size"
|
||||||
|
@clickCurrent="onClickCurrent"
|
||||||
|
@clickSize="onClickSize"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 新增 -->
|
||||||
|
<el-dialog
|
||||||
|
:title="addEnum[addNum]"
|
||||||
|
:visible.sync="isAddDialog"
|
||||||
|
width="30%">
|
||||||
|
<el-form ref="schoolForm" :model="schoolForm" label-width="80px">
|
||||||
|
<el-form-item v-if="addNum < 4" label="校区">
|
||||||
|
<el-select @change="onChangeSchool" v-model="schoolForm.school" placeholder="请选择校区">
|
||||||
|
<el-option v-for="item in organizeArr" :label="item.className" :value="item.classId"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="addNum < 3 && schoolForm.school" label="学段">
|
||||||
|
<el-select @change="onChangePhase" v-model="schoolForm.phase" placeholder="请选择学段">
|
||||||
|
<el-option v-for="item in phaseArr" :label="item.className" :value="item.classId"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="addNum < 2 && schoolForm.phase" label="年级">
|
||||||
|
<el-select @change="onChangeGrade" v-model="schoolForm.grade" placeholder="请选择年级">
|
||||||
|
<el-option v-for="item in gradeArr" :label="item.className" :value="item.classId"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="addNum < 1 && schoolForm.grade" label="班级">
|
||||||
|
<el-select v-model="schoolForm.class" placeholder="请选择班级">
|
||||||
|
<el-option v-for="item in classArr" :label="item.className" :value="item.classId"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item :label="labelEnum[addNum]+'名称'">
|
||||||
|
<el-input v-model="schoolForm.name"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序">
|
||||||
|
<el-input v-model="schoolForm.sort" placeholder="数值越小越靠前(选填)"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="isAddDialog = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="onClickAffirm">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
<el-dialog
|
||||||
|
title="修改名称"
|
||||||
|
:visible.sync="isUpdateDialog"
|
||||||
|
width="30%">
|
||||||
|
<el-form ref="updateForm" :model="updateForm" label-width="80px">
|
||||||
|
<el-form-item :label="'名称'">
|
||||||
|
<el-input v-model="updateForm.name"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item :label="'排序'">
|
||||||
|
<el-input v-model="updateForm.sort" placeholder="数值越小越靠前"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="isUpdateDialog = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="onClickAffirmUpdate">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<el-dialog :visible.sync="isRuleDialog" title="学校进出校规则设定">
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item v-for="item in ruleGroupArr" :key="item.id">
|
||||||
|
<template slot="title">
|
||||||
|
<el-radio v-model="radio" :label="item.id">{{ item.groupName }}</el-radio>
|
||||||
|
</template>
|
||||||
|
<el-table
|
||||||
|
:data="item.ruleList"
|
||||||
|
:row-style="{ height: '50px',}"
|
||||||
|
class="group-table"
|
||||||
|
>
|
||||||
|
<el-table-column label="开始时间" prop="startTime"></el-table-column>
|
||||||
|
<el-table-column label="结束时间" prop="endTime"></el-table-column>
|
||||||
|
<el-table-column label="规则" prop="avatar">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div>
|
||||||
|
<div v-if="!scope.row.ruleObj.MORNING" class="rule-checkout-list">
|
||||||
|
<el-checkbox v-model="scope.row.ruleObj.INTO">进校</el-checkbox>
|
||||||
|
<el-checkbox v-model="scope.row.ruleObj.OUT">出校</el-checkbox>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
早上到校时间
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="isRuleDialog = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="onClickAffirmRule">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
<input @change="onClickFile($event)" type="file">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import columns from "./columns";
|
||||||
|
import { getClass, getClassStudent, postManager, putManager, deleteManager, getGuardian } from "./api";
|
||||||
|
import { getRuleGroup } from "../../regulation/api";
|
||||||
|
import { Loading } from 'element-ui';
|
||||||
|
import { formatDate } from "@/com/index";
|
||||||
|
import CommonHead from './components/CommonHead.vue'
|
||||||
|
import { cutUpload } from "@/com/cutUpload";
|
||||||
|
// import workerUrl from '@/com/worker.js';
|
||||||
|
// import { cutFile } from '@/com/cutFile'
|
||||||
|
const FlagEnum = {
|
||||||
|
INTO: 0,// 进
|
||||||
|
OUT: 1,// 出
|
||||||
|
MORNING: 2, // 早上到校时间
|
||||||
|
};
|
||||||
|
let loading
|
||||||
|
export default {
|
||||||
|
name: "deviceManagement",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
columns,
|
||||||
|
total: 0,
|
||||||
|
query: {
|
||||||
|
current: 1,
|
||||||
|
size: 10,
|
||||||
|
},
|
||||||
|
defaultProps: {
|
||||||
|
children: 'childrenList',
|
||||||
|
label: 'className'
|
||||||
|
},
|
||||||
|
loading: false,
|
||||||
|
equipmentList: [],
|
||||||
|
dialogVisible: false,
|
||||||
|
|
||||||
|
organizeArr: [], // 校区班级列表
|
||||||
|
studentArr: [],// 学生列表
|
||||||
|
classData: {
|
||||||
|
classId: null,
|
||||||
|
className: ''
|
||||||
|
}, // 选中的班级
|
||||||
|
total: 0,
|
||||||
|
defaultCheckedKeys: [],
|
||||||
|
isAddDialog: false, // 新增弹框
|
||||||
|
schoolForm:{}, // 学校分段年级班级信息
|
||||||
|
addNum: 0, // 新增学校4分段3年级2班级1
|
||||||
|
phaseArr: [], // 分段数据
|
||||||
|
gradeArr: [], // 年级数据
|
||||||
|
classArr: [], // 班级数据
|
||||||
|
addEnum: ['', '新增班级', '新增年级', '新增学段', '新增校区'],
|
||||||
|
labelEnum: ['', '班级', '年级', '学段', '校区'],
|
||||||
|
form: { },
|
||||||
|
nodeData: '', // 选中的节点
|
||||||
|
isUpdateDialog: false, // 修改弹框
|
||||||
|
updateForm: { // 修改信息
|
||||||
|
superId: '',
|
||||||
|
name: ''
|
||||||
|
},
|
||||||
|
/* 设置规则组 */
|
||||||
|
isRuleDialog: false, // 进出校规则模态框
|
||||||
|
activeName: '', // 展开的规则组
|
||||||
|
radio: '', // 校区选中的规则组
|
||||||
|
ruleGroupArr: [], // 规则组数据
|
||||||
|
loadingText: '打包中'
|
||||||
|
};
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
CommonHead,
|
||||||
|
},
|
||||||
|
async created() {
|
||||||
|
this.ruleList()
|
||||||
|
this.classList()
|
||||||
|
const defaultCheckClass= localStorage.getItem('defaultCheckClass') // 设置之前选中了班级
|
||||||
|
if(defaultCheckClass){
|
||||||
|
this.nodeData = JSON.parse(defaultCheckClass)
|
||||||
|
this.defaultCheckedKeys = [this.nodeData.classId]
|
||||||
|
this.studentList(this.nodeData.classId)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
// console.log(workerUrl)
|
||||||
|
// let worker = new Worker(workerUrl);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
async onClickFile(e) {
|
||||||
|
loading = Loading.service({
|
||||||
|
lock: true,
|
||||||
|
text: '打包上传中...',
|
||||||
|
spinner: 'el-icon-loading',
|
||||||
|
background: 'rgba(0, 0, 0, 0.7)'
|
||||||
|
});
|
||||||
|
const file = e.target.files[0]
|
||||||
|
|
||||||
|
cutUpload(file, true, (progressEvent) =>{
|
||||||
|
let progressNum = (progressEvent.loaded / progressEvent.total) * 100
|
||||||
|
loading.text = '上传进度' + progressNum.toFixed(2) + '%'
|
||||||
|
if(progressNum == 100){
|
||||||
|
console.log('完成')
|
||||||
|
loading.text = '上传完成!'
|
||||||
|
console.log(loading.text)
|
||||||
|
setTimeout(() => {
|
||||||
|
loading.close();
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
console.log(progressEvent.loaded + '/' + progressEvent.total);
|
||||||
|
}).then(res =>{
|
||||||
|
console.log(res)
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
// 点击确定修改小区规则
|
||||||
|
onClickAffirmRule() {
|
||||||
|
console.log(this.radio)
|
||||||
|
if(!this.radio){
|
||||||
|
this.$message.error('请选择需要设置的规则组')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.ruleGroupForm.ruleGroupId = this.radio
|
||||||
|
putManager(this.ruleGroupForm).then(res =>{
|
||||||
|
this.$message.success('修改成功')
|
||||||
|
this.classList();
|
||||||
|
this.nodeData = this.ruleGroupForm.ruleGroupId
|
||||||
|
this.isRuleDialog = false
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
// 点击设置规则组
|
||||||
|
onClickUpdateRule () {
|
||||||
|
this.isRuleDialog = true
|
||||||
|
console.log(this.nodeData)
|
||||||
|
this.ruleGroupForm = JSON.parse(JSON.stringify(this.nodeData))
|
||||||
|
this.radio = this.ruleGroupForm.ruleGroupId
|
||||||
|
|
||||||
|
},
|
||||||
|
// 规则组列表
|
||||||
|
ruleList(){
|
||||||
|
getRuleGroup().then( res =>{
|
||||||
|
if(res.length){
|
||||||
|
this.ruleGroupArr = res
|
||||||
|
res.map(item =>{
|
||||||
|
if(item.ruleList.length){ // 说明存在规则
|
||||||
|
item.ruleList.map(it =>{
|
||||||
|
let obj = {
|
||||||
|
INTO: false,// 进
|
||||||
|
OUT: false,// 出
|
||||||
|
MORNING: false, // 早上到校时间
|
||||||
|
}
|
||||||
|
if(it.enabledFlags.length){
|
||||||
|
it.enabledFlags.forEach(key =>{
|
||||||
|
console.log(FlagEnum[key])
|
||||||
|
obj[key] = this.decryption(FlagEnum[key], it.flag)
|
||||||
|
it.ruleObj = obj
|
||||||
|
})
|
||||||
|
}else {
|
||||||
|
it.ruleObj = obj
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
})
|
||||||
|
console.log(this.ruleGroupArr)
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 点击确定修改
|
||||||
|
onClickAffirmUpdate() {
|
||||||
|
putManager(this.updateForm).then(res =>{
|
||||||
|
this.classList();
|
||||||
|
this.$message.success('修改成功')
|
||||||
|
this.isUpdateDialog = false
|
||||||
|
this.nodeData.className = this.updateForm.name
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 点击修改按钮
|
||||||
|
onClickUpdate() {
|
||||||
|
this.updateForm = {}
|
||||||
|
if(this.nodeData){ // 说明点击过节点
|
||||||
|
this.isUpdateDialog = true
|
||||||
|
this.updateForm = {
|
||||||
|
classId: this.nodeData.classId,
|
||||||
|
name: this.nodeData.className,
|
||||||
|
sort: this.nodeData.sort
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onClickRemove () {
|
||||||
|
this.$confirm(`删除包含下级所以数据,确定要删除${this.nodeData.className}吗?`, '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(() => {
|
||||||
|
deleteManager(this.nodeData.classId).then(res => {
|
||||||
|
this.classList();
|
||||||
|
this.$message({ type: 'success', message: '删除成功!' });
|
||||||
|
this.nodeData = ''
|
||||||
|
})
|
||||||
|
}).catch(() => {
|
||||||
|
this.$message({ type: 'info', message: '已取消删除' });
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 点击确认新增
|
||||||
|
onClickAffirm() {
|
||||||
|
// const { school, phase, grade, name } = this.schoolForm;
|
||||||
|
const errorMessages = {
|
||||||
|
school: '请选择校区',
|
||||||
|
phase: '请选择学段',
|
||||||
|
grade: '请选择年级',
|
||||||
|
name: '请输入'+ this.labelEnum[this.addNum] + '名称',
|
||||||
|
};
|
||||||
|
const requiredFields = {
|
||||||
|
1: ['school', 'phase', 'grade', 'name'],
|
||||||
|
2: ['school', 'phase', 'name', ],
|
||||||
|
3: ['school', 'name', ],
|
||||||
|
4: ['name'],
|
||||||
|
}
|
||||||
|
// 过滤必填未填写的字段
|
||||||
|
const missingFields = requiredFields[this.addNum].filter(field => !this.schoolForm[field]);
|
||||||
|
if(missingFields.length === 0){ // 判断必填项是否填写
|
||||||
|
let obj = { name: this.schoolForm.name, superId: 0, sort: this.schoolForm.sort }
|
||||||
|
if(this.addNum !== 4 ){
|
||||||
|
let len = requiredFields[this.addNum].length
|
||||||
|
obj.superId = this.schoolForm[requiredFields[this.addNum][len-2]]
|
||||||
|
}
|
||||||
|
// 提交
|
||||||
|
postManager(obj).then(res =>{
|
||||||
|
this.classList();
|
||||||
|
this.$message.success('新增成功');
|
||||||
|
this.isAddDialog = false
|
||||||
|
});
|
||||||
|
}else { // 未填写信息提示
|
||||||
|
this.$message.error(errorMessages[missingFields[0]]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 选择校区
|
||||||
|
onChangeSchool(value) {
|
||||||
|
this.phaseArr = this.organizeArr.find( item => item.classId == value).childrenList
|
||||||
|
},
|
||||||
|
// 选择分段
|
||||||
|
onChangePhase(value) {
|
||||||
|
this.gradeArr = this.phaseArr.find( item => item.classId == value).childrenList
|
||||||
|
},
|
||||||
|
// 选择年级
|
||||||
|
onChangeGrade(value) {
|
||||||
|
this.classArr = this.gradeArr.find( item => item.classId == value).childrenList
|
||||||
|
},
|
||||||
|
handleNodeClick(item) {
|
||||||
|
this.nodeData = item
|
||||||
|
// localStorage.setItem('defaultCheckClass', JSON.stringify(item) )
|
||||||
|
if(item.childrenList.length === 0 && item.classId !== this.classData.classId) {
|
||||||
|
this.studentList(item.classId)
|
||||||
|
this.classData = item
|
||||||
|
}else {
|
||||||
|
this.classData = ''
|
||||||
|
this.studentList(item.classId)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 班级列表
|
||||||
|
classList(){
|
||||||
|
getClass().then( res =>{
|
||||||
|
this.nodeData.classId ? this.defaultCheckedKeys = [this.nodeData.classId] : ''
|
||||||
|
this.organizeArr = res
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获取班级学生列表
|
||||||
|
studentList(classId){
|
||||||
|
getClassStudent(classId, this.query).then( res =>{
|
||||||
|
this.studentArr = res.records
|
||||||
|
this.total = res.total
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 点击切换页数
|
||||||
|
onClickCurrent(val) {
|
||||||
|
this.query.current = val;
|
||||||
|
this.studentList(this.classData.classId);
|
||||||
|
},
|
||||||
|
// 点击了每页页数
|
||||||
|
onClickSize(val) {
|
||||||
|
this.query.size = val;
|
||||||
|
this.studentList(this.classData.classId);
|
||||||
|
},
|
||||||
|
// 重置班级年级下拉数据
|
||||||
|
resetSchoolForm() {
|
||||||
|
this.schoolForm = {}
|
||||||
|
this.phaseArr = []
|
||||||
|
this.gradeArr = []
|
||||||
|
this.classArr = []
|
||||||
|
},
|
||||||
|
decryption (flagEnum, flag){
|
||||||
|
let bitValue = 1 << flagEnum
|
||||||
|
return (flag & bitValue) == bitValue;
|
||||||
|
},
|
||||||
|
encryption(flagEnum, bool, flag) {
|
||||||
|
let bitValue = 1 << flagEnum;
|
||||||
|
flag = bool ? flag | bitValue : flag & ~bitValue;
|
||||||
|
return flag;
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.box{
|
||||||
|
display: flex;
|
||||||
|
.side-nav{
|
||||||
|
width: 250px;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 20px 20px 20px 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-right: 20px;
|
||||||
|
h3{
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.add-box{
|
||||||
|
padding: 5px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.add-list{
|
||||||
|
margin: 0 0 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.form-adapt-container{
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.material-list{
|
||||||
|
width: 100%;
|
||||||
|
.top-box{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.label{
|
||||||
|
display: flex; flex: 1; align-items: center;
|
||||||
|
height: 36px;
|
||||||
|
}
|
||||||
|
.delete-box{
|
||||||
|
width: 30px;
|
||||||
|
height: 40px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content::-webkit-scrollbar {
|
||||||
|
width: 0; /* 设置滚动条的宽度 */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user