|
@@ -1,6 +1,6 @@
|
|
<template>
|
|
<template>
|
|
<el-dialog
|
|
<el-dialog
|
|
- class="modify-exam-student select-user-dialog"
|
|
|
|
|
|
+ class="select-user-dialog"
|
|
:visible.sync="modalIsShow"
|
|
:visible.sync="modalIsShow"
|
|
title="选择考试对象"
|
|
title="选择考试对象"
|
|
top="10vh"
|
|
top="10vh"
|
|
@@ -10,19 +10,6 @@
|
|
append-to-body
|
|
append-to-body
|
|
@opened="visibleChange"
|
|
@opened="visibleChange"
|
|
>
|
|
>
|
|
- <div class="mb-4 tab-btns">
|
|
|
|
- <el-button
|
|
|
|
- v-for="item in objectTypeList"
|
|
|
|
- :key="item.value"
|
|
|
|
- size="medium"
|
|
|
|
- :type="examObjectType === item.value ? 'primary' : 'default'"
|
|
|
|
- :disabled="
|
|
|
|
- selectedExamObjectType && selectedExamObjectType !== item.value
|
|
|
|
- "
|
|
|
|
- @click="selectMenu(item.value)"
|
|
|
|
- >{{ item.name }}
|
|
|
|
- </el-button>
|
|
|
|
- </div>
|
|
|
|
<div class="user-search">
|
|
<div class="user-search">
|
|
<el-input
|
|
<el-input
|
|
v-model="filterLabel"
|
|
v-model="filterLabel"
|
|
@@ -90,13 +77,8 @@
|
|
<script>
|
|
<script>
|
|
import { uploadOrFindExamTaskStudent } from "../../api";
|
|
import { uploadOrFindExamTaskStudent } from "../../api";
|
|
|
|
|
|
-const EXAM_OBJECT_TYPE = {
|
|
|
|
- TEACH_CLAZZ_STUDENT: "我教课程选择",
|
|
|
|
- BASIC_CLAZZ_STUDENT: "考生库选择",
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
export default {
|
|
export default {
|
|
- name: "modify-exam-student",
|
|
|
|
|
|
+ name: "modify-exam-task-student",
|
|
props: {
|
|
props: {
|
|
disabledIds: {
|
|
disabledIds: {
|
|
type: Array,
|
|
type: Array,
|
|
@@ -119,12 +101,6 @@ export default {
|
|
};
|
|
};
|
|
},
|
|
},
|
|
},
|
|
},
|
|
- objectTypes: {
|
|
|
|
- type: Array,
|
|
|
|
- default() {
|
|
|
|
- return ["TEACH_CLAZZ_STUDENT", "BASIC_CLAZZ_STUDENT"];
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
showStudent: {
|
|
showStudent: {
|
|
type: Boolean,
|
|
type: Boolean,
|
|
default: false,
|
|
default: false,
|
|
@@ -133,14 +109,8 @@ export default {
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
modalIsShow: false,
|
|
modalIsShow: false,
|
|
- examObjectType: "TEACH_CLAZZ_STUDENT",
|
|
|
|
basicCourseCode: null,
|
|
basicCourseCode: null,
|
|
- objectTypeList: [],
|
|
|
|
- dataTree: {
|
|
|
|
- TEACH_CLAZZ_STUDENT: [],
|
|
|
|
- BASIC_CLAZZ_STUDENT: [],
|
|
|
|
- },
|
|
|
|
- selectedExamObjectType: null,
|
|
|
|
|
|
+ dataTree: [],
|
|
userTree: [],
|
|
userTree: [],
|
|
selectedUsers: [],
|
|
selectedUsers: [],
|
|
filterLabel: "",
|
|
filterLabel: "",
|
|
@@ -153,14 +123,12 @@ export default {
|
|
};
|
|
};
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
- async getStudents(examObjectType) {
|
|
|
|
|
|
+ async getStudents() {
|
|
let datas = {
|
|
let datas = {
|
|
- examObjectType: examObjectType || this.examObjectType,
|
|
|
|
|
|
+ ...this.filterParams,
|
|
};
|
|
};
|
|
- if (datas.examObjectType === "TEACH_CLAZZ_STUDENT")
|
|
|
|
- datas = { ...datas, ...this.filterParams };
|
|
|
|
const data = await uploadOrFindExamTaskStudent(datas);
|
|
const data = await uploadOrFindExamTaskStudent(datas);
|
|
- this.dataTree[datas.examObjectType] = this.parseStudentData(data);
|
|
|
|
|
|
+ this.dataTree = this.parseStudentData(data);
|
|
},
|
|
},
|
|
parseStudentData(data) {
|
|
parseStudentData(data) {
|
|
const disabledStdIds = this.disabledIds.map((item) => item.split("_")[1]);
|
|
const disabledStdIds = this.disabledIds.map((item) => item.split("_")[1]);
|
|
@@ -189,20 +157,8 @@ export default {
|
|
return nitem;
|
|
return nitem;
|
|
});
|
|
});
|
|
},
|
|
},
|
|
- async selectMenu(val) {
|
|
|
|
- this.examObjectType = val;
|
|
|
|
- this.$refs.UserTree.setCheckedKeys([]);
|
|
|
|
-
|
|
|
|
- this.selectedUsers = [];
|
|
|
|
-
|
|
|
|
- if (!this.dataTree[val].length) {
|
|
|
|
- await this.getStudents();
|
|
|
|
- }
|
|
|
|
- this.userTree = this.getUserTree(val);
|
|
|
|
- this.updateUserTreeDisableInfo(this.disabledIds);
|
|
|
|
- },
|
|
|
|
- getUserTree(examObjectType) {
|
|
|
|
- let userTree = this.dataTree[examObjectType];
|
|
|
|
|
|
+ getUserTree() {
|
|
|
|
+ let userTree = this.dataTree;
|
|
if (this.showStudent) return userTree;
|
|
if (this.showStudent) return userTree;
|
|
|
|
|
|
return userTree.map((item) => {
|
|
return userTree.map((item) => {
|
|
@@ -211,9 +167,6 @@ export default {
|
|
return nitem;
|
|
return nitem;
|
|
});
|
|
});
|
|
},
|
|
},
|
|
- clearTypeData(type = "BASIC_CLAZZ_STUDENT") {
|
|
|
|
- this.dataTree[type] = [];
|
|
|
|
- },
|
|
|
|
checkChange() {
|
|
checkChange() {
|
|
// console.log("check click");
|
|
// console.log("check click");
|
|
const selectedKeys = this.$refs.UserTree.getCheckedKeys(true);
|
|
const selectedKeys = this.$refs.UserTree.getCheckedKeys(true);
|
|
@@ -278,28 +231,21 @@ export default {
|
|
this.$refs.UserTree.setCheckedKeys(selectedUserIds);
|
|
this.$refs.UserTree.setCheckedKeys(selectedUserIds);
|
|
},
|
|
},
|
|
async visibleChange() {
|
|
async visibleChange() {
|
|
- this.objectTypeList = this.objectTypes.map((field) => {
|
|
|
|
- return {
|
|
|
|
- name: EXAM_OBJECT_TYPE[field],
|
|
|
|
- value: field,
|
|
|
|
- };
|
|
|
|
- });
|
|
|
|
- if (!this.objectTypeList.length) return;
|
|
|
|
- if (this.objectTypeList.length === 1) {
|
|
|
|
- this.examObjectType = this.objectTypeList[0].value;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (this.basicCourseCode !== this.filterParams.courseCode) {
|
|
if (this.basicCourseCode !== this.filterParams.courseCode) {
|
|
- this.clearSelectedExamObjectType();
|
|
|
|
this.basicCourseCode = this.filterParams.courseCode;
|
|
this.basicCourseCode = this.filterParams.courseCode;
|
|
- await this.getStudents(this.examObjectType);
|
|
|
|
|
|
+ await this.getStudents();
|
|
}
|
|
}
|
|
|
|
|
|
- await this.selectMenu(this.examObjectType);
|
|
|
|
|
|
+ this.$refs.UserTree.setCheckedKeys([]);
|
|
|
|
+ this.selectedUsers = [];
|
|
|
|
+ this.userTree = this.getUserTree();
|
|
|
|
+ this.updateUserTreeDisableInfo(this.disabledIds);
|
|
|
|
|
|
if (this.selectedIds && this.selectedIds.length) {
|
|
if (this.selectedIds && this.selectedIds.length) {
|
|
- this.$refs.UserTree.setCheckedKeys(this.selectedIds);
|
|
|
|
- this.checkChange();
|
|
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
+ this.$refs.UserTree.setCheckedKeys(this.selectedIds);
|
|
|
|
+ this.checkChange();
|
|
|
|
+ });
|
|
}
|
|
}
|
|
},
|
|
},
|
|
labelChange() {
|
|
labelChange() {
|
|
@@ -307,11 +253,11 @@ export default {
|
|
const escapeRegexpString = (value = "") =>
|
|
const escapeRegexpString = (value = "") =>
|
|
String(value).replace(/[|\\{}()[\]^$+*?.]/g, "\\$&");
|
|
String(value).replace(/[|\\{}()[\]^$+*?.]/g, "\\$&");
|
|
const reg = new RegExp(escapeRegexpString(this.filterLabel), "i");
|
|
const reg = new RegExp(escapeRegexpString(this.filterLabel), "i");
|
|
- this.userTree = this.getUserTree(this.examObjectType).filter((item) =>
|
|
|
|
|
|
+ this.userTree = this.getUserTree().filter((item) =>
|
|
reg.test(item.label)
|
|
reg.test(item.label)
|
|
);
|
|
);
|
|
} else {
|
|
} else {
|
|
- this.userTree = this.getUserTree(this.examObjectType);
|
|
|
|
|
|
+ this.userTree = this.getUserTree();
|
|
}
|
|
}
|
|
this.setTreeSelectedKeys();
|
|
this.setTreeSelectedKeys();
|
|
},
|
|
},
|
|
@@ -326,9 +272,6 @@ export default {
|
|
item.disabled = !item.children.some((elem) => !elem.disabled);
|
|
item.disabled = !item.children.some((elem) => !elem.disabled);
|
|
});
|
|
});
|
|
},
|
|
},
|
|
- clearSelectedExamObjectType() {
|
|
|
|
- this.selectedExamObjectType = null;
|
|
|
|
- },
|
|
|
|
cancel() {
|
|
cancel() {
|
|
this.modalIsShow = false;
|
|
this.modalIsShow = false;
|
|
},
|
|
},
|
|
@@ -336,7 +279,7 @@ export default {
|
|
this.modalIsShow = true;
|
|
this.modalIsShow = true;
|
|
},
|
|
},
|
|
getFullSelectedUsers() {
|
|
getFullSelectedUsers() {
|
|
- let userTree = this.dataTree[this.examObjectType];
|
|
|
|
|
|
+ let userTree = this.dataTree;
|
|
const selectedUsersIds = this.selectedUsers.map((item) => item.id);
|
|
const selectedUsersIds = this.selectedUsers.map((item) => item.id);
|
|
return userTree.filter((item) => selectedUsersIds.includes(item.id));
|
|
return userTree.filter((item) => selectedUsersIds.includes(item.id));
|
|
},
|
|
},
|
|
@@ -348,7 +291,6 @@ export default {
|
|
|
|
|
|
if (this.loading) return;
|
|
if (this.loading) return;
|
|
this.loading = true;
|
|
this.loading = true;
|
|
- this.selectedExamObjectType = this.examObjectType;
|
|
|
|
const selectedUsers = this.showStudent
|
|
const selectedUsers = this.showStudent
|
|
? this.selectedUsers
|
|
? this.selectedUsers
|
|
: this.getFullSelectedUsers();
|
|
: this.getFullSelectedUsers();
|