feat:文件管理手动刮削

This commit is contained in:
jxxghp
2024-02-10 19:32:49 +08:00
parent 9299f1bcb6
commit 37b92c55ba
2 changed files with 146 additions and 93 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "moviepilot", "name": "moviepilot",
"version": "1.6.2", "version": "1.6.3",
"private": true, "private": true,
"bin": "dist/service.js", "bin": "dist/service.js",
"scripts": { "scripts": {
+145 -92
View File
@@ -267,6 +267,28 @@ async function recognize(path: string) {
} }
} }
// 调用API刮削
async function scrape(path: string) {
try {
// 显示进度条
progressDialog.value = true
progressText.value = `正在刮削 ${path} ...`
const result: { [key: string]: any } = await api.get('media/scrape', {
params: {
path,
},
})
// 关闭进度条
progressDialog.value = false
if (!result.success)
$toast.error(result.message)
else
$toast.success(`${path}削刮完成!`)
}
catch (error) {
console.error(error)
}
}
// 弹出菜单 // 弹出菜单
const dropdownItems = ref([ const dropdownItems = ref([
{ {
@@ -279,8 +301,17 @@ const dropdownItems = ref([
}, },
}, },
}, { }, {
title: '重命名', title: '刮削',
value: 2, value: 2,
props: {
prependIcon: 'mdi-auto-fix',
click: (_item: FileItem) => {
scrape(_item.path || '')
},
},
}, {
title: '重命名',
value: 3,
props: { props: {
prependIcon: 'mdi-rename', prependIcon: 'mdi-rename',
click: showRenmae, click: showRenmae,
@@ -288,7 +319,7 @@ const dropdownItems = ref([
}, },
{ {
title: '整理', title: '整理',
value: 3, value: 4,
props: { props: {
prependIcon: 'mdi-folder-arrow-right', prependIcon: 'mdi-folder-arrow-right',
click: showTransfer, click: showTransfer,
@@ -296,7 +327,7 @@ const dropdownItems = ref([
}, },
{ {
title: '删除', title: '删除',
value: 4, value: 5,
props: { props: {
prependIcon: 'mdi-delete-outline', prependIcon: 'mdi-delete-outline',
color: 'error', color: 'error',
@@ -345,111 +376,133 @@ onMounted(() => {
<VCardText v-else-if="dirs.length || files.length" class="p-0"> <VCardText v-else-if="dirs.length || files.length" class="p-0">
<VList v-if="dirs.length" subheader> <VList v-if="dirs.length" subheader>
<VListSubheader>目录</VListSubheader> <VListSubheader>目录</VListSubheader>
<VListItem <VHover
v-for="(item, index) in dirs" v-for="(item, index) in dirs"
:key="index" :key="index"
class="px-3 pe-1"
@click="changePath(item.path)"
> >
<template #prepend> <template #default="hover">
<VIcon icon="mdi-folder-outline" /> <VListItem
</template> v-bind="hover.props"
<VListItemTitle v-text="item.name" /> class="px-3 pe-1"
<template #append> @click="changePath(item.path)"
<IconBtn class="d-sm-none"> >
<VIcon <template #prepend>
icon="mdi-dots-vertical" <VIcon icon="mdi-folder-outline" />
/> </template>
<VMenu <VListItemTitle v-text="item.name" />
activator="parent" <template #append>
close-on-content-click <IconBtn class="d-sm-none">
> <VIcon
<VList> icon="mdi-dots-vertical"
<VListItem />
v-for="(menu, i) in dropdownItems" <VMenu
:key="i" activator="parent"
variant="plain" close-on-content-click
:base-color="menu.props.color"
@click="menu.props.click(item)"
> >
<template #prepend> <VList>
<VIcon :icon="menu.props.prependIcon" /> <VListItem
</template> v-for="(menu, i) in dropdownItems"
<VListItemTitle v-text="menu.title" /> :key="i"
</VListItem> variant="plain"
</VList> :base-color="menu.props.color"
</VMenu> @click="menu.props.click(item)"
</IconBtn> >
<IconBtn class="d-none d-sm-block" @click.stop="recognize(item.path)"> <template #prepend>
<VIcon icon="mdi-text-recognition" /> <VIcon :icon="menu.props.prependIcon" />
</IconBtn> </template>
<IconBtn class="d-none d-sm-block" @click.stop="showRenmae(item)"> <VListItemTitle v-text="menu.title" />
<VIcon icon="mdi-rename" /> </VListItem>
</IconBtn> </VList>
<IconBtn class="d-none d-sm-block" @click.stop="showTransfer(item)"> </VMenu>
<VIcon icon="mdi-folder-arrow-right" /> </IconBtn>
</IconBtn> <span v-show="hover.isHovering" class="flex">
<IconBtn class="d-none d-sm-block" @click.stop="deleteItem(item)"> <IconBtn class="d-none d-sm-block" @click.stop="recognize(item.path)">
<VIcon icon="mdi-delete-outline" /> <VIcon icon="mdi-text-recognition" />
</IconBtn> </IconBtn>
<IconBtn class="d-none d-sm-block" @click.stop="scrape(item.path)">
<VIcon icon="mdi-auto-fix" />
</IconBtn>
<IconBtn class="d-none d-sm-block" @click.stop="showRenmae(item)">
<VIcon icon="mdi-rename" />
</IconBtn>
<IconBtn class="d-none d-sm-block" @click.stop="showTransfer(item)">
<VIcon icon="mdi-folder-arrow-right" />
</IconBtn>
<IconBtn class="d-none d-sm-block" @click.stop="deleteItem(item)">
<VIcon icon="mdi-delete-outline" />
</IconBtn>
</span>
</template>
</VListItem>
</template> </template>
</VListItem> </VHover>
</VList> </VList>
<VDivider v-if="dirs.length && files.length" /> <VDivider v-if="dirs.length && files.length" />
<VList v-if="files.length" subheader> <VList v-if="files.length" subheader>
<VListSubheader>文件</VListSubheader> <VListSubheader>文件</VListSubheader>
<VListItem <VHover
v-for="(item, index) in files" v-for="(item, index) in files"
:key="index" :key="index"
class="pl-3 pe-1"
@click="changePath(item.path)"
> >
<template #prepend> <template #default="hover">
<VIcon v-if="inProps.icons" :icon="inProps.icons[item.extension.toLowerCase()] || inProps.icons?.other" /> <VListItem
</template> v-bind="hover.props"
class="pl-3 pe-1"
@click="changePath(item.path)"
>
<template #prepend>
<VIcon v-if="inProps.icons" :icon="inProps.icons[item.extension.toLowerCase()] || inProps.icons?.other" />
</template>
<VListItemTitle v-text="item.name" /> <VListItemTitle v-text="item.name" />
<VListItemSubtitle> {{ formatBytes(item.size) }}</VListItemSubtitle> <VListItemSubtitle> {{ formatBytes(item.size) }}</VListItemSubtitle>
<template #append> <template #append>
<IconBtn class="d-sm-none"> <IconBtn class="d-sm-none">
<VIcon <VIcon
icon="mdi-dots-vertical" icon="mdi-dots-vertical"
/> />
<VMenu <VMenu
activator="parent" activator="parent"
close-on-content-click close-on-content-click
>
<VList>
<VListItem
v-for="(menu, i) in dropdownItems"
:key="i"
variant="plain"
:base-color="menu.props.color"
@click="menu.props.click(item)"
> >
<template #prepend> <VList>
<VIcon :icon="menu.props.prependIcon" /> <VListItem
</template> v-for="(menu, i) in dropdownItems"
<VListItemTitle v-text="menu.title" /> :key="i"
</VListItem> variant="plain"
</VList> :base-color="menu.props.color"
</VMenu> @click="menu.props.click(item)"
</IconBtn> >
<IconBtn class="d-none d-sm-block" @click.stop="recognize(item.path)"> <template #prepend>
<VIcon icon="mdi-text-recognition" /> <VIcon :icon="menu.props.prependIcon" />
</IconBtn> </template>
<IconBtn class="d-none d-sm-block" @click.stop="showRenmae(item)"> <VListItemTitle v-text="menu.title" />
<VIcon icon="mdi-rename" /> </VListItem>
</IconBtn> </VList>
<IconBtn class="d-none d-sm-block" @click.stop="showTransfer(item)"> </VMenu>
<VIcon icon="mdi-folder-arrow-right" /> </IconBtn>
</IconBtn> <span v-show="hover.isHovering" class="flex">
<IconBtn class="d-none d-sm-block" @click.stop="deleteItem(item)"> <IconBtn class="d-none d-sm-block" @click.stop="recognize(item.path)">
<VIcon icon="mdi-delete-outline" /> <VIcon icon="mdi-text-recognition" />
</IconBtn> </IconBtn>
<IconBtn class="d-none d-sm-block" @click.stop="scrape(item.path)">
<VIcon icon="mdi-auto-fix" />
</IconBtn>
<IconBtn class="d-none d-sm-block" @click.stop="showRenmae(item)">
<VIcon icon="mdi-rename" />
</IconBtn>
<IconBtn class="d-none d-sm-block" @click.stop="showTransfer(item)">
<VIcon icon="mdi-folder-arrow-right" />
</IconBtn>
<IconBtn class="d-none d-sm-block" @click.stop="deleteItem(item)">
<VIcon icon="mdi-delete-outline" />
</IconBtn>
</span>
</template>
</VListItem>
</template> </template>
</VListItem> </VHover>
</VList> </VList>
</VCardText> </VCardText>
<VCardText <VCardText