elementModel.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /* eslint-disable no-unused-vars */
  2. import { deepCopy, getNumList } from "./plugins/utils";
  3. import { getModel as getCardHeadModel } from "./elements/card-head/model";
  4. import { getModel as getTopicHeadModel } from "./elements/topic-head/model";
  5. // element
  6. import { getModel as createLines } from "./elements/lines/model";
  7. import { getModel as createLine } from "./elements/line/model";
  8. import { getModel as createText } from "./elements/text/model";
  9. import { getModel as createImage } from "./elements/image/model";
  10. import { getModel as createGrids } from "./elements/grids/model";
  11. import {
  12. getModel as createComposition,
  13. getFullModel as getCompositionElements
  14. } from "./elements/composition/model";
  15. import {
  16. getModel as createFillQuestion,
  17. getFullModel as getFillQuesitonElements
  18. } from "./elements/fill-question/model";
  19. import {
  20. getModel as createFillLine,
  21. getFullModel as getFillLineElements
  22. } from "./elements/fill-line/model";
  23. import {
  24. getModel as createExplain,
  25. getFullModel as getExplainElements
  26. } from "./elements/explain/model";
  27. // page relate ------------------- >
  28. // 页面
  29. const PAGE = {
  30. type: "PAGE",
  31. columnGap: 20,
  32. locators: [],
  33. globals: [],
  34. columns: []
  35. };
  36. // 可编辑栏
  37. const COLUMN = {
  38. type: "COLUMN",
  39. x: "",
  40. y: "",
  41. w: "",
  42. h: "",
  43. isFull: false, // 是否已经填满元素
  44. elements: []
  45. };
  46. // 定位点
  47. const LOCATOR = {
  48. type: "LOCATOR",
  49. x: "",
  50. y: "",
  51. w: "",
  52. h: ""
  53. };
  54. // available infos
  55. const EDITABLE_ELEMENT = [
  56. "LINE_HORIZONTAL",
  57. "LINE_VERTICAL",
  58. "LINES",
  59. "TEXT",
  60. "IMAGE",
  61. "GRIDS"
  62. ];
  63. const EDITABLE_TOPIC = ["FILL_QUESTION", "FILL_LINE", "EXPLAIN", "COMPOSITION"];
  64. const ELEMENT_INFOS = {
  65. LINES: {
  66. name: "多横线",
  67. getModel: createLines
  68. },
  69. LINE_HORIZONTAL: {
  70. name: "横线",
  71. getModel: () => createLine("HORIZONTAL")
  72. },
  73. LINE_VERTICAL: {
  74. name: "竖线",
  75. getModel: () => createLine("VERTICAL")
  76. },
  77. TEXT: {
  78. name: "文本",
  79. getModel: createText
  80. },
  81. IMAGE: {
  82. name: "图片",
  83. getModel: createImage
  84. },
  85. GRIDS: {
  86. name: "网格",
  87. getModel: createGrids
  88. },
  89. FILL_QUESTION: {
  90. name: "选择题",
  91. getModel: createFillQuestion
  92. },
  93. FILL_LINE: {
  94. name: "填空题",
  95. getModel: createFillLine
  96. },
  97. EXPLAIN: {
  98. name: "解答题",
  99. getModel: createExplain
  100. },
  101. COMPOSITION: {
  102. name: "作文题",
  103. getModel: createComposition
  104. }
  105. };
  106. const ELEMENT_LIST = EDITABLE_ELEMENT.map(type => {
  107. return {
  108. ...ELEMENT_INFOS[type],
  109. type
  110. };
  111. });
  112. const TOPIC_LIST = EDITABLE_TOPIC.map(type => {
  113. return {
  114. ...ELEMENT_INFOS[type],
  115. type
  116. };
  117. });
  118. // 获取元件默认数据结构
  119. const getElementModel = type => {
  120. return ELEMENT_INFOS[type].getModel();
  121. };
  122. const getElementName = type => {
  123. return ELEMENT_INFOS[type].name;
  124. };
  125. // 创建新页面
  126. const getNewPage = (pageNo, columnNumber = 2) => {
  127. let npage = deepCopy(PAGE);
  128. if (columnNumber === 4) {
  129. npage.columnGap = 10;
  130. }
  131. npage.locators = getNumList(3).map((item, index) => {
  132. return [
  133. {
  134. ...LOCATOR,
  135. id: `locator-${pageNo}-${index}0`
  136. },
  137. {
  138. ...LOCATOR,
  139. id: `locator-${pageNo}-${index}1`
  140. }
  141. ];
  142. });
  143. npage.columns = getNumList(columnNumber).map((item, index) => {
  144. return deepCopy(COLUMN);
  145. });
  146. return npage;
  147. };
  148. export {
  149. getElementModel,
  150. getElementName,
  151. getNewPage,
  152. getCardHeadModel,
  153. getTopicHeadModel,
  154. getFillQuesitonElements,
  155. getFillLineElements,
  156. getExplainElements,
  157. getCompositionElements,
  158. ELEMENT_LIST,
  159. TOPIC_LIST
  160. };