diff --git a/publish/changeLog.md b/publish/changeLog.md
index 6a98a636..1d1baed3 100644
--- a/publish/changeLog.md
+++ b/publish/changeLog.md
@@ -1,9 +1,10 @@
### 新增
- 新增歌词简体中文转繁体中文,当软件语言被设置为繁体中文后,播放歌曲的歌词也将自动转成繁体中文显示
-- 为方便分享歌曲列表,新增单个列表导入/导出功能,可在右击“我的列表”里的列表名后弹出的菜单中使用
-- 为防止误删列表,新增删除列表前的确认弹窗
+- 新增单个列表导入/导出功能,可以方便分享歌曲列表,可在右击“我的列表”里的列表名后弹出的菜单中使用
+- 新增删除列表前的确认弹窗,防止误删列表
- 新增歌词文本选择复制功能,可在详情页进度条上方的歌词文本选择按钮进入歌词文本选择模式,选择完成后可鼠标右击或者使用系统快捷键复制
+- 新增重复歌曲列表,可以方便移除我的列表中的重复歌曲,此列表会列出目标列表里歌曲名相同的歌曲,可在右击“我的列表”里的列表名后弹出的菜单中使用
### 修复
diff --git a/src/renderer/components/material/DuplicateMusicModal.vue b/src/renderer/components/material/DuplicateMusicModal.vue
new file mode 100644
index 00000000..7336e06f
--- /dev/null
+++ b/src/renderer/components/material/DuplicateMusicModal.vue
@@ -0,0 +1,256 @@
+
+Modal(:show="visible" @close="$emit('update:visible', false)" bg-close)
+ div(:class="$style.header")
+ h2 {{listInfo.name}}
+ main.scroll(:class="$style.main")
+ ul(ref="dom_list" v-if="duplicateList.length" :class="$style.list")
+ li(v-for="(item, index) in duplicateList" :key="item.songmid" :class="$style.listItem")
+ div(:class="$style.num") {{item.index + 1}}
+ div(:class="$style.text")
+ h3(:class="$style.text") {{item.musicInfo.name}} - {{item.musicInfo.singer}}
+ h3(v-if="item.musicInfo.albumName" :class="[$style.text, $style.albumName]") {{item.musicInfo.albumName}}
+ div(:class="$style.label") {{item.musicInfo.source}}
+ div(:class="$style.label") {{item.musicInfo.interval}}
+ div(:class="$style.btns")
+ button(type="button" @click="handlePlay(index)" :class="$style.btn")
+ svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='50%' viewBox='0 0 287.386 287.386' space='preserve' v-once)
+ use(xlink:href='#icon-testPlay')
+ button(type="button" @click="handleRemove(index)" :class="$style.btn")
+ svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='50%' viewBox='0 0 212.982 212.982' space='preserve' v-once)
+ use(xlink:href='#icon-delete')
+ div(:class="$style.noItem" v-else)
+ p(v-text="$t('view.list.no_item')")
+
+
+
+
+
diff --git a/src/renderer/components/material/SearchList.vue b/src/renderer/components/material/SearchList.vue
index a070478f..f83a26af 100644
--- a/src/renderer/components/material/SearchList.vue
+++ b/src/renderer/components/material/SearchList.vue
@@ -374,6 +374,7 @@ export default {
.albumName {
font-size: 12px;
opacity: 0.6;
+ .mixin-ellipsis-1;
}
.source {
flex: none;
diff --git a/src/renderer/lang/en-us/view/list.json b/src/renderer/lang/en-us/view/list.json
index b6ca422f..167cd50d 100644
--- a/src/renderer/lang/en-us/view/list.json
+++ b/src/renderer/lang/en-us/view/list.json
@@ -12,6 +12,7 @@
"list_search": "Search",
"list_sort": "Adjust position",
"list_source_detail": "Song Page",
+ "lists_duplicate": "Duplicate song",
"lists_export": "Export",
"lists_export_part_desc": "Choose where to save the list file",
"lists_import": "Import",
diff --git a/src/renderer/lang/zh-cn/view/list.json b/src/renderer/lang/zh-cn/view/list.json
index 59dd1ffa..18650f0c 100644
--- a/src/renderer/lang/zh-cn/view/list.json
+++ b/src/renderer/lang/zh-cn/view/list.json
@@ -12,6 +12,7 @@
"list_search": "搜索",
"list_sort": "调整位置",
"list_source_detail": "歌曲详情页",
+ "lists_duplicate": "重复歌曲",
"lists_export": "导出",
"lists_export_part_desc": "选择列表文件保存位置",
"lists_import": "导入",
diff --git a/src/renderer/lang/zh-tw/view/list.json b/src/renderer/lang/zh-tw/view/list.json
index 47c8986e..07a2aee5 100644
--- a/src/renderer/lang/zh-tw/view/list.json
+++ b/src/renderer/lang/zh-tw/view/list.json
@@ -12,6 +12,7 @@
"list_search": "搜索",
"list_sort": "調整位置",
"list_source_detail": "歌曲詳情頁",
+ "lists_duplicate": "重複歌曲",
"lists_export": "導出",
"lists_export_part_desc": "選擇列表文件保存位置",
"lists_import": "導入",
diff --git a/src/renderer/views/List.vue b/src/renderer/views/List.vue
index cbe0b54f..b423dd0d 100644
--- a/src/renderer/views/List.vue
+++ b/src/renderer/views/List.vue
@@ -74,6 +74,7 @@
material-menu(:menus="listItemMenu" :location="listMenu.menuLocation" item-name="name" :isShow="listMenu.isShowItemMenu" @menu-click="handleListItemMenuClick")
material-search-list(:list="list" @action="handleMusicSearchAction" :visible="isVisibleMusicSearch")
material-list-sort-modal(:show="isShowListSortModal" :music-info="musicInfo" :selected-num="selectdListDetailData.length" @close="isShowListSortModal = false" @confirm="handleSortMusicInfo")
+ material-duplicate-music-modal(:visible.sync="isShowDuplicateMusicModal" :list-info="selectedListInfo")