0.6.9 • Published 3 days ago

bi-vue-mindmap v0.6.9

Weekly downloads
-
License
-
Repository
-
Last release
3 days ago

bi-vue-mindmap

🖼️ Screen Shoot

效果图1

🔨 Minimal Sample

<template>
  <BiVueMindmap ref="bi-vue-mindmap" :flatNodes="mindmapNodes" />
</template>
<script>
import BiVueMindmap from "bi-vue-mindmap";
export default {
  components: {
    BiVueMindmap,
  },
  data() {
    return {
      mindmapNodes: [
        {
          id: "xxx",
          parentId: null,
          title: "父节点",
          extra: {
            a: 1,
            b: "x",
          },
        },
        {
          id: "yyy",
          parentId: "xxx",
          title: "子节点",
          extra: {
            a: 2,
            b: "y",
          },
        },
      ],
    };
  },
};
</script>
<template>
  <BiVueMindmap ref="bi-vue-mindmap" :flatNodes="mindmapNodes" />
</template>
<script>
import BiVueMindmap from "bi-vue-mindmap";
export default {
  components: {
    BiVueMindmap,
  },
  data() {
    return {
      mindmapNodes: [
        {
          id: "xxx",
          parentId: null,
          title: "父节点",
          extra: {
            a: 1,
            b: "x",
          },
          resources: [
            {
              type: "PIC",
              url: require("../assets/examples/landscape.png"),
            },
            {
              type: "VIDEO",
              url: require("../assets/examples/cat.mp4"),
            },
            {
              type: "FILE",
              url: require("../assets/examples/cat.mp4"),
            },
          ],
        },
        {
          id: "yyy",
          parentId: "xxx",
          title: "子节点",
          extra: {
            a: 2,
            b: "y",
          },
          resources: [
            {
              type: "PIC",
              url: require("../assets/examples/landscape.png"),
            },
          ],
        },
        {
          id: "zzz",
          parentId: "xxx",
          title: "子节点",
          extra: {
            a: 3,
            b: "z",
          },
          resources: [
            {
              type: "VIDEO",
              url: require("../assets/examples/cat.mp4"),
            },
          ],
        },
      ],
    };
  },
};
</script>

🔠 Properties

Prop NameTypeDefault ValueDescription
flat-nodesArray.\仅包含单个根节点节点数据(组件不会更改本数组内的数据)
is-readonlyBooleanfalse是否全局只读(true 会使整个导图没有任何编辑功能)
defaultLayoutString"horizontal"默认展示的布局方式(横向/竖向),取值范围"horizontal", "vertical"
defaultLineStyleString"curve"默认的节点间连线样式,取值范围"curve", "straight"
allowDropBooleanfalse是否允许往节点拖放图片/视频/文件/Html 内容
isNodeHideString"vif"不在视窗范围内的节点是否渲染,取值范围"none", "vshow", "vif"

Node Fields

Field NameTypeDefault ValuerequiredDescription
idstring随机的 uuid非必填标识节点的全局唯一值
parentIdstring | nullnull除根节点外必填父节点的id(本身为根节点则本值设为null)
titlestring""非必填节点标题(自定义节点不需本值)
isReadonlybooleanfalse非必填节点是否为只读(当节点只读时,不能编辑节点标题,没有任何操作按钮)
orderNonumber1非必填在同一父节点下的排列顺序(从1开始,如果值相同,则按 flat-nodes 数组内的默认顺序)
extraobject{}非必填额外需要保存到节点对象的数据对象(可包含用户的自定义数据)
isCustomizedbooleanfalse非必填是否自定义节点内容(详见 Customization 一节)
resourcesarray[]非必填图片、视频、文件等附件资源
isFoldedbooleanfalse非必填节点属下的子节点是否折叠
redefineSubCountnumber0非必填重新定义某节点属下所有层级子节点的数量(而不是由本组件自动计算),当 isFolded 同时为 true 时,即使是末端子节点亦可显示后代数量,多用于节点数据懒加载

Resource Fields

Field NameTypeDefault ValuerequiredDescription
typestring-必填资源类型,取值范围'PIC', 'VIDEO', 'FILE', 'HTML'
urlstring-非HTML时必填资源的预览或下载地址
titlestring-非HTML时必填标题/文件名
sizenumber-非HTML时必填大小(单位字节)
htmlContentstring-HTML时必填html内容

目前本组件仅支持一个根节点


🛠️ Methods

Method NameParamsDescription
refreshNodesAndLinks-刷新节点及连线(flat-nodes 数组内的元素数量或位置有改变时,会自动调用本方法,无需手动调用)
getNodeOrderNoByIdid:string通过节点id获取在同一父节点下该节点的排列顺序号
insertResourcenodeId:string, resource:Object向指定节点追加一个资源
foldOrUnfoldnodeIds:string[], isFolded:boolean批量折叠节点
focusToNodenodeId:string屏幕视角中心聚焦到某个节点

Method Examples

this.$refs["bi-vue-mindmap"].refreshNodesAndLinks();
this.$refs["bi-vue-mindmap"].getNodeOrderNoById("yyy");
this.$refs["bi-vue-mindmap"].insertResource("idxxxxx", {
  type: "VIDEO",
  url: "https://xxx.com/xxx.mp4",
  title: "cat.mp4",
  size: 5000,
});

🎺 Events

Operation Events

Event NameParametersMeaning
title-changed节点对象, 原标题某节点的标题被改变
child-added新节点对象, 父节点对象, 新节点的排序号新的子节点被添加(id 为随机 uuid,可手动调用新节点对象的 setId() 更改为自定义的id)
sibling-added新节点对象, 兄弟节点对象, 新节点的排序号新的兄弟节点被添加(id 为随机 uuid,可手动调用新节点对象的 setId() 更改为自定义的id)
nodes-deleted被删除的节点对象二维数组, 形如: [节点a, 子节点a1, 子节点a2...,节点b, 子节点b1, 子节点b2......]1个或多个节点被删除
change-parent节点对象集合, 新父节点id, 旧父节点id集合节点移动到新的父节点下
node-folded被折叠的节点对象节点的下级子节点被隐藏
node-unfolded被展开的节点对象节点的下级子节点被展示
img-inserted节点对象, 含图片的资源对象, 浏览器文件对象(可用于上传后端), 资源的排序index节点内被插入图片
video-inserted节点对象, 含视频的资源对象, 浏览器文件对象(可用于上传后端), 资源的排序index节点内被插入视频
file-inserted节点对象, 含文件的资源对象, 浏览器文件对象(可用于上传后端), 资源的排序index节点内被插入文件
frame-size-reseted节点对象, 资源对象, 现尺寸{w, h}, 原尺寸{w, h}节点内图片或视频的显示尺寸被调整
resource-deleted节点对象, 被删除的资源对象节点内资源被删除
resource-forward节点对象, 被前移的资源对象多资源节点内资源被前移
resource-backward节点对象, 被后移的资源对象多资源节点内资源被后移
font-bold节点对象, 是否字体加粗节点文字字体加粗/取消加粗
font-italic节点对象, 是否设置斜体节点文字设置斜体/取消设置斜体
font-underline节点对象, 是否设置下划线节点文字设置下划线/取消设置下划线
font-eraser节点对象清除节点文字的样式
font-bg-color节点对象, 新设置的文字背景色设置节点的文字背景色

Normal Events

Event NameParametersMeaning
before-full-screen-在全屏之前
before-cancel-full-screen-在取消全屏之前

Ctrl+Z Events

Event NameParametersMeaning
recover-title-changed节点对象title-changed 事件恢复
recover-child-added节点对象, 父节点对象, 新节点的排序号child-added 事件恢复
recover-nodes-deleted被恢复的节点对象二维数组node-deleted 事件恢复
recover-change-parent节点对象集合, 恢复后的父节点id集合, 恢复前的父节点idchange-parent 事件恢复
recover-node-folded折叠后被恢复的对象node-folded 事件恢复
recover-node-unfolded展开后被恢复的对象node-unfolded 事件恢复
recover-img-inserted节点对象, 含图片的资源对象img-inserted 事件恢复
recover-video-inserted节点对象, 含视频的资源对象video-inserted 事件恢复
recover-file-inserted节点对象, 含文件的资源对象file-inserted 事件恢复
recover-frame-size-reseted节点对象, 资源对象, 恢复后尺寸{w, h}, 恢复前尺寸{w, h}frame-size-reseted 事件恢复
recover-resource-deleted节点对象, 被恢复的资源对象resource-deleted 事件恢复
recover-resource-forward节点对象, 前移后被恢复的资源对象resource-forward 事件恢复
recover-resource-backward节点对象, 后移后被恢复的资源对象resource-backward 事件恢复
recover-font-bold节点对象, 还原后字体是否加粗font-bold 事件恢复
recover-font-italic节点对象, 还原后字体是否倾斜font-italic 事件恢复
recover-font-underline节点对象, 还原后字体是否有下划线font-underline 事件恢复
recover-font-bg-color节点对象, 还原后字体的背景色font-bg-color 事件恢复
recover-font-eraser节点对象, 还原后的字体样式font-eraser 事件恢复

Drag Drop Events

Event NameParametersMeaning
node-dragenter节点对象, 原生事件对象对应原生 dragenter 事件
node-dragleave节点对象, 原生事件对象对应原生 dragleave 事件
node-dragover节点对象, 原生事件对象对应原生 dragover 事件
node-drop节点对象, 原生事件对象对应原生 drop 事件

详情可参考:https://developer.mozilla.org/zh-CN/docs/Web/API/HTML_Drag_and_Drop_API


🎣 Hooks Before Events

Function NameParametersMeaning
before-child-added节点对象, 父节点对象, 新节点的排序号child-added 事件的前置钩子; 可修改节点对象的字段,从而控制新增子节点
before-sibling-added节点对象, 兄弟节点对象, 新节点的排序号sibling-added 事件的前置钩子; 可修改节点对象的字段,从而控制新增兄弟节点
before-change-parent节点对象集合, 新父节点id, 旧父节点id集合change-parent 事件的前置钩子
before-img-inserted浏览器文件对象(可用于上传后端), 图片资源的index, 图片资源对象img-inserted 事件的前置钩子; 可修改图片资源对象的 id 和 url 属性, url 属性是图片的预览地址
before-video-inserted浏览器文件对象(可用于上传后端), 视频资源的index, 视频资源对象video-inserted 事件的前置钩子; 可修改视频资源对象的 id 和 url 属性, url 属性是视频的预览地址
before-file-inserted浏览器文件对象(可用于上传后端), 文件资源的index, 文件资源对象file-inserted 事件的前置钩子; 可修改图片资源对象的 id, url, title, size 属性, url 属性是文件的下载地址
  1. 钩子函数作为 Props 传递给组件
  2. 以上前置钩子函数,函数内 return false 会使对应的后续事件取消发生

⚙️ Customization

节点 Node 对象中 isCustomized 字段设置为 true 后,节点则作为自定义节点渲染。以插槽的形式定义节点的渲染样式

Customized Node Additional Fields

Field NameTypeDefault ValueDescription
widthnumber100节点的宽度
heightnumber32节点的高度
calcCellSizefunction-计算节点高度和宽度的方法(当宽高有变时,可手动调用组件的 refreshNodesAndLinks() 方法刷新导图)

Customization Sample

<template>
  <BiVueMindmap
    :flatNodes="mindmapNodes"
    v-slot="{ id, parentId, orderNo, width, height, extra }"
  >
    <div class="my-node-template">
      <p class="title">{{ extra.myTitle }}</p>
      <button
        tabindex="-1"
        @click.stop="
          onBtnClick({ id, parentId, orderNo, width, height, extra })
        "
      >
        确认
      </button>
    </div>
  </BiVueMindmap>
</template>
<script>
import BiVueMindmap from "bi-vue-mindmap";
export default {
  components: {
    BiVueMindmap,
  },
  data() {
    return {
      mindmapNodes: [
        {
          id: "xxx",
          parentId: null,
          title: "父节点",
        },
        {
          id: "yyy",
          parentId: "xxx",
          isCustomized: true,
          width: 100,
          height: 32,
          extra: {
            myTitle: "Customized Node",
          },
          calcCellSize: function (node) {
            this.width = 200;
            this.height = 64;
            // ----- or -----
            // node.width = 200;
            // node.height = 64;
          },
        },
      ],
    };
  },
  methods: {
    onBtnClick({ id, parentId, orderNo, width, height }) {},
  },
};
</script>

🎹 快捷键

KeysDescription
Ctrl+Z恢复上一步操作
Ctrl+0将缩放比例恢复到100%
Detele删除当前激活的节点对象
0.6.9

3 days ago

0.6.8

10 months ago

0.6.7

10 months ago

0.6.6

10 months ago

0.6.3

1 year ago

0.6.5

12 months ago

0.6.4

12 months ago

0.5.8

1 year ago

0.5.7

1 year ago

0.4.9

1 year ago

0.4.8

1 year ago

0.5.4

1 year ago

0.5.3

1 year ago

0.5.6

1 year ago

0.4.7

1 year ago

0.5.5

1 year ago

0.5.0

1 year ago

0.5.2

1 year ago

0.5.1

1 year ago

0.4.6

1 year ago

0.4.5

1 year ago

0.4.4

1 year ago

0.4.3

1 year ago

0.4.2

1 year ago

0.4.1

1 year ago

0.4.0

1 year ago

0.3.9

1 year ago

0.3.8

1 year ago

0.3.7

1 year ago

0.3.6

1 year ago

0.3.5

1 year ago

0.3.4

1 year ago

0.3.3

1 year ago

0.3.2

1 year ago

0.3.1

1 year ago

0.3.0

1 year ago

0.2.9

1 year ago

0.2.8

1 year ago

0.2.7

1 year ago

0.2.6

1 year ago

0.2.5

1 year ago

0.2.4

1 year ago

0.2.3

1 year ago

0.2.2

1 year ago

0.2.1

1 year ago

0.2.0

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago