From cac2d0e050cd6d023978f62ed41b81e8e2ce7b0e Mon Sep 17 00:00:00 2001 From: lyswhut Date: Tue, 5 Dec 2023 11:14:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=88=97=E8=A1=A8=E5=85=A8?= =?UTF-8?q?=E9=80=89=E6=9C=BA=E5=88=B6=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=9C=AA=E8=8E=B7=E5=BE=97=E7=84=A6=E7=82=B9=E6=97=B6?= =?UTF-8?q?=E4=BB=8D=E7=84=B6=E5=8F=AF=E4=BB=A5=E5=85=A8=E9=80=89=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/renderer/components/base/Checkbox.vue | 2 +- .../components/material/OnlineList/index.vue | 2 +- .../components/material/OnlineList/useList.ts | 12 +++++++----- src/renderer/views/Download/index.vue | 7 +++++-- src/renderer/views/Download/useList.js | 8 ++++---- src/renderer/views/List/MusicList/index.vue | 2 +- src/renderer/views/List/MusicList/useList.js | 8 ++++---- 8 files changed, 24 insertions(+), 18 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 4e947723..7a6b8e92 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -17,6 +17,7 @@ - 更新zh-tw翻译 - 自定义源列显示源版本号、作者名字 +- 优化列表全选机制,修复列表未获得焦点时仍然可以全选的问题 ### 修复 diff --git a/src/renderer/components/base/Checkbox.vue b/src/renderer/components/base/Checkbox.vue index efbee190..3a36d523 100644 --- a/src/renderer/components/base/Checkbox.vue +++ b/src/renderer/components/base/Checkbox.vue @@ -47,7 +47,7 @@ export default { }, label: { type: String, - required: true, + default: undefined, }, disabled: { type: Boolean, diff --git a/src/renderer/components/material/OnlineList/index.vue b/src/renderer/components/material/OnlineList/index.vue index 2fc69916..fcdf5272 100644 --- a/src/renderer/components/material/OnlineList/index.vue +++ b/src/renderer/components/material/OnlineList/index.vue @@ -155,7 +155,7 @@ export default { listItemHeight, handleSelectData, removeAllSelect, - } = useList({ props }) + } = useList({ props, listRef }) const { handlePlayMusic, diff --git a/src/renderer/components/material/OnlineList/useList.ts b/src/renderer/components/material/OnlineList/useList.ts index 781c6ba6..52e47e8b 100644 --- a/src/renderer/components/material/OnlineList/useList.ts +++ b/src/renderer/components/material/OnlineList/useList.ts @@ -1,10 +1,11 @@ -import { computed, watch, ref, onBeforeUnmount } from '@common/utils/vueTools' +import { computed, watch, ref, onBeforeUnmount, type Ref } from '@common/utils/vueTools' import { isFullscreen } from '@renderer/store' import { appSetting } from '@renderer/store/setting' import { getFontSizeWithScreen } from '@renderer/utils' -const useKeyEvent = ({ handleSelectAllData }: { +const useKeyEvent = ({ handleSelectAllData, listRef }: { handleSelectAllData: () => void + listRef: Ref }) => { const keyEvent = { isShiftDown: false, @@ -24,7 +25,7 @@ const useKeyEvent = ({ handleSelectAllData }: { keyEvent.isModDown &&= false } const handle_key_mod_a_down = ({ event }: LX.KeyDownEevent) => { - if (!event || (event.target as HTMLElement).tagName == 'INPUT') return + if (!event || (event.target as HTMLElement).tagName == 'INPUT' || document.activeElement != listRef.value?.$el) return event.preventDefault() if (event.repeat) return keyEvent.isModDown = false @@ -48,10 +49,11 @@ const useKeyEvent = ({ handleSelectAllData }: { } -export default ({ props }: { +export default ({ props, listRef }: { props: { list: LX.Music.MusicInfoOnline[] } + listRef: Ref }) => { const selectedList = ref([]) let lastSelectIndex = -1 @@ -66,7 +68,7 @@ export default ({ props }: { removeAllSelect() selectedList.value = [...props.list] } - const keyEvent = useKeyEvent({ handleSelectAllData }) + const keyEvent = useKeyEvent({ handleSelectAllData, listRef }) const handleSelectData = (clickIndex: number) => { if (keyEvent.isShiftDown) { diff --git a/src/renderer/views/Download/index.vue b/src/renderer/views/Download/index.vue index 4c5857dc..ca4b220b 100644 --- a/src/renderer/views/Download/index.vue +++ b/src/renderer/views/Download/index.vue @@ -20,7 +20,7 @@
// import { checkPath, openDirInExplorer, openUrl } from '@common/utils/electron' +import { ref } from '@common/utils/vueTools' import useListInfo from './useListInfo' import useList from './useList' import useTab from './useTab' @@ -80,6 +81,7 @@ import { appSetting } from '@renderer/store/setting' export default { name: 'Download', setup() { + const listRef = ref() const { tabs, activeTab } = useTab() const { @@ -95,7 +97,7 @@ export default { listItemHeight, removeAllSelect, handleSelectData, - } = useList({ list, listAll }) + } = useList({ listRef, list, listAll }) const { handlePlayMusic, @@ -196,6 +198,7 @@ export default { return quality == 'flac24bit' ? 'FLAC Hires' : quality?.toUpperCase() } return { + listRef, list, downloadStatus, rightClickSelectedIndex, diff --git a/src/renderer/views/Download/useList.js b/src/renderer/views/Download/useList.js index 4179566d..029b4d2e 100644 --- a/src/renderer/views/Download/useList.js +++ b/src/renderer/views/Download/useList.js @@ -3,7 +3,7 @@ import { isFullscreen } from '@renderer/store' import { getFontSizeWithScreen } from '@renderer/utils' import { appSetting } from '@renderer/store/setting' -const useKeyEvent = ({ handleSelectAllData }) => { +const useKeyEvent = ({ listRef, handleSelectAllData }) => { const keyEvent = { isShiftDown: false, isModDown: false, @@ -22,7 +22,7 @@ const useKeyEvent = ({ handleSelectAllData }) => { keyEvent.isModDown &&= false } const handle_key_mod_a_down = ({ event }) => { - if (event.target.tagName == 'INPUT') return + if (event.target.tagName == 'INPUT' || document.activeElement != listRef.value?.$el) return event.preventDefault() if (event.repeat) return keyEvent.isModDown = false @@ -45,7 +45,7 @@ const useKeyEvent = ({ handleSelectAllData }) => { return keyEvent } -export default ({ list, listAll }) => { +export default ({ listRef, list, listAll }) => { const selectedList = ref([]) let lastSelectIndex = -1 @@ -60,7 +60,7 @@ export default ({ list, listAll }) => { removeAllSelect() selectedList.value = [...list.value] } - const keyEvent = useKeyEvent({ handleSelectAllData }) + const keyEvent = useKeyEvent({ handleSelectAllData, listRef }) const handleSelectData = clickIndex => { if (keyEvent.isShiftDown) { diff --git a/src/renderer/views/List/MusicList/index.vue b/src/renderer/views/List/MusicList/index.vue index 043fe4b2..c6c74f07 100644 --- a/src/renderer/views/List/MusicList/index.vue +++ b/src/renderer/views/List/MusicList/index.vue @@ -164,7 +164,7 @@ export default { listItemHeight, handleSelectData, removeAllSelect, - } = useList({ list }) + } = useList({ listRef, list }) const { handlePlayMusic, diff --git a/src/renderer/views/List/MusicList/useList.js b/src/renderer/views/List/MusicList/useList.js index 85e2301c..f5baca63 100644 --- a/src/renderer/views/List/MusicList/useList.js +++ b/src/renderer/views/List/MusicList/useList.js @@ -3,7 +3,7 @@ import { isFullscreen } from '@renderer/store' import { getFontSizeWithScreen } from '@renderer/utils' import { appSetting } from '@renderer/store/setting' -const useKeyEvent = ({ handleSelectAllData }) => { +const useKeyEvent = ({ handleSelectAllData, listRef }) => { const keyEvent = { isShiftDown: false, isModDown: false, @@ -22,7 +22,7 @@ const useKeyEvent = ({ handleSelectAllData }) => { keyEvent.isModDown &&= false } const handle_key_mod_a_down = ({ event }) => { - if (event.target.tagName == 'INPUT') return + if (event.target.tagName == 'INPUT' || document.activeElement != listRef.value?.$el) return event.preventDefault() if (event.repeat) return keyEvent.isModDown = false @@ -45,7 +45,7 @@ const useKeyEvent = ({ handleSelectAllData }) => { return keyEvent } -export default ({ list }) => { +export default ({ listRef, list }) => { const selectedList = ref([]) let lastSelectIndex = -1 @@ -60,7 +60,7 @@ export default ({ list }) => { removeAllSelect() selectedList.value = [...list.value] } - const keyEvent = useKeyEvent({ handleSelectAllData }) + const keyEvent = useKeyEvent({ listRef, handleSelectAllData }) const handleSelectData = clickIndex => { if (keyEvent.isShiftDown) {