Compare commits
2
Commits
aa61489517
...
53ab0ad45b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53ab0ad45b | ||
|
|
641700d730 |
No files matched your search
@@ -1,19 +1,20 @@
|
|||||||
import config from "@/config";
|
import config from "@/config";
|
||||||
import generateId from "@/hooks/generateId";
|
import generateId from "@/hooks/generateId";
|
||||||
import useMiaoFetchApi from "@/hooks/useMiaoFetchApi";
|
import useMiaoFetchApi from "@/hooks/useMiaoFetchApi";
|
||||||
// import { debounce } from "lodash";
|
|
||||||
import type { stats, file, directory } from "@/types/type.ts";
|
import type { stats, file, directory } from "@/types/type.ts";
|
||||||
|
|
||||||
const miaoFetchApi = useMiaoFetchApi();
|
const miaoFetchApi = useMiaoFetchApi();
|
||||||
|
|
||||||
|
const vItemMap = new Map();
|
||||||
|
|
||||||
export interface Tree {
|
export interface Tree {
|
||||||
name: string;
|
name: string;
|
||||||
type: 'directory';
|
type: "directory";
|
||||||
path: string;
|
path: string;
|
||||||
stats: stats;
|
stats: stats;
|
||||||
files?: {
|
files?: {
|
||||||
name: string;
|
name: string;
|
||||||
type: 'file';
|
type: "file";
|
||||||
size: number;
|
size: number;
|
||||||
stats: stats;
|
stats: stats;
|
||||||
url: string;
|
url: string;
|
||||||
@@ -29,6 +30,7 @@ export class VirtualFile {
|
|||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.type = "file";
|
this.type = "file";
|
||||||
this.id = generateId();
|
this.id = generateId();
|
||||||
|
vItemMap.set(this.path, this);
|
||||||
}
|
}
|
||||||
name: string;
|
name: string;
|
||||||
type: "file";
|
type: "file";
|
||||||
@@ -47,11 +49,15 @@ export class VirtualFile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class VirtualDirectory {
|
class VirtualDirectory {
|
||||||
|
/**
|
||||||
|
* 除非为根节点,否则必须设置parent
|
||||||
|
*/
|
||||||
constructor(info: directory, parent?: VirtualDirectory) {
|
constructor(info: directory, parent?: VirtualDirectory) {
|
||||||
this.name = info.name;
|
this.name = info.name;
|
||||||
this.stats = info.stats;
|
this.stats = info.stats;
|
||||||
this.parent = parent ?? undefined;
|
this.parent = parent ?? undefined;
|
||||||
this.id = generateId();
|
this.id = generateId();
|
||||||
|
vItemMap.set(this.path, this);
|
||||||
}
|
}
|
||||||
// 文件夹名
|
// 文件夹名
|
||||||
name: string;
|
name: string;
|
||||||
@@ -60,14 +66,17 @@ class VirtualDirectory {
|
|||||||
// 子目录
|
// 子目录
|
||||||
directories?: VirtualDirectory[];
|
directories?: VirtualDirectory[];
|
||||||
// 没啥意义,标注一下就是了
|
// 没啥意义,标注一下就是了
|
||||||
type: "directory" = 'directory';
|
type: "directory" = "directory";
|
||||||
// 文件夹创建时间等杂项属性
|
// 文件夹创建时间等杂项属性
|
||||||
stats: stats;
|
stats: stats;
|
||||||
// 父文件夹
|
// 父文件夹
|
||||||
parent?: VirtualDirectory;
|
parent?: VirtualDirectory;
|
||||||
|
|
||||||
|
_isUpdated: boolean = false;
|
||||||
|
|
||||||
id: number;
|
id: number;
|
||||||
|
|
||||||
|
// 用来存储一些标记信息啥的
|
||||||
storage: { [key: string]: any } = {};
|
storage: { [key: string]: any } = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -101,6 +110,13 @@ class VirtualDirectory {
|
|||||||
return [...this.parent.getParents, this];
|
return [...this.parent.getParents, this];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前文件夹是否已经请求过至少一次数据
|
||||||
|
*/
|
||||||
|
get isUpdated() {
|
||||||
|
return this._isUpdated;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取 layer 级父文件夹, 如getParent(1)就返回父级
|
* 获取 layer 级父文件夹, 如getParent(1)就返回父级
|
||||||
* @param {number} layer 需要跳转的层数
|
* @param {number} layer 需要跳转的层数
|
||||||
@@ -131,7 +147,10 @@ class VirtualDirectory {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// todo: 重构这个函数
|
||||||
updateContent(content: (file | directory)[]) {
|
updateContent(content: (file | directory)[]) {
|
||||||
|
this._isUpdated = true;
|
||||||
|
|
||||||
this.files = this.files ?? [];
|
this.files = this.files ?? [];
|
||||||
this.directories = this.directories ?? [];
|
this.directories = this.directories ?? [];
|
||||||
const fileNames: string[] = this.files.map(v => v.name);
|
const fileNames: string[] = this.files.map(v => v.name);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import useDataBus from '@/hooks/useDataBus'
|
|||||||
import useUploadQueue from '@/hooks/useUploadQueue'
|
import useUploadQueue from '@/hooks/useUploadQueue'
|
||||||
import useVirtualPages from '@/hooks/useVirtualPages'
|
import useVirtualPages from '@/hooks/useVirtualPages'
|
||||||
import { filePicker, renderIcon } from '@/hooks/miaoTools'
|
import { filePicker, renderIcon } from '@/hooks/miaoTools'
|
||||||
import { uniq } from 'lodash'
|
import uniq from 'lodash/uniq'
|
||||||
|
|
||||||
// 导入子组件
|
// 导入子组件
|
||||||
import miaoDirectoryTop from './components/miaoDirectoryTop.vue'
|
import miaoDirectoryTop from './components/miaoDirectoryTop.vue'
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import VirtualDirectory, { VirtualFile } from '@/class/VirtualDirectory'
|
import VirtualDirectory, { VirtualFile } from '@/class/VirtualDirectory'
|
||||||
import { cloneDeep } from 'lodash';
|
import cloneDeep from 'lodash/cloneDeep';
|
||||||
import { inject, onMounted, ref } from 'vue'
|
import { inject, onMounted, ref } from 'vue'
|
||||||
import buildFromTree from '../../hooks/buildFromTree';
|
import buildFromTree from '../../hooks/buildFromTree';
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ import miaoMask from '@/components/miaoMask.vue'
|
|||||||
import miaoDropHandler from '@/components/miaoDropHandler.vue'
|
import miaoDropHandler from '@/components/miaoDropHandler.vue'
|
||||||
import miaoMessageProvider from '@/components/miaoAlertTipProvider.vue'
|
import miaoMessageProvider from '@/components/miaoAlertTipProvider.vue'
|
||||||
import VirtualDirectory, { VirtualFile } from '@/class/VirtualDirectory'
|
import VirtualDirectory, { VirtualFile } from '@/class/VirtualDirectory'
|
||||||
import { uniq } from 'lodash'
|
import uniq from 'lodash/uniq'
|
||||||
import { computed, nextTick, onMounted, ref, watch } from 'vue'
|
import { computed, nextTick, onMounted, ref, watch } from 'vue'
|
||||||
import { NScrollbar } from 'naive-ui'
|
import { NScrollbar } from 'naive-ui'
|
||||||
import { ChevronBack, ChevronForward } from '@vicons/ionicons5'
|
import { ChevronBack, ChevronForward } from '@vicons/ionicons5'
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ const pluginConfig: registerComponentOption = {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
for (let i of vFiles) {
|
for (let i of vFiles) {
|
||||||
for (let s of ['mp3']) {
|
for (let s of ['mp3', 'flac', 'ogg']) {
|
||||||
if (i.name.endsWith(s)) {
|
if (i.name.endsWith(s)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ import "./src/APlayer.fix.css"
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import APlayer from 'APlayer';
|
import APlayer from 'APlayer';
|
||||||
import config from '@/config';
|
import config from '@/config';
|
||||||
import { difference, uniq } from 'lodash';
|
import difference from 'lodash/difference';
|
||||||
|
import uniq from 'lodash/uniq'
|
||||||
import apType from './types/ap';
|
import apType from './types/ap';
|
||||||
|
|
||||||
const miaoMessageRef = ref<InstanceType<typeof miaoAlertTipProvider>>()
|
const miaoMessageRef = ref<InstanceType<typeof miaoAlertTipProvider>>()
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import '@/style/xgplayer.scss'
|
|||||||
import TextTrack from 'xgplayer/es/plugins/track'
|
import TextTrack from 'xgplayer/es/plugins/track'
|
||||||
import 'xgplayer/es/plugins/track/index.css'
|
import 'xgplayer/es/plugins/track/index.css'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import { uniq } from 'lodash'
|
import uniq from 'lodash/uniq'
|
||||||
import lockScreen from './playerPlugin/lockScreen/lockScreen'
|
import lockScreen from './playerPlugin/lockScreen/lockScreen'
|
||||||
import xgplayerVueApp from './src/XGPlayerVuePluginRoot.vue'
|
import xgplayerVueApp from './src/XGPlayerVuePluginRoot.vue'
|
||||||
import useXGPlayerVueFrame from './playerPlugin/xgplayer-vue-frame/xgplayer-vue-frame'
|
import useXGPlayerVueFrame from './playerPlugin/xgplayer-vue-frame/xgplayer-vue-frame'
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Component, toRaw } from "vue";
|
import { Component, toRaw } from "vue";
|
||||||
import Player from "xgplayer/es/player";
|
import Player from "xgplayer/es/player";
|
||||||
import { pick } from "lodash";
|
import pick from "lodash/pick";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
player: {
|
player: {
|
||||||
type: Player,
|
type: Player,
|
||||||
|
|||||||
Reference in new issue
Block a user