保存一下

This commit is contained in:
2025-08-22 15:49:10 +08:00
parent 6c4d6fb298
commit 50a06568d4
2 changed files with 17 additions and 22 deletions

View File

@@ -3,11 +3,13 @@
:config-provider-props="configProviderProps" :config-provider-props="configProviderProps"
class="w-full h-full pos-relative" class="w-full h-full pos-relative"
> >
<div ref="desktopRootDom" class="desktop-root"> <div class="desktop-root" @contextmenu="onContextMenu">
<div class="desktop-container" <div class="w-full h-full flex-1 p-2 pos-relative">
:style="gridStyle"> <div class="desktop-container"
<AppIcon v-for="(appIcon, i) in appIconsRef" :key="i" :style="gridStyle">
:icon="appIcon" :gridTemplate="gridTemplate" /> <AppIcon v-for="(appIcon, i) in appIconsRef" :key="i"
:icon="appIcon" :gridTemplate="gridTemplate" />
</div>
</div> </div>
<div class="task-bar"></div> <div class="task-bar"></div>
</div> </div>
@@ -20,13 +22,10 @@ import XSystem from '@/core/XSystem.ts'
import { notificationApi } from '@/core/common/naive-ui/discrete-api.ts' import { notificationApi } from '@/core/common/naive-ui/discrete-api.ts'
import { configProviderProps } from '@/core/common/naive-ui/theme.ts' import { configProviderProps } from '@/core/common/naive-ui/theme.ts'
import { DesktopEventEnum } from '@/core/events/EventTypes.ts' import { DesktopEventEnum } from '@/core/events/EventTypes.ts'
import { useIconDrag } from '@/core/desktop/utils/useIconDrag.ts'
import type { IDesktopAppIcon } from '@/core/desktop/types/IDesktopAppIcon.ts'
import { useDesktopInit } from '@/core/desktop/ui/useDesktopInit.ts' import { useDesktopInit } from '@/core/desktop/ui/useDesktopInit.ts'
import AppIcon from '@/core/desktop/ui/components/AppIcon.vue' import AppIcon from '@/core/desktop/ui/components/AppIcon.vue'
const props = defineProps<{ process: DesktopProcess }>() const props = defineProps<{ process: DesktopProcess }>()
// console.log(props.process)
const { appIconsRef, gridStyle, gridTemplate } = useDesktopInit('.desktop-container') const { appIconsRef, gridStyle, gridTemplate } = useDesktopInit('.desktop-container')
@@ -42,12 +41,8 @@ XSystem.instance.eventManages.addEventListener(
}, },
) )
const iconsInit = () => { const onContextMenu = (e: MouseEvent) => {
const icons = document.querySelectorAll<HTMLDivElement>('div.icon-container') e.preventDefault()
const container = document.querySelector<HTMLDivElement>('.desktop-container')!
icons.forEach((icon: HTMLDivElement) => {
useIconDrag(icon, container)
})
} }
</script> </script>
@@ -56,13 +51,7 @@ const iconsInit = () => {
@apply w-full h-full flex flex-col; @apply w-full h-full flex flex-col;
.desktop-container { .desktop-container {
@apply w-full flex-1 grid grid-auto-flow-col pos-relative; @apply w-full h-full flex-1 grid grid-auto-flow-col pos-relative;
.icon-container {
width: 100%;
height: 100%;
@apply flex flex-col items-center justify-center rounded bg-gray-200;
}
} }
.task-bar { .task-bar {

View File

@@ -21,6 +21,12 @@ const onDragStart = (e: DragEvent) => {}
const onDragEnd = (e: DragEvent) => { const onDragEnd = (e: DragEvent) => {
const el = e.target as HTMLElement | null const el = e.target as HTMLElement | null
if (!el) return if (!el) return
// 鼠标所在位置已存在图标元素
const pointTarget = document.elementFromPoint(e.clientX, e.clientY)
if (!pointTarget) return
if (pointTarget.classList.contains('icon-container')) return
if (!pointTarget.classList.contains('desktop-container')) return
// 获取容器边界 // 获取容器边界
const rect = el.parentElement!.getBoundingClientRect() const rect = el.parentElement!.getBoundingClientRect()
@@ -31,7 +37,7 @@ const onDragEnd = (e: DragEvent) => {
// 计算鼠标所在单元格坐标向上取整从1开始 // 计算鼠标所在单元格坐标向上取整从1开始
const gridX = Math.ceil(mouseX / gridTemplate.cellRealWidth) const gridX = Math.ceil(mouseX / gridTemplate.cellRealWidth)
const gridY = Math.ceil(mouseY / gridTemplate.cellRealHeight) const gridY = Math.ceil(mouseY / gridTemplate.cellRealHeight)
console.log(gridX, gridY)
icon.col = gridX icon.col = gridX
icon.row = gridY icon.row = gridY
} }