Forráskód Böngészése

feat:工程树操作

ananzhusen 3 hete
szülő
commit
f165422977
1 módosított fájl, 44 hozzáadás és 3 törlés
  1. 44 3
      src/views/components/Project.vue

+ 44 - 3
src/views/components/Project.vue

@@ -56,6 +56,7 @@
       </div>
     </div>
     <t-tree
+      :key="treeKey"
       class="flex-grow"
       ref="tree"
       :data="data.tree"
@@ -208,6 +209,8 @@ const { taskDialog, setTask } = useTask();
 
 const { payDialog } = usePay();
 
+const treeKey = ref(s8());
+
 onBeforeUnmount(() => {
   data.tree = tree.value.getTreeData();
 });
@@ -236,11 +239,38 @@ const onDescription = (node: any) => {
 
 const ondblclick = (node: any) => {
   if (node.data.type==='page' && node.data.value !== data.actived[0]) {
+    MessagePlugin.warning('请先选中页面');
     return;
   }
   node.data.edited = true;
 };
 
+const treeAppend = (data,key,node)=>{
+  if(!key){
+    data.push(node);
+  }else{
+    deepAppend(data,key,node);
+  }
+}
+
+const deepAppend = (data,key,node)=>{
+  data.forEach((item,index)=>{
+    if(item.value===key){
+      if(item.type==='page'){
+        data.splice(index+1,0,node);
+      }else{
+        if(!item.children){
+          item.children = [];
+        }
+        item.children.push(node);
+      }
+    }
+    if(item.children){
+      deepAppend(item.children,key,node);
+    }
+  })
+}
+
 const append = async (node, folder?: boolean) => {
   const item: any = {
     value: s8(),
@@ -254,13 +284,18 @@ const append = async (node, folder?: boolean) => {
   }
   if (node && node.data.type === 'page') {
     insertAfter(node, folder);
+    treeKey.value = s8();
     return;
   }
   if (!node) {
-    tree.value.appendTo('', item);
+    // tree.value.appendTo('', item);
+    treeAppend(data.tree,'',item);
   } else {
-    tree.value.appendTo(node.value, item);
+    // tree.value.appendTo(node.value, item);
+    treeAppend(data.tree,node.value,item);
   }
+  // tree.value?.refresh();
+  treeKey.value = s8();
 };
 
 const pastePage = async (node) => {
@@ -271,9 +306,12 @@ const pastePage = async (node) => {
   if (node) {
     if (node.data.type === 'page') {
       tree.value.insertAfter(node.value, item);
+      treeAppend(data.tree,node.value,item);
     } else {
       tree.value.appendTo(node.value, item);
+      treeAppend(data.tree,node.value,item);
     }
+    treeKey.value = s8();
   }
   data.actived = [item.value];
   let acNode = tree.value.getItem(item.value);
@@ -297,6 +335,7 @@ const pastePage = async (node) => {
     const ret1: any = await addCollection('v', body); // 新增
     if (ret1.id) {
       saveProject(ret1.id);
+      item.pageId = ret1.id;
       router.push({
         path: '/',
         query: {
@@ -342,7 +381,8 @@ const insertAfter = async (node, folder?: boolean) => {
     item.children = [];
   }
   if (item) {
-    await tree.value.insertAfter(node.value, item);
+    treeAppend(data.tree,node.value,item);
+    // await tree.value.insertAfter(node.value, item);
     // setLabel(item.value);
   }
 };
@@ -483,6 +523,7 @@ const getScene = async (e) => {
     ret.data.id = undefined; //meta2d.store.data.id;
     meta2d.open(ret.data);
     history.replaceState({}, document.title, window.location.pathname);
+    dot.value = true;
   } else if (projectDialog.value.type === 'v') {
     //TODO 一个页面不能被多个项目引用。
     const ret: any = await getCollection('v', e.id, 'id,other_data');