mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-06 08:06:43 +08:00
为 ForkSubscribeDialog 组件添加用户关注功能,并在 DashboardRender 组件中实现组件重渲染
This commit is contained in:
@@ -26,6 +26,58 @@ const processing = ref(false)
|
|||||||
// 删除中
|
// 删除中
|
||||||
const deleting = ref(false)
|
const deleting = ref(false)
|
||||||
|
|
||||||
|
// 是否折叠
|
||||||
|
const isExpanded = ref(false)
|
||||||
|
|
||||||
|
// follow用户列表
|
||||||
|
const followUsers = ref<string[]>([])
|
||||||
|
|
||||||
|
// 当前用户是否已follow
|
||||||
|
const isFollowed = computed(() => followUsers.value.includes(props.media?.share_uid || ''))
|
||||||
|
|
||||||
|
// 折叠展开
|
||||||
|
function toggleExpand() {
|
||||||
|
isExpanded.value = !isExpanded.value
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加载follow用户列表
|
||||||
|
async function queryFollowUsers() {
|
||||||
|
try {
|
||||||
|
const result: { [key: string]: any } = await api.get('system/setting/FollowSubscribers')
|
||||||
|
followUsers.value = result.data?.value ?? []
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// follow用户
|
||||||
|
async function followUser() {
|
||||||
|
try {
|
||||||
|
const result: { [key: string]: any } = await api.post(`subscribe/follow?share_uid=${props.media?.share_uid}`)
|
||||||
|
if (result.success) {
|
||||||
|
queryFollowUsers()
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// unfollow用户
|
||||||
|
async function unfollowUser() {
|
||||||
|
try {
|
||||||
|
const result: { [key: string]: any } = await api.delete('subscribe/follow', {
|
||||||
|
params: {
|
||||||
|
share_uid: props.media?.share_uid,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if (result.success) {
|
||||||
|
queryFollowUsers()
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 计算海报图片地址
|
// 计算海报图片地址
|
||||||
const posterUrl = computed(() => {
|
const posterUrl = computed(() => {
|
||||||
const url = props.media?.poster
|
const url = props.media?.poster
|
||||||
@@ -97,6 +149,10 @@ async function doDelete() {
|
|||||||
doneNProgress()
|
doneNProgress()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
queryFollowUsers()
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<VDialog max-width="40rem" scrollable>
|
<VDialog max-width="40rem" scrollable>
|
||||||
@@ -144,9 +200,12 @@ async function doDelete() {
|
|||||||
<span class="text-body-1"> {{ media?.keyword }}</span>
|
<span class="text-body-1"> {{ media?.keyword }}</span>
|
||||||
</VListItemTitle>
|
</VListItemTitle>
|
||||||
</VListItem>
|
</VListItem>
|
||||||
<VListItem class="ps-0" v-if="media?.custom_words">
|
<VListItem class="ps-0" v-if="media?.custom_words" @click.stop="toggleExpand">
|
||||||
<VListItemTitle
|
<VListItemTitle
|
||||||
class="text-center text-md-left break-words whitespace-break-spaces line-clamp-10 overflow-hidden text-ellipsis ..."
|
class="text-center text-md-left break-words whitespace-break-spaces"
|
||||||
|
:class="{
|
||||||
|
'line-clamp-4 overflow-hidden text-ellipsis': !isExpanded,
|
||||||
|
}"
|
||||||
>
|
>
|
||||||
<span class="font-weight-medium">识别词:</span>
|
<span class="font-weight-medium">识别词:</span>
|
||||||
<span class="text-body-1"> {{ media?.custom_words }}</span>
|
<span class="text-body-1"> {{ media?.custom_words }}</span>
|
||||||
@@ -162,7 +221,7 @@ async function doDelete() {
|
|||||||
prepend-icon="mdi-heart"
|
prepend-icon="mdi-heart"
|
||||||
:loading="processing"
|
:loading="processing"
|
||||||
>
|
>
|
||||||
添加到我的订阅
|
订阅
|
||||||
</VBtn>
|
</VBtn>
|
||||||
<VBtn
|
<VBtn
|
||||||
v-if="props.media?.share_uid && props.media?.share_uid === globalSettings.USER_UNIQUE_ID"
|
v-if="props.media?.share_uid && props.media?.share_uid === globalSettings.USER_UNIQUE_ID"
|
||||||
@@ -175,6 +234,24 @@ async function doDelete() {
|
|||||||
>
|
>
|
||||||
取消分享
|
取消分享
|
||||||
</VBtn>
|
</VBtn>
|
||||||
|
<VBtn
|
||||||
|
v-else-if="isFollowed && props.media?.share_uid"
|
||||||
|
color="warning"
|
||||||
|
@click="unfollowUser"
|
||||||
|
prepend-icon="mdi-account-remove"
|
||||||
|
class="ms-2"
|
||||||
|
>
|
||||||
|
UnFollow
|
||||||
|
</VBtn>
|
||||||
|
<VBtn
|
||||||
|
v-else-if="props.media?.share_uid"
|
||||||
|
@click="followUser"
|
||||||
|
color="info"
|
||||||
|
prepend-icon="mdi-account-plus"
|
||||||
|
class="ms-2"
|
||||||
|
>
|
||||||
|
follow
|
||||||
|
</VBtn>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-xs mt-2" v-if="props.media?.count">
|
<div class="text-xs mt-2" v-if="props.media?.count">
|
||||||
<VIcon icon="mdi-fire" />共 {{ props.media?.count?.toLocaleString() }} 次复用
|
<VIcon icon="mdi-fire" />共 {{ props.media?.count?.toLocaleString() }} 次复用
|
||||||
|
|||||||
@@ -6,6 +6,12 @@ import { type PropType } from 'vue'
|
|||||||
const elementProps = defineProps({
|
const elementProps = defineProps({
|
||||||
config: Object as PropType<RenderProps>,
|
config: Object as PropType<RenderProps>,
|
||||||
})
|
})
|
||||||
|
// key
|
||||||
|
const componentKey = ref(0)
|
||||||
|
|
||||||
|
onActivated(() => {
|
||||||
|
componentKey.value++
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -23,6 +29,7 @@ const elementProps = defineProps({
|
|||||||
/>
|
/>
|
||||||
</Component>
|
</Component>
|
||||||
<Component
|
<Component
|
||||||
|
:key="componentKey"
|
||||||
:is="elementProps.config?.component"
|
:is="elementProps.config?.component"
|
||||||
v-if="elementProps.config?.html"
|
v-if="elementProps.config?.html"
|
||||||
v-bind="elementProps.config?.props"
|
v-bind="elementProps.config?.props"
|
||||||
|
|||||||
Reference in New Issue
Block a user