فهرست منبع

修改目录及修改选中样式

yangg 4 ماه پیش
والد
کامیت
4552e6bb45
2فایلهای تغییر یافته به همراه79 افزوده شده و 30 حذف شده
  1. 3 2
      ui/src/views/system/document/com/editor.vue
  2. 76 28
      ui/src/views/system/document/create.vue

+ 3 - 2
ui/src/views/system/document/com/editor.vue

@@ -18,9 +18,9 @@
           <div
             :key="index"
             class="layers"
-            :class="comIndex == index ? 'active-layer' : ''"
+           
           >
-           <!--  <div class="drag-handle" draggable>
+           <!-- :class="comIndex == index ? 'active-layer' : ''"  <div class="drag-handle" draggable>
               <img src="@/icons/svg/drag.svg" style="width: 20px;" icon-class="drag" />
             </div> -->
             <!-- :options="categoryList":props="props" -->
@@ -250,6 +250,7 @@ export default {
     },
     comIndex: {
       handler(val) {
+        console.log(val)
         if (val <= 0) return;
         this.comList = this.comList.map((it) => {
           it.isEdit = 2;

+ 76 - 28
ui/src/views/system/document/create.vue

@@ -855,7 +855,8 @@
               :key="index"
               :label="item.name"
               :value="item.id"
-            /> -->
+            />
+            112 -->
             <el-option label="官方模板" :value="1" />
             <el-option label="私有模板" :value="2" />
             <el-option label="共享模板" :value="3" />
@@ -2434,7 +2435,9 @@ export default {
           moduleIndex: this.comIndex,
         };
 
-        com.attrs.push(directoryItem);
+        // 确保按照正确的顺序插入
+        const insertIndex = this.findInsertPosition(com.attrs, directoryItem);
+        com.attrs.splice(insertIndex, 0, directoryItem);
 
         // 更新文本内容
         this.insertCmd = {
@@ -2454,6 +2457,47 @@ export default {
       }
     },
 
+    // 添加新方法:找到正确的插入位置
+    findInsertPosition(attrs, newItem) {
+      const directories = attrs.filter(attr => attr.type === "Directory");
+      
+      // 如果没有其他目录项,直接添加到末尾
+      if (!directories.length) {
+        return attrs.length;
+      }
+
+      // 找到合适的插入位置
+      for (let i = 0; i < directories.length; i++) {
+        const current = directories[i];
+        
+        // 比较层级和编号
+        if (newItem.level < current.level || 
+            (newItem.level === current.level && 
+             this.compareNumbers(newItem.number, current.number) < 0)) {
+          // 找到attrs中对应的实际位置
+          return attrs.indexOf(current);
+        }
+      }
+
+      // 如果没找到合适的位置,添加到末尾
+      return attrs.length;
+    },
+
+    // 添加新方法:比较目录编号
+    compareNumbers(num1, num2) {
+      const parts1 = num1.split('.').map(Number);
+      const parts2 = num2.split('.').map(Number);
+      
+      for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
+        const n1 = parts1[i] || 0;
+        const n2 = parts2[i] || 0;
+        if (n1 !== n2) {
+          return n1 - n2;
+        }
+      }
+      return 0;
+    },
+
     // 添加 findParentNumber 方法
     findParentNumber(moduleIndex, level) {
       if (level <= 1) {
@@ -3783,67 +3827,71 @@ export default {
         }
 
         let catalogData = [];
+        let levelMap = new Map(); // 用于跟踪每个层级的最后一个节点
 
         coms.forEach((item, moduleIndex) => {
           if (!item || !item.attrs) return;
 
           // 获取所有Directory类型的属性并排序
           const directoryAttrs = item.attrs
-            .filter((attr) => attr && attr.type === "Directory")
+            .filter(attr => attr && attr.type === "Directory")
             .sort((a, b) => {
-              if (!a || !b) return 0;
-              return (a.number || "").localeCompare(b.number || "", undefined, {
-                numeric: true,
-              });
+              if (a.level !== b.level) return a.level - b.level;
+              return this.compareNumbers(a.number, b.number);
             });
 
-          directoryAttrs.forEach((attr) => {
+          directoryAttrs.forEach(attr => {
             if (!attr) return;
 
-            // 确保目录内容正确显示
             const content = attr.content || attr.name || "";
-            const number = this.generateDirectoryNumber(
-              moduleIndex,
-              attr.level
-            );
-
             const catalogItem = {
               id: `${moduleIndex}-${attr.id || ""}`,
-              label: `${content}`.trim(),/* ${number}  */
+              label: `${content}`.trim(),
               level: attr.level || 1,
               moduleIndex: moduleIndex,
-              number: number,
+              number: attr.number,
               children: [],
             };
 
-            // 更新原始属性的编号和内容
-            attr.number = number;
-            attr.content = content;
-
-            // 根据level确定目录层级
+            // 根据层级放置节点
             if (attr.level === 1) {
               catalogData.push(catalogItem);
+              levelMap.set(1, catalogItem);
             } else {
-              const parent = this.findParentDirectory(catalogData, number);
+              // 找到父节点
+              const parentLevel = attr.level - 1;
+              const parent = levelMap.get(parentLevel);
+              
               if (parent) {
-                parent.children = parent.children || [];
+                if (!parent.children) parent.children = [];
                 parent.children.push(catalogItem);
               }
             }
+
+            // 更新当前层级的最后一个节点
+            levelMap.set(attr.level, catalogItem);
           });
         });
 
-        // 更新目录数据
-        this.catalogData = this.sortCatalogData(catalogData);
-
-        // 更新原始组件中的目录信息
-        this.updateComponentDirectories(coms);
+        // 递归排序所有层级
+        this.catalogData = this.sortCatalogDataRecursive(catalogData);
       } catch (error) {
         console.error("Error updating catalog:", error);
         this.catalogData = [];
       }
     },
 
+    // 添加新方法:递归排序目录数据
+    sortCatalogDataRecursive(data) {
+      return data.sort((a, b) => this.compareNumbers(a.number, b.number))
+        .map(item => {
+          if (item.children && item.children.length > 0) {
+            item.children = this.sortCatalogDataRecursive(item.children);
+          }
+          return item;
+        });
+    },
+
     // 生成目录编号
     generateDirectoryNumber(moduleIndex, level) {
       let number = "";