mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-05-17 10:27:30 +08:00
feat: 替换Token设置弹窗为Cookie设置弹窗,并优化Token保存逻辑
This commit is contained in:
@@ -552,43 +552,12 @@
|
|||||||
<remote-control-setting v-model:visible="showRemoteControlModal" />
|
<remote-control-setting v-model:visible="showRemoteControlModal" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- Token设置弹窗 -->
|
<!-- Cookie设置弹窗 -->
|
||||||
<n-modal v-model:show="showTokenModal" preset="dialog" title="Cookie设置">
|
<cookie-settings-modal
|
||||||
<template #header>
|
v-model:show="showTokenModal"
|
||||||
<div class="flex items-center gap-2">
|
:initial-value="currentToken"
|
||||||
<i class="ri-key-line"></i>
|
@save="handleTokenSave"
|
||||||
<span>Cookie设置</span>
|
/>
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<div class="space-y-4">
|
|
||||||
<div>
|
|
||||||
<div class="text-sm text-gray-600 dark:text-gray-400 mb-2">
|
|
||||||
请输入网易云音乐的Cookie:
|
|
||||||
</div>
|
|
||||||
<n-input
|
|
||||||
v-model:value="tokenInput"
|
|
||||||
type="textarea"
|
|
||||||
placeholder="请粘贴完整的Cookie..."
|
|
||||||
:rows="6"
|
|
||||||
:autosize="{ minRows: 4, maxRows: 8 }"
|
|
||||||
style="font-family: monospace; font-size: 12px"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="text-xs text-gray-500">
|
|
||||||
<p>• Cookie通常以 "MUSIC_U=" 开头</p>
|
|
||||||
<p>• 可以从浏览器开发者工具的网络请求中获取</p>
|
|
||||||
<p>• Cookie设置后将自动保存到本地存储</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<template #action>
|
|
||||||
<div class="flex gap-2">
|
|
||||||
<n-button @click="showTokenModal = false">取消</n-button>
|
|
||||||
<n-button type="primary" @click="saveToken" :disabled="!tokenInput.trim()">
|
|
||||||
保存Cookie
|
|
||||||
</n-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</n-modal>
|
|
||||||
|
|
||||||
<!-- 清除缓存弹窗 -->
|
<!-- 清除缓存弹窗 -->
|
||||||
<clear-cache-settings v-model:show="showClearCacheModal" @confirm="clearCache" />
|
<clear-cache-settings v-model:show="showClearCacheModal" @confirm="clearCache" />
|
||||||
@@ -608,6 +577,7 @@ import DonationList from '@/components/common/DonationList.vue';
|
|||||||
import PlayBottom from '@/components/common/PlayBottom.vue';
|
import PlayBottom from '@/components/common/PlayBottom.vue';
|
||||||
import LanguageSwitcher from '@/components/LanguageSwitcher.vue';
|
import LanguageSwitcher from '@/components/LanguageSwitcher.vue';
|
||||||
import ClearCacheSettings from '@/components/settings/ClearCacheSettings.vue';
|
import ClearCacheSettings from '@/components/settings/ClearCacheSettings.vue';
|
||||||
|
import CookieSettingsModal from '@/components/settings/CookieSettingsModal.vue';
|
||||||
import MusicSourceSettings from '@/components/settings/MusicSourceSettings.vue';
|
import MusicSourceSettings from '@/components/settings/MusicSourceSettings.vue';
|
||||||
import ProxySettings from '@/components/settings/ProxySettings.vue';
|
import ProxySettings from '@/components/settings/ProxySettings.vue';
|
||||||
import RemoteControlSetting from '@/components/settings/ServerSetting.vue';
|
import RemoteControlSetting from '@/components/settings/ServerSetting.vue';
|
||||||
@@ -1061,32 +1031,24 @@ const showRemoteControlModal = ref(false);
|
|||||||
|
|
||||||
// Token管理相关
|
// Token管理相关
|
||||||
const showTokenModal = ref(false);
|
const showTokenModal = ref(false);
|
||||||
const tokenInput = ref('');
|
|
||||||
const currentToken = ref(localStorage.getItem('token') || '');
|
const currentToken = ref(localStorage.getItem('token') || '');
|
||||||
|
|
||||||
// 保存Token
|
// 处理Token保存
|
||||||
const saveToken = async () => {
|
const handleTokenSave = async (token: string) => {
|
||||||
if (!tokenInput.value.trim()) {
|
|
||||||
message.error('请输入Token');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 临时保存原有token
|
// 临时保存原有token
|
||||||
const originalToken = localStorage.getItem('token');
|
const originalToken = localStorage.getItem('token');
|
||||||
|
|
||||||
// 设置新token
|
// 设置新token
|
||||||
localStorage.setItem('token', tokenInput.value.trim());
|
localStorage.setItem('token', token);
|
||||||
|
|
||||||
// 验证token有效性
|
// 验证token有效性
|
||||||
const user = await getUserDetail();
|
const user = await getUserDetail();
|
||||||
if (user.data && user.data.profile) {
|
if (user.data && user.data.profile) {
|
||||||
// token有效,更新用户信息
|
// token有效,更新用户信息
|
||||||
userStore.setUser(user.data.profile);
|
userStore.setUser(user.data.profile);
|
||||||
currentToken.value = tokenInput.value.trim();
|
currentToken.value = token;
|
||||||
message.success('Token设置成功');
|
message.success(t('settings.cookie.message.saveSuccess'));
|
||||||
showTokenModal.value = false;
|
|
||||||
tokenInput.value = '';
|
|
||||||
|
|
||||||
// 刷新当前页面
|
// 刷新当前页面
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@@ -1099,7 +1061,7 @@ const saveToken = async () => {
|
|||||||
} else {
|
} else {
|
||||||
localStorage.removeItem('token');
|
localStorage.removeItem('token');
|
||||||
}
|
}
|
||||||
message.error('Token无效,请检查后重试');
|
message.error(t('settings.cookie.message.saveError'));
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// token无效,恢复原有token
|
// token无效,恢复原有token
|
||||||
@@ -1109,7 +1071,7 @@ const saveToken = async () => {
|
|||||||
} else {
|
} else {
|
||||||
localStorage.removeItem('token');
|
localStorage.removeItem('token');
|
||||||
}
|
}
|
||||||
message.error('Token无效,请检查后重试');
|
message.error(t('settings.cookie.message.saveError'));
|
||||||
console.error('Token验证失败:', error);
|
console.error('Token验证失败:', error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1120,7 +1082,7 @@ const clearToken = () => {
|
|||||||
localStorage.removeItem('user');
|
localStorage.removeItem('user');
|
||||||
currentToken.value = '';
|
currentToken.value = '';
|
||||||
userStore.user = null;
|
userStore.user = null;
|
||||||
message.success('Token已清除');
|
message.success(t('settings.basic.clearToken') + '成功');
|
||||||
|
|
||||||
// 刷新页面
|
// 刷新页面
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user