Bläddra i källkod

card store md

zhangjie 5 år sedan
förälder
incheckning
c30d1eb13a

+ 2 - 1
src/modules/card/components/elementPropEdit/EditExplain.vue

@@ -106,7 +106,8 @@ export default {
   },
   methods: {
     initData(val) {
-      this.modalForm = { ...val.parent };
+      const valInfo = val.parent || val;
+      this.modalForm = { ...valInfo };
       this.modalForm.endNumber =
         this.modalForm.startNumber + this.modalForm.questionsCount - 1;
     },

+ 2 - 2
src/modules/card/components/elementPropEdit/EditImage.vue

@@ -86,8 +86,8 @@ export default {
     },
     imageChange(e) {
       const file = e.target.files[0];
-      if (file.size > 20480) {
-        this.$message.error("图片大小不要超过20kb");
+      if (file.size > 100 * 1024) {
+        this.$message.error("图片大小不要超过100kb");
         return;
       }
       const reader = new FileReader();

+ 1 - 0
src/modules/card/elementModel.js

@@ -223,6 +223,7 @@ const EXPLAIN_CHILDREN_PROP = {
   // 解答题整体信息,EXPLAIN_PROP
   parent: {}
 };
+// tip属性存在时的条件:parent:大题的小题,container:题目内的子元素
 
 // 作文题
 const COMPOSITION_PROP = {

+ 35 - 13
src/modules/card/store.js

@@ -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 =