model.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { getElementId, randomCode, deepCopy } from "../../plugins/utils";
  2. const EXPLAIN_PROP = {
  3. type: "EXPLAIN",
  4. sign: "subjective",
  5. topicNo: null,
  6. topicName: "",
  7. nameFontSize: "14px",
  8. nameFontWeight: 400,
  9. startNumber: 1,
  10. questionsCount: 1,
  11. explainHeight: 250,
  12. };
  13. // 解答题-小题
  14. const MODEL = {
  15. type: "EXPLAIN",
  16. x: 0,
  17. y: 0,
  18. w: 0,
  19. h: 250,
  20. minHeight: 60,
  21. sign: "subjective",
  22. topicNo: null,
  23. isCovered: false,
  24. // 是否是小题的最后一个答题区,初始每个小题只有一个答题区,默认为true
  25. isLast: true,
  26. // 是否是小题扩展的区域
  27. isExtend: false,
  28. // 是否展示解答题题目内容,解答题第1小题的第1个答题区需要显示解答题题目内容
  29. showTitle: false,
  30. // 小题序号
  31. serialNumber: 0,
  32. // 每一个解答题小题都可以包含其他基础元件,这些基础元件都用绝对定位
  33. elements: [],
  34. // 解答题整体信息,EXPLAIN_PROP
  35. parent: {},
  36. };
  37. // tip属性存在时的条件:parent:大题的小题,container:题目内的子元素
  38. const getModel = (preSetData = {}) => {
  39. const model = Object.assign({}, EXPLAIN_PROP, preSetData);
  40. return {
  41. id: getElementId(),
  42. key: randomCode(),
  43. ...model,
  44. };
  45. };
  46. const getFullModel = (explainProp) => {
  47. const parent = { ...explainProp };
  48. let elements = [];
  49. for (let i = 0; i < explainProp.questionsCount; i++) {
  50. let child = Object.assign({}, deepCopy(MODEL), {
  51. id: getElementId(),
  52. key: randomCode(),
  53. w: parent.w,
  54. h: parent.explainHeight,
  55. topicNo: parent.topicNo,
  56. serialNumber: i + explainProp.startNumber,
  57. parent,
  58. });
  59. elements[i] = child;
  60. }
  61. elements[0].showTitle = true;
  62. return elements;
  63. };
  64. export { EXPLAIN_PROP, MODEL, getModel, getFullModel };