elementModel.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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. pageSize: "A3",
  32. columnNumber: 2,
  33. columnGap: 20,
  34. locators: [],
  35. globals: [],
  36. columns: []
  37. };
  38. // 可编辑栏
  39. const COLUMN = {
  40. type: "COLUMN",
  41. x: "",
  42. y: "",
  43. w: "",
  44. h: "",
  45. isFull: false, // 是否已经填满元素
  46. elements: []
  47. };
  48. // 定位点
  49. const LOCATOR = {
  50. type: "LOCATOR",
  51. x: "",
  52. y: "",
  53. w: "",
  54. h: ""
  55. };
  56. // available infos
  57. const EDITABLE_ELEMENT = [
  58. "LINE_HORIZONTAL",
  59. "LINE_VERTICAL",
  60. "LINES",
  61. "TEXT",
  62. "IMAGE",
  63. "GRIDS"
  64. ];
  65. const EDITABLE_TOPIC = ["FILL_QUESTION", "FILL_LINE", "EXPLAIN", "COMPOSITION"];
  66. const ELEMENT_INFOS = {
  67. LINES: {
  68. name: "多横线",
  69. getModel: createLines
  70. },
  71. LINE_HORIZONTAL: {
  72. name: "横线",
  73. getModel: () => createLine("HORIZONTAL")
  74. },
  75. LINE_VERTICAL: {
  76. name: "竖线",
  77. getModel: () => createLine("VERTICAL")
  78. },
  79. TEXT: {
  80. name: "文本",
  81. getModel: createText
  82. },
  83. IMAGE: {
  84. name: "图片",
  85. getModel: createImage
  86. },
  87. GRIDS: {
  88. name: "网格",
  89. getModel: createGrids
  90. },
  91. FILL_QUESTION: {
  92. name: "选择题",
  93. getModel: createFillQuestion
  94. },
  95. FILL_LINE: {
  96. name: "填空题",
  97. getModel: createFillLine
  98. },
  99. EXPLAIN: {
  100. name: "解答题",
  101. getModel: createExplain
  102. },
  103. COMPOSITION: {
  104. name: "作文题",
  105. getModel: createComposition
  106. }
  107. };
  108. const ELEMENT_LIST = EDITABLE_ELEMENT.map(type => {
  109. return {
  110. ...ELEMENT_INFOS[type],
  111. type
  112. };
  113. });
  114. const TOPIC_LIST = EDITABLE_TOPIC.map(type => {
  115. return {
  116. ...ELEMENT_INFOS[type],
  117. type
  118. };
  119. });
  120. // 获取元件默认数据结构
  121. const getElementModel = type => {
  122. return ELEMENT_INFOS[type].getModel();
  123. };
  124. const getElementName = type => {
  125. return ELEMENT_INFOS[type].name;
  126. };
  127. const getLocators = pageNo => {
  128. return {
  129. top: [
  130. {
  131. id: `locator-${pageNo}-00`,
  132. ...LOCATOR
  133. },
  134. {
  135. id: `locator-${pageNo}-01`,
  136. ...LOCATOR
  137. }
  138. ],
  139. bottom: [
  140. {
  141. id: `locator-${pageNo}-10`,
  142. ...LOCATOR
  143. }
  144. ]
  145. };
  146. };
  147. // 创建新页面
  148. const getNewPage = (pageNo, { pageSize, columnNumber }) => {
  149. let npage = deepCopy(PAGE);
  150. npage.pageSize = pageSize;
  151. npage.columnNumber = columnNumber;
  152. if (
  153. (pageSize === "A3" && columnNumber === 4) ||
  154. (pageSize === "A4" && columnNumber === 2)
  155. ) {
  156. npage.columnGap = 10;
  157. }
  158. npage.locators = getLocators(pageNo);
  159. npage.columns = getNumList(columnNumber).map((item, index) => {
  160. return deepCopy(COLUMN);
  161. });
  162. return npage;
  163. };
  164. export {
  165. getElementModel,
  166. getElementName,
  167. getNewPage,
  168. getCardHeadModel,
  169. getTopicHeadModel,
  170. getFillQuesitonElements,
  171. getFillLineElements,
  172. getExplainElements,
  173. getCompositionElements,
  174. ELEMENT_LIST,
  175. TOPIC_LIST
  176. };