namCard.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <template>
  2. <div id="namCard">
  3. <el-row>
  4. <span v-if="display == 'list'">
  5. <el-col :span="24" class="one">
  6. <el-col :span="24" class="btn">
  7. <el-button type="primary" size="mini" @click="display = 'listView'">打印预览</el-button>
  8. </el-col>
  9. <el-col :span="24">
  10. <el-col :span="6" class="list" v-for="(item, index) in csList[now]" :key="index">
  11. <p class="txt">
  12. <span>吉林省高校学生就业能力拓展训练</span> <span>第{{ item.termname }}期</span> <span>{{ item.classname }}班</span>
  13. </p>
  14. <p v-if="item.name.length <= 4" class="namesmall">{{ item.name }}</p>
  15. <p v-else class="namelarge">{{ item.name }}</p>
  16. </el-col>
  17. </el-col>
  18. </el-col>
  19. </span>
  20. <span v-else>
  21. <el-col :span="24" class="two">
  22. <el-col :span="24" class="btn">
  23. <el-button type="primary" size="mini" @click="display = 'list'">返回</el-button>
  24. <el-button type="success" size="mini" @click="toPrint()">打印</el-button>
  25. </el-col>
  26. <el-col :span="24" class="printStyle" ref="print">
  27. <el-col :span="24" class="list" v-for="(item, index) in csList[now]" :key="index">
  28. <p>
  29. <span>吉林省高校学生就业能力拓展训练</span> <span>第{{ item.termname }}期</span> <span>{{ item.classname }}班</span>
  30. </p>
  31. <span v-if="item.name.length < 8">
  32. <div v-bind:class="[item.name.length >= 7 ? 'largesize' : 'smallsize']">
  33. {{ item.name }}
  34. </div>
  35. </span>
  36. <span v-else>
  37. <div class="superBigsize">
  38. {{ item.name }}
  39. </div>
  40. </span>
  41. </el-col>
  42. </el-col>
  43. </el-col>
  44. </span>
  45. </el-row>
  46. </div>
  47. </template>
  48. <script>
  49. import _ from 'lodash';
  50. import { mapState, createNamespacedHelpers } from 'vuex';
  51. export default {
  52. metaInfo: { title: '学生名单' },
  53. name: 'name-list',
  54. props: { list: { type: Array, default: () => [] } },
  55. components: {},
  56. data: function() {
  57. return {
  58. // 默认显示
  59. display: 'list',
  60. csList: [],
  61. now: 0,
  62. };
  63. },
  64. created() {},
  65. methods: {
  66. groupByClass() {
  67. let duplicate = _.cloneDeep(this.list);
  68. let group = _.flatten(_.toPairs(_.groupBy(duplicate, 'classid'))).filter(f => _.isArray(f));
  69. this.$set(this, `csList`, group);
  70. },
  71. toPrint() {
  72. this.$print(this.$refs.print);
  73. },
  74. },
  75. computed: {
  76. id() {
  77. return this.$route.query.id;
  78. },
  79. mainTitle() {
  80. let meta = this.$route.meta;
  81. let main = meta.title || '';
  82. let sub = meta.sub || '';
  83. let title = main + sub;
  84. return title;
  85. },
  86. },
  87. watch: {
  88. list: {
  89. handler(val) {
  90. if (val) this.groupByClass();
  91. },
  92. immediate: true,
  93. },
  94. },
  95. };
  96. </script>
  97. <style lang="less" scoped>
  98. .one {
  99. .btn {
  100. text-align: right;
  101. margin: 10px 0;
  102. }
  103. .list {
  104. height: 140px;
  105. border: 1px solid #000;
  106. padding: 5px 5px;
  107. p {
  108. float: left;
  109. width: 100%;
  110. text-align: center;
  111. }
  112. .txt {
  113. font-size: 14px;
  114. font-weight: bold;
  115. padding: 0 0 5px 0;
  116. }
  117. .namesmall {
  118. font-size: 55px;
  119. letter-spacing: 5px;
  120. padding: 15px 0;
  121. }
  122. .namelarge {
  123. font-size: 36px;
  124. letter-spacing: 5px;
  125. padding: 0;
  126. }
  127. }
  128. }
  129. .two {
  130. width: 842px;
  131. .btn {
  132. text-align: left;
  133. margin: 15px 0;
  134. }
  135. }
  136. .printStyle {
  137. width: 842px;
  138. // height: 1218px;
  139. .list {
  140. width: 335px;
  141. height: 135px;
  142. text-align: center;
  143. border: 1px solid #ccc;
  144. p:first-child {
  145. font-size: 15px;
  146. font-weight: bold;
  147. padding: 5px 0;
  148. }
  149. .superBigsize {
  150. font-size: 30px;
  151. padding: 30px 0;
  152. }
  153. .largesize {
  154. font-size: 35px;
  155. padding: 25px 0;
  156. }
  157. .smallsize {
  158. font-size: 50px;
  159. padding: 15px 0;
  160. }
  161. }
  162. }
  163. </style>