fix 手动整理选择目录

fix https://github.com/jxxghp/MoviePilot/issues/2145
This commit is contained in:
jxxghp
2024-05-23 12:39:35 +08:00
parent 19663bacb1
commit 11b649dc8c
3 changed files with 40 additions and 36 deletions

View File

@@ -6,6 +6,7 @@ import api from '@/api'
import { numberValidator } from '@/@validators'
import { useDisplay } from 'vuetify'
import ProgressDialog from './ProgressDialog.vue'
import { MediaDirectory } from '@/api/types'
// 显示器宽度
const display = useDisplay()
@@ -20,9 +21,9 @@ const props = defineProps({
// 定义事件
const emit = defineEmits(['done', 'close'])
// 生成1到50季的下拉框选项
// 生成1到100季的下拉框选项
const seasonItems = ref(
Array.from({ length: 51 }, (_, i) => i).map(item => ({
Array.from({ length: 101 }, (_, i) => i).map(item => ({
title: `${item}`,
value: item,
})),
@@ -53,7 +54,7 @@ const progressValue = ref(0)
const transferForm = reactive({
logid: 0,
path: '',
target: props.target ?? '',
target: props.target ?? null,
tmdbid: null,
doubanid: null,
season: null,
@@ -67,9 +68,17 @@ const transferForm = reactive({
scrape: true,
})
// 所有媒体库目录
const libraryDirectories = ref<MediaDirectory[]>([])
// 目的目录下拉框
const targetDirectories = computed(() => {
return libraryDirectories.value.map(item => item.path)
})
watchEffect(() => {
transferForm.path = props.path ?? ''
transferForm.target = props.target ?? ''
transferForm.target = props.target ?? null
})
// 使用SSE监听加载进度
@@ -158,8 +167,21 @@ async function loadSystemSettings() {
}
}
// 查询媒体库目录
async function loadLibraryDirectories() {
try {
const result: { [key: string]: any } = await api.get('system/setting/LibraryDirectories')
if (result.success && result.data?.value) {
libraryDirectories.value = result.data.value
}
} catch (error) {
console.log(error)
}
}
onMounted(() => {
loadSystemSettings()
loadLibraryDirectories()
})
</script>
@@ -175,11 +197,12 @@ onMounted(() => {
<VForm @submit.prevent="() => {}">
<VRow>
<VCol cols="12" md="8">
<VTextField
<VCombobox
v-model="transferForm.target"
:items="targetDirectories"
label="目的路径"
placeholder="留空自动"
hint="留空将自动整理到媒体库目录"
hint="留空将自动匹配目标路径"
/>
</VCol>
<VCol cols="12" md="4">

View File

@@ -54,7 +54,7 @@ function startLoadingProgress() {
progressEventSource.value = new EventSource(
`${import.meta.env.VITE_API_BASE_URL}system/progress/search?token=${token}`,
)
progressEventSource.value.onmessage = (event) => {
progressEventSource.value.onmessage = event => {
const progress = JSON.parse(event.data)
if (progress) {
progressText.value = progress.text
@@ -80,34 +80,33 @@ async function fetchData() {
if (!keyword) {
// 查询上次搜索结果
dataList.value = await api.get('search/last')
}
else {
} else {
startLoadingProgress()
// 优先按TMDBID精确查询
if (keyword?.startsWith('tmdb:') || keyword?.startsWith('douban:') || keyword?.startsWith('bangumi:')) {
const result: {[key: string]: any} = await api.get(`search/media/${keyword}`, {
const result: { [key: string]: any } = await api.get(`search/media/${keyword}`, {
params: {
mtype: type,
area,
season,
},
})
if (result.success){
if (result.success) {
dataList.value = result.data
} else {
errorDescription.value = result.message
}
}
else {
} else {
// 按标题模糊查询
dataList.value = await api.get(`search/title/${keyword}`)
}
stopLoadingProgress()
// 从浏览器历史中删除当前搜索
window.history.replaceState(null, '', window.location.pathname)
}
// 标记已刷新
isRefreshed.value = true
}
catch (error) {
} catch (error) {
console.error(error)
return Promise.reject(error)
}
@@ -120,26 +119,15 @@ onMounted(() => {
</script>
<template>
<LoadingBanner
v-if="!isRefreshed"
class="mt-12"
:text="progressText"
:progress="progressValue"
/>
<LoadingBanner v-if="!isRefreshed" class="mt-12" :text="progressText" :progress="progressValue" />
<NoDataFound
v-if="dataList.length === 0 && isRefreshed"
:error-title="errorTitle"
:error-description="errorDescription"
/>
<div v-if="dataList.length > 0">
<TorrentRowListView
v-if="viewType === 'list'"
:items="dataList"
/>
<TorrentCardListView
v-else
:items="dataList"
/>
<TorrentRowListView v-if="viewType === 'list'" :items="dataList" />
<TorrentCardListView v-else :items="dataList" />
</div>
<!-- 视图切换 -->
<VFab

View File

@@ -19,9 +19,6 @@ const currentHistory = ref<TransferHistory>()
// 重新整理IDS
const redoIds = ref<number[]>([])
// 重新整理target
const redoTarget = ref('')
// 已选中的数据
const selected = ref<TransferHistory[]>([])
@@ -271,8 +268,6 @@ async function retransferBatch() {
currentHistory.value = undefined
// 重新整理IDS
redoIds.value = selected.value.map(item => item.id)
// 重新整理target
redoTarget.value = ''
// 打开识别弹窗
redoDialog.value = true
}
@@ -286,7 +281,6 @@ const dropdownItems = ref([
prependIcon: 'mdi-redo-variant',
click: (item: TransferHistory) => {
redoIds.value = [item.id]
redoTarget.value = getRootPath(item.dest ?? '', item.type ?? '', item.category ?? '')
redoDialog.value = true
},
},
@@ -445,7 +439,6 @@ onMounted(fetchData)
v-if="redoDialog"
v-model="redoDialog"
:logids="redoIds"
:target="redoTarget"
@done="
() => {
redoDialog = false