[+] Playlists

This commit is contained in:
2025-11-18 17:26:16 +08:00
parent 185df629ac
commit 9bd6449b20
3 changed files with 41 additions and 4 deletions
+12 -4
View File
@@ -1,13 +1,21 @@
<script lang="ts">
let { photoUrl, title, text }: { photoUrl: string; title: string; text: string } = $props();
let { photoUrl, title, text, right }: {
photoUrl: string;
title: string;
text: string;
right?: string
} = $props();
</script>
<div class="hbox gap-16px">
<img class="rounded-16px size-68px" src={photoUrl} alt={title} />
<img class="rounded-16px size-60px" src={photoUrl} alt={title} />
<div class="vbox flex-1 min-w-0">
<div class="m3-font-title-large truncate">{title}</div>
<div class="hbox w-full">
<div class="m3-font-body-medium m3-color-on-surface-variant truncate">{text}</div>
<div class="m3-font-body-medium m3-color-on-surface-variant hbox w-full justify-between gap-8px">
<div class="truncate">{text}</div>
{#if right}
<div>{right}</div>
{/if}
</div>
</div>
</div>
@@ -0,0 +1,11 @@
import type { PageServerLoad } from './$types';
import { listPlaylists } from "$lib/server/songs.ts";
// TODO: slug should be "my" or "recommended", fetch accordingly
export const load: PageServerLoad = async ({ params }) => {
const isMine = params.slug === 'my'
return {
playlists: await listPlaylists(),
isMine
}
}
+18
View File
@@ -0,0 +1,18 @@
<script lang="ts">
import AppBar from "../../../components/appbar/AppBar.svelte";
import ImageListItem from "../../../components/listitem/ImageListItem.svelte";
import type { PageProps } from "./$types"
let { data }: PageProps = $props()
</script>
<AppBar title={data.isMine ? '我的歌单' : '推荐歌单'} right={[
{icon: "i-material-symbols:more-vert", onclick: () => alert('More clicked')}
]} />
<div class="vbox p-content gap-12px">
{#each data.playlists as pl}
<ImageListItem photoUrl={pl.coverImgUrl} title={pl.name} text={`${pl.creator.nickname} 创建`} right={`${pl.trackCount} 首歌`} />
{/each}
</div>