diff --git a/src/components/dialog/AdvancedNetworkSettingsDialog.vue b/src/components/dialog/AdvancedNetworkSettingsDialog.vue deleted file mode 100644 index c0c69a74..00000000 --- a/src/components/dialog/AdvancedNetworkSettingsDialog.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - diff --git a/src/components/dialog/AdvancedSystemSettingsDialog.vue b/src/components/dialog/AdvancedSystemSettingsDialog.vue deleted file mode 100644 index 41d402e4..00000000 --- a/src/components/dialog/AdvancedSystemSettingsDialog.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - diff --git a/src/pages/setting.vue b/src/pages/setting.vue index 4f996d0a..728179a9 100644 --- a/src/pages/setting.vue +++ b/src/pages/setting.vue @@ -7,12 +7,10 @@ import AccountSettingWords from '@/views/setting/AccountSettingWords.vue' import AccountSettingAbout from '@/views/setting/AccountSettingAbout.vue' 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 AccountSettingScheduler from '@/views/setting/AccountSettingScheduler.vue' import AccountSettingDirectory from '@/views/setting/AccountSettingDirectory.vue' import AccountSettingRule from '@/views/setting/AccountSettingRule.vue' -import AccountSettingTransfer from "@/views/setting/AccountSettingTransfer.vue" import { SettingTabs } from '@/router/menu' const route = useRoute() @@ -51,15 +49,6 @@ function jumpTab(tab: string) { - - - -
- -
-
-
- @@ -94,15 +83,6 @@ function jumpTab(tab: string) { - - - -
- -
-
-
- diff --git a/src/router/menu.ts b/src/router/menu.ts index 7ca7c2ae..27b7b969 100644 --- a/src/router/menu.ts +++ b/src/router/menu.ts @@ -133,15 +133,9 @@ export const UserfulMenus = [ export const SettingTabs = [ { title: '系统', - icon: 'mdi-cog', - tab: 'system', - description: '基本设定、网络设定、高级设定', - }, - { - title: '连接', icon: 'mdi-server-network', - tab: 'service', - description: '下载器(Qbittorrent、Transmission)、媒体服务器(Emby、Jellyfin、Plex)', + tab: 'system', + description: '系统设置、下载器(Qbittorrent、Transmission)、媒体服务器(Emby、Jellyfin、Plex)', }, { title: '存储 & 目录', @@ -167,12 +161,6 @@ export const SettingTabs = [ tab: 'search', description: '媒体数据源(TheMovieDb、豆瓣、Bangumi)、搜索站点、搜索优先级、默认过滤规则', }, - { - title: '整理', - icon: 'mdi-folder-multiple-outline', - tab: 'transfer', - description: '转移重命名、刮削来源', - }, { title: '订阅', icon: 'mdi-rss', @@ -180,7 +168,7 @@ export const SettingTabs = [ description: '订阅站点、订阅模式、订阅优先级、洗版优先级、默认过滤规则', }, { - title: '调度', + title: '服务', icon: 'mdi-list-box', tab: 'scheduler', description: '定时作业', diff --git a/src/views/setting/AccountSettingDirectory.vue b/src/views/setting/AccountSettingDirectory.vue index 8ea9cc8f..b573dfb7 100644 --- a/src/views/setting/AccountSettingDirectory.vue +++ b/src/views/setting/AccountSettingDirectory.vue @@ -20,12 +20,33 @@ const mediaCategories = ref<{ [key: string]: any }>({}) // 提示框 const $toast = useToast() -// 重载系统生效配置 -async function reloadSystem() { +// 数据源 +const sourceItems = [ + { 'title': 'TheMovieDb', 'value': 'themoviedb' }, + { 'title': '豆瓣', 'value': 'douban' }, +] + +// 系统设置 +const SystemSettings = ref({ + Basic: { + SCRAP_SOURCE: 'themoviedb', + MOVIE_RENAME_FORMAT: null, + TV_RENAME_FORMAT: null, + }, +}) + +// 加载系统设置 +async function loadSystemSettings() { try { - const result: { [key: string]: any } = await api.get('system/reload') - if (result.success) $toast.success('系统配置已生效') - else $toast.error('重载系统失败!') + const result: { [key: string]: any } = await api.get('system/env') + if (result.success) { + // 将API返回的值赋值给SystemSettings + for (const sectionKey of Object.keys(SystemSettings.value) as Array) { + Object.keys(SystemSettings.value[sectionKey]).forEach((key: string) => { + if (result.data.hasOwnProperty(key)) (SystemSettings.value[sectionKey] as any)[key] = result.data[key] + }) + } + } } catch (error) { console.log(error) } @@ -88,7 +109,6 @@ async function saveDirectories() { const result: { [key: string]: any } = await api.post('system/setting/Directories', directories.value) if (result.success) { $toast.success('目录设置保存成功') - await reloadSystem() } else $toast.error('目录设置保存失败!') } catch (error) { console.log(error) @@ -130,11 +150,24 @@ async function loadMediaCategories() { } } +// 保存设置 +async function saveSystemSettings(value: any) { + try { + const result: { [key: string]: any } = await api.post('system/env', value) + if (result.success) { + $toast.success('整理选项设置保存成功') + } else $toast.error('整理选项设置保存失败!') + } catch (error) { + console.log(error) + } +} + // 加载数据 onMounted(() => { loadDirectories() loadStorages() loadMediaCategories() + loadSystemSettings() }) @@ -208,4 +241,54 @@ onMounted(() => { + + + + + 整理 & 刮削 + 设置重命名格式、刮削选项等。 + + + + + + + + + + + + + + + + +
+ 保存 +
+
+
+
+
+
diff --git a/src/views/setting/AccountSettingSearch.vue b/src/views/setting/AccountSettingSearch.vue index 6745d50c..745b2194 100644 --- a/src/views/setting/AccountSettingSearch.vue +++ b/src/views/setting/AccountSettingSearch.vue @@ -14,11 +14,10 @@ const selectedSites = ref([]) // 系统设置 const SystemSettings = ref({ - Basis: {}, - Advanced: { + Basic: { SEARCH_MULTIPLE_NAME: false, DOWNLOAD_SUBTITLE: false, - AUTO_DOWNLOAD_USER: '', + AUTO_DOWNLOAD_USER: null, }, }) @@ -113,6 +112,18 @@ async function loadSearchSetting() { } } +// 调用API保存设置 +async function saveSystemSetting(value: { [key: string]: any }) { + try { + const result: { [key: string]: any } = await api.post('system/env', value) + + if (result.success) { + return true + } + } catch (error) {} + return false +} + // 调用API保存设置 async function saveSearchSetting() { try { @@ -126,11 +137,12 @@ async function saveSearchSetting() { selectedFilterGroup.value, ) - if (result1.success && result2.success) { - $toast.success('保存设置成功') - await reloadSystem() + const result3 = await saveSystemSetting(SystemSettings.value.Basic) + + if (result1.success && result2.success && result3) { + $toast.success('搜索基础设置保存成功') } else { - $toast.error('保存设置失败!') + $toast.error('搜索基础设置保存失败!') } } catch (error) { console.log(error) @@ -145,52 +157,15 @@ async function loadSystemSettings() { // 将API返回的值赋值给SystemSettings for (const sectionKey of Object.keys(SystemSettings.value) as Array) { Object.keys(SystemSettings.value[sectionKey]).forEach((key: string) => { - let v: any - if (result.data.hasOwnProperty(key)) { - v = result.data[key] - // 空字符串转为null,避免空字符串导致前端显示问题 - if (v === '') { - v = null - } - ;(SystemSettings.value[sectionKey] as any)[key] = v - } + if (result.data.hasOwnProperty(key)) (SystemSettings.value[sectionKey] as any)[key] = result.data[key] }) } - } else $toast.error('加载设置失败!') - } catch (error) { - console.log(error) - } -} - -// 保存设置 -async function saveSystemSettings(value: any) { - try { - const result: { [key: string]: any } = await api.post('system/env', value) - if (result.success) { - $toast.success('保存设置成功') - await reloadSystem() - await loadSystemSettings() - } else { - $toast.error('保存设置失败!') } } catch (error) { console.log(error) } } -// 重载系统生效配置 -async function reloadSystem() { - try { - const result: { [key: string]: any } = await api.get('system/reload') - if (result.success) { - $toast.success('系统配置已生效') - await loadSystemSettings() - } else $toast.error('重载系统失败!') - } catch (error) { - console.log(error) - } -} - onMounted(() => { querySites() queryFilterRuleGroups() @@ -205,7 +180,7 @@ onMounted(() => { - 数据源 & 规则 + 基础设置 设定数据源、规则组等基础信息。 @@ -235,6 +210,33 @@ onMounted(() => { /> + + + + + + + + + + + @@ -277,49 +279,4 @@ onMounted(() => { - - - - - 高级设置 - 设置交互搜索自动下载用户ID、字幕。 - - - - - - - - - - - - - - - - -
- 保存 -
-
-
-
-
-
diff --git a/src/views/setting/AccountSettingService.vue b/src/views/setting/AccountSettingService.vue deleted file mode 100644 index 2b3d154e..00000000 --- a/src/views/setting/AccountSettingService.vue +++ /dev/null @@ -1,347 +0,0 @@ - - - - diff --git a/src/views/setting/AccountSettingSite.vue b/src/views/setting/AccountSettingSite.vue index 91547220..b0d86b8c 100644 --- a/src/views/setting/AccountSettingSite.vue +++ b/src/views/setting/AccountSettingSite.vue @@ -95,6 +95,17 @@ async function loadSiteSettings() { } } +// 重载系统生效配置 +async function reloadSystem() { + try { + const result: { [key: string]: any } = await api.get('system/reload') + if (result.success) $toast.success('系统配置已生效') + else $toast.error('重载系统失败!') + } catch (error) { + console.log(error) + } +} + // 调用API保存设置 async function saveSiteSetting(value: { [key: string]: any }) { console.log(`正在保存设置:${JSON.stringify(value)}`) @@ -102,6 +113,7 @@ async function saveSiteSetting(value: { [key: string]: any }) { const result: { [key: string]: any } = await api.post('system/env', value) if (result.success) { $toast.success('保存设置成功') + await reloadSystem() } } catch (error) { console.log(error) diff --git a/src/views/setting/AccountSettingSubscribe.vue b/src/views/setting/AccountSettingSubscribe.vue index 663749a4..43330c8b 100644 --- a/src/views/setting/AccountSettingSubscribe.vue +++ b/src/views/setting/AccountSettingSubscribe.vue @@ -18,21 +18,12 @@ const selectedFilterRuleGroup = ref([]) // 选中的洗版规则组 const selectedBestVersionRuleGroup = ref([]) -// 是否开启订阅定时搜索 -const enableIntervalSearch = ref(false) - -// 是否检查本地媒体库是否存在资源 -const enableDirExistsSearch = ref(false) - // 订阅模式选择项 const subscribeModeItems = [ { title: '自动', value: 'spider' }, { title: '站点RSS', value: 'rss' }, ] -// 选择的订阅模式 -const selectedSubscribeMode = ref('spider') - // 所有规则组列表 const filterRuleGroups = ref([]) @@ -55,8 +46,16 @@ const rssIntervalItems = [ { title: '1天', value: 1440 }, ] -// 选择的RSS运行周期 -const selectedRssInterval = ref(5) +// 系统设置项 +const SystemSettings = ref({ + // 基础设置 + Basic: { + SUBSCRIBE_MODE: 'auto', + SUBSCRIBE_SEARCH: false, + SUBSCRIBE_RSS_INTERVAL: 30, + LOCAL_EXISTS_SEARCH: false, + }, +}) // 查询所有站点 async function querySites() { @@ -103,27 +102,55 @@ async function saveSelectedRssSites() { } } -// 查询订阅设置 -async function querySubscribeSetting() { +// 加载系统设置 +async function loadSystemSettings() { + try { + const result: { [key: string]: any } = await api.get('system/env') + if (result.success) { + // 将API返回的值赋值给SystemSettings + for (const sectionKey of Object.keys(SystemSettings.value) as Array) { + Object.keys(SystemSettings.value[sectionKey]).forEach((key: string) => { + if (result.data.hasOwnProperty(key)) (SystemSettings.value[sectionKey] as any)[key] = result.data[key] + }) + } + } + } catch (error) { + console.log(error) + } +} + +// 调用API保存设置 +async function saveSystemSetting(value: { [key: string]: any }) { + try { + const result: { [key: string]: any } = await api.post('system/env', value) + + if (result.success) { + return true + } + } catch (error) {} + return false +} + +// 查询订阅设置 +async function querySubscribeRules() { try { - // 查询订阅搜索开关 - const result: { [key: string]: any } = await api.get('system/setting/SUBSCRIBE_SEARCH') - if (result.success) enableIntervalSearch.value = result.data?.value - // 查询订阅模式 - const result2: { [key: string]: any } = await api.get('system/setting/SUBSCRIBE_MODE') - if (result2.success) selectedSubscribeMode.value = result2.data?.value - // 查询站点RSS周期 - const result3: { [key: string]: any } = await api.get('system/setting/SUBSCRIBE_RSS_INTERVAL') - if (result3.success) selectedRssInterval.value = result3.data?.value // 查询订阅规则组 - const result4: { [key: string]: any } = await api.get('system/setting/SubscribeFilterRuleGroups') - if (result4.success) selectedFilterRuleGroup.value = result4.data?.value + const result1: { [key: string]: any } = await api.get('system/setting/SubscribeFilterRuleGroups') + if (result1.success) selectedFilterRuleGroup.value = result1.data?.value // 查询洗版规则组 - const result5: { [key: string]: any } = await api.get('system/setting/BestVersionFilterRuleGroups') - if (result5.success) selectedBestVersionRuleGroup.value = result5.data?.value - // 查询检查本地媒体库是否存在资源开关 - const result6: { [key: string]: any } = await api.get('system/setting/LOCAL_EXISTS_SEARCH') - if (result6.success) enableDirExistsSearch.value = result6.data?.value + const result2: { [key: string]: any } = await api.get('system/setting/BestVersionFilterRuleGroups') + if (result2.success) selectedBestVersionRuleGroup.value = result2.data?.value + } catch (error) { + console.log(error) + } +} + +// 重载系统生效配置 +async function reloadSystem() { + try { + const result: { [key: string]: any } = await api.get('system/reload') + if (result.success) $toast.success('系统配置已生效') + else $toast.error('重载系统失败!') } catch (error) { console.log(error) } @@ -133,35 +160,21 @@ async function querySubscribeSetting() { async function saveSubscribeSetting() { try { const result1: { [key: string]: any } = await api.post( - 'system/setting/SUBSCRIBE_SEARCH', - enableIntervalSearch.value, - ) - - const result2: { [key: string]: any } = await api.post('system/setting/SUBSCRIBE_MODE', selectedSubscribeMode.value) - - const result3: { [key: string]: any } = await api.post( - 'system/setting/SUBSCRIBE_RSS_INTERVAL', - selectedRssInterval.value, - ) - - const result4: { [key: string]: any } = await api.post( 'system/setting/SubscribeFilterRuleGroups', selectedFilterRuleGroup.value, ) - const result5: { [key: string]: any } = await api.post( + const result2: { [key: string]: any } = await api.post( 'system/setting/BestVersionFilterRuleGroups', selectedBestVersionRuleGroup.value, ) - const result6: { [key: string]: any } = await api.post( - 'system/setting/LOCAL_EXISTS_SEARCH', - enableDirExistsSearch.value, - ) + const result3 = await saveSystemSetting(SystemSettings.value.Basic) - if (result1.success && result2.success && result3.success && result4.success && result5.success && result6.success) - $toast.success('订阅设置保存成功') - else $toast.error('订阅设置保存失败!') + if (result1.success && result2.success && result3) { + $toast.success('订阅基础设置保存成功') + await reloadSystem() + } else $toast.error('订阅基础设置保存失败!') } catch (error) { console.log(error) } @@ -171,7 +184,8 @@ onMounted(() => { querySites() queryFilterRuleGroups() querySelectedRssSites() - querySubscribeSetting() + querySubscribeRules() + loadSystemSettings() }) @@ -180,7 +194,7 @@ onMounted(() => { - 订阅模式 & 规则 + 基础设置 设定订阅模式、周期等基础设置 @@ -188,7 +202,7 @@ onMounted(() => { { { { diff --git a/src/views/setting/AccountSettingTransfer.vue b/src/views/setting/AccountSettingTransfer.vue deleted file mode 100644 index 0e5bb948..00000000 --- a/src/views/setting/AccountSettingTransfer.vue +++ /dev/null @@ -1,188 +0,0 @@ - - -