本文介绍使用 Vue3 实现网盘文件列表树状结构的方案,支持根据 parentFolderUUID 和 username 查询文件和文件夹,并提供后退功能,方便用户浏览和管理文件。

首先,需要定义一个组件来展示文件列表树状结构,可以使用递归组件来实现。具体实现可以参考以下代码:

<template>
  <div>
    <div v-for='(item, index) in folderList' :key='index'>
      <div @click='goToFolder(item)'>
        {{ item.name }}
      </div>
      <div v-if='item.children && item.children.length'>
        <FolderList :folderList='item.children' :parentFolderUUID='item.uuid' :username='username' />
      </div>
    </div>
  </div>
</template>

<script>
import { getFolderList } from '@/api/folder'

export default {
  name: 'FolderList',
  props: {
    folderList: {
      type: Array,
      required: true
    },
    parentFolderUUID: {
      type: String,
      required: true
    },
    username: {
      type: String,
      required: true
    }
  },
  data () {
    return {
      folderList: []
    }
  },
  methods: {
    async goToFolder (folder) {
      if (folder.type === 'folder') {
        this.folderList = await getFolderList(folder.uuid, this.username)
      }
    }
  }
}
</script>

然后,在父组件中,需要定义一个方法来获取根目录的文件列表,并将其传递给子组件。同时,还需要定义一个方法来处理后退操作,即返回上一级目录。具体实现可以参考以下代码:

<template>
  <div>
    <button v-if='parentFolderUUID' @click='goBack'>返回上一级</button>
    <FolderList v-if='folderList && folderList.length' :folderList='folderList' :parentFolderUUID='parentFolderUUID' :username='username' />
  </div>
</template>

<script>
import FolderList from '@/components/FolderList'
import { getFolderList } from '@/api/folder'

export default {
  name: 'FileTree',
  components: {
    FolderList
  },
  props: {
    parentFolderUUID: {
      type: String,
      default: ''
    },
    username: {
      type: String,
      required: true
    }
  },
  data () {
    return {
      folderList: []
    }
  },
  async created () {
    if (!this.parentFolderUUID) {
      this.folderList = await getFolderList('', this.username)
    }
  },
  methods: {
    async goBack () {
      const parentFolder = await getFolder(this.parentFolderUUID)
      this.folderList = await getFolderList(parentFolder.parentFolderUUID, this.username)
      this.parentFolderUUID = parentFolder.parentFolderUUID
    }
  }
}
</script>

最后,在父组件中,将 FileTree 组件挂载到页面上,并传递需要查询的 parentFolderUUID 和 username 参数。具体实现可以参考以下代码:

<template>
  <div>
    <FileTree :parentFolderUUID='parentFolderUUID' :username='username' />
  </div>
</template>

<script>
import FileTree from '@/components/FileTree'

export default {
  name: 'App',
  components: {
    FileTree
  },
  data () {
    return {
      parentFolderUUID: '',
      username: 'testuser'
    }
  }
}
</script>
Vue3 实现网盘文件列表树状结构:根据 parentFolderUUID 和 username 查询并支持后退

原文地址: https://www.cveoy.top/t/topic/m34F 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录