| 
					
				 | 
			
			
				@@ -42,14 +42,11 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import consts from '@/common/mx-const' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { mapGetters } from 'vuex' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import MxSelectTranslate from '@/components/Cache/modules/mx-select-translate-mixin.js' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ChooseSubjectDialog from '../../../system/user/profile/components/choose-subject-dialog' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import SelectSubjectReportDialog from '@/views/system/user/profile/components/select-subject-report-dialog' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import OverUnderBadge from '@/views/elective/publish/components/steps/fauclty/over-under-badge' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ElectiveEnrollInfo from '@/views/elective/select/components/elective-enroll-info' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import ElectiveToolsMixin from './elective-tools-mixins' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ElectivePreferenceInfo from '@/views/elective/select/components/elective-preference-info' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ElectivePreferenceReject from '@/views/elective/select/components/elective-preference-reject' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ElectivePreferenceCommand from '@/views/elective/select/components/elective-preference-command' 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -60,11 +57,10 @@ import ElectiveMajorCollege from '@/views/elective/select/components/elective-ma 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ElectivePreferenceBatch from '@/views/elective/select/components/elective-preference-batch' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ElectiveTableGroupTag from '@/views/elective/select/components/elective-table-group-tag' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const resolverModules = require.context('./round-select-resolvers', false, /\.js$/) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const resolvers = resolverModules.keys().map(key => resolverModules(key).default) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import ElectiveTableMixin from './elective-table-mixins' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  mixins: [ElectiveToolsMixin, MxSelectTranslate, ...resolvers], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  mixins: [ElectiveTableMixin, MxSelectTranslate], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   name: 'elective-table', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   props: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     generation: Object, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -93,30 +89,9 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   computed: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ...mapGetters(['hasPermissions']), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     enrollInfoVisible() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return this.generation.active > this.generation.options.primary.value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    enrollStatus() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const enrolledGroup = this.generation.activeModel.models?.find(this.isGroupEnrolled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (enrolledGroup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let enrolledModel = this.generation.activeModel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        do { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const matched = enrolledModel.models?.find(this.isGroupEnrolled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          if (matched 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            && matched.groupId == enrolledGroup.groupId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            && enrolledModel.selectedList.includes(matched)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              enrolledGroup, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              enrolledModel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          enrolledModel = enrolledModel.prevModel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        while (enrolledModel) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return { enrolledGroup, enrolledModel: null } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     stepMatched() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return this.generation.active == this.generation.current 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -142,108 +117,6 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return !this.generation.activeOpt.decisionMaking 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         && this.generation.activeOpt != this.generation.options.primary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         && !this.readonly 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    resolveTablePrefix() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        index: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          type: 'index', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '编号' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        groupName: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '选科组合', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          slot: 'group', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          width: '85px' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        scoreSumGroup: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '组合成绩', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          hidden: this.hasPermissions([consts.enum.electivePermission.rankInGroup.scoreByGroup]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        classCount: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '开设班级数' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        personCount: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '人数设置' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    resolveTableSuffix() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const stepMatched = this.generation.active == this.generation.current 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const enableApply = !this.generation.currentOpt.decisionMaking 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const enableSignUp = stepMatched && enableApply && !this.readonly 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rankInGroup: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '当前组合实时排名', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          hidden: this.hasPermissions([consts.enum.electivePermission.rankInGroup]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rankInGrade: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '选科全校排名', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          hidden: this.hasPermissions([consts.enum.electivePermission.rankInGrade]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        allowSelectTips: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '报名状态' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        temp: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '选择专业', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          width: '140', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          slot: 'temp', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          hidden: this.readonly 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        subjects: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '自选专业', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          slot: 'subjects', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          minWidth: '150' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        colleges: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '院校', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          slot: 'colleges', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          minWidth: '250' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        signUp: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          label: '操作', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          slot: 'signUp', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          width: '100', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          fixed: 'right', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          hidden: !enableSignUp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    resolveDynamicTable() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (!Object.keys(this.formatRows).length) return {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const options = this.generation.options 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (!options || !this.generation.active) return {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const dynamicColumns = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      this.generation.activeModels.forEach(model => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const resolverKey = model.option.key + 'Resolver' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const resolver = this[resolverKey] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (typeof resolver === 'function') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const genColumns = resolver(model, this.generation.activeModel, dynamicColumns) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          Object.assign(dynamicColumns, genColumns) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return dynamicColumns 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    formatRows() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (!this.optionalMajors) return [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (!this.generation.roundGroups?.length) return [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (!this.generation.activeModels?.length) return [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const activeModel = this.generation.activeModel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return this.generation.roundGroups.map(rg => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const row = activeModel.models?.find(item => item.groupId == rg.groupId) || {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.$set(row, 'allowSelectTips', this.combineGroupStatus(row, activeModel)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const matchedMajors = this.optionalMajors.filter(college => college.matchedGroupIds.includes(row.groupId)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.$set(row, 'colleges', matchedMajors.map(m => ({ college: m.collegeName, major: m.majorCategoryName }))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.$set(row, 'subjects', matchedMajors.map(m => m['majorCategoryName'])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return row 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    formatCols() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ...this.resolveTablePrefix, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ...this.resolveDynamicTable, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ...this.resolveTableSuffix 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   methods: { 
			 |