enrollReport.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <div class="report f16">
  3. <p class="mb10">{{ nickName }}同学:</p>
  4. <p class="mb10">您好!</p>
  5. <div style="letterSpacing:1px" v-if="groupsDemo.length">
  6. <span>您所在的学校开设了</span>
  7. <span v-for="group in groupsDemo" :key="group.groupId">
  8. {{ `${group.groupName}(${group.classCount}个班级)(${group.actualCount})` }},
  9. </span>
  10. <span>共计{{ groupsDemo.length }}个组合。</span>
  11. </div>
  12. <el-steps direction="vertical">
  13. <template v-for="step in dmSteps">
  14. <el-step status="process">
  15. <div slot="description" class="f16">
  16. <!-- 已录取 -->
  17. <div v-if="step.isEnroll">
  18. <div v-if="step.enrollByForce">
  19. <div>您被调剂至<span class="f-primary"> {{ step.enrollByForce.groupName }} </span>组合</div>
  20. <div v-if="step.forceAdjustReason" class="f-warning">原因:{{ step.forceAdjustReason }}</div>
  21. </div>
  22. <div v-else>
  23. <span>您在{{ step.prevName }}时选报了</span>
  24. <span class="f-primary"> {{ step.selectedList.map(item => item.groupName).join(',') }} </span>
  25. 组合 您在{{ step.name }}阶段被
  26. <span class="f-primary"> {{ step.enrollByApprove.groupName }} </span>
  27. 组合录取
  28. </div>
  29. </div>
  30. <!-- 未录取 -->
  31. <div v-else>
  32. <div>
  33. 您在{{ step.prevName }}时{{ applyType(step.selectedList) }}
  34. <span class="f-red">
  35. {{ step.selectedList.map(item => item.groupName).join(',') }}
  36. </span>
  37. , 由于条件不符未被录取
  38. </div>
  39. <div>
  40. 您在{{ step.name }}阶段未被录取,
  41. <span v-if="step.noNextApply">
  42. 您将在调剂阶段调剂录取
  43. </span>
  44. <span v-else>
  45. 系统推荐您选报
  46. <span class="f-primary">
  47. {{ step.nextRecommend && step.nextRecommend.groupName }}
  48. </span>
  49. 组合参与{{ step.nextName }}
  50. </span>
  51. </div>
  52. </div>
  53. </div>
  54. </el-step>
  55. </template>
  56. <template>
  57. <el-step status="process" v-if="dispatchInfo.className">
  58. <div slot="description" class="f16">
  59. 选科完成后您将从原{{ dispatchInfo.originalClassName }}班,重新分班至{{ dispatchInfo.className }}班。
  60. </div>
  61. </el-step>
  62. </template>
  63. </el-steps>
  64. </div>
  65. </template>
  66. <script>
  67. import { mapGetters } from 'vuex'
  68. import ElectiveTableMixin from '@/views/elective/select/components/elective-table-mixins'
  69. import ElectiveEnrollInfo from '@/views/elective/select/components/elective-enroll-info'
  70. export default {
  71. name: 'enroll-report',
  72. components: { ElectiveEnrollInfo },
  73. mixins: [ElectiveTableMixin],
  74. data() {
  75. return {}
  76. },
  77. props: {
  78. generation: Object,
  79. optionalMajors: { type: Array, default: () => [] },
  80. dispatchInfo: {
  81. type: Object, default: () => {
  82. }
  83. }
  84. },
  85. computed: {
  86. ...mapGetters(['nickName']),
  87. groupsDemo() {
  88. return this.generation.models?.first()?.models || []
  89. },
  90. dmSteps() {
  91. if (!this.generation.models?.length) return []
  92. const allOpts = Object.values(this.generation.options)
  93. const dmOpts = allOpts.filter(opt => opt.stepsVisible && opt.decisionMaking)
  94. const steps = dmOpts.map(opt => {
  95. const genModel = this.generation.models.find(gm => gm.option == opt)
  96. if (!genModel || !genModel.models?.length) return null
  97. const prevName = allOpts.find(item => item.value == opt.value - 1).title
  98. const nextName = allOpts.find(item => item.value == opt.value + 1).title
  99. const nextRecommend = genModel.models.find(item => item.nextRecommend)
  100. const noNextApply = opt == this.generation.options.finalAdjustDM
  101. const enrollByForce = genModel.models.find(this.isGroupForceAdjusted)
  102. return {
  103. selectedList: genModel.selectedList,
  104. isEnroll: genModel.models.some(this.isGroupEnrolled),
  105. enrollGroup: genModel.models.find(this.isGroupEnrolled),
  106. enrollByApprove: genModel.models.find(this.isGroupApproved),
  107. models: genModel.models,
  108. name: opt.title,
  109. forceAdjustReason: enrollByForce?.forceAdjustReason,
  110. enrollByForce,
  111. noNextApply,
  112. prevName,
  113. nextName,
  114. nextRecommend
  115. }
  116. }).filter(m => !!m) // filter null element.
  117. const enrollIndex = steps.findIndex(step => step?.isEnroll)
  118. return steps.slice(0, enrollIndex + 1)
  119. }
  120. },
  121. methods: {
  122. applyType(model) {
  123. if (!model.length) return '未填报'
  124. return model.find(group => this.isGroupRejected(group)) ? '拒绝填报' : '选报了'
  125. }
  126. }
  127. }
  128. </script>
  129. <style lang="scss" scoped>
  130. .report {
  131. color: #333;
  132. div {
  133. margin-bottom: 10px;
  134. }
  135. }
  136. </style>