fix 站点列表权限问题

This commit is contained in:
jxxghp
2025-04-12 09:30:17 +08:00
parent 2fd4c0b2ea
commit 999a6e7c6e
3 changed files with 36 additions and 85 deletions
+21 -59
View File
@@ -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) || []
// 加载用户站点选择
await loadUserSitePreferences()
// 如果没有选择任何站点并且有可用站点,才默认选择全部 // 如果没有选择任何站点并且有可用站点,才默认选择全部
if (selectedSites.value.length === 0 && allSites.value.length > 0) { if (selectedSites.value.length === 0 && allSites.value.length > 0) {
selectedSites.value = allSites.value.map((site: Site) => site.id) selectedSites.value = allSites.value.map((site: Site) => site.id)
} }
} else if (res.data && Array.isArray(res.data)) { } catch (error) {
allSites.value = res.data.filter((site: any) => site.is_active) || [] console.log(error)
// 加载用户站点选择
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>
+6 -17
View File
@@ -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(
() => props.selected,
value => {
if (selectedSites.value.length == 0 && value) { if (selectedSites.value.length == 0 && value) {
selectedSites.value = 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">