feat: 支持识别分享链接

This commit is contained in:
imsyy
2025-11-22 00:25:19 +08:00
parent 1b6ebd9c7c
commit 33ab167e52
4 changed files with 55 additions and 1 deletions

View File

@@ -59,6 +59,7 @@ export default {
"isRef": true,
"isShallow": true,
"makeDestructurable": true,
"manualResetRef": true,
"markRaw": true,
"nextTick": true,
"onActivated": true,
@@ -96,11 +97,11 @@ export default {
"refAutoReset": true,
"refDebounced": true,
"refDefault": true,
"refManualReset": true,
"refThrottled": true,
"refWithControl": true,
"resolveComponent": true,
"resolveRef": true,
"resolveUnref": true,
"shallowReactive": true,
"shallowReadonly": true,
"shallowRef": true,

2
auto-imports.d.ts vendored
View File

@@ -48,6 +48,7 @@ declare global {
const isRef: typeof import('vue').isRef
const isShallow: typeof import('vue').isShallow
const makeDestructurable: typeof import('@vueuse/core').makeDestructurable
const manualResetRef: typeof import('@vueuse/core').manualResetRef
const markRaw: typeof import('vue').markRaw
const nextTick: typeof import('vue').nextTick
const onActivated: typeof import('vue').onActivated
@@ -85,6 +86,7 @@ declare global {
const refAutoReset: typeof import('@vueuse/core').refAutoReset
const refDebounced: typeof import('@vueuse/core').refDebounced
const refDefault: typeof import('@vueuse/core').refDefault
const refManualReset: typeof import('@vueuse/core').refManualReset
const refThrottled: typeof import('@vueuse/core').refThrottled
const refWithControl: typeof import('@vueuse/core').refWithControl
const resolveComponent: typeof import('vue').resolveComponent

View File

@@ -150,6 +150,11 @@ const toSearch = async (key: any, type: string = "keyword") => {
query: { id: key?.id },
});
break;
case "share":
if (key?.realType && key?.id) {
toSearch({ id: key.id }, key.realType);
}
break;
default:
break;
}

View File

@@ -99,6 +99,10 @@ const searchSuggestionsType = {
name: "歌单",
icon: "MusicList",
},
share: {
name: "分享的内容",
icon: "Link",
},
};
// 获取搜索建议
@@ -126,11 +130,53 @@ const calcSearchSuggestHeights = () => {
}
};
// 识别链接类型
const getLinkType = (val: string) => {
const regex = /music\.163\.com\/(?:#\/)?(song|playlist|album|artist)\?id=(\d+)/;
const match = val.match(regex);
if (match) {
const typeMap: Record<string, string> = {
song: "songs",
playlist: "playlists",
album: "albums",
artist: "artists",
};
const nameMap: Record<string, string> = {
song: "歌曲",
playlist: "歌单",
album: "专辑",
artist: "歌手",
};
return {
type: typeMap[match[1]],
typeName: nameMap[match[1]],
id: match[2],
};
}
return null;
};
// 搜索框改变
watchDebounced(
() => statusStore.searchInputValue,
(val) => {
if (!val || val === "" || !settingStore.useOnlineService) return;
// 识别链接
const linkData = getLinkType(val);
if (linkData) {
searchSuggestData.value = {
order: ["share"],
share: [
{
name: `前往分享的${linkData.typeName}`,
id: linkData.id,
realType: linkData.type,
},
],
};
nextTick(calcSearchSuggestHeights);
return;
}
getSearchSuggest(val);
},
{ debounce: 300 },