CardFreeView.vue 3.0 KB

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