@@ -364,30 +378,39 @@
fetchPlatforms();
fetchSearchTypes();
window.addEventListener('scroll', handleScroll);
+ displayUsername();
});
function fetchPlatforms() {
- fetch('/api/v1/music/common?type=channel')
+ fetch('/api/v1/music/common?type=channel', {
+ credentials: 'include' // 确保请求携带cookie
+ })
.then(response => response.json())
.then(data => {
- const platformList = document.getElementById('platform-list');
- data.data.forEach(platform => {
- const platformItem = document.createElement('div');
- platformItem.classList.add('item');
- const logoSrc = logos[platform.code] || '';
- platformItem.innerHTML = `

${platform.desc}`;
- platformItem.setAttribute('data-code', platform.code);
+ if (data.code === 200) {
+ const platformList = document.getElementById('platform-list');
+ data.data.forEach(platform => {
+ const platformItem = document.createElement('div');
+ platformItem.classList.add('item');
+ const logoSrc = logos[platform.code] || '';
+ platformItem.innerHTML = `

${platform.desc}`;
+ platformItem.setAttribute('data-code', platform.code);
- platformItem.addEventListener('click', () => {
- document.querySelectorAll('#platform-list .item').forEach(item => {
- item.classList.remove('selected');
+ platformItem.addEventListener('click', () => {
+ document.querySelectorAll('#platform-list .item').forEach(item => {
+ item.classList.remove('selected');
+ });
+ platformItem.classList.add('selected');
+ selectedPlatformCode = platform.code;
});
- platformItem.classList.add('selected');
- selectedPlatformCode = platform.code;
- });
- platformList.appendChild(platformItem);
- });
+ platformList.appendChild(platformItem);
+ });
+ } else if (data.code === -200) {
+ showMessage(data.msg);
+ } else {
+ console.error('未知的响应码:', data.code);
+ }
})
.catch(error => {
console.error('请求平台接口失败:', error);
@@ -395,26 +418,34 @@
}
function fetchSearchTypes() {
- fetch('/api/v1/music/common?type=searchType')
+ fetch('/api/v1/music/common?type=searchType', {
+ credentials: 'include' // 确保请求携带cookie
+ })
.then(response => response.json())
.then(data => {
- const searchTypeList = document.getElementById('searchType-list');
- data.data.forEach(type => {
- const typeItem = document.createElement('div');
- typeItem.classList.add('item');
- typeItem.textContent = type.desc;
- typeItem.setAttribute('data-code', type.code);
+ if (data.code === 200) {
+ const searchTypeList = document.getElementById('searchType-list');
+ data.data.forEach(type => {
+ const typeItem = document.createElement('div');
+ typeItem.classList.add('item');
+ typeItem.textContent = type.desc;
+ typeItem.setAttribute('data-code', type.code);
- typeItem.addEventListener('click', () => {
- document.querySelectorAll('#searchType-list .item').forEach(item => {
- item.classList.remove('selected');
+ typeItem.addEventListener('click', () => {
+ document.querySelectorAll('#searchType-list .item').forEach(item => {
+ item.classList.remove('selected');
+ });
+ typeItem.classList.add('selected');
+ selectedSearchTypeCode = type.code;
});
- typeItem.classList.add('selected');
- selectedSearchTypeCode = type.code;
- });
- searchTypeList.appendChild(typeItem);
- });
+ searchTypeList.appendChild(typeItem);
+ });
+ } else if (data.code === -200) {
+ showMessage(data.msg);
+ } else {
+ console.error('未知的响应码:', data.code);
+ }
})
.catch(error => {
console.error('请求搜索类型接口失败:', error);
@@ -448,7 +479,9 @@
document.getElementById('loading').style.display = 'block';
const keywords = document.getElementById('keywords').value;
- fetch(`/api/v1/music/search?channel=${selectedPlatformCode}&keywords=${keywords}&type=${selectedSearchTypeCode}&offset=${offset}&limit=${limit}`)
+ fetch(`/api/v1/music/search?channel=${selectedPlatformCode}&keywords=${encodeURIComponent(keywords)}&type=${selectedSearchTypeCode}&offset=${offset}&limit=${limit}`, {
+ credentials: 'include' // 确保请求携带cookie
+ })
.then(response => response.json())
.then(data => {
loading = false;
@@ -456,18 +489,24 @@
const resultDiv = document.getElementById('result');
const result = data.data?.result || {};
- if (selectedSearchTypeCode == "1") {
- // 单曲
- displaySongs(result, resultDiv);
- } else if (selectedSearchTypeCode == "10") {
- // 专辑
- displayAlbums(result, resultDiv);
- } else if (selectedSearchTypeCode == "100") {
- // 歌手
- displayArtists(result, resultDiv);
- } else if (selectedSearchTypeCode == "1000") {
- // 歌单
- displayPlaylists(result, resultDiv);
+ if (data.code === 200) {
+ if (selectedSearchTypeCode == "1") {
+ // 单曲
+ displaySongs(result, resultDiv);
+ } else if (selectedSearchTypeCode == "10") {
+ // 专辑
+ displayAlbums(result, resultDiv);
+ } else if (selectedSearchTypeCode == "100") {
+ // 歌手
+ displayArtists(result, resultDiv);
+ } else if (selectedSearchTypeCode == "1000") {
+ // 歌单
+ displayPlaylists(result, resultDiv);
+ }
+ } else if (data.code === -200) {
+ showMessage(data.msg);
+ } else {
+ console.error('未知的响应码:', data.code);
}
})
.catch(error => {
@@ -487,13 +526,13 @@
header = document.createElement('div');
header.className = 'list-header';
header.innerHTML = `
-
- `;
+
+ `;
const selectAllCheckbox = header.querySelector('.select-all-wrapper input[type="checkbox"]');
selectAllCheckbox.addEventListener('change', toggleSelectAll);
@@ -520,11 +559,11 @@
const row = document.createElement('div');
row.className = 'song-row';
row.innerHTML = `
-
-
${song.name}
-
${albumName}
-
${artists}
- `;
+
+
${song.name}
+
${albumName}
+
${artists}
+ `;
const checkbox = row.querySelector('.song-checkbox input[type="checkbox"]');
checkbox.addEventListener('change', () => toggleSongSelection(song.id, checkbox.checked));
list.appendChild(row);
@@ -547,10 +586,10 @@
albumItem.className = 'album-item';
albumItem.innerHTML = `
-

-
${album.name}
-
${album.type ? album.type : ''}
- `;
+

+
${album.name}
+
${album.type ? album.type : ''}
+ `;
const albumNameEl = albumItem.querySelector('.album-name');
const albumCoverEl = albumItem.querySelector('.album-cover');
@@ -578,9 +617,9 @@
artistItem.className = 'artist-item';
artistItem.innerHTML = `
-

-
${artist.name}
- `;
+

+
${artist.name}
+ `;
artistItem.addEventListener('click', () => {
fetchArtistSongs(artist.id);
@@ -608,9 +647,9 @@
const playlistItem = document.createElement('div');
playlistItem.className = 'playlist-item';
playlistItem.innerHTML = `
-

-
${pl.name}
- `;
+

+
${pl.name}
+ `;
playlistItem.addEventListener('click', () => {
fetchPlaylistSongs(pl.id);
@@ -625,56 +664,80 @@
}
function fetchAlbumSongs(albumId) {
- fetch(`/api/v1/music/search/album?channel=${selectedPlatformCode}&id=${albumId}`)
+ fetch(`/api/v1/music/search/album?channel=${selectedPlatformCode}&id=${albumId}`, {
+ credentials: 'include' // 确保请求携带cookie
+ })
.then(res => res.json())
.then(data => {
- const songsData = data.data?.songs || [];
- const resultDiv = document.getElementById('result');
- resultDiv.innerHTML = '';
- allSongs = [];
- selectedSongs = [];
- const result = {
- songs: songsData,
- hasMore: false
- };
- displaySongs(result, resultDiv);
+ if (data.code === 200) {
+ const songsData = data.data?.songs || [];
+ const resultDiv = document.getElementById('result');
+ resultDiv.innerHTML = '';
+ allSongs = [];
+ selectedSongs = [];
+ const result = {
+ songs: songsData,
+ hasMore: false
+ };
+ displaySongs(result, resultDiv);
+ } else if (data.code === -200) {
+ showMessage(data.msg);
+ } else {
+ console.error('未知的响应码:', data.code);
+ }
})
.catch(err => console.error('获取专辑歌曲出错:', err));
}
function fetchArtistSongs(artistId) {
- fetch(`/api/v1/music/search/artist?channel=${selectedPlatformCode}&id=${artistId}`)
+ fetch(`/api/v1/music/search/artist?channel=${selectedPlatformCode}&id=${artistId}`, {
+ credentials: 'include' // 确保请求携带cookie
+ })
.then(res => res.json())
.then(data => {
- const hotSongs = data.data?.hotSongs || [];
- const resultDiv = document.getElementById('result');
- resultDiv.innerHTML = '';
- allSongs = [];
- selectedSongs = [];
- const result = {
- songs: hotSongs,
- hasMore: false
- };
- displaySongs(result, resultDiv);
+ if (data.code === 200) {
+ const hotSongs = data.data?.hotSongs || [];
+ const resultDiv = document.getElementById('result');
+ resultDiv.innerHTML = '';
+ allSongs = [];
+ selectedSongs = [];
+ const result = {
+ songs: hotSongs,
+ hasMore: false
+ };
+ displaySongs(result, resultDiv);
+ } else if (data.code === -200) {
+ showMessage(data.msg);
+ } else {
+ console.error('未知的响应码:', data.code);
+ }
})
.catch(err => console.error('获取歌手歌曲出错:', err));
}
function fetchPlaylistSongs(playlistId) {
// 获取歌单歌曲数据,返回 data.songs
- fetch(`/api/v1/music/search/playlist?channel=${selectedPlatformCode}&id=${playlistId}`)
+ fetch(`/api/v1/music/search/playlist?channel=${selectedPlatformCode}&id=${playlistId}`, {
+ credentials: 'include' // 确保请求携带cookie
+ })
.then(res => res.json())
.then(data => {
- const songsData = data.data?.songs || [];
- const resultDiv = document.getElementById('result');
- resultDiv.innerHTML = '';
- allSongs = [];
- selectedSongs = [];
- const result = {
- songs: songsData,
- hasMore: false
- };
- displaySongs(result, resultDiv);
+ if (data.code === 200) {
+ const songsData = data.data?.songs || [];
+ const resultDiv = document.getElementById('result');
+ resultDiv.innerHTML = '';
+ allSongs = [];
+ selectedSongs = [];
+ const result = {
+ songs: songsData,
+ hasMore: false
+ };
+ displaySongs(result, resultDiv);
+ } else if (data.code === -200) {
+ showMessage(data.msg);
+ } else {
+ console.error('未知的响应码:', data.code);
+ }
})
.catch(err => console.error('获取歌单歌曲出错:', err));
}
@@ -751,9 +814,16 @@
const promises = selectedSongs.map(id => {
const url = `/api/v1/music/download?channel=${channel}&id=${id}`;
- return fetch(url)
+ return fetch(url, {
+ credentials: 'include' // 确保请求携带cookie
+ })
.then(res => res.json())
.then(data => {
+ if (data.code === 200) {
+ // 下载成功,可以处理成功逻辑
+ } else if (data.code === -200) {
+ showMessage(data.msg);
+ }
completedCount++;
const percent = Math.floor((completedCount / total) * 100);
progressBar.value = percent;
@@ -774,6 +844,58 @@
alert("下载完成!文件已存放到服务器指定目录中。");
});
}
+
+ // 显示用户名
+ function displayUsername() {
+ const username = getCookie('username');
+ const userInfoDiv = document.getElementById('user-info');
+ if (username) {
+ userInfoDiv.textContent = `欢迎, ${username}`;
+ } else {
+ userInfoDiv.textContent = `欢迎, 未登录`;
+ }
+ }
+
+ // 获取Cookie的值
+ function getCookie(name) {
+ const value = `; ${document.cookie}`;
+ const parts = value.split(`; ${name}=`);
+ if (parts.length === 2) return decodeURIComponent(parts.pop().split(';').shift());
+ }
+
+ // 设置Cookie的值
+ function setCookie(name, value, days) {
+ const d = new Date();
+ d.setTime(d.getTime() + (days * 24 * 60 * 60 * 1000));
+ let expires = "expires=" + d.toUTCString();
+ document.cookie = name + "=" + encodeURIComponent(value) + "; " + expires + "; path=/";
+ }
+
+ // 显示消息并处理重定向
+ function showMessage(msg) {
+ alert(msg);
+ setTimeout(() => {
+ window.location.href = '/login.html'; // 确保登录页面的路径正确
+ }, 1000);
+ }
+
+ // 全局的fetch包装函数,用于统一处理响应
+ // 可选:如果您希望在所有fetch请求中自动处理code=-200,可以定义一个包装函数
+ // 例如:
+ /*
+ function customFetch(url, options = {}) {
+ options.credentials = 'include'; // 确保携带cookie
+ return fetch(url, options)
+ .then(response => response.json())
+ .then(data => {
+ if (data.code === -200) {
+ showMessage(data.msg);
+ throw new Error(data.msg);
+ }
+ return data;
+ });
+ }
+ */