CardView.vue 3.1 KB

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