|
@@ -50,25 +50,43 @@ const mutations = {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+/**
|
|
|
+ * 获取所有相同元素的位置信息
|
|
|
+ * @param {Object} element 元素
|
|
|
+ * @param {Object} pages 页面结构
|
|
|
+ */
|
|
|
const fetchElementPositionInfos = (element, pages) => {
|
|
|
- // 当为解答题时,element传入的值是EXPLAIN_PROP
|
|
|
let postionInfos = [];
|
|
|
for (let i = 0, ilen = pages.length; i < ilen; i++) {
|
|
|
for (let j = 0, jlen = pages[i].columns.length; j < jlen; j++) {
|
|
|
pages[i].columns[j].elements.forEach((item, eindex) => {
|
|
|
- const itemId =
|
|
|
- item.type === "EXPLAIN_CHILDREN"
|
|
|
- ? item.parent && item.parent.id
|
|
|
- : item.id;
|
|
|
+ if (item.id === element.id) {
|
|
|
+ postionInfos.push({ _pageNo: i, _columnNo: j, _elementNo: eindex });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return postionInfos;
|
|
|
+};
|
|
|
|
|
|
- if (itemId === element.id) {
|
|
|
+/**
|
|
|
+ * 获取所有含有相同parent属性的元素位置信息
|
|
|
+ * @param {Object} parentElement 父元素
|
|
|
+ * @param {Object} pages 页面结构
|
|
|
+ */
|
|
|
+const fetchAllRelateParentElementPositionInfos = (parentElement, pages) => {
|
|
|
+ // 当为解答题时,parentElement传入的值是EXPLAIN
|
|
|
+ let postionInfos = [];
|
|
|
+ for (let i = 0, ilen = pages.length; i < ilen; i++) {
|
|
|
+ for (let j = 0, jlen = pages[i].columns.length; j < jlen; j++) {
|
|
|
+ pages[i].columns[j].elements.forEach((item, eindex) => {
|
|
|
+ if (item["parent"] && item.parent.id === parentElement.id) {
|
|
|
postionInfos.push({ _pageNo: i, _columnNo: j, _elementNo: eindex });
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
- // 反序获得的位置数组,方便批量删除操作。
|
|
|
- return postionInfos.reverse();
|
|
|
+ return postionInfos;
|
|
|
};
|
|
|
|
|
|
const fetchFirstSubjectiveTopicPositionInfo = pages => {
|
|
@@ -115,10 +133,13 @@ const actions = {
|
|
|
modifyElement({ state, commit, dispatch }, element) {
|
|
|
// 解答题
|
|
|
if (element.type === "EXPLAIN") {
|
|
|
- const positionInfos = fetchElementPositionInfos(element, state.pages);
|
|
|
+ const positionInfos = fetchAllRelateParentElementPositionInfos(
|
|
|
+ element,
|
|
|
+ state.pages
|
|
|
+ );
|
|
|
if (positionInfos.length) {
|
|
|
// 删除所有解答题
|
|
|
- positionInfos.forEach(pos => {
|
|
|
+ positionInfos.reverse().forEach(pos => {
|
|
|
const elems =
|
|
|
state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
|
elems.splice(pos._elementNo, 1);
|
|
@@ -139,7 +160,7 @@ const actions = {
|
|
|
} else {
|
|
|
const positionInfos = fetchElementPositionInfos(element, state.pages);
|
|
|
if (positionInfos.length) {
|
|
|
- const pos = positionInfos.pop();
|
|
|
+ const pos = positionInfos[0];
|
|
|
const elements =
|
|
|
state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
|
elements.splice(pos._elementNo, 1, element);
|
|
@@ -175,12 +196,12 @@ const actions = {
|
|
|
removeElement({ state, commit }, element) {
|
|
|
// 解答题时,删除所有小题。
|
|
|
if (element.type === "EXPLAIN_CHILDREN") {
|
|
|
- const positionInfos = fetchElementPositionInfos(
|
|
|
+ const positionInfos = fetchAllRelateParentElementPositionInfos(
|
|
|
element.parent,
|
|
|
state.pages
|
|
|
);
|
|
|
if (positionInfos.length) {
|
|
|
- positionInfos.forEach(pos => {
|
|
|
+ positionInfos.reverse().forEach(pos => {
|
|
|
const elems =
|
|
|
state.pages[pos._pageNo].columns[pos._columnNo].elements;
|
|
|
elems.splice(pos._elementNo, 1);
|
|
@@ -224,6 +245,7 @@ const actions = {
|
|
|
element.container,
|
|
|
state.pages
|
|
|
);
|
|
|
+
|
|
|
if (!positionInfos.length) return;
|
|
|
positionInfos.forEach(pos => {
|
|
|
const columnElement =
|