CardView.vue 3.5 KB

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