time-table.vue 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div id="index" style="padding-left:10rem">
  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 }})期高校大学生就业能力拓展训练课程表({{ 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="th" v-for="(date, index) in th" :key="index">
  23. <p>{{ date | getWeekDay }}</p>
  24. <p>({{ date | getDay }})</p>
  25. </th>
  26. <th class="th 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. <p>
  38. 上课地点:<span>{{ data.jslocation || '' }}</span>
  39. </p>
  40. <p>
  41. 班主任:<span class="teacherName">{{ data.headteacher || '' }}</span>
  42. </p>
  43. <p>
  44. 礼仪课:<span class="teacherName">{{ data.lyteacher || '' }}</span>
  45. </p>
  46. </td>
  47. </tr>
  48. </table>
  49. </el-col>
  50. </el-col>
  51. </el-row>
  52. </div>
  53. </template>
  54. <script>
  55. import _ from 'lodash';
  56. const moment = require('moment');
  57. moment.locale('zh-cn');
  58. export default {
  59. name: 'index',
  60. props: {
  61. th: { type: Array, default: () => [] },
  62. tr: { type: Array, default: () => [] },
  63. lessons: { type: Array, default: () => [] },
  64. data: null,
  65. },
  66. components: {},
  67. data: () => ({}),
  68. created() {},
  69. computed: {},
  70. methods: {
  71. getLesson(date, time) {
  72. let r = this.lessons.find(f => f.date == date && f.time == time);
  73. if (!r) return '--';
  74. else {
  75. let { subname, teaname = '' } = r;
  76. let text = `${subname}<br/><span style="color:red">${teaname}</span>`;
  77. return text;
  78. }
  79. },
  80. toPrint() {
  81. this.$print(this.$refs.print);
  82. },
  83. },
  84. filters: {
  85. getWeekDay(date) {
  86. return moment(date).format('dddd');
  87. },
  88. getDay(date) {
  89. return moment(date).format('MM月DD日');
  90. },
  91. },
  92. };
  93. </script>
  94. <style lang="less" scoped>
  95. @import '~@frame/style/timeTable.less';
  96. </style>