mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-05 15:36:49 +08:00
rollback
This commit is contained in:
@@ -8,7 +8,6 @@ import PluginCard from '@/components/cards/PluginCard.vue'
|
|||||||
import noImage from '@images/logos/plugin.png'
|
import noImage from '@images/logos/plugin.png'
|
||||||
import { useDisplay } from 'vuetify'
|
import { useDisplay } from 'vuetify'
|
||||||
import { isNullOrEmptyObject } from '@/@core/utils'
|
import { isNullOrEmptyObject } from '@/@core/utils'
|
||||||
import Grid from 'vue-virtual-scroll-grid'
|
|
||||||
|
|
||||||
// 显示器宽度
|
// 显示器宽度
|
||||||
const display = useDisplay()
|
const display = useDisplay()
|
||||||
@@ -275,24 +274,6 @@ function pluginLabels(label: string | undefined) {
|
|||||||
return label.split(',')
|
return label.split(',')
|
||||||
}
|
}
|
||||||
|
|
||||||
// 插件分页提供器
|
|
||||||
const pluginsPageProvider = (pageNumber: number, pageSize: number) => {
|
|
||||||
return new Promise<Plugin[]>(resolve => {
|
|
||||||
const start = pageNumber * pageSize
|
|
||||||
const end = start + pageSize
|
|
||||||
resolve(dataList.value.slice(start, end + 1))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 插件市场分页提供器
|
|
||||||
const pluginsMarketPageProvider = (pageNumber: number, pageSize: number) => {
|
|
||||||
return new Promise<Plugin[]>(resolve => {
|
|
||||||
const start = pageNumber * pageSize
|
|
||||||
const end = start + pageSize
|
|
||||||
resolve(sortedUninstalledList.value.slice(start, end + 1))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 加载时获取数据
|
// 加载时获取数据
|
||||||
onBeforeMount(async () => {
|
onBeforeMount(async () => {
|
||||||
await refreshData()
|
await refreshData()
|
||||||
@@ -302,28 +283,18 @@ onBeforeMount(async () => {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LoadingBanner v-if="!isRefreshed" class="mt-12" />
|
<LoadingBanner v-if="!isRefreshed" class="mt-12" />
|
||||||
<Grid
|
<div v-if="dataList.length > 0" class="grid gap-4 grid-plugin-card">
|
||||||
:length="dataList.length"
|
|
||||||
:pageSize="20"
|
|
||||||
:pageProvider="pluginsPageProvider"
|
|
||||||
class="grid gap-4 grid-plugin-card"
|
|
||||||
>
|
|
||||||
<template v-slot:probe>
|
|
||||||
<PluginAppCard />
|
|
||||||
</template>
|
|
||||||
<template v-slot:default="{ item, style, index }">
|
|
||||||
<PluginCard
|
<PluginCard
|
||||||
:style="style"
|
v-for="data in dataList"
|
||||||
:key="index"
|
:key="`${data.id}_v${data.plugin_version}`"
|
||||||
:count="PluginStatistics[item.id || '0']"
|
:count="PluginStatistics[data.id || '0']"
|
||||||
:plugin="item"
|
:plugin="data"
|
||||||
:action="pluginActions[item.id || '0']"
|
:action="pluginActions[data.id || '0']"
|
||||||
@remove="refreshData"
|
@remove="refreshData"
|
||||||
@save="refreshData"
|
@save="refreshData"
|
||||||
@action-done="pluginActions[item.id || '0'] = false"
|
@action-done="pluginActions[data.id || '0'] = false"
|
||||||
/>
|
/>
|
||||||
</template>
|
</div>
|
||||||
</Grid>
|
|
||||||
<NoDataFound
|
<NoDataFound
|
||||||
v-if="dataList.length === 0 && isRefreshed"
|
v-if="dataList.length === 0 && isRefreshed"
|
||||||
error-code="404"
|
error-code="404"
|
||||||
@@ -405,26 +376,15 @@ onBeforeMount(async () => {
|
|||||||
</VCol>
|
</VCol>
|
||||||
</VRow>
|
</VRow>
|
||||||
</div>
|
</div>
|
||||||
<Grid
|
<div v-if="isAppMarketLoaded" class="grid gap-4 grid-plugin-card">
|
||||||
v-if="isAppMarketLoaded"
|
|
||||||
:length="sortedUninstalledList.length"
|
|
||||||
:pageSize="20"
|
|
||||||
:pageProvider="pluginsMarketPageProvider"
|
|
||||||
class="grid gap-4 grid-plugin-card"
|
|
||||||
>
|
|
||||||
<template v-slot:probe>
|
|
||||||
<PluginAppCard />
|
|
||||||
</template>
|
|
||||||
<template v-slot:default="{ item, style, index }">
|
|
||||||
<PluginAppCard
|
<PluginAppCard
|
||||||
:style="style"
|
v-for="data in sortedUninstalledList"
|
||||||
:key="index"
|
:key="`${data.id}_v${data.plugin_version}`"
|
||||||
:plugin="item"
|
:plugin="data"
|
||||||
:count="PluginStatistics[item.id || '0']"
|
:count="PluginStatistics[data.id || '0']"
|
||||||
@install="pluginInstalled"
|
@install="pluginInstalled"
|
||||||
/>
|
/>
|
||||||
</template>
|
</div>
|
||||||
</Grid>
|
|
||||||
<NoDataFound
|
<NoDataFound
|
||||||
v-if="uninstalledList.length === 0 && isAppMarketLoaded"
|
v-if="uninstalledList.length === 0 && isAppMarketLoaded"
|
||||||
error-code="404"
|
error-code="404"
|
||||||
|
|||||||
@@ -24,8 +24,7 @@ async function fetchData() {
|
|||||||
dataList.value = await api.get('site/')
|
dataList.value = await api.get('site/')
|
||||||
isRefreshed.value = true
|
isRefreshed.value = true
|
||||||
defer = useDefer(dataList.value.length)
|
defer = useDefer(dataList.value.length)
|
||||||
}
|
} catch (error) {
|
||||||
catch (error) {
|
|
||||||
console.error(error)
|
console.error(error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -35,25 +34,10 @@ onBeforeMount(fetchData)
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LoadingBanner
|
<LoadingBanner v-if="!isRefreshed" class="mt-12" />
|
||||||
v-if="!isRefreshed"
|
<div v-if="dataList.length > 0" class="grid gap-3 grid-site-card">
|
||||||
class="mt-12"
|
<div v-for="(data, index) in dataList" :key="index">
|
||||||
/>
|
<SiteCard v-if="defer(index)" :key="data.id" :site="data" @remove="fetchData" @update="fetchData" />
|
||||||
<div
|
|
||||||
v-if="dataList.length > 0"
|
|
||||||
class="grid gap-3 grid-site-card"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
v-for="(data, index) in dataList"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<SiteCard
|
|
||||||
v-if="defer(index)"
|
|
||||||
:key="data.id"
|
|
||||||
:site="data"
|
|
||||||
@remove="fetchData"
|
|
||||||
@update="fetchData"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<NoDataFound
|
<NoDataFound
|
||||||
@@ -63,21 +47,18 @@ onBeforeMount(fetchData)
|
|||||||
error-description="已添加并支持的站点将会在这里显示。"
|
error-description="已添加并支持的站点将会在这里显示。"
|
||||||
/>
|
/>
|
||||||
<!-- 新增站点按钮 -->
|
<!-- 新增站点按钮 -->
|
||||||
<VFab
|
<VFab icon="mdi-plus" location="bottom end" size="x-large" fixed app appear @click="siteAddDialog = true" />
|
||||||
icon="mdi-plus"
|
|
||||||
location="bottom end"
|
|
||||||
size="x-large"
|
|
||||||
fixed
|
|
||||||
app
|
|
||||||
appear
|
|
||||||
@click="siteAddDialog = true"
|
|
||||||
/>
|
|
||||||
<!-- 新增站点弹窗 -->
|
<!-- 新增站点弹窗 -->
|
||||||
<SiteAddEditDialog
|
<SiteAddEditDialog
|
||||||
v-if="siteAddDialog"
|
v-if="siteAddDialog"
|
||||||
v-model="siteAddDialog"
|
v-model="siteAddDialog"
|
||||||
oper="add"
|
oper="add"
|
||||||
@save="siteAddDialog = false; fetchData()"
|
@save="
|
||||||
|
() => {
|
||||||
|
siteAddDialog = false
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
"
|
||||||
@close="siteAddDialog = false"
|
@close="siteAddDialog = false"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Reference in New Issue
Block a user