添加详情页的点赞计数,添加网站图标

This commit is contained in:
2025-10-23 14:22:12 +08:00
parent 5a5eba19e4
commit f94ef73518
10 changed files with 65 additions and 19 deletions
+1
View File
@@ -300,6 +300,7 @@ export default function AwemeDetailClient({ data, neighbors }: AwemeDetailClient
<NavigationButtons
neighbors={neighbors}
commentsCount={data.commentsCount}
likesCount={data.likesCount}
onNavigatePrev={() => neighbors.prev && router.push(`/aweme/${neighbors.prev.aweme_id}`)}
onNavigateNext={() => neighbors.next && router.push(`/aweme/${neighbors.next.aweme_id}`)}
onToggleComments={() => commentState.setOpen((v) => !v)}
@@ -21,7 +21,7 @@ export function ImageNavigationButtons({
{/* 左侧按钮 */}
<button
className={`
absolute left-4 top-7/16 -translate-y-1/2 z-20
absolute left-4 top-6/17 -translate-y-1/2 z-20
w-12 h-12 rounded-full
bg-black/40 backdrop-blur-sm border border-white/20
flex items-center justify-center
@@ -38,7 +38,7 @@ export function ImageNavigationButtons({
{/* 右侧按钮 */}
<button
className={`
absolute right-4 top-7/16 -translate-y-1/2 z-20
absolute right-4 top-6/17 -translate-y-1/2 z-20
w-12 h-12 rounded-full
bg-black/40 backdrop-blur-sm border border-white/20
flex items-center justify-center
@@ -1,9 +1,10 @@
import { ChevronDown, ChevronUp, MessageSquareText } from "lucide-react";
import { ChevronDown, ChevronUp, MessageSquareText, ThumbsUp } from "lucide-react";
import type { Neighbors } from "../types";
interface NavigationButtonsProps {
neighbors: Neighbors;
commentsCount: number;
likesCount: number;
onNavigatePrev: () => void;
onNavigateNext: () => void;
onToggleComments: () => void;
@@ -12,30 +13,44 @@ interface NavigationButtonsProps {
export function NavigationButtons({
neighbors,
commentsCount,
likesCount,
onNavigatePrev,
onNavigateNext,
onToggleComments,
}: NavigationButtonsProps) {
return (
<>
{/* 评论开关(右侧中部) */}
<button
className="z-10 grid place-items-center w-[54px] h-[54px] rounded-full absolute right-4 top-2/3 -translate-y-1/2 cursor-pointer"
onClick={onToggleComments}
aria-label="切换评论"
>
<div className="grid place-items-center gap-1 drop-shadow-lg">
<MessageSquareText size={40} className="" />
<div className="absolute right-4 top-8/14 flex flex-col items-center gap-8 z-10">
<button
className="grid place-items-center w-[54px] h-[54px] rounded-full -translate-y-1/2"
>
<div className="grid place-items-center gap-1 drop-shadow-lg">
<ThumbsUp size={40} className="" />
{commentsCount > 0 ? <span className="text-[18px] font-semibold text-white/90 drop-shadow">{commentsCount}</span> :
<span className="text-[12px] font-semibold text-white/90 drop-shadow">暂无评论</span>
}
<span className="text-[16px] font-semibold text-white/90 drop-shadow">{likesCount}</span>
</div>
</button>
</div>
</button>
{/* 评论开关(右侧中部) */}
<button
className="grid place-items-center w-[54px] h-[54px] rounded-full -translate-y-1/2 cursor-pointer"
onClick={onToggleComments}
aria-label="切换评论"
>
<div className="grid place-items-center gap-1 drop-shadow-lg">
<MessageSquareText size={40} className="" />
{commentsCount > 0 ? <span className="text-[16px] font-semibold text-white/90 drop-shadow">{commentsCount}</span> :
<span className="text-[12px] font-semibold text-white/90 drop-shadow">暂无评论</span>
}
</div>
</button>
</div>
{/* 上下切换按钮(右侧胶囊形状) */}
<div className="absolute right-4 top-6/11 -translate-y-1/2 z-10">
<div className="absolute right-4 top-5/11 -translate-y-1/2 z-10">
<div className="flex flex-col rounded-full bg-black/40 backdrop-blur-sm border border-white/20 overflow-hidden">
<button
className="w-[44px] h-[44px] inline-flex items-center justify-center text-white disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed hover:bg-white/10 transition-colors"
+2
View File
@@ -77,6 +77,7 @@ export default async function AwemeDetail({ params }: { params: Promise<{ awemeI
height: video!.height ?? null,
author: { nickname: video!.author.nickname, avatar_url: video!.author.avatar_url },
commentsCount,
likesCount: Number(video!.digg_count),
}
: {
type: "image" as const,
@@ -87,6 +88,7 @@ export default async function AwemeDetail({ params }: { params: Promise<{ awemeI
music_url: post!.music_url,
author: { nickname: post!.author.nickname, avatar_url: post!.author.avatar_url },
commentsCount,
likesCount: Number(post!.digg_count),
};
// Compute prev/next neighbors by created_at across videos and image posts
+2
View File
@@ -20,6 +20,7 @@ export type VideoData = {
height?: number | null;
author: User;
commentsCount: number;
likesCount: number;
};
export type ImageData = {
@@ -31,6 +32,7 @@ export type ImageData = {
music_url?: string | null;
author: User;
commentsCount: number;
likesCount: number;
};
export type AwemeData = VideoData | ImageData;