优化列表全选机制,修复列表未获得焦点时仍然可以全选的问题

This commit is contained in:
lyswhut
2023-12-05 11:14:44 +08:00
parent 7d504f9231
commit cac2d0e050
8 changed files with 24 additions and 18 deletions
+5 -2
View File
@@ -20,7 +20,7 @@
</div>
<div v-if="list.length" ref="dom_listContent" :class="$style.content">
<base-virtualized-list
v-slot="{ item, index }" :list="list" key-name="id" :item-height="listItemHeight"
ref="listRef" v-slot="{ item, index }" :list="list" key-name="id" :item-height="listItemHeight"
container-class="scroll" content-class="list"
>
<div
@@ -68,6 +68,7 @@
<script>
// 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,
+4 -4
View File
@@ -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) {
+1 -1
View File
@@ -164,7 +164,7 @@ export default {
listItemHeight,
handleSelectData,
removeAllSelect,
} = useList({ list })
} = useList({ listRef, list })
const {
handlePlayMusic,
+4 -4
View File
@@ -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) {