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