mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-07 08:46:40 +08:00
fix 站点列表权限问题
This commit is contained in:
@@ -152,66 +152,32 @@ async function fetchSubscribes() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保存用户站点选择到本地
|
// 从接口加载用户站点偏好设置
|
||||||
const saveUserSitePreferences = () => {
|
|
||||||
try {
|
|
||||||
localStorage.setItem('MP_SelectedSites', JSON.stringify(selectedSites.value))
|
|
||||||
} catch (err) {
|
|
||||||
console.error('保存站点选择失败:', err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 从本地或接口加载用户站点偏好设置
|
|
||||||
const loadUserSitePreferences = async () => {
|
const loadUserSitePreferences = async () => {
|
||||||
try {
|
try {
|
||||||
// 先尝试从本地存储获取
|
|
||||||
const storedSites = localStorage.getItem('MP_SelectedSites')
|
|
||||||
if (storedSites) {
|
|
||||||
selectedSites.value = JSON.parse(storedSites)
|
|
||||||
console.log('从本地加载站点选择:', selectedSites.value)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果本地没有,尝试从接口获取系统预设
|
|
||||||
const result = await api.get('system/setting/IndexerSites')
|
const result = await api.get('system/setting/IndexerSites')
|
||||||
if (result && result.data && result.data.value) {
|
if (result && result.data && result.data.value) {
|
||||||
selectedSites.value = result.data.value
|
selectedSites.value = result.data.value
|
||||||
console.log('从系统预设加载站点选择:', selectedSites.value)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('加载站点选择失败:', err)
|
console.error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取站点分类信息
|
// 查询所有站点
|
||||||
const getSiteCategories = () => {
|
async function queryAllSites() {
|
||||||
api
|
try {
|
||||||
.get('site/')
|
const data: Site[] = await api.get('site/')
|
||||||
.then(async (res: any) => {
|
// 过滤站点,只有启用的站点才显示
|
||||||
if (res && Array.isArray(res)) {
|
allSites.value = data.filter(item => item.is_active)
|
||||||
allSites.value = res.filter((site: any) => site.is_active) || []
|
// 如果没有选择任何站点并且有可用站点,才默认选择全部
|
||||||
// 加载用户站点选择
|
if (selectedSites.value.length === 0 && allSites.value.length > 0) {
|
||||||
await loadUserSitePreferences()
|
selectedSites.value = allSites.value.map((site: Site) => site.id)
|
||||||
// 如果没有选择任何站点并且有可用站点,才默认选择全部
|
}
|
||||||
if (selectedSites.value.length === 0 && allSites.value.length > 0) {
|
} catch (error) {
|
||||||
selectedSites.value = allSites.value.map((site: Site) => site.id)
|
console.log(error)
|
||||||
}
|
}
|
||||||
} else if (res.data && Array.isArray(res.data)) {
|
|
||||||
allSites.value = res.data.filter((site: any) => site.is_active) || []
|
|
||||||
// 加载用户站点选择
|
|
||||||
await loadUserSitePreferences()
|
|
||||||
// 如果没有选择任何站点并且有可用站点,才默认选择全部
|
|
||||||
if (selectedSites.value.length === 0 && allSites.value.length > 0) {
|
|
||||||
selectedSites.value = allSites.value.map((site: Site) => site.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
console.log('站点数据:', allSites.value)
|
|
||||||
console.log('已选站点:', selectedSites.value)
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.error('获取站点数据失败:', err)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 打开站点选择对话框
|
// 打开站点选择对话框
|
||||||
@@ -235,19 +201,11 @@ function searchSites(sites: number[]) {
|
|||||||
searchTorrent()
|
searchTorrent()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择站点
|
|
||||||
function chooseSitesDone(sites: number[]) {
|
|
||||||
chooseSiteDialog.value = false
|
|
||||||
selectedSites.value = sites
|
|
||||||
}
|
|
||||||
|
|
||||||
// 搜索资源
|
// 搜索资源
|
||||||
function searchTorrent() {
|
function searchTorrent() {
|
||||||
if (!searchWord.value) return
|
if (!searchWord.value) return
|
||||||
// 记录搜索词
|
// 记录搜索词
|
||||||
saveRecentSearches(searchWord.value)
|
saveRecentSearches(searchWord.value)
|
||||||
// 保存用户站点选择
|
|
||||||
saveUserSitePreferences()
|
|
||||||
// 跳转到搜索页面
|
// 跳转到搜索页面
|
||||||
router.push({
|
router.push({
|
||||||
path: '/resource',
|
path: '/resource',
|
||||||
@@ -335,7 +293,8 @@ onMounted(() => {
|
|||||||
fetchInstalledPlugins()
|
fetchInstalledPlugins()
|
||||||
fetchSubscribes()
|
fetchSubscribes()
|
||||||
loadRecentSearches()
|
loadRecentSearches()
|
||||||
getSiteCategories()
|
loadUserSitePreferences()
|
||||||
|
if (superUser) queryAllSites()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
@@ -358,7 +317,9 @@ onMounted(() => {
|
|||||||
clearable
|
clearable
|
||||||
/>
|
/>
|
||||||
<template #append>
|
<template #append>
|
||||||
<VIcon icon="mdi-close" class="clear-icon" @click="emit('close')" size="x-large" />
|
<IconBtn>
|
||||||
|
<VIcon icon="mdi-close" color="primary" @click="emit('close')" size="x-large" />
|
||||||
|
</IconBtn>
|
||||||
</template>
|
</template>
|
||||||
</VCardItem>
|
</VCardItem>
|
||||||
|
|
||||||
@@ -621,14 +582,16 @@ onMounted(() => {
|
|||||||
prepend-icon="mdi-magnify"
|
prepend-icon="mdi-magnify"
|
||||||
size="small"
|
size="small"
|
||||||
variant="flat"
|
variant="flat"
|
||||||
rounded="pill"
|
|
||||||
class="search-btn"
|
class="search-btn"
|
||||||
>
|
>
|
||||||
搜索
|
搜索
|
||||||
</VBtn>
|
</VBtn>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex align-center flex-wrap site-chips-container mt-1 py-2 px-2 px-sm-3">
|
<div
|
||||||
|
v-if="superUser"
|
||||||
|
class="d-flex align-center flex-wrap site-chips-container mt-1 py-2 px-2 px-sm-3"
|
||||||
|
>
|
||||||
<div class="d-flex align-center flex-wrap flex-grow-1">
|
<div class="d-flex align-center flex-wrap flex-grow-1">
|
||||||
<VChip
|
<VChip
|
||||||
v-if="selectedSites.length > 0"
|
v-if="selectedSites.length > 0"
|
||||||
@@ -663,6 +626,7 @@ onMounted(() => {
|
|||||||
color="primary"
|
color="primary"
|
||||||
@click="openSiteDialog"
|
@click="openSiteDialog"
|
||||||
class="ml-auto site-select-btn"
|
class="ml-auto site-select-btn"
|
||||||
|
rounded="pill"
|
||||||
>
|
>
|
||||||
选择站点
|
选择站点
|
||||||
<VIcon size="small" class="ml-1">mdi-cog-outline</VIcon>
|
<VIcon size="small" class="ml-1">mdi-cog-outline</VIcon>
|
||||||
@@ -712,11 +676,9 @@ onMounted(() => {
|
|||||||
v-model="chooseSiteDialog"
|
v-model="chooseSiteDialog"
|
||||||
:sites="allSites"
|
:sites="allSites"
|
||||||
:selected="selectedSites"
|
:selected="selectedSites"
|
||||||
:savebtn="true"
|
|
||||||
@search="searchSites"
|
@search="searchSites"
|
||||||
@close="chooseSiteDialog = false"
|
@close="chooseSiteDialog = false"
|
||||||
@reload="getSiteCategories"
|
@reload="queryAllSites"
|
||||||
@save="chooseSitesDone"
|
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -8,14 +8,10 @@ const props = defineProps({
|
|||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
selected: Array as PropType<Number[]>,
|
selected: Array as PropType<Number[]>,
|
||||||
savebtn: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// 定义事件
|
// 定义事件
|
||||||
const emit = defineEmits(['close', 'search', 'reload', 'save'])
|
const emit = defineEmits(['close', 'search', 'reload'])
|
||||||
|
|
||||||
// 过滤词
|
// 过滤词
|
||||||
const siteFilter = ref('')
|
const siteFilter = ref('')
|
||||||
@@ -23,11 +19,14 @@ const siteFilter = ref('')
|
|||||||
// 已选择站点
|
// 已选择站点
|
||||||
const selectedSites = ref<any[]>(props.selected || [])
|
const selectedSites = ref<any[]>(props.selected || [])
|
||||||
|
|
||||||
watch(() => props.selected, value => {
|
watch(
|
||||||
if (selectedSites.value.length == 0 && value) {
|
() => props.selected,
|
||||||
selectedSites.value = value
|
value => {
|
||||||
}
|
if (selectedSites.value.length == 0 && value) {
|
||||||
})
|
selectedSites.value = value
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
// 全选/全不选按钮文字
|
// 全选/全不选按钮文字
|
||||||
const checkAllText = computed(() => {
|
const checkAllText = computed(() => {
|
||||||
@@ -171,16 +170,6 @@ const filteredSites = computed(() => {
|
|||||||
>
|
>
|
||||||
取消
|
取消
|
||||||
</VBtn>
|
</VBtn>
|
||||||
<VBtn
|
|
||||||
v-if="savebtn"
|
|
||||||
color="success"
|
|
||||||
variant="flat"
|
|
||||||
@click="emit('save', selectedSites)"
|
|
||||||
class="mr-2 d-flex align-center justify-center"
|
|
||||||
:disabled="selectedSites.length === 0"
|
|
||||||
>
|
|
||||||
确定
|
|
||||||
</VBtn>
|
|
||||||
<VBtn
|
<VBtn
|
||||||
color="primary"
|
color="primary"
|
||||||
variant="flat"
|
variant="flat"
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ const isMacOS = computed(() => {
|
|||||||
<VIcon size="large" color="white" icon="mdi-close" />
|
<VIcon size="large" color="white" icon="mdi-close" />
|
||||||
</VBtn>
|
</VBtn>
|
||||||
</VToolbarItems>
|
</VToolbarItems>
|
||||||
<VToolbarTitle class="text-truncate"> 编辑流程 - {{ workflow?.name }} </VToolbarTitle>
|
<VToolbarTitle> 编辑流程 - {{ workflow?.name }} </VToolbarTitle>
|
||||||
<VSpacer></VSpacer>
|
<VSpacer></VSpacer>
|
||||||
<VToolbarItems>
|
<VToolbarItems>
|
||||||
<VBtn icon variant="text" @click="importCodeDialog = true" class="ms-2">
|
<VBtn icon variant="text" @click="importCodeDialog = true" class="ms-2">
|
||||||
|
|||||||
Reference in New Issue
Block a user