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"
>
-
@@ -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, // 检查子类是否正确覆盖了父类方法
}
}