elective-generation-master.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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>
  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. </slot>
  13. </div>
  14. <div>
  15. <slot name="header-suffix"></slot>
  16. </div>
  17. </div>
  18. <slot :name="activeKey" v-bind="chartBinding">
  19. <elective-generation-table :chart-binding="chartBinding"></elective-generation-table>
  20. </slot>
  21. <slot name="footer-prefix"></slot>
  22. <slot :name="activeKey+'-footer'" v-bind="chartBinding">
  23. <elective-generation-charts :chart-binding="chartBinding" class="mt40"></elective-generation-charts>
  24. </slot>
  25. <slot name="footer-suffix"></slot>
  26. </template>
  27. </div>
  28. </template>
  29. <script>
  30. import ElectiveGenerationTable from '@/views/elective/generation/components/elective-generation-table'
  31. import ElectiveGenerationCharts from '@/views/elective/generation/components/elective-generation-charts'
  32. import ElectiveGenerationCommands from '@/views/elective/generation/components/elective-generation-commands'
  33. export default {
  34. name: 'elective-generation-master',
  35. components: { ElectiveGenerationCommands, ElectiveGenerationCharts, ElectiveGenerationTable },
  36. props: {
  37. generation: {
  38. type: Object
  39. }
  40. },
  41. data() {
  42. return {
  43. emptyTitle: ''
  44. }
  45. },
  46. computed: {
  47. activeKey() {
  48. return this.generation.activeOpt?.key || ''
  49. },
  50. stepDisabled() {
  51. return this.generation.active !== this.generation.current
  52. },
  53. isUnPassedStep() {
  54. if (!this.generation.activeOpt) return false
  55. this.emptyTitle = this.generation.currentOpt == this.generation.options.init
  56. ? '选科还未开启'
  57. : `正在进行${this.generation.currentOpt.title || '{未知进程}'}, 还未进行至${this.generation.activeOpt.title}`
  58. return this.generation.active > this.generation.current
  59. },
  60. categories() {
  61. // summary - categories for display in table
  62. return this.generation.summary.filter(item => item.generation <= this.generation.active)
  63. },
  64. accumulates() {
  65. // summary - accumulate for display in charts
  66. let options = this.generation.options
  67. let generation = this.generation.active
  68. let generationData = this.generation.summary.find(item => item.generation == generation && item.accumulates?.length)
  69. if (!generationData) {
  70. generation = generation - 1
  71. generationData = this.generation.summary.find(item => item.generation == generation)
  72. }
  73. return generationData?.accumulates?.length ? {
  74. generation: generation, // 图表激活的进程代,除初选报名外,一般为决策代数据
  75. accumulates: generationData.accumulates
  76. } : null
  77. },
  78. chartBinding() {
  79. return {
  80. generation: this.generation,
  81. tableData: this.categories,
  82. chartData: this.accumulates
  83. }
  84. }
  85. },
  86. methods: {}
  87. }
  88. </script>
  89. <style scoped>
  90. </style>