This commit is contained in:
jxxghp
2024-04-18 22:33:03 +08:00
parent 62bb6de80d
commit b0f28b7e7c
4 changed files with 288 additions and 281 deletions
+23 -17
View File
@@ -18,22 +18,28 @@ function handleImport() {
</script> </script>
<template> <template>
<VCard <VDialog
:title="props.title" width="40rem"
class="rounded-t" scrollable
max-height="85vh"
> >
<DialogCloseBtn @click="emit('close')" /> <VCard
<VCardText class="pt-2"> :title="props.title"
<VTextarea v-model="codeString" /> class="rounded-t"
</VCardText> >
<VCardActions> <DialogCloseBtn @click="emit('close')" />
<VSpacer /> <VCardText class="pt-2">
<VBtn <VTextarea v-model="codeString" />
variant="tonal" </VCardText>
@click="handleImport" <VCardActions>
> <VSpacer />
导入 <VBtn
</VBtn> variant="tonal"
</VCardActions> @click="handleImport"
</VCard> >
导入
</VBtn>
</VCardActions>
</VCard>
</VDialog>
</template> </template>
+163 -158
View File
@@ -266,164 +266,169 @@ onMounted(() => {
</script> </script>
<template> <template>
<VCard <VDialog
:title="`${props.default ? `${props.type}默认订阅规则` : `编辑订阅 - ${subscribeForm.name} ${subscribeForm.season ? `第 ${subscribeForm.season} 季` : ''}`}`" scrollable
class="rounded-t" max-width="60rem"
> >
<VCardText class="pt-2"> <VCard
<DialogCloseBtn @click="emit('close')" /> :title="`${props.default ? `${props.type}默认订阅规则` : `编辑订阅 - ${subscribeForm.name} ${subscribeForm.season ? `第 ${subscribeForm.season} 季` : ''}`}`"
<VForm @submit.prevent="() => {}"> class="rounded-t"
<VRow> >
<VCol <VCardText class="pt-2">
cols="12" <DialogCloseBtn @click="emit('close')" />
md="8" <VForm @submit.prevent="() => {}">
> <VRow>
<VTextField <VCol
v-if="!props.default" cols="12"
v-model="subscribeForm.keyword" md="8"
label="搜索关键词" >
hint="设定搜索关键词后,将使用此关键词搜索站点资源,否则自动使用themoviedb中的名称搜索" <VTextField
/> v-if="!props.default"
</VCol> v-model="subscribeForm.keyword"
<VCol label="搜索关键词"
v-if="subscribeForm.type === '电视剧'" hint="设定搜索关键词后,将使用此关键词搜索站点资源,否则自动使用themoviedb中的名称搜索"
cols="12" />
md="2" </VCol>
> <VCol
<VTextField v-if="subscribeForm.type === '电视剧'"
v-model="subscribeForm.total_episode" cols="12"
label="总集数" md="2"
:rules="[numberValidator]" >
hint="设定剧集的总集数,以应对themoviedb中剧集信息未维护完整,导致提前结束订阅的情况" <VTextField
/> v-model="subscribeForm.total_episode"
</VCol> label="总集数"
<VCol :rules="[numberValidator]"
v-if="subscribeForm.type === '电视剧'" hint="设定剧集的总集数,以应对themoviedb中剧集信息未维护完整,导致提前结束订阅的情况"
cols="12" />
md="2" </VCol>
> <VCol
<VTextField v-if="subscribeForm.type === '电视剧'"
v-model="subscribeForm.start_episode" cols="12"
label="开始集数" md="2"
:rules="[numberValidator]" >
hint="只订阅下载此集数及之后的剧集" <VTextField
/> v-model="subscribeForm.start_episode"
</VCol> label="开始集数"
</VRow> :rules="[numberValidator]"
<VRow> hint="只订阅下载此集数及之后的剧集"
<VCol />
cols="12" </VCol>
md="4" </VRow>
> <VRow>
<VSelect <VCol
v-model="subscribeForm.quality" cols="12"
label="质量" md="4"
:items="qualityOptions" >
/> <VSelect
</VCol> v-model="subscribeForm.quality"
<VCol label="质量"
cols="12" :items="qualityOptions"
md="4" />
> </VCol>
<VSelect <VCol
v-model="subscribeForm.resolution" cols="12"
label="分辨率" md="4"
:items="resolutionOptions" >
/> <VSelect
</VCol> v-model="subscribeForm.resolution"
<VCol label="分辨率"
cols="12" :items="resolutionOptions"
md="4" />
> </VCol>
<VSelect <VCol
v-model="subscribeForm.effect" cols="12"
label="特效" md="4"
:items="effectOptions" >
/> <VSelect
</VCol> v-model="subscribeForm.effect"
</VRow> label="特效"
<VRow> :items="effectOptions"
<VCol />
cols="12" </VCol>
md="4" </VRow>
> <VRow>
<VTextField <VCol
v-model="subscribeForm.include" cols="12"
label="包含(关键字、正则式)" md="4"
hint="支持正则表达式,多个关键字用 | 分隔表示或" >
/> <VTextField
</VCol> v-model="subscribeForm.include"
<VCol label="包含(关键字、正则式)"
cols="12" hint="支持正则表达式,多个关键字用 | 分隔表示或"
md="4" />
> </VCol>
<VTextField <VCol
v-model="subscribeForm.exclude" cols="12"
label="排除(关键字、正则式)" md="4"
hint="支持正则表达式,多个关键字用 | 分隔表示或" >
/> <VTextField
</VCol> v-model="subscribeForm.exclude"
<VCol label="排除(关键字、正则式)"
cols="12" hint="支持正则表达式,多个关键字用 | 分隔表示或"
md="4" />
> </VCol>
<VSelect <VCol
v-model="subscribeForm.sites" cols="12"
:items="selectSitesOptions" md="4"
chips >
label="订阅站点" <VSelect
multiple v-model="subscribeForm.sites"
hint="只订阅选中的订阅站点,不选则订阅所有可订阅站点" :items="selectSitesOptions"
/> chips
</VCol> label="订阅站点"
</VRow> multiple
<VRow> hint="只订阅选中的订阅站点,不选则订阅所有可订阅站点"
<VCol />
cols="12" </VCol>
> </VRow>
<VTextField <VRow>
v-model="subscribeForm.save_path" <VCol
label="保存路径" cols="12"
hint="指定该订阅的下载保存路径,留空自动使用设定的下载目录" >
/> <VTextField
</VCol> v-model="subscribeForm.save_path"
</VRow> label="保存路径"
<VRow> hint="指定该订阅的下载保存路径,留空自动使用设定的下载目录"
<VCol />
cols="12" </VCol>
md="4" </VRow>
> <VRow>
<VSwitch <VCol
v-model="subscribeForm.best_version" cols="12"
label="洗版" md="4"
hint="开启后不管媒体库是否存在,均会根据洗版优先级进行过滤下载,直到下载到了最高优先级的资源为止" >
/> <VSwitch
</VCol> v-model="subscribeForm.best_version"
<VCol label="洗版"
cols="12" hint="开启后不管媒体库是否存在,均会根据洗版优先级进行过滤下载,直到下载到了最高优先级的资源为止"
md="4" />
> </VCol>
<VSwitch <VCol
v-model="subscribeForm.search_imdbid" cols="12"
label="使用 ImdbID 搜索" md="4"
hint="开启后将使用 ImdbID 搜索资源,搜索结果更精确,但不是所有站点都支持" >
/> <VSwitch
</VCol> v-model="subscribeForm.search_imdbid"
</VRow> label="使用 ImdbID 搜索"
</VForm> hint="开启后将使用 ImdbID 搜索资源,搜索结果更精确,但不是所有站点都支持"
</VCardText> />
</VCol>
</VRow>
</VForm>
</VCardText>
<VCardActions> <VCardActions>
<VBtn v-if="!props.default" color="error" @click="removeSubscribe"> <VBtn v-if="!props.default" color="error" @click="removeSubscribe">
取消订阅 取消订阅
</VBtn> </VBtn>
<VSpacer /> <VSpacer />
<VBtn <VBtn
variant="tonal" variant="tonal"
@click="`${props.default ? saveDefaultSubscribeConfig() : updateSubscribeInfo()}`" @click="`${props.default ? saveDefaultSubscribeConfig() : updateSubscribeInfo()}`"
> >
保存 保存
</VBtn> </VBtn>
</VCardActions> </VCardActions>
</VCard> </VCard>
</VDialog>
</template> </template>
+92 -86
View File
@@ -105,93 +105,99 @@ const dropdownItems = ref([
</script> </script>
<template> <template>
<VCard <VDialog
class="mx-auto" scrollable
width="100%" max-width="50rem"
:title = "props.type + '订阅历史'"
> >
<DialogCloseBtn @click="() => { emit('close') }" /> <VCard
<div class="mx-auto"
v-if="!isRefreshed" width="100%"
class="mt-12 w-full text-center text-gray-500 text-sm flex flex-col items-center" :title = "props.type + '订阅历史'"
> >
<VProgressCircular <DialogCloseBtn @click="() => { emit('close') }" />
size="48" <div
indeterminate v-if="!isRefreshed"
color="primary" class="mt-12 w-full text-center text-gray-500 text-sm flex flex-col items-center"
/>
</div>
<VList
lines="two"
>
<VInfiniteScroll
mode="intersect"
side="end"
:items="historyList"
class="overflow-hidden"
@load="loadHistory"
> >
<template #loading /> <VProgressCircular
<template v-for="(item, i) in historyList" :key="i"> size="48"
<VListItem> indeterminate
<template #prepend> color="primary"
<VImg />
height="75" </div>
width="50" <VList
:src="item.poster" lines="two"
aspect-ratio="2/3" >
class="object-cover rounded shadow ring-gray-500 me-3" <VInfiniteScroll
cover v-if="historyList.length > 0"
> mode="intersect"
<template #placeholder> side="end"
<div class="w-full h-full"> :items="historyList"
<VSkeletonLoader class="object-cover aspect-w-2 aspect-h-3" /> class="overflow-hidden"
</div> @load="loadHistory"
</template> >
</VImg> <template #loading />
</template> <template v-for="(item, i) in historyList" :key="i">
<VListItemTitle v-if="item.type == '电视剧'"> <VListItem>
{{ item.name }} <span class="text-sm"> {{ item.season }} </span> <template #prepend>
</VListItemTitle> <VImg
<VListItemTitle v-else> height="75"
{{ item.name }} width="50"
</VListItemTitle> :src="item.poster"
<VListItemSubtitle class="mt-2">{{ formatDateDifference(item.date) }}</VListItemSubtitle> aspect-ratio="2/3"
<VListItemSubtitle class="mt-2">{{ item.description }}</VListItemSubtitle> class="object-cover rounded shadow ring-gray-500 me-3"
<template #append> cover
<div class="me-n3"> >
<IconBtn> <template #placeholder>
<VIcon <div class="w-full h-full">
icon="mdi-dots-vertical" <VSkeletonLoader class="object-cover aspect-w-2 aspect-h-3" />
/> </div>
<VMenu </template>
activator="parent" </VImg>
close-on-content-click </template>
> <VListItemTitle v-if="item.type == '电视剧'">
<VList> {{ item.name }} <span class="text-sm"> {{ item.season }} </span>
<VListItem </VListItemTitle>
v-for="(item, i) in dropdownItems" <VListItemTitle v-else>
:key="i" {{ item.name }}
variant="plain" </VListItemTitle>
:base-color="item.color" <VListItemSubtitle class="mt-2">{{ formatDateDifference(item.date) }}</VListItemSubtitle>
@click="item.props.click" <VListItemSubtitle class="mt-2">{{ item.description }}</VListItemSubtitle>
> <template #append>
<template #prepend> <div class="me-n3">
<VIcon :icon="item.props.prependIcon" /> <IconBtn>
</template> <VIcon
<VListItemTitle v-text="item.title" /> icon="mdi-dots-vertical"
</VListItem> />
</VList> <VMenu
</VMenu> activator="parent"
</IconBtn> close-on-content-click
</div> >
</template> <VList>
</VListItem> <VListItem
</template> v-for="(item, i) in dropdownItems"
</VInfiniteScroll> :key="i"
</VList> variant="plain"
<VCardText v-if="historyList.length == 0 && isRefreshed" class="text-center"> :base-color="item.color"
没有数据 @click="item.props.click"
</VCardText> >
</VCard> <template #prepend>
<VIcon :icon="item.props.prependIcon" />
</template>
<VListItemTitle v-text="item.title" />
</VListItem>
</VList>
</VMenu>
</IconBtn>
</div>
</template>
</VListItem>
</template>
</VInfiniteScroll>
</VList>
<VCardText v-if="historyList.length == 0 && isRefreshed" class="text-center">
没有数据
</VCardText>
</VCard>
</VDialog>
</template> </template>
+10 -20
View File
@@ -118,31 +118,21 @@ const filteredDataList = computed(() => {
@click="historyDialog = true" @click="historyDialog = true"
/> />
<!-- 订阅编辑弹窗 --> <!-- 订阅编辑弹窗 -->
<VDialog <SubscribeEditForm
v-if="subscribeEditDialog" v-if="subscribeEditDialog"
v-model="subscribeEditDialog" v-model="subscribeEditDialog"
scrollable :default="true"
max-width="60rem" :type="props.type"
> @save="subscribeEditDialog = false"
<SubscribeEditForm @close="subscribeEditDialog = false"
:default="true" />
:type="props.type"
@save="subscribeEditDialog = false"
@close="subscribeEditDialog = false"
/>
</VDialog>
<!-- 历史记录弹窗 --> <!-- 历史记录弹窗 -->
<VDialog <SubscribeHistory
v-if="historyDialog" v-if="historyDialog"
v-model="historyDialog" v-model="historyDialog"
scrollable :type="props.type"
max-width="50rem" @close="historyDialog = false"
> />
<SubscribeHistory
:type="props.type"
@close="historyDialog = false"
/>
</VDialog>
</template> </template>
<style lang="scss"> <style lang="scss">