diff --git a/src/core/desktop/types/IGridTemplateParams.ts b/src/core/desktop/types/IGridTemplateParams.ts new file mode 100644 index 0000000..4de2283 --- /dev/null +++ b/src/core/desktop/types/IGridTemplateParams.ts @@ -0,0 +1,21 @@ +/** + * 桌面网格模板参数 + */ +export interface IGridTemplateParams { + /** 单元格预设宽度 */ + cellExpectWidth: number + /** 单元格预设高度 */ + cellExpectHeight: number + /** 单元格实际宽度 */ + cellRealWidth: number + /** 单元格实际高度 */ + cellRealHeight: number + /** 列间距 */ + gapX: number + /** 行间距 */ + gapY: number + /** 总列数 */ + colCount: number + /** 总行数 */ + rowCount: number +} \ No newline at end of file diff --git a/src/core/desktop/ui/DesktopComponent.vue b/src/core/desktop/ui/DesktopComponent.vue index 9308010..e64e6e3 100644 --- a/src/core/desktop/ui/DesktopComponent.vue +++ b/src/core/desktop/ui/DesktopComponent.vue @@ -4,9 +4,10 @@ class="w-full h-full pos-relative" >
-
-
{{ icon.name }}
+
+
@@ -22,42 +23,12 @@ 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 AppIcon from '@/core/desktop/ui/components/AppIcon.vue' const props = defineProps<{ process: DesktopProcess }>() // console.log(props.process) -const { colCount, rowCount, appIconsRef } = useDesktopInit('.desktop-container') - -const iconArr: IDesktopAppIcon[] = [ - { - name: '文件管理器', - icon: '🗂', - path: '/', - col: 1, - row: 1, - }, - { - name: '浏览器', - icon: '🌐', - path: '/', - col: 1, - row: 2, - }, - { - name: '记事本', - icon: '📄', - path: '/', - col: 1, - row: 3, - }, - { - name: '音乐播放器', - icon: '🎵', - path: '/', - col: 1, - row: 4, - }, -] +const { appIconsRef, gridStyle, gridTemplate } = useDesktopInit('.desktop-container') XSystem.instance.eventManages.addEventListener( DesktopEventEnum.onDesktopRootDomResize, @@ -81,20 +52,15 @@ const iconsInit = () => { diff --git a/src/core/desktop/ui/useDesktopInit.ts b/src/core/desktop/ui/useDesktopInit.ts index d943853..bb5bc46 100644 --- a/src/core/desktop/ui/useDesktopInit.ts +++ b/src/core/desktop/ui/useDesktopInit.ts @@ -1,6 +1,7 @@ import XSystem from '@/core/XSystem.ts' import type { IDesktopAppIcon } from '@/core/desktop/types/IDesktopAppIcon.ts' import { + computed, nextTick, onMounted, onUnmounted, @@ -12,13 +13,18 @@ import { } from 'vue' import { DesktopEventEnum } from '@/core/events/EventTypes.ts' import { useDraggable } from '@vueuse/core' +import type { IGridTemplateParams } from '@/core/desktop/types/IGridTemplateParams.ts' export function useDesktopInit(containerStr: string) { let container:HTMLElement - const gridTemplate = reactive({ - cellWidth: 90, - cellHeight: 110, - gap: 10, + // 初始值 + const gridTemplate = reactive({ + cellExpectWidth: 90, + cellExpectHeight: 110, + cellRealWidth: 90, + cellRealHeight: 110, + gapX: 4, + gapY: 4, colCount: 1, rowCount: 1 }) @@ -26,17 +32,28 @@ export function useDesktopInit(containerStr: string) { const ro = new ResizeObserver(entries => { const entry= entries[0] const containerRect = entry.contentRect - gridTemplate.colCount = Math.floor(containerRect.width / gridTemplate.cellWidth); - gridTemplate.rowCount = Math.floor(containerRect.height / (gridTemplate.cellHeight)); - console.log('resize', gridTemplate) + gridTemplate.colCount = Math.floor((containerRect.width + gridTemplate.gapX) / (gridTemplate.cellExpectWidth + gridTemplate.gapX)); + gridTemplate.rowCount = Math.floor((containerRect.height + gridTemplate.gapY) / (gridTemplate.cellExpectHeight + gridTemplate.gapY)); + + const w = containerRect.width - (gridTemplate.gapX * (gridTemplate.colCount - 1)) + const h = containerRect.height - (gridTemplate.gapY * (gridTemplate.rowCount - 1)) + gridTemplate.cellRealWidth = Number((w / gridTemplate.colCount).toFixed(2)) + gridTemplate.cellRealHeight = Number((h / gridTemplate.rowCount).toFixed(2)) }) + const gridStyle = computed(() => ({ + gridTemplateColumns: `repeat(${gridTemplate.colCount}, minmax(${gridTemplate.cellExpectWidth}px, 1fr))`, + gridTemplateRows: `repeat(${gridTemplate.rowCount}, minmax(${gridTemplate.cellExpectHeight}px, 1fr))`, + gap: `${gridTemplate.gapX}px ${gridTemplate.gapY}px` + })) + onMounted(() => { container = document.querySelector(containerStr)! ro.observe(container) }) onUnmounted(() => { ro.unobserve(container) + ro.disconnect() }) // 有桌面图标的app @@ -62,11 +79,11 @@ export function useDesktopInit(containerStr: string) { appIcon.col = x appIcon.row = y }) - console.log(appIconsRef) }) return { - ...toRefs(gridTemplate), - appIconsRef + gridTemplate, + appIconsRef, + gridStyle } } \ No newline at end of file diff --git a/tsconfig.app.json b/tsconfig.app.json index eb8166c..68e330a 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -11,6 +11,10 @@ "experimentalDecorators": true, "target": "ES6", "module": "ESNext", - "strictPropertyInitialization": false // 严格属性初始化检查 + "strictPropertyInitialization": false, // 严格属性初始化检查 + "noUnusedLocals": false, // 检查未使用的局部变量 + "noUnusedParameters": false, // 检查未使用的参数 + "noImplicitReturns": true, // 检查函数所有路径是否都有返回值 + "noImplicitOverride": true, // 检查子类是否正确覆盖了父类方法 } }