|
@@ -1,6 +1,7 @@
|
|
import {
|
|
import {
|
|
getExplainChildren,
|
|
getExplainChildren,
|
|
getFillQuesitons,
|
|
getFillQuesitons,
|
|
|
|
+ getFillLine,
|
|
getNewPage,
|
|
getNewPage,
|
|
getTopicHead,
|
|
getTopicHead,
|
|
getElementId
|
|
getElementId
|
|
@@ -47,7 +48,6 @@ const mutations = {
|
|
},
|
|
},
|
|
initTopicNos(state) {
|
|
initTopicNos(state) {
|
|
state.topicNos = getPageTopicNos(state.pages);
|
|
state.topicNos = getPageTopicNos(state.pages);
|
|
- console.log(state.topicNos);
|
|
|
|
},
|
|
},
|
|
initState(state) {
|
|
initState(state) {
|
|
state.curElement = {};
|
|
state.curElement = {};
|
|
@@ -152,51 +152,48 @@ const findElementById = (id, pages) => {
|
|
return curElement;
|
|
return curElement;
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+const createFunc = {
|
|
|
|
+ EXPLAIN(element) {
|
|
|
|
+ return getExplainChildren(element);
|
|
|
|
+ },
|
|
|
|
+ FILL_QUESTION(element) {
|
|
|
|
+ return getFillQuesitons(element, state.cardConfig.columnNumber);
|
|
|
|
+ },
|
|
|
|
+ FILL_LINE(element) {
|
|
|
|
+ return getFillLine(element);
|
|
|
|
+ },
|
|
|
|
+ COMPOSITION(element) {
|
|
|
|
+ return [element];
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+
|
|
const actions = {
|
|
const actions = {
|
|
modifyElement({ state, commit, dispatch }, element) {
|
|
modifyElement({ state, commit, dispatch }, element) {
|
|
- // 解答题
|
|
|
|
- if (element.type === "EXPLAIN") {
|
|
|
|
- const positionInfos = fetchAllRelateParentElementPositionInfos(
|
|
|
|
- element,
|
|
|
|
- state.pages
|
|
|
|
- );
|
|
|
|
|
|
+ if (element.type === "COMPOSITION") {
|
|
|
|
+ const positionInfos = fetchElementPositionInfos(element, state.pages);
|
|
if (positionInfos.length) {
|
|
if (positionInfos.length) {
|
|
- // 删除所有解答题
|
|
|
|
- positionInfos.reverse().forEach(pos => {
|
|
|
|
- const elems =
|
|
|
|
- state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
|
|
- elems.splice(pos._elementNo, 1);
|
|
|
|
- });
|
|
|
|
- // 创建新的解答题元素
|
|
|
|
- const newElements = getExplainChildren(element);
|
|
|
|
- const pos = positionInfos.pop();
|
|
|
|
- newElements.forEach((newElement, index) => {
|
|
|
|
- state.pages[pos._pageNo].columns[pos._columnNo].elements.splice(
|
|
|
|
- pos._elementNo + index,
|
|
|
|
- 0,
|
|
|
|
- newElement
|
|
|
|
- );
|
|
|
|
- });
|
|
|
|
|
|
+ const pos = positionInfos[0];
|
|
|
|
+ const elements =
|
|
|
|
+ state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
|
|
+ elements.splice(pos._elementNo, 1, element);
|
|
} else {
|
|
} else {
|
|
dispatch("addElement", element);
|
|
dispatch("addElement", element);
|
|
}
|
|
}
|
|
- } else if (element.type === "FILL_QUESTION") {
|
|
|
|
|
|
+ } else {
|
|
|
|
+ // 非作文题都是拆分题,即同一个题拆分成多个小题展示
|
|
const positionInfos = fetchAllRelateParentElementPositionInfos(
|
|
const positionInfos = fetchAllRelateParentElementPositionInfos(
|
|
element,
|
|
element,
|
|
state.pages
|
|
state.pages
|
|
);
|
|
);
|
|
if (positionInfos.length) {
|
|
if (positionInfos.length) {
|
|
- // 删除所有相关选择题
|
|
|
|
|
|
+ // 删除所有解答题
|
|
positionInfos.reverse().forEach(pos => {
|
|
positionInfos.reverse().forEach(pos => {
|
|
const elems =
|
|
const elems =
|
|
state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
elems.splice(pos._elementNo, 1);
|
|
elems.splice(pos._elementNo, 1);
|
|
});
|
|
});
|
|
- // 创建新的选择题元素
|
|
|
|
- const newElements = getFillQuesitons(
|
|
|
|
- element,
|
|
|
|
- state.cardConfig.columnNumber
|
|
|
|
- );
|
|
|
|
|
|
+ // 创建新的解答题元素
|
|
|
|
+ const newElements = createFunc[element.type](element);
|
|
const pos = positionInfos.pop();
|
|
const pos = positionInfos.pop();
|
|
newElements.forEach((newElement, index) => {
|
|
newElements.forEach((newElement, index) => {
|
|
state.pages[pos._pageNo].columns[pos._columnNo].elements.splice(
|
|
state.pages[pos._pageNo].columns[pos._columnNo].elements.splice(
|
|
@@ -208,16 +205,6 @@ const actions = {
|
|
} else {
|
|
} else {
|
|
dispatch("addElement", element);
|
|
dispatch("addElement", element);
|
|
}
|
|
}
|
|
- } else {
|
|
|
|
- const positionInfos = fetchElementPositionInfos(element, state.pages);
|
|
|
|
- if (positionInfos.length) {
|
|
|
|
- const pos = positionInfos[0];
|
|
|
|
- const elements =
|
|
|
|
- state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
|
|
- elements.splice(pos._elementNo, 1, element);
|
|
|
|
- } else {
|
|
|
|
- dispatch("addElement", element);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
commit("setCurElement", element);
|
|
commit("setCurElement", element);
|
|
},
|
|
},
|
|
@@ -233,14 +220,7 @@ const actions = {
|
|
}
|
|
}
|
|
|
|
|
|
const elements = state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
const elements = state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
- let preElements = [];
|
|
|
|
- if (element.type === "EXPLAIN") {
|
|
|
|
- preElements = getExplainChildren(element);
|
|
|
|
- } else if (element.type === "FILL_QUESTION") {
|
|
|
|
- preElements = getFillQuesitons(element, state.cardConfig.columnNumber);
|
|
|
|
- } else {
|
|
|
|
- preElements = [element];
|
|
|
|
- }
|
|
|
|
|
|
+ let preElements = createFunc[element.type](element);
|
|
preElements.forEach(preElement => {
|
|
preElements.forEach(preElement => {
|
|
elements.push(preElement);
|
|
elements.push(preElement);
|
|
});
|
|
});
|
|
@@ -251,11 +231,16 @@ const actions = {
|
|
state.pages[0].columns[0].elements.splice(0, 1, element);
|
|
state.pages[0].columns[0].elements.splice(0, 1, element);
|
|
},
|
|
},
|
|
removeElement({ state, commit }, element) {
|
|
removeElement({ state, commit }, element) {
|
|
- // 解答题时,删除所有小题。
|
|
|
|
- if (
|
|
|
|
- element.type === "EXPLAIN_CHILDREN" ||
|
|
|
|
- element.type === "FILL_QUESTION"
|
|
|
|
- ) {
|
|
|
|
|
|
+ if (element.type === "COMPOSITION") {
|
|
|
|
+ const positionInfos = fetchElementPositionInfos(element, state.pages);
|
|
|
|
+ if (!positionInfos.length) return;
|
|
|
|
+ positionInfos.forEach(pos => {
|
|
|
|
+ const elements =
|
|
|
|
+ state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
|
|
+ elements.splice(pos._elementNo, 1);
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ // 非作文题,删除所有小题。
|
|
const positionInfos = fetchAllRelateParentElementPositionInfos(
|
|
const positionInfos = fetchAllRelateParentElementPositionInfos(
|
|
element.parent,
|
|
element.parent,
|
|
state.pages
|
|
state.pages
|
|
@@ -267,15 +252,9 @@ const actions = {
|
|
elems.splice(pos._elementNo, 1);
|
|
elems.splice(pos._elementNo, 1);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
- } else {
|
|
|
|
- const positionInfos = fetchElementPositionInfos(element, state.pages);
|
|
|
|
- if (!positionInfos.length) return;
|
|
|
|
- positionInfos.forEach(pos => {
|
|
|
|
- const elements =
|
|
|
|
- state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
|
|
- elements.splice(pos._elementNo, 1);
|
|
|
|
- });
|
|
|
|
}
|
|
}
|
|
|
|
+ // 删除大题题号
|
|
|
|
+ state.topicNos.splice(state.topicNos.indexOf(element.topicNo), 1);
|
|
|
|
|
|
commit("setCurElement", {});
|
|
commit("setCurElement", {});
|
|
},
|
|
},
|
|
@@ -350,6 +329,8 @@ const actions = {
|
|
if (elementDom) {
|
|
if (elementDom) {
|
|
element.h = elementDom.offsetHeight;
|
|
element.h = elementDom.offsetHeight;
|
|
element.w = elementDom.offsetWidth;
|
|
element.w = elementDom.offsetWidth;
|
|
|
|
+ element.isCovered =
|
|
|
|
+ elementDom.offsetHeight < elementDom.firstChild.offsetHeight;
|
|
}
|
|
}
|
|
// 过滤掉所有topic-head元素,这个元素是动态加的,页面重排时可能会添加重复元件。
|
|
// 过滤掉所有topic-head元素,这个元素是动态加的,页面重排时可能会添加重复元件。
|
|
if (element.sign && element.type !== "TOPIC_HEAD") {
|
|
if (element.sign && element.type !== "TOPIC_HEAD") {
|