round-select.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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. <report-table class="mt20" ref="reportRef" ></report-table>
  31. <test-summary></test-summary>
  32. <el-card shadow="hover" class="mt20">
  33. <template #header>意向选科</template>
  34. <el-row :gutter="20">
  35. <el-col :span="12">
  36. <el-card shadow="hover">
  37. <template #header>
  38. <div class="fx-row fx-bet-cen">
  39. <div>专业选科</div>
  40. <div>
  41. <el-button type="primary" plain size="small" round>点击进入</el-button>
  42. </div>
  43. </div>
  44. </template>
  45. <div>介绍文案、测评结果</div>
  46. </el-card>
  47. </el-col>
  48. <el-col :span="12">
  49. <el-card shadow="hover">
  50. <template #header>
  51. <div class="fx-row fx-bet-cen">
  52. <div>组合选科</div>
  53. <div>
  54. <el-button type="primary" plain size="small" round>点击进入</el-button>
  55. </div>
  56. </div>
  57. </template>
  58. <div>介绍文案、测评结果</div>
  59. </el-card>
  60. </el-col>
  61. </el-row>
  62. </el-card>
  63. <el-card shadow="hover" class="mt20">
  64. <template #header>选科报名</template>
  65. <div class="fx-column">
  66. <div v-if="!allowSelect" class="mb30">
  67. <span class="f-red">*</span>
  68. 当前时段未开启选科
  69. </div>
  70. <el-form ref="form" v-if="selectObj" :model="form" :rules="rule" label-position="right" label-width="80px">
  71. <el-form-item label="选科轮次" class="form-item-readonly">{{ selectObj.year }}{{ selectObj.name }}</el-form-item>
  72. <el-form-item label="选科时间" class="form-item-readonly">{{ selectObj.beginTime }} 至 {{ selectObj.endTime }}
  73. </el-form-item>
  74. <el-form-item prop="groupId" label="选科组合">
  75. <el-radio-group v-model="form.groupId" :disabled="!allowSelect">
  76. <el-radio v-for="(opt,idx) in selectGroupOptions" :key="idx" :label="opt.value">{{ opt.text }}
  77. </el-radio>
  78. </el-radio-group>
  79. </el-form-item>
  80. <div class="fx-row fx-cen-cen mt20" v-if="allowSelect">
  81. <el-button v-loading="submitting" type="primary" @click="handleSubmit" style="width: 150px" round>保存
  82. </el-button>
  83. </div>
  84. </el-form>
  85. </div>
  86. </el-card>
  87. <el-card shadow="hover" class="mt20">
  88. <template #header>选科通知</template>
  89. </el-card>
  90. <el-dialog :visible.sync="helpVideo.visible">
  91. <mx-video v-if="helpVideo.visible" :src="helpVideo.src" :ali-id-type="helpVideo.aliIdType"
  92. class="mt15"></mx-video>
  93. </el-dialog>
  94. </div>
  95. </template>
  96. <script>
  97. import { getStudentSelected, saveStudentSelected } from '@/api/webApi/selection'
  98. import transferMixin from '@/components/mx-transfer-mixin'
  99. import consts from '@/common/mx-const'
  100. import TestEntry from '@/views/elective/test/components/test-entry'
  101. import TestResult from '@/views/elective/test/components/test-result'
  102. import TestSummary from '@/views/elective/test/components/test-summary'
  103. import SelectSubject from '@/views/system/user/profile/components/select-subject'
  104. import ReportTable from '@/views/system/user/profile/components/report-table'
  105. import {
  106. getOptionalMajors,
  107. getRecommendMajor,
  108. getData,
  109. getPrimaryElectivesModels
  110. } from '@/api/webApi/elective/ selected-subject'
  111. export default {
  112. provide(){
  113. return {
  114. optionalMajors: this.getOptionalMajors
  115. }
  116. },
  117. components: { SelectSubject, TestSummary, TestResult, TestEntry,ReportTable },
  118. mixins: [transferMixin],
  119. name: 'round-select',
  120. data() {
  121. return {
  122. helpVideo: {
  123. visible: false,
  124. src: '9fca0b997b8346ce8c3ce69feaf89294',
  125. aliIdType: 2
  126. },
  127. reportInfo: [],
  128. optionalMajors: [],
  129. evaluationMajors: [],
  130. form: {
  131. groupId: ''
  132. },
  133. rule: {
  134. groupId: [{
  135. required: true,
  136. message: '选科组合必填'
  137. }]
  138. },
  139. //
  140. selectObj: null,
  141. allowSelect: true,
  142. submitting: false,
  143. propData: {},
  144. }
  145. },
  146. computed: {
  147. selectGroupOptions() {
  148. return this.selectObj.groupList?.map(g => ({
  149. text: g.name,
  150. value: g.groupId
  151. })) || []
  152. }
  153. },
  154. mounted() {
  155. this.loadStudentSelected()
  156. this.getOptionalMajors()
  157. this.getReportList()
  158. this.getRecommendMajor()
  159. },
  160. methods: {
  161. getRecommendMajor() {
  162. getRecommendMajor().then(res => {
  163. this.evaluationMajors= res.data
  164. })
  165. },
  166. getReportList() {
  167. getPrimaryElectivesModels().then(res => {
  168. this.reportInfo= res.data
  169. this.$refs.reportRef.init(this.reportInfo)
  170. })
  171. },
  172. getOptionalMajors() {
  173. getOptionalMajors().then(res => {
  174. console.log(res)
  175. this.optionalMajors= res.data.reverse().splice(0,6)
  176. this.$refs.reportRef.initOption(this.optionalMajors)
  177. })
  178. },
  179. loadStudentSelected() {
  180. getStudentSelected().then(res => {
  181. console.log('getStudentSelected', res)
  182. this.selectObj = res.data.selectResult
  183. this.allowSelect = res.data.allowSelect
  184. this.form.groupId = this.selectObj?.groupId
  185. })
  186. },
  187. handleSubmit() {
  188. this.$refs.form.validate((valid) => {
  189. if (!valid) return
  190. this.submitting = true
  191. saveStudentSelected({
  192. groupId: this.form.groupId
  193. }).then(res => {
  194. this.msgSuccess('保存成功')
  195. this.loadStudentSelected()
  196. }).finally(() => this.submitting = false)
  197. })
  198. }
  199. }
  200. }
  201. </script>
  202. <style scoped>
  203. </style>