CardFreeView.vue 3.3 KB

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