diff --git a/src/music/netease.ts b/src/music/netease.ts
index 4a863db..a9060b4 100644
--- a/src/music/netease.ts
+++ b/src/music/netease.ts
@@ -112,12 +112,12 @@ export class NeteaseProvider implements MusicProvider {
params: {
keywords: query,
type: 1000,
- limit: 5,
+ limit: 10,
...this.cookieParams,
},
}),
this.api.get("/cloudsearch", {
- params: { keywords: query, type: 10, limit: 5, ...this.cookieParams },
+ params: { keywords: query, type: 10, limit: 10, ...this.cookieParams },
}),
]);
diff --git a/web/src/views/Search.vue b/web/src/views/Search.vue
index 6d91a3d..82a976f 100644
--- a/web/src/views/Search.vue
+++ b/web/src/views/Search.vue
@@ -21,8 +21,31 @@
搜索中...
-
- 专辑
+
+
+
+
+
+
+
-
- 歌单
+
-
- 单曲
+
('songs');
interface Album { id: string; name: string; artist: string; coverUrl: string; songCount?: number; platform: string; }
interface Playlist { id: string; name: string; coverUrl: string; songCount?: number; platform: string; }
@@ -105,6 +127,7 @@ async function doSearch() {
if (!query.value.trim()) return;
loading.value = true;
searched.value = true;
+ activeTab.value = 'songs';
try {
const res = await axios.get('/api/music/search/all', { params: { q: query.value } });
songs.value = res.data.songs ?? [];
@@ -200,9 +223,49 @@ onMounted(() => {
gap: 2px;
}
+.tab-bar {
+ display: flex;
+ gap: 6px;
+ margin-bottom: 24px;
+ padding: 4px;
+ background: var(--bg-card);
+ border-radius: var(--radius-md);
+ width: fit-content;
+}
+
+.tab {
+ padding: 8px 20px;
+ border-radius: calc(var(--radius-md) - 2px);
+ font-size: 14px;
+ font-family: inherit;
+ font-weight: var(--fw-semi);
+ color: var(--text-secondary);
+ background: transparent;
+ cursor: pointer;
+ transition: all var(--transition-fast);
+ white-space: nowrap;
+
+ &:hover { color: var(--text-primary); }
+
+ &.active {
+ background: var(--color-primary);
+ color: #fff;
+ .tab-count { opacity: 0.85; }
+ }
+}
+
+.tab-count {
+ margin-left: 5px;
+ opacity: 0.55;
+ font-weight: var(--fw-regular);
+ font-size: 13px;
+
+ &::before { content: '('; }
+ &::after { content: ')'; }
+}
+
.result-section {
margin-bottom: 32px;
- .section-title { font-size: 18px; margin: 0 0 12px; opacity: 0.85; }
}
.card-grid {
display: grid;