0.1.7 • Published 2 years ago

pyminer-window-manager v0.1.7

Weekly downloads
-
License
-
Repository
-
Last release
2 years ago

基于 Vue 的窗口管理器

设计目标

该窗口管理器基于 Vue 的单页面应用,可通过嵌套的形式,定义其上的组件。 组件支持在不同窗口之间相互拖动,或是将窗口作为悬浮的窗口以展示。

布局组件(layout)

布局组件分为三层:MainWindow, FlexibleLayout, LayoutItem 和 LayoutContent。 Mainwindow 是最下面的主窗口,所有的子窗口都在里面布局。 FlexibleLayout 是底层的布局组件,可以进行嵌套。 LayoutItem 是一个一个的子窗口,可以作为 FlexibleLayout 的子组件,也可以作为 WindowManager 的子组件。

  • LayoutItem 拥有全局唯一的 ID,这个 ID 由用户指定。未来将做布局记忆的功能。
  • 当位于 FlexibleLayout 上时,status="layout"
  • 当位于 FloatWindowManager 上时,status="window"

LayoutContent 又是 LayoutItem 的子组件。它通过 vue 里面的 teleport 标签,将组件传送到指定的 id——这也是必须指定 LayoutItem 的 id 的原因。

数据模型

首先,对于平铺布局 FlexibleLayout 的每一个子对象(FlexibleLayout 或者 LayoutItem),共有的属性如下:

export interface FlexibleLayoutSubItem {
    mainSize: number; // 主尺寸。如果是横向布局,就是宽度,反之为高度
    minSize: number; // 主尺寸的最小值
    maxSize?: number; // 主尺寸的最大值(暂不集成)
}

export interface FlexibleLayoutItemModel extends FlexibleLayoutSubItem {
    is: "layout-item"
    name: string // name既是名称,也是dom上面的id。
    uuid: string
    params: {
        title: string
    }
}
export interface FlexibleLayoutModel extends FlexibleLayoutSubItem {
    is: "flexible-layout"
    name: string
    params: {
        layoutDirection: 'horizontal' | 'vertical'
        components: Array<FlexibleLayoutModel | FlexibleLayoutItemModel>
    }
}

用到的知识总结:

1、有关多种宽度 2、mousemove事件应当绑定在document上面,而不是在单独的控件上。 3、有关drag拖放事件。 4、vue中teleport传送锚点的使用

碰到的问题包括:

1、当目标对象不存在时teleport如何处理。似乎不会自动等teleport目标出现,必须要手动刷新或者用定时器才行。

LayoutItem有如下的属性:

Project setup

yarn install

Compiles and hot-reloads for development

yarn serve

Compiles and minifies for production

yarn build

Lints and fixes files

yarn lint

构建依赖

首先要确保在 index.ts 里面定义了需要导出的内容。

yarn lib
npm publish


npm login
npm install -g nrm

确认 registry 为官方源。 可以用 nrm npm 来切换过去。

> npm config get registry
https://registry.npmjs.org/
0.1.7

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.0.1

2 years ago