time-table.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <template>
  2. <div id="index" style="padding-left:0rem">
  3. <el-row type="flex" align="middle" justify="end" class="btn_bar">
  4. <el-col :span="4" class="printingBtn">
  5. <el-button type="primary" size="mini" @click="toPrint()">打印课程表</el-button>
  6. </el-col>
  7. </el-row>
  8. <el-row class="rowLesson" type="flex" justify="center" ref="print">
  9. <el-col :span="21" class="timeTable">
  10. <el-col :span="24" class="top">
  11. <el-col :span="24" class="title"> 2020年第({{ data.term }})期高校大学生就业能力拓展训练课程表({{ getClassName(data.name) }}) </el-col>
  12. <el-col :span="24" class="date"> ({{ th[0] }}—{{ th[th.length - 1] }}) </el-col>
  13. </el-col>
  14. <el-col :span="24" class="info">
  15. <table border="1" class="table">
  16. <tr>
  17. <th colspan="2" class="th">
  18. <p style="text-align:right;padding:0 10px;color:#000;">星期</p>
  19. <p style="text-align:center;padding:0 10px;color:#000;">课程</p>
  20. <p style="text-align:left;padding:0 10px;color:#000;">时间</p>
  21. </th>
  22. <th class="ths" v-for="(date, index) in th" :key="index">
  23. <p>{{ date | getWeekDay }}</p>
  24. <p>({{ date | getDay }})</p>
  25. </th>
  26. <th class="ths beizhu">备注</th>
  27. </tr>
  28. <!-- 第一行需要合并2行单元格显示上午 -->
  29. <!-- 第三行需要合并3行单元格显示下午 -->
  30. <!-- rowspan="5" 班主任,礼仪课教师等其他信息 -->
  31. <tr v-for="(time, ti) in tr" :key="ti">
  32. <td rowspan="2" v-if="ti == 0">上午</td>
  33. <td rowspan="3" v-if="ti == 2">下午</td>
  34. <td>{{ time }}</td>
  35. <td v-for="(date, di) in th" :key="di" v-html="getLesson(date, time)"></td>
  36. <td rowspan="5" v-if="ti == 0">
  37. <div class="classInfo">
  38. <p>上课地点</p>
  39. <p>{{ data.jslocation || '' }}</p>
  40. </div>
  41. <div class="classInfo">
  42. <p>用餐地点</p>
  43. <p>{{ data.yclocation || '' }}</p>
  44. </div>
  45. <div class="classInfo">
  46. <p>开班地点</p>
  47. <p>{{ data.kbyslocation || '' }}</p>
  48. </div>
  49. <div class="classInfo">
  50. <p>班主任</p>
  51. <p>{{ data.headteacher || '' }}</p>
  52. </div>
  53. <div class="classInfo">
  54. <p>礼仪课</p>
  55. <p>{{ data.lyteacher || '暂无' }}</p>
  56. </div>
  57. <div class="classInfo">
  58. <p>督导值班</p>
  59. <p>{{ data.reteacher || '' }}</p>
  60. </div>
  61. </td>
  62. </tr>
  63. <tr>
  64. <td colspan="2">教师签字</td>
  65. <td></td>
  66. <td></td>
  67. <td></td>
  68. <td></td>
  69. <td></td>
  70. <td colspan="2"></td>
  71. </tr>
  72. </table>
  73. </el-col>
  74. </el-col>
  75. </el-row>
  76. </div>
  77. </template>
  78. <script>
  79. import _ from 'lodash';
  80. const moment = require('moment');
  81. moment.locale('zh-cn');
  82. export default {
  83. name: 'index',
  84. props: {
  85. th: { type: Array, default: () => [] },
  86. tr: { type: Array, default: () => [] },
  87. lessons: { type: Array, default: () => [] },
  88. data: null,
  89. },
  90. components: {},
  91. data: () => ({}),
  92. created() {},
  93. computed: {},
  94. methods: {
  95. getLesson(date, time) {
  96. let r = this.lessons.find(f => f.date == date && f.time == time);
  97. if (!r) return '--';
  98. else {
  99. let { subname, teaname = '', reason } = r;
  100. let text = `${subname}<br/><span style="color:red">${teaname}</span>`;
  101. if (reason && teaname !== '') text = `${text}<br/><span style="color:red">${reason}</span>`;
  102. return text;
  103. }
  104. },
  105. toPrint() {
  106. this.$print(this.$refs.print);
  107. },
  108. getClassName(data) {
  109. if (data) {
  110. if (_.isString(data) && data.includes('班')) return data;
  111. else return `${data}班`;
  112. }
  113. },
  114. },
  115. filters: {
  116. getWeekDay(date) {
  117. return moment(date).format('dddd');
  118. },
  119. getDay(date) {
  120. return moment(date).format('MM月DD日');
  121. },
  122. },
  123. };
  124. </script>
  125. <style lang="less" scoped>
  126. @import '~@frame/style/timeTable.less';
  127. .classInfo {
  128. margin: 10px 0;
  129. p:first-child {
  130. padding: 5px 0;
  131. }
  132. p:last-child {
  133. color: #ff0000;
  134. }
  135. }
  136. </style>