diff --git a/publish/changeLog.md b/publish/changeLog.md
index a9bb92b2..445ff31e 100644
--- a/publish/changeLog.md
+++ b/publish/changeLog.md
@@ -21,6 +21,10 @@
- 优化「自定义源管理」对话框在小窗口下的布局(#2247, @3gf8jv4dv)
- 优化软件文案编排(#2259, #2266, #2269, #2296, @3gf8jv4dv)
+### 变更
+
+- 我的列表-歌曲菜单中的 歌曲换源 功能从之前的类似软连接的形式改成替换歌曲的形式,也就是说,现在该功能相当于快速在线搜索歌曲,确认换源后将自动将原来的歌曲删除再将选择的歌曲插入被删除歌曲的位置。
+
### 其他
- 更新项目文档(@3gf8jv4dv)
diff --git a/src/lang/en-us.json b/src/lang/en-us.json
index adfdf238..04749925 100644
--- a/src/lang/en-us.json
+++ b/src/lang/en-us.json
@@ -195,6 +195,8 @@
"music_sort__title_multiple": "Adjust the position of the selected {num} songs to: ",
"music_time": "Length",
"music_toggle_clean": "Cancel Change",
+ "music_toggle_confirm": "Confirm",
+ "music_toggle_duplicate_tip": "The same song already exists in the list, should I remove it and continue?",
"my_list": "Your Library",
"no_item": "Nothing's here...",
"not_agree": "Decline",
diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json
index d1cef5f2..172383ea 100644
--- a/src/lang/zh-cn.json
+++ b/src/lang/zh-cn.json
@@ -195,6 +195,8 @@
"music_sort__title_multiple": "将已选的 {num} 首歌曲的位置调整到:",
"music_time": "时长",
"music_toggle_clean": "取消换源",
+ "music_toggle_confirm": "确认",
+ "music_toggle_duplicate_tip": "列表中已存在相同的歌曲,是否将其移除并继续?",
"my_list": "我的列表",
"no_item": "列表竟然是空的...",
"not_agree": "不接受",
diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json
index 0f5e89e3..1a39265d 100644
--- a/src/lang/zh-tw.json
+++ b/src/lang/zh-tw.json
@@ -195,6 +195,8 @@
"music_sort__title_multiple": "將已選取的 {num} 首歌曲的位置調整到:",
"music_time": "長度",
"music_toggle_clean": "取消變更",
+ "music_toggle_confirm": "確認",
+ "music_toggle_duplicate_tip": "列表中已存在相同的歌曲,是否將其移除並繼續?",
"my_list": "我的清單",
"no_item": "清單竟然是空的...",
"not_agree": "不接受",
diff --git a/src/renderer/core/player/action.ts b/src/renderer/core/player/action.ts
index e8597a34..88995d0a 100644
--- a/src/renderer/core/player/action.ts
+++ b/src/renderer/core/player/action.ts
@@ -232,6 +232,23 @@ const handlePlay = () => {
})
}
+/**
+ * 播放列表内歌曲
+ * @param listId 列表id
+ * @param id 歌曲id
+ */
+export const playListById = (listId: string, id: string) => {
+ const prevListId = playInfo.playerListId
+ setPlayListId(listId)
+ // pause()
+ const musicInfo = getList(listId).find(m => m.id == id)
+ if (!musicInfo) return
+ setPlayMusicInfo(listId, musicInfo)
+ if (appSetting['player.isAutoCleanPlayedList'] || prevListId != listId) clearPlayedList()
+ clearTempPlayeList()
+ handlePlay()
+}
+
/**
* 播放列表内歌曲
* @param listId 列表id
diff --git a/src/renderer/views/List/MusicList/components/MusicToggleModal.vue b/src/renderer/views/List/MusicList/components/MusicToggleModal.vue
index b294aadb..65c51a63 100644
--- a/src/renderer/views/List/MusicList/components/MusicToggleModal.vue
+++ b/src/renderer/views/List/MusicList/components/MusicToggleModal.vue
@@ -18,7 +18,7 @@
-