CardView.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <div class="card-view">
  3. <template v-for="(page, pageNo) in pages">
  4. <div
  5. :id="`preview-page-box-${pageNo}`"
  6. :class="[
  7. 'page-box',
  8. `page-box-${cardConfig.pageSize}`,
  9. `page-box-${pageNo % 2}`,
  10. { 'page-box-less': pages.length <= 2 },
  11. ]"
  12. :key="pageNo"
  13. >
  14. <div v-if="!(pageNo % 2)" class="package-number">${packageCodeDom}</div>
  15. <!-- locator -->
  16. <div class="page-locator page-locator-top">
  17. <div
  18. v-for="elem in page.locators.top"
  19. :key="elem.id"
  20. :id="elem.id"
  21. class="page-locator-item"
  22. ></div>
  23. </div>
  24. <div class="page-locator page-locator-bottom">
  25. <div
  26. v-for="elem in page.locators.bottom"
  27. :key="elem.id"
  28. :id="elem.id"
  29. class="page-locator-item"
  30. ></div>
  31. </div>
  32. <!-- inner edit area -->
  33. <div class="page-main-inner">
  34. <div
  35. :class="['page-main', `page-main-${page.columns.length}`]"
  36. :style="{ margin: `0 -${page.columnGap / 2}px` }"
  37. >
  38. <div
  39. class="page-column"
  40. v-for="(column, columnNo) in page.columns"
  41. :key="columnNo"
  42. :style="{ padding: `0 ${page.columnGap / 2}px` }"
  43. >
  44. <div
  45. class="page-column-main"
  46. :id="[`column-${pageNo}-${columnNo}`]"
  47. >
  48. <div class="page-column-body" v-if="column.elements.length">
  49. <topic-element-preview
  50. class="page-column-element"
  51. v-for="element in column.elements"
  52. :key="element.id"
  53. :data="element"
  54. ></topic-element-preview>
  55. </div>
  56. <div class="page-column-body" v-else>
  57. <div
  58. class="page-column-forbid-area"
  59. v-if="cardConfig.showForbidArea"
  60. >
  61. <p>该区域严禁作答</p>
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. </div>
  68. <!-- outer edit area -->
  69. <div class="page-main-outer">
  70. <page-number
  71. type="rect"
  72. :total="pages.length"
  73. :current="pageNo + 1"
  74. ></page-number>
  75. <page-number
  76. type="text"
  77. :total="pages.length"
  78. :current="pageNo + 1"
  79. ></page-number>
  80. <elem-undertaking
  81. v-if="cardConfig.undertakingEnable && pageNo === pages.length - 1"
  82. :content="cardConfig.undertakingBody"
  83. :page-size="cardConfig.pageSize"
  84. ></elem-undertaking>
  85. <course-barcode
  86. v-if="pageNo % 2 === 0"
  87. :data="cardConfig"
  88. ></course-barcode>
  89. </div>
  90. </div>
  91. </template>
  92. </div>
  93. </template>
  94. <script>
  95. import TopicElementPreview from "./TopicElementPreview";
  96. import ElemUndertaking from "../elements/undertaking/ElemUndertaking.vue";
  97. import CourseBarcode from "./CourseBarcode.vue";
  98. import PageNumber from "./PageNumber";
  99. import previewTemp from "../previewTemp";
  100. import exchangeMixins from "../mixins/exchange";
  101. export default {
  102. name: "card-view",
  103. components: {
  104. TopicElementPreview,
  105. PageNumber,
  106. ElemUndertaking,
  107. CourseBarcode,
  108. },
  109. mixins: [exchangeMixins],
  110. props: {
  111. pages: {
  112. type: Array,
  113. default() {
  114. return [];
  115. },
  116. },
  117. cardConfig: {
  118. type: Object,
  119. default() {
  120. return {};
  121. },
  122. },
  123. },
  124. methods: {
  125. getPreviewTemp(htmlContent) {
  126. return previewTemp(htmlContent);
  127. },
  128. },
  129. };
  130. </script>