123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- /* 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,
- };
|