time-table.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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.kbyslocation || '' }}</p>
  44. </div>
  45. <div class="classInfo">
  46. <p>用餐地点</p>
  47. <p>{{ data.yclocation || '' }}</p>
  48. </div>
  49. <div class="classInfo">
  50. <p>扩展训练地点</p>
  51. <p>{{ data.kbyslocation || '' }}</p>
  52. </div>
  53. <div class="classInfo">
  54. <p>班主任</p>
  55. <p>{{ data.headteacher || '' }}</p>
  56. </div>
  57. <div class="classInfo">
  58. <p>礼仪课</p>
  59. <p>{{ data.lyteacher || '暂无' }}</p>
  60. </div>
  61. <div class="classInfo">
  62. <p>督导值班</p>
  63. <p>{{ data.reteacher || '' }}</p>
  64. </div>
  65. </td>
  66. </tr>
  67. <tr>
  68. <td colspan="2">教师签字</td>
  69. <td></td>
  70. <td></td>
  71. <td></td>
  72. <td></td>
  73. <td></td>
  74. <td colspan="2"></td>
  75. </tr>
  76. </table>
  77. </el-col>
  78. </el-col>
  79. </el-row>
  80. </div>
  81. </template>
  82. <script>
  83. import _ from 'lodash';
  84. const moment = require('moment');
  85. moment.locale('zh-cn');
  86. export default {
  87. name: 'index',
  88. props: {
  89. th: { type: Array, default: () => [] },
  90. tr: { type: Array, default: () => [] },
  91. lessons: { type: Array, default: () => [] },
  92. data: null,
  93. },
  94. components: {},
  95. data: () => ({}),
  96. created() {},
  97. computed: {},
  98. methods: {
  99. getLesson(date, time) {
  100. let r = this.lessons.find(f => f.date == date && f.time == time);
  101. if (!r) return '--';
  102. else {
  103. let { subname, teaname = '', reason } = r;
  104. let text = `${subname}<br/><span style="color:red">${teaname}</span>`;
  105. // if (reason && teaname !== '') text = `${text}<br/><span style="color:red">${reason}</span>`;
  106. return text;
  107. }
  108. },
  109. toPrint() {
  110. this.$print(this.$refs.print);
  111. },
  112. getClassName(data) {
  113. if (data) {
  114. if (_.isString(data) && data.includes('班')) return data;
  115. else return `${data}班`;
  116. }
  117. },
  118. },
  119. filters: {
  120. getWeekDay(date) {
  121. return moment(date).format('dddd');
  122. },
  123. getDay(date) {
  124. return moment(date).format('MM月DD日');
  125. },
  126. },
  127. };
  128. </script>
  129. <style lang="less" scoped>
  130. @import '~@frame/style/timeTable.less';
  131. .classInfo {
  132. margin: 10px 0;
  133. p:first-child {
  134. padding: 5px 0;
  135. }
  136. p:last-child {
  137. color: #ff0000;
  138. font-size: 12px;
  139. }
  140. }
  141. </style>