elective-generation-master.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <template>
  2. <div class="fx-column">
  3. <evaluation-empty v-if="isUnPassedStep" :shadow="false" :title="emptyTitle"></evaluation-empty>
  4. <template v-else>
  5. <div class="fx-row fx-bet-cen mb15">
  6. <div class="fx-row mr30">
  7. <slot name="header-prefix"></slot>
  8. </div>
  9. <div class="fx-1">
  10. <slot :name="activeKey+'-header'" v-bind="chartBinding">
  11. <elective-generation-commands v-if="!stepDisabled" :chart-binding="chartBinding"
  12. @jumpDetail="handleJumpDetail"/>
  13. </slot>
  14. </div>
  15. <div>
  16. <slot name="header-suffix"></slot>
  17. </div>
  18. </div>
  19. <slot :name="activeKey" v-bind="chartBinding">
  20. <elective-generation-table :chart-binding="chartBinding" ref="gTable"></elective-generation-table>
  21. <elective-generation-enroll-info :chart-binding="chartBinding"></elective-generation-enroll-info>
  22. </slot>
  23. <slot name="footer-prefix"></slot>
  24. <slot :name="activeKey+'-footer'" v-bind="chartBinding">
  25. <elective-generation-charts :chart-binding="chartBinding" class="mt40"></elective-generation-charts>
  26. </slot>
  27. <slot name="footer-suffix"></slot>
  28. </template>
  29. </div>
  30. </template>
  31. <script>
  32. import ElectiveGenerationTable from '@/views/elective/generation/components/elective-generation-table'
  33. import ElectiveGenerationCharts from '@/views/elective/generation/components/elective-generation-charts'
  34. import ElectiveGenerationCommands from '@/views/elective/generation/components/elective-generation-commands'
  35. import transferMixin from '@/components/mx-transfer-mixin'
  36. import ElectiveGenerationEnrollInfo from '@/views/elective/generation/components/elective-generation-enroll-info'
  37. export default {
  38. mixins: [transferMixin],
  39. name: 'elective-generation-master',
  40. components: {
  41. ElectiveGenerationEnrollInfo,
  42. ElectiveGenerationCommands,
  43. ElectiveGenerationCharts,
  44. ElectiveGenerationTable
  45. },
  46. props: {
  47. generation: {
  48. type: Object
  49. }
  50. },
  51. data() {
  52. return {
  53. emptyTitle: ''
  54. }
  55. },
  56. computed: {
  57. activeKey() {
  58. return this.generation.activeOpt?.key || ''
  59. },
  60. stepDisabled() {
  61. return this.generation.active !== this.generation.current
  62. },
  63. isUnPassedStep() {
  64. if (!this.generation.activeOpt) return false
  65. this.emptyTitle = this.generation.currentOpt == this.generation.options.init
  66. ? '选科还未开启'
  67. : `正在进行${this.generation.currentOpt.title || '{未知进程}'}, 还未进行至${this.generation.activeOpt.title}`
  68. return this.generation.active > this.generation.current
  69. },
  70. categories() {
  71. // summary - categories for display in table
  72. return this.generation.summary.filter(item => item.generation <= this.generation.active)
  73. },
  74. accumulates() {
  75. // summary - accumulate for display in charts
  76. let options = this.generation.options
  77. let generation = this.generation.active
  78. let generationData = this.generation.summary.find(item => item.generation == generation && item.accumulates?.length)
  79. if (!generationData) {
  80. generation = generation - 1
  81. generationData = this.generation.summary.find(item => item.generation == generation)
  82. }
  83. return generationData?.accumulates?.length ? {
  84. generation: generation, // 图表激活的进程代,除初选报名外,一般为决策代数据
  85. accumulates: generationData.accumulates,
  86. disenrollCount: generationData.disenrollCount || 0
  87. } : null
  88. },
  89. chartBinding() {
  90. return {
  91. generation: this.generation,
  92. tableData: this.categories,
  93. chartData: this.accumulates
  94. }
  95. }
  96. },
  97. methods: {
  98. handleJumpDetail() {
  99. // 跳列表,模拟点击第一列
  100. this.$refs.gTable.simulateGoDetails()
  101. }
  102. }
  103. }
  104. </script>
  105. <style scoped>
  106. </style>