mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-06 08:06:43 +08:00
feat:文件管理手动刮削
This commit is contained in:
+1
-1
@@ -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": {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user