|
@@ -488,7 +488,18 @@
|
|
|
@node-drag-end="handleDragEnd"
|
|
|
>
|
|
|
<span class="custom-tree-node" slot-scope="{ data }">
|
|
|
- <span>{{ data.label }}</span>
|
|
|
+ <span v-if="data.isEditing">
|
|
|
+ <el-input
|
|
|
+ v-model="data.editingContent"
|
|
|
+ size="mini"
|
|
|
+ @blur="handleEditComplete(data)"
|
|
|
+ @keyup.enter.native="handleEditComplete(data)"
|
|
|
+ ref="editInput"
|
|
|
+ ></el-input>
|
|
|
+ </span>
|
|
|
+ <span v-else @dblclick="handleStartEdit(data)">
|
|
|
+ {{ data.label }}
|
|
|
+ </span>
|
|
|
</span>
|
|
|
</el-tree>
|
|
|
</div>
|
|
@@ -511,7 +522,18 @@
|
|
|
@node-drag-end="handleDragEnd"
|
|
|
>
|
|
|
<span class="custom-tree-node" slot-scope="{ data }">
|
|
|
- <span>{{ data.label }}</span>
|
|
|
+ <span v-if="data.isEditing">
|
|
|
+ <el-input
|
|
|
+ v-model="data.editingContent"
|
|
|
+ size="mini"
|
|
|
+ @blur="handleEditComplete(data)"
|
|
|
+ @keyup.enter.native="handleEditComplete(data)"
|
|
|
+ ref="editInput"
|
|
|
+ ></el-input>
|
|
|
+ </span>
|
|
|
+ <span v-else @dblclick="handleStartEdit(data)">
|
|
|
+ {{ data.label }}
|
|
|
+ </span>
|
|
|
</span>
|
|
|
</el-tree>
|
|
|
</div>
|
|
@@ -878,6 +900,8 @@ import {
|
|
|
searchTemplate,
|
|
|
getTemplateInfo,
|
|
|
getAllCategory,
|
|
|
+ createTemplate,
|
|
|
+ updateTemplate,
|
|
|
} from "@/api/template";
|
|
|
import docAttr from "./com/components/Attribute/docAttr";
|
|
|
import comList from "./com/components/Attribute/comList";
|
|
@@ -1202,7 +1226,10 @@ export default {
|
|
|
|
|
|
/* 目录模板 */
|
|
|
handleCatalogClick(data) {
|
|
|
- // 处理目录点击事件
|
|
|
+ // 如果正在编辑,不触发其他操作
|
|
|
+ if (data.isEditing) return;
|
|
|
+
|
|
|
+ // 其他点击处理逻辑...
|
|
|
console.log("点击的目录项:", data);
|
|
|
},
|
|
|
|
|
@@ -3846,21 +3873,11 @@ export default {
|
|
|
|
|
|
// 处理目录项点击
|
|
|
handleCatalogClick(data) {
|
|
|
- // 更新选中的组件索引
|
|
|
- this.comIndex = data.moduleIndex;
|
|
|
-
|
|
|
- // 滚动到对应位置
|
|
|
- this.$nextTick(() => {
|
|
|
- const element = document.querySelector(`[data-module-index="${data.moduleIndex}"]`);
|
|
|
- if (element) {
|
|
|
- element.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
|
- // 添加高亮效果
|
|
|
- element.classList.add('highlight');
|
|
|
- setTimeout(() => {
|
|
|
- element.classList.remove('highlight');
|
|
|
- }, 2000);
|
|
|
- }
|
|
|
- });
|
|
|
+ // 如果正在编辑,不触发其他操作
|
|
|
+ if (data.isEditing) return;
|
|
|
+
|
|
|
+ // 其他点击处理逻辑...
|
|
|
+ console.log("点击的目录项:", data);
|
|
|
},
|
|
|
|
|
|
// 处理组件内容更新
|
|
@@ -3966,6 +3983,52 @@ export default {
|
|
|
this.$forceUpdate();
|
|
|
});
|
|
|
},
|
|
|
+
|
|
|
+ // 开始编辑目录
|
|
|
+ handleStartEdit(data) {
|
|
|
+ // 设置编辑状态和临时编辑内容
|
|
|
+ this.$set(data, 'isEditing', true);
|
|
|
+ this.$set(data, 'editingContent', data.label.split(' ').slice(1).join(' ')); // 只编辑内容部分,保留编号
|
|
|
+
|
|
|
+ // 等待DOM更新后聚焦输入框
|
|
|
+ this.$nextTick(() => {
|
|
|
+ if (this.$refs.editInput && this.$refs.editInput[0]) {
|
|
|
+ this.$refs.editInput[0].focus();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 完成编辑
|
|
|
+ handleEditComplete(data) {
|
|
|
+ if (!data.isEditing) return;
|
|
|
+
|
|
|
+ // 获取原始编号
|
|
|
+ const number = data.label.split(' ')[0];
|
|
|
+
|
|
|
+ // 更新目录树节点的显示文本
|
|
|
+ data.label = `${number} ${data.editingContent}`;
|
|
|
+
|
|
|
+ // 更新对应模块的目录属性
|
|
|
+ const { moduleIndex } = data;
|
|
|
+ const module = this.coms[moduleIndex];
|
|
|
+ if (module) {
|
|
|
+ const directoryAttr = module.attrs.find(attr =>
|
|
|
+ attr.type === 'Directory' &&
|
|
|
+ attr.number === number
|
|
|
+ );
|
|
|
+
|
|
|
+ if (directoryAttr) {
|
|
|
+ directoryAttr.content = data.editingContent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 清除编辑状态
|
|
|
+ this.$delete(data, 'isEditing');
|
|
|
+ this.$delete(data, 'editingContent');
|
|
|
+
|
|
|
+ // 强制更新视图
|
|
|
+ this.$forceUpdate();
|
|
|
+ },
|
|
|
},
|
|
|
};
|
|
|
</script>
|