round-select.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <template>
  2. <div class="app-container">
  3. <el-card shadow="hover">
  4. <template #header>选科信息</template>
  5. <el-row :gutter="20">
  6. <el-col :span="12">
  7. <el-form ref="form" v-if="selectObj" :model="form" :rules="rule" label-position="right" label-width="80px">
  8. <el-form-item label="选科轮次" class="form-item-readonly">{{ selectObj.year }}{{ selectObj.name }}
  9. </el-form-item>
  10. <el-form-item label="选科时间" class="form-item-readonly">{{ selectObj.beginTime }} 至 {{ selectObj.endTime }}
  11. </el-form-item>
  12. <el-form-item label="选科状态" class="form-item-readonly">
  13. 未选择/已选择<span class="f-red">缺字段</span>
  14. </el-form-item>
  15. <el-form-item label="AI选科" class="form-item-readonly">
  16. 进入/查看<span class="f-red">缺字段</span>
  17. </el-form-item>
  18. </el-form>
  19. </el-col>
  20. <el-col :span="12" style="vertical-align: center">
  21. 为了让同学们更好地选科,请完成左侧几项功能,如有疑问,请观看此
  22. <el-link type="primary" icon="el-icon-video-play" underline @click="helpVideo.visible=true">介绍视频</el-link>
  23. 、咨询客服或拨打电话4001797985
  24. </el-col>
  25. </el-row>
  26. </el-card>
  27. <!-- 自选专业 推荐专业 -->
  28. <select-subject class="mt20" :evaluationMajors="evaluationMajors" :optionalMajors="optionalMajors" :list="reportInfo.models"></select-subject>
  29. <!-- 选科报名表 -->
  30. <el-card class="box-card mt20" >
  31. <template #header>
  32. <elective-generation-steps v-if="allowSelect" v-model="activeStep" :generation="generations"></elective-generation-steps>
  33. </template>
  34. <report-table ref="reportRef" ></report-table>
  35. </el-card>
  36. <el-card shadow="hover" class="mt20">
  37. <template #header>意向选科</template>
  38. <el-row :gutter="20">
  39. <el-col :span="12">
  40. <el-card shadow="hover">
  41. <template #header>
  42. <div class="fx-row fx-bet-cen">
  43. <div>专业选科</div>
  44. <div>
  45. <el-button type="primary" plain size="small" round>点击进入</el-button>
  46. </div>
  47. </div>
  48. </template>
  49. <div>介绍文案、测评结果</div>
  50. </el-card>
  51. </el-col>
  52. <el-col :span="12">
  53. <el-card shadow="hover">
  54. <template #header>
  55. <div class="fx-row fx-bet-cen">
  56. <div>组合选科</div>
  57. <div>
  58. <el-button type="primary" plain size="small" round>点击进入</el-button>
  59. </div>
  60. </div>
  61. </template>
  62. <div>介绍文案、测评结果</div>
  63. </el-card>
  64. </el-col>
  65. </el-row>
  66. </el-card>
  67. <el-card shadow="hover" class="mt20">
  68. <template #header>选科报名</template>
  69. <div class="fx-column">
  70. <div v-if="!allowSelect" class="mb30">
  71. <span class="f-red">*</span>
  72. 当前时段未开启选科
  73. </div>
  74. <el-form ref="form" v-if="selectObj" :model="form" :rules="rule" label-position="right" label-width="80px">
  75. <el-form-item label="选科轮次" class="form-item-readonly">{{ selectObj.year }}{{ selectObj.name }}</el-form-item>
  76. <el-form-item label="选科时间" class="form-item-readonly">{{ selectObj.beginTime }} 至 {{ selectObj.endTime }}
  77. </el-form-item>
  78. <el-form-item prop="groupId" label="选科组合">
  79. <el-radio-group v-model="form.groupId" :disabled="!allowSelect">
  80. <el-radio v-for="(opt,idx) in selectGroupOptions" :key="idx" :label="opt.value">{{ opt.text }}
  81. </el-radio>
  82. </el-radio-group>
  83. </el-form-item>
  84. <div class="fx-row fx-cen-cen mt20" v-if="allowSelect">
  85. <el-button v-loading="submitting" type="primary" @click="handleSubmit" style="width: 150px" round>保存
  86. </el-button>
  87. </div>
  88. </el-form>
  89. </div>
  90. </el-card>
  91. <el-card shadow="hover" class="mt20">
  92. <template #header>选科通知</template>
  93. </el-card>
  94. <el-dialog :visible.sync="helpVideo.visible">
  95. <mx-video v-if="helpVideo.visible" :src="helpVideo.src" :ali-id-type="helpVideo.aliIdType"
  96. class="mt15"></mx-video>
  97. </el-dialog>
  98. </div>
  99. </template>
  100. <script>
  101. import { getStudentSelected, saveStudentSelected } from '@/api/webApi/selection'
  102. import TestEntry from '@/views/elective/test/components/test-entry'
  103. import TestResult from '@/views/elective/test/components/test-result'
  104. import SelectSubject from '@/views/system/user/profile/components/select-subject'
  105. import ReportTable from '@/views/system/user/profile/components/report-table'
  106. import ElectiveGenerationSteps from '@/views/elective/generation/components/elective-generation-steps'
  107. import config from '@/common/mx-config'
  108. import {
  109. getOptionalMajors,
  110. getRecommendMajor,
  111. getPrimaryElectivesModels
  112. } from '@/api/webApi/elective/ selected-subject'
  113. export default {
  114. provide(){
  115. return {
  116. optionalMajors: this.getOptionalMajors
  117. }
  118. },
  119. components: { SelectSubject, TestResult, TestEntry,ReportTable,ElectiveGenerationSteps },
  120. name: 'round-select',
  121. data() {
  122. return {
  123. helpVideo: {
  124. visible: false,
  125. src: '9fca0b997b8346ce8c3ce69feaf89294',
  126. aliIdType: 2
  127. },
  128. reportInfo: [],
  129. optionalMajors: [],
  130. evaluationMajors: [],
  131. form: {
  132. groupId: ''
  133. },
  134. rule: {
  135. groupId: [{
  136. required: true,
  137. message: '选科组合必填'
  138. }]
  139. },
  140. //
  141. selectObj: null,
  142. allowSelect: false,
  143. submitting: false,
  144. propData: {},
  145. stepOptions: config.electiveGenerationOptions,
  146. activeStep: ''
  147. }
  148. },
  149. computed: {
  150. currentOpt() {
  151. /// 当前进程代对应的配置项,可能没有值
  152. return Object.values(this.stepOptions).find(opt => opt.value == this.selectObj.currentGeneration)
  153. },
  154. activeOpt() {
  155. /// 当前选中的进程代,可能没有值
  156. console.log('round select active step changed', this.activeStep)
  157. return this.stepOptions[this.activeStep]
  158. },
  159. // stepOptions() {
  160. // const steps = {}
  161. // const stepOptions = config.electiveGenerationOptions
  162. // for (let key in stepOptions) {
  163. // if(stepOptions[key].value <= this.selectObj.currentGeneration){
  164. // steps['a'+ key] = stepOptions[key]
  165. // }
  166. // }
  167. // return steps
  168. // },
  169. generations() {
  170. if(!this.selectObj) return {}
  171. return {
  172. // generation key value
  173. hiddenGenerations: [],
  174. options: this.stepOptions,
  175. current: this.selectObj.currentGeneration,
  176. currentOpt: this.currentOpt,
  177. active: this.active,
  178. activeOpt: this.activeOpt,
  179. status: {
  180. roundName: this.selectObj.name || '',
  181. year: this.selectObj.year || '',
  182. },
  183. }
  184. },
  185. stepChange(key) {
  186. console.log(key)
  187. },
  188. selectGroupOptions() {
  189. return this.selectObj.groupList?.map(g => ({
  190. text: g.name,
  191. value: g.groupId
  192. })) || []
  193. }
  194. },
  195. mounted() {
  196. this.loadStudentSelected()
  197. this.getOptionalMajors()
  198. this.getReportList()
  199. this.getRecommendMajor()
  200. },
  201. methods: {
  202. getRecommendMajor() {
  203. getRecommendMajor().then(res => {
  204. this.evaluationMajors= res.data
  205. })
  206. },
  207. getReportList() {
  208. getPrimaryElectivesModels().then(res => {
  209. this.reportInfo= res.data
  210. this.$refs.reportRef.init(this.reportInfo)
  211. })
  212. },
  213. getOptionalMajors() {
  214. getOptionalMajors().then(res => {
  215. console.log(res)
  216. this.optionalMajors= res.data.reverse().splice(0,6)
  217. this.$refs.reportRef.initOption(this.optionalMajors)
  218. })
  219. },
  220. loadStudentSelected() {
  221. getStudentSelected().then(res => {
  222. console.log('getStudentSelected', res)
  223. const selectStatus = res.data.selectResult
  224. selectStatus.currentGeneration = 6 // 当前所处的状态
  225. selectStatus.preferenceCount = 1 // 志愿数
  226. this.selectObj = selectStatus
  227. this.allowSelect = res.data.allowSelect
  228. this.form.groupId = this.selectObj?.groupId
  229. })
  230. },
  231. handleSubmit() {
  232. this.$refs.form.validate((valid) => {
  233. if (!valid) return
  234. this.submitting = true
  235. saveStudentSelected({
  236. groupId: this.form.groupId
  237. }).then(res => {
  238. this.msgSuccess('保存成功')
  239. this.loadStudentSelected()
  240. }).finally(() => this.submitting = false)
  241. })
  242. }
  243. }
  244. }
  245. </script>
  246. <style scoped>
  247. </style>