|
@@ -1,218 +1,228 @@
|
|
|
<template>
|
|
|
- <div class="base-class-select dark-el-cascader">
|
|
|
- <RadioGroup v-model="evaluationInfo.scope" @on-change="onClassTypeChange" style="margin-bottom: 10px;">
|
|
|
- <Radio label="private">{{ $t('survey.form.privateClass') }}</Radio>
|
|
|
- <Radio label="school">{{ $t('survey.form.schoolClass') }}</Radio>
|
|
|
- </RadioGroup>
|
|
|
- <el-cascader :props="props" :options="curCusList" @change="treeChange" :show-all-levels="false" clearable
|
|
|
- filterable></el-cascader>
|
|
|
- </div>
|
|
|
+ <div class="base-class-select dark-el-cascader">
|
|
|
+ <RadioGroup v-model="evaluationInfo.scope" @on-change="onClassTypeChange" style="margin-bottom: 10px;">
|
|
|
+ <Radio label="private">{{ $t('survey.form.privateClass') }}</Radio>
|
|
|
+ <Radio label="school">{{ $t('survey.form.schoolClass') }}</Radio>
|
|
|
+ </RadioGroup>
|
|
|
+ <el-cascader :props="props" :options="curCusList" @change="treeChange" :show-all-levels="false" clearable filterable></el-cascader>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
- export default {
|
|
|
- props:{
|
|
|
- scope:{
|
|
|
- type:String,
|
|
|
- default:'school'
|
|
|
- }
|
|
|
- },
|
|
|
- data() {
|
|
|
- const _this = this
|
|
|
- return {
|
|
|
- schoolBase: {
|
|
|
- period: []
|
|
|
- },
|
|
|
- courseList:[],
|
|
|
- stuList:[],
|
|
|
- schoolClassList:[],
|
|
|
- classes: [],
|
|
|
- evaluationInfo:{
|
|
|
- scope:'school'
|
|
|
- },
|
|
|
- props: {
|
|
|
- multiple: true,
|
|
|
- lazy: true,
|
|
|
- lazyLoad(node, resolve) {
|
|
|
- const { level } = node
|
|
|
- let scope = _this.evaluationInfo.scope
|
|
|
- // 一级菜单首次加载
|
|
|
- if (level == 0 && _this.courseList.length == 0) {
|
|
|
- let requestData = {
|
|
|
- 'code': _this.$store.state.userInfo.TEAMModelId,
|
|
|
- 'schoolId': _this.$store.state.userInfo.schoolCode,
|
|
|
- 'scope': 'private'
|
|
|
- }
|
|
|
- _this.$api.courseMgmt.findCourse(requestData).then(
|
|
|
- (res) => {
|
|
|
- if (res.error) {
|
|
|
- _this.$Message.error('API ERROR!')
|
|
|
- return
|
|
|
- }
|
|
|
- _this.courseList = res.courses
|
|
|
- let scope = _this.evaluationInfo.scope
|
|
|
- let curCus = _this.courseList.filter(item => {
|
|
|
- return item.scope == scope
|
|
|
- })
|
|
|
- let nodes = curCus.map(item => {
|
|
|
- return {
|
|
|
- value: item.id,
|
|
|
- label: item.name,
|
|
|
- leaf: level >= 1
|
|
|
- }
|
|
|
- })
|
|
|
- resolve(nodes)
|
|
|
- },
|
|
|
- (err) => {
|
|
|
- _this.$Message.error('API ERROR!')
|
|
|
- }
|
|
|
- )
|
|
|
- }
|
|
|
- // 一级菜单非首次加载
|
|
|
- else if (level == 0 && _this.courseList.length > 0) {
|
|
|
- let curCus = _this.courseList.filter(item => {
|
|
|
- return item.scope == scope
|
|
|
- })
|
|
|
- let nodes = curCus.map(item => {
|
|
|
- return {
|
|
|
- value: item.id,
|
|
|
- label: item.name,
|
|
|
- leaf: true
|
|
|
- }
|
|
|
- })
|
|
|
- resolve(nodes)
|
|
|
- }
|
|
|
- // 加载二级菜单
|
|
|
- else if (level == 1) {
|
|
|
- console.log(node)
|
|
|
- let course = node.data
|
|
|
- let requestData = {
|
|
|
- 'code': scope == 'school' ? _this.$store.state.userInfo.schoolCode : _this.$store.state.userInfo.TEAMModelId,
|
|
|
- 'scope': scope,
|
|
|
- 'id': course.value
|
|
|
- }
|
|
|
- _this.$api.courseMgmt.findCusInfo(requestData).then(
|
|
|
- async (res) => {
|
|
|
- if (res.error) {
|
|
|
- resolve([])
|
|
|
- return
|
|
|
- }
|
|
|
- // 获取自定义名单信息
|
|
|
- let ids = res.courses[0].schedule.map(item => {
|
|
|
- return item.stulist
|
|
|
- })
|
|
|
- for (let i = 0; i < ids.length; i++) {
|
|
|
- if (!ids[i]) {
|
|
|
- ids.splice(i, 1)
|
|
|
- i--
|
|
|
- }
|
|
|
- }
|
|
|
- if (ids.length) {
|
|
|
- try {
|
|
|
- let listRes = await _this.getListInfo([...ids])
|
|
|
- if (listRes) _this.stuList.push(...listRes.stuList)
|
|
|
- } catch (e) {
|
|
|
- console.log(e)
|
|
|
- _this.$Message.error('API error')
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (res.courses && res.courses.length > 0) {
|
|
|
- res.courses[0].schedule = res.courses[0].schedule ? res.courses[0].schedule : []
|
|
|
- res.courses[0].schedule.forEach(item => {
|
|
|
- // 补充教室信息
|
|
|
- if (item.classId) {
|
|
|
- let classInfo = _this.schoolClassList.find(classItem => {
|
|
|
- return classItem.id == item.classId
|
|
|
- })
|
|
|
- item.classInfo = {
|
|
|
- id: item.classId,
|
|
|
- name: classInfo ? `${classInfo.name}` : ' - -'
|
|
|
- }
|
|
|
- }
|
|
|
- // 补充名单信息
|
|
|
- if (item.stulist) {
|
|
|
- let listInfo = _this.stuList.find(listItem => {
|
|
|
- return listItem.id == item.stulist
|
|
|
- })
|
|
|
- item.listName = listInfo ? `${listInfo.name}` : ' - -'
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- let schedule = res.courses[0].schedule.filter(item => {
|
|
|
- return item.teacherId == _this.$store.state.userInfo.TEAMModelId && (item.stulist || item.classId)
|
|
|
- })
|
|
|
- let nodes = schedule.map(item => {
|
|
|
- return {
|
|
|
- value: item.stulist || item.classId,
|
|
|
- label: item.listName || item.classInfo.name,
|
|
|
- leaf: level >= 1
|
|
|
- }
|
|
|
- })
|
|
|
- resolve(nodes)
|
|
|
- }
|
|
|
- )
|
|
|
- } else {
|
|
|
- resolve([])
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- };
|
|
|
- },
|
|
|
- methods: {
|
|
|
- treeChange(data) {
|
|
|
- let classIds = data.map(i => i[i.length - 1])
|
|
|
- this.classes = classIds
|
|
|
- this.$emit('onChange', classIds)
|
|
|
- },
|
|
|
- onClassTypeChange(val){
|
|
|
- this.evaluationInfo.scope = val
|
|
|
- },
|
|
|
- //根据id获取stulist信息
|
|
|
- getListInfo(ids) {
|
|
|
- let requestData = {
|
|
|
- 'code': this.evaluationInfo.scope == 'school' ? this.$store.state.userInfo.schoolCode : this.$store.state.userInfo.TEAMModelId,
|
|
|
- 'scope': this.evaluationInfo.scope,
|
|
|
- 'ids': ids
|
|
|
- }
|
|
|
- return this.$api.courseMgmt.findListSummary(requestData)
|
|
|
- },
|
|
|
- },
|
|
|
- mounted() {
|
|
|
- this.$store.dispatch('user/getSchoolProfile').then(
|
|
|
- res => {
|
|
|
- this.schoolBase = res.school_base
|
|
|
- this.schoolClassList = res.school_classes
|
|
|
- }
|
|
|
- )
|
|
|
- },
|
|
|
- computed: {
|
|
|
- curCusList() {
|
|
|
- let cus = this.courseList.filter(item => {
|
|
|
- return item.scope == this.evaluationInfo.scope
|
|
|
- })
|
|
|
- let nodes = cus.map(item => {
|
|
|
- return {
|
|
|
- value: item.id,
|
|
|
- label: item.name,
|
|
|
- leaf: false
|
|
|
- }
|
|
|
- })
|
|
|
- return nodes
|
|
|
- },
|
|
|
- }
|
|
|
- };
|
|
|
+export default {
|
|
|
+ props: {
|
|
|
+ scope: {
|
|
|
+ type: String,
|
|
|
+ default: 'school'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ const _this = this
|
|
|
+ return {
|
|
|
+ schoolBase: {
|
|
|
+ period: []
|
|
|
+ },
|
|
|
+ courseList: [],
|
|
|
+ stuList: [],
|
|
|
+ schoolClassList: [],
|
|
|
+ classes: [],
|
|
|
+ evaluationInfo: {
|
|
|
+ scope: 'school'
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ multiple: true,
|
|
|
+ lazy: true,
|
|
|
+ lazyLoad(node, resolve) {
|
|
|
+ const { level } = node
|
|
|
+ let scope = _this.evaluationInfo.scope
|
|
|
+ // 一级菜单首次加载
|
|
|
+ if (level == 0 && _this.courseList.length == 0) {
|
|
|
+ let requestData = {
|
|
|
+ 'code': _this.$store.state.userInfo.TEAMModelId,
|
|
|
+ 'schoolId': _this.$store.state.userInfo.schoolCode,
|
|
|
+ 'scope': 'private'
|
|
|
+ }
|
|
|
+ _this.$api.courseMgmt.findCourse(requestData).then(
|
|
|
+ (res) => {
|
|
|
+ if (res.error) {
|
|
|
+ _this.$Message.error('API ERROR!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ _this.courseList = res.courses
|
|
|
+ let scope = _this.evaluationInfo.scope
|
|
|
+ let curCus = _this.courseList.filter(item => {
|
|
|
+ return item.scope == scope
|
|
|
+ })
|
|
|
+ let nodes = curCus.map(item => {
|
|
|
+ return {
|
|
|
+ value: item.id,
|
|
|
+ label: item.name,
|
|
|
+ leaf: level >= 1
|
|
|
+ }
|
|
|
+ })
|
|
|
+ resolve(nodes)
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ _this.$Message.error('API ERROR!')
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }
|
|
|
+ // 一级菜单非首次加载
|
|
|
+ else if (level == 0 && _this.courseList.length > 0) {
|
|
|
+ let curCus = _this.courseList.filter(item => {
|
|
|
+ return item.scope == scope
|
|
|
+ })
|
|
|
+ let nodes = curCus.map(item => {
|
|
|
+ return {
|
|
|
+ value: item.id,
|
|
|
+ label: item.name,
|
|
|
+ leaf: true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ resolve(nodes)
|
|
|
+ }
|
|
|
+ // 加载二级菜单
|
|
|
+ else if (level == 1) {
|
|
|
+ console.log(node)
|
|
|
+ let course = node.data
|
|
|
+ let requestData = {
|
|
|
+ 'code': scope == 'school' ? _this.$store.state.userInfo.schoolCode : _this.$store.state.userInfo.TEAMModelId,
|
|
|
+ 'scope': scope,
|
|
|
+ 'id': course.value
|
|
|
+ }
|
|
|
+ _this.$api.courseMgmt.findCusInfo(requestData).then(
|
|
|
+ async (res) => {
|
|
|
+ if (res.error) {
|
|
|
+ resolve([])
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 获取自定义名单信息
|
|
|
+ let ids = res.courses[0].schedule.map(item => {
|
|
|
+ return item.stulist
|
|
|
+ })
|
|
|
+ for (let i = 0; i < ids.length; i++) {
|
|
|
+ if (!ids[i]) {
|
|
|
+ ids.splice(i, 1)
|
|
|
+ i--
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (ids.length) {
|
|
|
+ try {
|
|
|
+ let listRes = await _this.getListInfo([...ids])
|
|
|
+ if (listRes) _this.stuList.push(...listRes.stuList)
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e)
|
|
|
+ _this.$Message.error('API error')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //一个名单被安排到不同教室上课会出现重复数据,这里需要去重
|
|
|
+ let list = []
|
|
|
+ if (res.courses && res.courses.length > 0) {
|
|
|
+ res.courses[0].schedule = res.courses[0].schedule ? res.courses[0].schedule : []
|
|
|
+ res.courses[0].schedule.forEach(item => {
|
|
|
+ // 补充教室信息
|
|
|
+ if (item.classId) {
|
|
|
+ let classInfo = _this.schoolClassList.find(classItem => {
|
|
|
+ return classItem.id == item.classId
|
|
|
+ })
|
|
|
+ item.classInfo = {
|
|
|
+ id: item.classId,
|
|
|
+ name: classInfo ? `${classInfo.name}` : ' - -'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 补充名单信息
|
|
|
+ if (item.stulist) {
|
|
|
+ let listInfo = _this.stuList.find(listItem => {
|
|
|
+ return listItem.id == item.stulist
|
|
|
+ })
|
|
|
+ item.listName = listInfo ? `${listInfo.name}` : ' - -'
|
|
|
+ }
|
|
|
+ //统一数据格式
|
|
|
+ item.classId = item.classId || undefined
|
|
|
+ item.stulist = item.stulist || undefined
|
|
|
+ // 一个名单被安排到不同教室上课会出现重复数据,这里做去重操作
|
|
|
+ let has = list.find(listItem => {
|
|
|
+ return listItem.classId == item.classId && item.stulist == listItem.stulist
|
|
|
+ })
|
|
|
+ if (!has) {
|
|
|
+ list.push(item)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ res.courses[0].teaClasses = list.filter(item => {
|
|
|
+ return item.classId || item.stulist
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ let nodes = res.courses[0].teaClasses.map(item => {
|
|
|
+ return {
|
|
|
+ value: item.stulist || item.classId,
|
|
|
+ label: item.listName || item.classInfo.name,
|
|
|
+ leaf: level >= 1
|
|
|
+ }
|
|
|
+ })
|
|
|
+ resolve(nodes)
|
|
|
+ }
|
|
|
+ )
|
|
|
+ } else {
|
|
|
+ resolve([])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ };
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ treeChange(data) {
|
|
|
+ let classIds = data.map(i => i[i.length - 1])
|
|
|
+ this.classes = classIds
|
|
|
+ this.$emit('onChange', classIds)
|
|
|
+ },
|
|
|
+ onClassTypeChange(val) {
|
|
|
+ this.evaluationInfo.scope = val
|
|
|
+ },
|
|
|
+ //根据id获取stulist信息
|
|
|
+ getListInfo(ids) {
|
|
|
+ let requestData = {
|
|
|
+ 'code': this.evaluationInfo.scope == 'school' ? this.$store.state.userInfo.schoolCode : this.$store.state.userInfo.TEAMModelId,
|
|
|
+ 'scope': this.evaluationInfo.scope,
|
|
|
+ 'ids': ids
|
|
|
+ }
|
|
|
+ return this.$api.courseMgmt.findListSummary(requestData)
|
|
|
+ },
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.$store.dispatch('user/getSchoolProfile').then(
|
|
|
+ res => {
|
|
|
+ this.schoolBase = res.school_base
|
|
|
+ this.schoolClassList = res.school_classes
|
|
|
+ }
|
|
|
+ )
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ curCusList() {
|
|
|
+ let cus = this.courseList.filter(item => {
|
|
|
+ return item.scope == this.evaluationInfo.scope
|
|
|
+ })
|
|
|
+ let nodes = cus.map(item => {
|
|
|
+ return {
|
|
|
+ value: item.id,
|
|
|
+ label: item.name,
|
|
|
+ leaf: false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return nodes
|
|
|
+ },
|
|
|
+ }
|
|
|
+};
|
|
|
</script>
|
|
|
<style lang="less">
|
|
|
- .base-class-select {
|
|
|
- .el-cascader {
|
|
|
- width: 100%;
|
|
|
-
|
|
|
- .el-input__inner {
|
|
|
- background-color: #353535;
|
|
|
- border: none;
|
|
|
- }
|
|
|
- }
|
|
|
+.base-class-select {
|
|
|
+ .el-cascader {
|
|
|
+ width: 100%;
|
|
|
|
|
|
- }
|
|
|
+ .el-input__inner {
|
|
|
+ background-color: #353535;
|
|
|
+ border: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|