/* eslint-disable no-unused-vars */ import { deepCopy, getNumList } from "./plugins/utils"; import { getModel as getCardHeadModel } from "./elements/card-head/model"; import { getModel as getTopicHeadModel } from "./elements/topic-head/model"; // element import { getModel as createLines } from "./elements/lines/model"; import { getModel as createLine } from "./elements/line/model"; import { getModel as createText } from "./elements/text/model"; import { getModel as createImage } from "./elements/image/model"; import { getModel as createGrids } from "./elements/grids/model"; import { getModel as createComposition, getFullModel as getCompositionElements, } from "./elements/composition/model"; import { getModel as createFillQuestion, getFullModel as getFillQuesitonElements, } from "./elements/fill-question/model"; import { getModel as createFillLine, getFullModel as getFillLineElements, } from "./elements/fill-line/model"; import { getModel as createExplain, getFullModel as getExplainElements, } from "./elements/explain/model"; import { getModel as createForbidArea } from "./elements/forbid-area/model"; // page relate ------------------- > // 页面 const PAGE = { type: "PAGE", pageSize: "A3", columnNumber: 2, columnGap: 20, locators: [], globals: [], columns: [], }; // 可编辑栏 const COLUMN = { type: "COLUMN", x: "", y: "", w: "", h: "", isFull: false, // 是否已经填满元素 elements: [], }; // 定位点 const LOCATOR = { type: "LOCATOR", x: "", y: "", w: "", h: "", }; // available infos const EDITABLE_ELEMENT = [ "LINE_HORIZONTAL", "LINE_VERTICAL", "LINES", "TEXT", "IMAGE", "GRIDS", ]; const OTHER_ELEMENT = ["TOPIC_HEAD", "CARD_HEAD"]; const EDITABLE_TOPIC = [ "FILL_QUESTION_SIMPLE", "FILL_QUESTION_MULTIPLY", "FILL_QUESTION_BOOLEAN", "FILL_LINE", "EXPLAIN", "COMPOSITION", ]; const EDITABLE_NOT_TOPIC = ["FORBID_AREA"]; const ELEMENT_INFOS = { LINES: { name: "多横线", getModel: createLines, }, LINE_HORIZONTAL: { name: "横线", getModel: () => createLine("HORIZONTAL"), }, LINE_VERTICAL: { name: "竖线", getModel: () => createLine("VERTICAL"), }, TEXT: { name: "文本", getModel: createText, }, IMAGE: { name: "图片", getModel: createImage, }, GRIDS: { name: "网格", getModel: createGrids, }, FILL_QUESTION_SIMPLE: { name: "单选题", getModel: createFillQuestion, }, FILL_QUESTION_MULTIPLY: { name: "多选题", getModel: () => createFillQuestion({ isMultiply: true }), }, FILL_QUESTION_BOOLEAN: { name: "判断题", getModel: () => createFillQuestion({ isBoolean: true, optionCount: 2 }), }, FILL_LINE: { name: "填空题", getModel: createFillLine, }, EXPLAIN: { name: "解答题", getModel: createExplain, }, COMPOSITION: { name: "作文题", getModel: createComposition, }, FORBID_AREA: { name: "禁答区", getModel: createForbidArea, }, }; const ELEMENT_LIST = EDITABLE_ELEMENT.map((type) => { return { ...ELEMENT_INFOS[type], type, }; }); const TOPIC_LIST = EDITABLE_TOPIC.map((type) => { return { ...ELEMENT_INFOS[type], type, }; }); const NOT_TOPIC_LIST = EDITABLE_NOT_TOPIC.map((type) => { return { ...ELEMENT_INFOS[type], type, }; }); // 获取元件默认数据结构 const getElementModel = (type) => { return ELEMENT_INFOS[type].getModel(); }; const getFillQuestionName = (element) => { if (element.isBoolean) return "判断题"; if (element.isMultiply) return "多选题"; return "单选题"; }; const getElementName = (type) => { return ELEMENT_INFOS[type]?.name; }; const getLocators = (pageNo) => { return { top: [ { id: `locator-${pageNo}-00`, ...LOCATOR, }, { id: `locator-${pageNo}-01`, ...LOCATOR, }, ], bottom: [ { id: `locator-${pageNo}-10`, ...LOCATOR, }, ], }; }; // 创建新页面 const getNewPage = (pageNo, { pageSize, columnNumber }) => { let npage = deepCopy(PAGE); npage.pageSize = pageSize; npage.columnNumber = columnNumber; if ( (pageSize === "8K" && columnNumber === 4) || (pageSize === "A3" && columnNumber === 4) || (pageSize === "A4" && columnNumber === 2) ) { npage.columnGap = 10; } npage.locators = getLocators(pageNo); npage.columns = getNumList(columnNumber).map((item, index) => { return deepCopy(COLUMN); }); return npage; }; export { getElementModel, getElementName, getFillQuestionName, getNewPage, getCardHeadModel, getTopicHeadModel, getFillQuesitonElements, getFillLineElements, getExplainElements, getCompositionElements, ELEMENT_LIST, TOPIC_LIST, NOT_TOPIC_LIST, EDITABLE_TOPIC, EDITABLE_NOT_TOPIC, OTHER_ELEMENT, };