diff --git a/src/api/types.ts b/src/api/types.ts index cc1d001b..afd781a0 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -831,3 +831,23 @@ export interface SystemNotification { // 通知时间 date: string } + +// 下载目录/媒体库目录 +export interface MediaDirectory { + // 类型 download/library + type?: string + // 别名 + name?: string + // 路径 + path?: string + // 媒体类型 电影/电视剧 + media_type?: string + // 媒体类别 动画电影/国产剧 + category?: string + // 刮削媒体信息 + scrape?: boolean + // 自动二级分类,未指定类别时自动分类 + auto_category?: boolean + // 优先级 + priority?: number +} diff --git a/src/components/cards/MediaDirectoryCard.vue b/src/components/cards/MediaDirectoryCard.vue new file mode 100644 index 00000000..0dcf2ac9 --- /dev/null +++ b/src/components/cards/MediaDirectoryCard.vue @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/setting.vue b/src/pages/setting.vue index 79c3ed95..c6f94be9 100644 --- a/src/pages/setting.vue +++ b/src/pages/setting.vue @@ -9,6 +9,7 @@ import AccountSettingSearch from '@/views/setting/AccountSettingSearch.vue' import AccountSettingSubscribe from '@/views/setting/AccountSettingSubscribe.vue' import AccountSettingService from '@/views/setting/AccountSettingService.vue' import AccountSettingSystem from '@/views/setting/AccountSettingSystem.vue' +import AccountSettingDirectory from '@/views/setting/AccountSettingDirectory.vue' const route = useRoute() @@ -22,10 +23,15 @@ const tabs = [ tab: 'account', }, { - title: '系统', - icon: 'mdi-cog', + title: '连接', + icon: 'mdi-server-network', tab: 'system', }, + { + title: '目录', + icon: 'mdi-folder', + tab: 'directory', + }, { title: '站点', icon: 'mdi-web', @@ -81,13 +87,20 @@ const tabs = [ - + + + + + + + + @@ -122,12 +135,14 @@ const tabs = [ + + diff --git a/src/views/setting/AccountSettingDirectory.vue b/src/views/setting/AccountSettingDirectory.vue new file mode 100644 index 00000000..a6beede8 --- /dev/null +++ b/src/views/setting/AccountSettingDirectory.vue @@ -0,0 +1,318 @@ + + + + + + + + + 下载目录 + 设置下载目录路径和分类,按顺序依次匹配使用。 + + + + + + + + + + 保存 + + + + + + + + + + 媒体库目录 + 设置媒体文件整理后存储目录和分类,按顺序依次匹配使用。 + + + + + + + + + + 保存 + + + + + + + + + + 整理模式 + 设置文件整理方式和偏好。 + + + + + + + + + + + + + + + {}"> + + 保存 + + + + + + + + diff --git a/src/views/setting/AccountSettingNotification.vue b/src/views/setting/AccountSettingNotification.vue index c9230c15..d3fab17e 100644 --- a/src/views/setting/AccountSettingNotification.vue +++ b/src/views/setting/AccountSettingNotification.vue @@ -67,8 +67,7 @@ async function loadNotificationSwitchs() { const result: NotificationSwitch[] = await api.get('message/switchs') messagemTypes.value = result - } - catch (error) { + } catch (error) { console.log(error) } } @@ -76,17 +75,11 @@ async function loadNotificationSwitchs() { // 调用API保存消息开关 async function saveNotificationSwitchs() { try { - const result: { [key: string]: any } = await api.post( - 'message/switchs', - messagemTypes.value, - ) + const result: { [key: string]: any } = await api.post('message/switchs', messagemTypes.value) - if (result.success) - $toast.success('保存通知消息设置成功') - else - $toast.error('保存通知消息设置失败!') - } - catch (error) { + if (result.success) $toast.success('保存通知消息设置成功') + else $toast.error('保存通知消息设置失败!') + } catch (error) { console.log(error) } } @@ -143,8 +136,7 @@ async function loadNotificationSettings() { VOCECHAT_CHANNEL_ID, } } - } - catch (error) { + } catch (error) { console.log(error) } } @@ -152,23 +144,17 @@ async function loadNotificationSettings() { // 调用API保存消息渠道设置 async function saveNotificationSettings() { try { - const result1: { [key: string]: any } = await api.post( - 'system/setting/MESSAGER', - selectedChannels.value.join(','), - ) + const result1: { [key: string]: any } = await api.post('system/setting/MESSAGER', selectedChannels.value.join(',')) - const result2: { [key: string]: any } = await api.post( - 'system/env', - notificationSettings.value, - ) + const result2: { [key: string]: any } = await api.post('system/env', notificationSettings.value) if (result1.success && result2.success) { $toast.success('保存通知渠道设置成功') reloadModule() + } else { + $toast.error('保存通知渠道设置失败!') } - else { $toast.error('保存通知渠道设置失败!') } - } - catch (error) { + } catch (error) { console.log(error) } } @@ -177,12 +163,9 @@ async function saveNotificationSettings() { async function reloadModule() { try { const result: { [key: string]: any } = await api.get('system/reload') - if (result.success) - $toast.success('重新加载模块成功') - else - $toast.error('重新加载模块失败!') - } - catch (error) { + if (result.success) $toast.success('重新加载模块成功') + else $toast.error('重新加载模块失败!') + } catch (error) { console.log(error) } } @@ -197,8 +180,11 @@ onMounted(() => { - - 只有选中的渠道才会发送消息。 + + + 通知渠道 + 只有选中的渠道才会发送消息。 + @@ -215,31 +201,14 @@ onMounted(() => { - - - 微信 - - - Telegram - - - Slack - - - SynologyChat - - - VoceChat - + + 微信 + Telegram + Slack + SynologyChat + VoceChat - + @@ -386,10 +355,7 @@ onMounted(() => { - + { {}"> - - 保存 - + 保存 @@ -431,36 +392,24 @@ onMounted(() => { - - 对应消息类型只会发送给选中的消息渠道。 + + + 消息类型 + 对应消息类型只会发送给选中的消息渠道。 + - - 消息类型 - - - 微信 - - - Telegram - - - Slack - - - SynologyChat - - - VoceChat - + 消息类型 + 微信 + Telegram + Slack + SynologyChat + VoceChat - + {{ message.mtype }} @@ -481,26 +430,15 @@ onMounted(() => { - - 没有设置任何通知渠道 - + 没有设置任何通知渠道 - {}"> - - 保存 - + 保存 diff --git a/src/views/setting/AccountSettingSearch.vue b/src/views/setting/AccountSettingSearch.vue index c73eb24a..c05dee65 100644 --- a/src/views/setting/AccountSettingSearch.vue +++ b/src/views/setting/AccountSettingSearch.vue @@ -280,8 +280,11 @@ onMounted(() => { - - 设定搜索时展示哪些源的媒体信息。 + + + 媒体数据源 + 设定搜索时展示哪些源的媒体信息。 + @@ -296,17 +299,18 @@ onMounted(() => { - - + 保存 - + - - 只有选中的站点才会在搜索中使用。 - + + 搜索站点 + 只有选中的站点才会在搜索中使用。 + + { {{ site.name }} - - - + + 保存 - + - - - - - - - - - - - 分享 - - - - - - 导入 - - - - - - 设置在搜索时默认使用的优先级排序,未在优先级中的资源将不在搜索结果中显示。 + + + + + + + + + + + 分享 + + + + + + 导入 + + + + + + 搜索优先级 + 设置在搜索时默认使用的优先级排序,未在优先级中的资源将不在搜索结果中显示。 + + { /> - - + + 保存 - + - - 设置在搜索时默认使用的过滤规则。 + + + 默认过滤规则 + 设置在搜索时默认使用的过滤规则。 + @@ -421,9 +430,9 @@ onMounted(() => { - + 保存 - + diff --git a/src/views/setting/AccountSettingService.vue b/src/views/setting/AccountSettingService.vue index d3d93bc4..a85ff257 100644 --- a/src/views/setting/AccountSettingService.vue +++ b/src/views/setting/AccountSettingService.vue @@ -18,8 +18,7 @@ async function loadSchedulerList() { const res: ScheduleInfo[] = await api.get('dashboard/schedule') schedulerList.value = res - } - catch (e) { + } catch (e) { console.log(e) } } @@ -52,8 +51,7 @@ function runCommand(id: string) { setTimeout(() => { loadSchedulerList() }, 1000) - } - catch (e) { + } catch (e) { console.log(e) } } @@ -77,32 +75,23 @@ onUnmounted(() => { - - 包含系统内置服务以及插件提供的服务,手动执行不会影响作业正常的时间表。 - + + + 定时作业 + 包含系统内置服务以及插件提供的服务,手动执行不会影响作业正常的时间表。 + - - 提供者 - - - 任务名称 - - - 任务状态 - - - 下一次执行时间 - + 提供者 + 任务名称 + 任务状态 + 下一次执行时间 - + {{ scheduler.provider }} @@ -118,11 +107,7 @@ onUnmounted(() => { {{ scheduler.next_run }} - + mdi-play @@ -131,12 +116,7 @@ onUnmounted(() => { - - 没有后台服务 - + 没有后台服务 diff --git a/src/views/setting/AccountSettingSite.vue b/src/views/setting/AccountSettingSite.vue index a7ca15d3..5f0f3668 100644 --- a/src/views/setting/AccountSettingSite.vue +++ b/src/views/setting/AccountSettingSite.vue @@ -51,16 +51,12 @@ async function resetSites() { resetSitesText.value = '正在重置...' const result: { [key: string]: any } = await api.get('site/reset') - if (result.success) - $toast.success('站点重置成功,请等待CookieCloud同步完成!') - - else - $toast.error('站点重置失败!') + if (result.success) $toast.success('站点重置成功,请等待CookieCloud同步完成!') + else $toast.error('站点重置失败!') resetSitesDisabled.value = false resetSitesText.value = '重置站点数据' - } - catch (error) { + } catch (error) { console.log(error) } } @@ -68,13 +64,10 @@ async function resetSites() { // 查询种子优先规则 async function queryTorrentPriority() { try { - const result: { [key: string]: any } = await api.get( - 'system/setting/TorrentsPriority', - ) + const result: { [key: string]: any } = await api.get('system/setting/TorrentsPriority') selectedTorrentPriority.value = result.data?.value - } - catch (error) { + } catch (error) { console.log(error) } } @@ -88,12 +81,9 @@ async function saveTorrentPriority() { selectedTorrentPriority.value, ) - if (result.success) - $toast.success('优先规则保存成功') - else - $toast.error('优先规则保存失败!') - } - catch (error) { + if (result.success) $toast.success('优先规则保存成功') + else $toast.error('优先规则保存失败!') + } catch (error) { console.log(error) } } @@ -120,8 +110,7 @@ async function loadCookieCloudSettings() { COOKIECLOUD_ENABLE_LOCAL, } } - } - catch (error) { + } catch (error) { console.log(error) } } @@ -129,17 +118,11 @@ async function loadCookieCloudSettings() { // 调用API保存CookieCloud设置 async function saveCookieCloudetting() { try { - const result: { [key: string]: any } = await api.post( - 'system/env', - cookieCloudSetting.value, - ) + const result: { [key: string]: any } = await api.post('system/env', cookieCloudSetting.value) - if (result.success) - $toast.success('保存站点同步设置成功') - else - $toast.error('保存站点同步设置失败!') - } - catch (error) { + if (result.success) $toast.success('保存站点同步设置成功') + else $toast.error('保存站点同步设置失败!') + } catch (error) { console.log(error) } } @@ -154,8 +137,11 @@ onMounted(() => { - - 从CookieCloud快速同步站点数据。 + + + 站点同步 + 从CookieCloud快速同步站点数据。 + @@ -210,19 +196,17 @@ onMounted(() => { - - - 保存 - - + + 保存 + - - 按站点或做种数量优先下载。 + + + 下载优先规则 + 按站点或做种数量优先下载。 + @@ -237,14 +221,9 @@ onMounted(() => { - - - 保存 - - + + 保存 + diff --git a/src/views/setting/AccountSettingSubscribe.vue b/src/views/setting/AccountSettingSubscribe.vue index 7bb76541..88eda090 100644 --- a/src/views/setting/AccountSettingSubscribe.vue +++ b/src/views/setting/AccountSettingSubscribe.vue @@ -311,10 +311,12 @@ onMounted(() => { - - 只有选中的站点才会在订阅中使用。 - + + 订阅站点 + 只有选中的站点才会在订阅中使用。 + + { {{ site.name }} - + @@ -359,36 +361,39 @@ onMounted(() => { - + 保存 - + - - - - - - - - - - - 分享 - - - - - - 导入 - - - - - - 设置在正常订阅时默认使用的优先级,未在优先级中的资源将不会自动下载。 + + + + + + + + + + + 分享 + + + + + + 导入 + + + + + + 订阅优先级 + 设置在正常订阅时默认使用的优先级,未在优先级中的资源将不会自动下载。 + + { /> - - + + 保存 - + - - - - - - - - - - - 分享 - - - - - - 导入 - - - - - - 设置在订阅洗版时使用的优先级,匹配优先级1时洗版完成。 + + 洗版优先级 + + + + + + + + + + 分享 + + + + + + 导入 + + + + + + 设置在订阅洗版时使用的优先级,匹配优先级1时洗版完成。 + + { /> - - + + 保存 - + - - 设置在订阅时默认使用的过滤规则。 + + + 默认过滤规则 + 设置在订阅时默认使用的过滤规则。 + @@ -529,9 +540,9 @@ onMounted(() => { - + 保存 - + diff --git a/src/views/setting/AccountSettingSystem.vue b/src/views/setting/AccountSettingSystem.vue index 81cf12f6..67258b4a 100644 --- a/src/views/setting/AccountSettingSystem.vue +++ b/src/views/setting/AccountSettingSystem.vue @@ -3,7 +3,6 @@ import { useToast } from 'vue-toast-notification' import { VRow } from 'vuetify/lib/components/index.mjs' import api from '@/api' -import { requiredValidator } from '@/@validators' // 选中的媒体服务器 const selectedMediaServers = ref([]) @@ -17,23 +16,6 @@ const downloaderTab = ref('qbittorrent') // 媒体服务器选中标签页 const mediaserverTab = ref('emby') -// 媒体库设置项 -const mediaSettings = ref({ - SCRAP_METADATA: true, - DOWNLOAD_PATH: '', - DOWNLOAD_MOVIE_PATH: '', - DOWNLOAD_TV_PATH: '', - DOWNLOAD_ANIME_PATH: '', - DOWNLOAD_CATEGORY: false, - TRANSFER_TYPE: 'copy', - OVERWRITE_MODE: 'size', - LIBRARY_PATH: '', - LIBRARY_MOVIE_NAME: '', - LIBRARY_TV_NAME: '', - LIBRARY_ANIME_NAME: '', - LIBRARY_CATEGORY: false, -}) - // 下载器设置项 const downloaderSettings = ref({ DOWNLOADER_MONITOR: true, @@ -92,24 +74,6 @@ const MediaServers = [ }, ] -// 转移方式字典 -const transferTypeItems = [ - { title: '硬链接', value: 'link' }, - { title: '复制', value: 'copy' }, - { title: '移动', value: 'move' }, - { title: '软链接', value: 'softlink' }, - { title: 'rclone复制', value: 'rclone_copy' }, - { title: 'rclone移动', value: 'rclone_move' }, -] - -// 覆盖模式字典 -const overwriteModeItems = [ - { title: '从不覆盖', value: 'never' }, - { title: '按大小覆盖', value: 'size' }, - { title: '总是覆盖', value: 'always' }, - { title: '仅保留最新版本', value: 'latest' }, -] - // 媒体库同步周期字典 const syncIntervalItems = [ { title: '从不', value: 0 }, @@ -123,72 +87,11 @@ const syncIntervalItems = [ // 提示框 const $toast = useToast() -// 加载媒体库设置 -async function loadMediaSettings() { - try { - const result: { [key: string]: any } = await api.get('system/env') - if (result.success) { - const { - SCRAP_METADATA, - DOWNLOAD_PATH, - DOWNLOAD_MOVIE_PATH, - DOWNLOAD_TV_PATH, - DOWNLOAD_ANIME_PATH, - DOWNLOAD_CATEGORY, - TRANSFER_TYPE, - OVERWRITE_MODE, - LIBRARY_PATH, - LIBRARY_MOVIE_NAME, - LIBRARY_TV_NAME, - LIBRARY_ANIME_NAME, - LIBRARY_CATEGORY, - } = result.data - mediaSettings.value = { - SCRAP_METADATA, - DOWNLOAD_PATH, - DOWNLOAD_MOVIE_PATH, - DOWNLOAD_TV_PATH, - DOWNLOAD_ANIME_PATH, - DOWNLOAD_CATEGORY, - TRANSFER_TYPE, - OVERWRITE_MODE, - LIBRARY_PATH, - LIBRARY_MOVIE_NAME, - LIBRARY_TV_NAME, - LIBRARY_ANIME_NAME, - LIBRARY_CATEGORY, - } - } - } - catch (error) { - console.log(error) - } -} - -// 调用API保存媒体设置 -async function saveMediaSetting() { - try { - const result: { [key: string]: any } = await api.post( - 'system/env', - mediaSettings.value, - ) - - if (result.success) - $toast.success('保存媒体库设置成功') - else - $toast.error('保存媒体库设置失败!') - } - catch (error) { - console.log(error) - } -} - // 调用API查询下载器设置 async function loadDownloaderSetting() { try { const result1: { [key: string]: any } = await api.get('system/setting/DOWNLOADER') - if (result1.success) - selectedDownloaders.value = result1.data?.value?.split(',') + if (result1.success) selectedDownloaders.value = result1.data?.value?.split(',') const result2: { [key: string]: any } = await api.get('system/env') if (result2.success) { @@ -219,8 +122,7 @@ async function loadDownloaderSetting() { TR_PASSWORD, } } - } - catch (error) { + } catch (error) { console.log(error) } } @@ -232,18 +134,15 @@ async function saveDownloaderSetting() { 'system/setting/DOWNLOADER', selectedDownloaders.value.join(','), ) - const result2: { [key: string]: any } = await api.post( - 'system/env', - downloaderSettings.value, - ) + const result2: { [key: string]: any } = await api.post('system/env', downloaderSettings.value) if (result1.success && result2.success) { $toast.success('保存下载器设置成功') reloadModule() + } else { + $toast.error('保存下载器设置失败!') } - else { $toast.error('保存下载器设置失败!') } - } - catch (error) { + } catch (error) { console.log(error) } } @@ -252,8 +151,7 @@ async function saveDownloaderSetting() { async function loadMediaServerSetting() { try { const result1: { [key: string]: any } = await api.get('system/setting/MEDIASERVER') - if (result1.success) - selectedMediaServers.value = result1.data?.value?.split(',') + if (result1.success) selectedMediaServers.value = result1.data?.value?.split(',') const result2: { [key: string]: any } = await api.get('system/env') if (result2.success) { @@ -284,8 +182,7 @@ async function loadMediaServerSetting() { PLEX_TOKEN, } } - } - catch (error) { + } catch (error) { console.log(error) } } @@ -298,18 +195,15 @@ async function saveMediaServerSetting() { selectedMediaServers.value.join(','), ) - const result2: { [key: string]: any } = await api.post( - 'system/env', - mediaServerSettings.value, - ) + const result2: { [key: string]: any } = await api.post('system/env', mediaServerSettings.value) if (result1.success && result2.success) { $toast.success('保存媒体服务器设置成功') reloadModule() + } else { + $toast.error('保存媒体服务器设置失败!') } - else { $toast.error('保存媒体服务器设置失败!') } - } - catch (error) { + } catch (error) { console.log(error) } } @@ -318,12 +212,9 @@ async function saveMediaServerSetting() { async function reloadModule() { try { const result: { [key: string]: any } = await api.get('system/reload') - if (result.success) - $toast.success('重新加载模块成功') - else - $toast.error('重新加载模块失败!') - } - catch (error) { + if (result.success) $toast.success('重新加载模块成功') + else $toast.error('重新加载模块失败!') + } catch (error) { console.log(error) } } @@ -332,15 +223,17 @@ async function reloadModule() { onMounted(() => { loadDownloaderSetting() loadMediaServerSetting() - loadMediaSettings() }) - - 只有选中的第1个下载器才会被默认使用。 + + + 下载器 + 只有选中的第1个下载器才会被默认使用。 + @@ -373,22 +266,11 @@ onMounted(() => { - - - Qbittorrent - - - Transmission - + + Qbittorrent + Transmission - + @@ -478,12 +360,7 @@ onMounted(() => { {}"> - - 保存 - + 保存 @@ -492,8 +369,11 @@ onMounted(() => { - - 只有选中的媒体服务器才会被默认使用。 + + + 媒体服务器 + 只有选中的媒体服务器才会被默认使用。 + @@ -526,25 +406,12 @@ onMounted(() => { - - - Emby - - - Jellyfin - - - Plex - + + Emby + Jellyfin + Plex - + @@ -640,140 +507,7 @@ onMounted(() => { {}"> - - 保存 - - - - - - - - - - - 设置下载目录、媒体库目录以及整理方式。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {}"> - - - 保存 - + 保存 diff --git a/src/views/setting/AccountSettingWords.vue b/src/views/setting/AccountSettingWords.vue index 0da8dd73..fa92034e 100644 --- a/src/views/setting/AccountSettingWords.vue +++ b/src/views/setting/AccountSettingWords.vue @@ -20,13 +20,10 @@ const transferExcludeWords = ref('') // 查询已设置的识别词 async function queryCustomIdentifiers() { try { - const result: { [key: string]: any } = await api.get( - 'system/setting/CustomIdentifiers', - ) + const result: { [key: string]: any } = await api.get('system/setting/CustomIdentifiers') customIdentifiers.value = result.data?.value.join('\n') - } - catch (error) { + } catch (error) { console.log(error) } } @@ -34,13 +31,10 @@ async function queryCustomIdentifiers() { // 查询已设置的制作组 async function queryCustomReleaseGroups() { try { - const result: { [key: string]: any } = await api.get( - 'system/setting/CustomReleaseGroups', - ) + const result: { [key: string]: any } = await api.get('system/setting/CustomReleaseGroups') customReleaseGroups.value = result.data?.value.join('\n') - } - catch (error) { + } catch (error) { console.log(error) } } @@ -48,13 +42,10 @@ async function queryCustomReleaseGroups() { // 查询已设置的自定义占位符 async function queryCustomization() { try { - const result: { [key: string]: any } = await api.get( - 'system/setting/Customization', - ) + const result: { [key: string]: any } = await api.get('system/setting/Customization') customization.value = result.data?.value.join('\n') - } - catch (error) { + } catch (error) { console.log(error) } } @@ -62,13 +53,10 @@ async function queryCustomization() { // 查询已设置的屏蔽词 async function queryTransferExcludeWords() { try { - const result: { [key: string]: any } = await api.get( - 'system/setting/TransferExcludeWords', - ) + const result: { [key: string]: any } = await api.get('system/setting/TransferExcludeWords') transferExcludeWords.value = result.data?.value.join('\n') - } - catch (error) { + } catch (error) { console.log(error) } } @@ -82,12 +70,9 @@ async function saveCustomIdentifiers() { customIdentifiers.value.split('\n'), ) - if (result.success) - $toast.success('自定义识别词保存成功') - else - $toast.error('自定义识别词保存失败!') - } - catch (error) { + if (result.success) $toast.success('自定义识别词保存成功') + else $toast.error('自定义识别词保存失败!') + } catch (error) { console.log(error) } } @@ -101,12 +86,9 @@ async function saveCustomReleaseGroups() { customReleaseGroups.value.split('\n'), ) - if (result.success) - $toast.success('自定义制作组/字幕组保存成功') - else - $toast.error('自定义制作组/字幕组保存失败!') - } - catch (error) { + if (result.success) $toast.success('自定义制作组/字幕组保存成功') + else $toast.error('自定义制作组/字幕组保存失败!') + } catch (error) { console.log(error) } } @@ -120,12 +102,9 @@ async function saveCustomization() { customization.value.split('\n'), ) - if (result.success) - $toast.success('自定义占位符保存成功') - else - $toast.error('自定义占位符保存失败!') - } - catch (error) { + if (result.success) $toast.success('自定义占位符保存成功') + else $toast.error('自定义占位符保存失败!') + } catch (error) { console.log(error) } } @@ -139,12 +118,9 @@ async function saveTransferExcludeWords() { transferExcludeWords.value.split('\n'), ) - if (result.success) - $toast.success('文件整理屏蔽词保存成功') - else - $toast.error('文件整理屏蔽词保存失败!') - } - catch (error) { + if (result.success) $toast.success('文件整理屏蔽词保存成功') + else $toast.error('文件整理屏蔽词保存失败!') + } catch (error) { console.log(error) } } @@ -160,104 +136,94 @@ onMounted(() => { - - 添加规则对种子名或者文件名进行预处理以校正识别。 + + 自定义识别词 + 添加规则对种子名或者文件名进行预处理以校正识别。 + + - - - + + + 被替换词 => 替换词 前定位词 <> 后定位词 >> 集偏移量(EP) 被替换词 => 替换词 && 前定位词 <> 后定位词 >> 集偏移量(EP) 其中替换词支持格式:{[tmdbid/doubanid=xxx;type=movie/tv;s=xxx;e=xxx]} 直接指定TMDBID/豆瓣ID识别,其中s、e为季数和集数(可选) - `" + ` + " /> - - - - 保存 - - + + + 保存 + - - 添加无法识别的制作组/字幕组。 + + 自定义制作组/字幕组 + 添加无法识别的制作组/字幕组。 + + - - - - 保存 - - + + + 保存 + - - 添加自定义占位符识别正则,重命名格式中添加{customization}使用。 + + 自定义占位符 + 添加自定义占位符识别正则,重命名格式中添加{customization}使用。 + + - - - - 保存 - - + + + 保存 + - - 目录名或文件名中包含屏蔽词时不进行整理。 + + 文件整理屏蔽词 + 目录名或文件名中包含屏蔽词时不进行整理。 + + - - - - 保存 - - + + + 保存 +