CardView.vue 3.4 KB

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