jsmind 线条_jsMind思维导图模式数据展示

本文介绍了如何使用C#后端配合jsMind库生成思维导图。通过展示代码,详细说明了如何从数据库获取数据,构建树形结构,并以JSON格式返回给前端展示。同时,提供了调整节点顺序的接口方法。
摘要由CSDN通过智能技术生成

效果图:

后端代码,此处以C#编写的后台,Java或其他语言同理

using Newtonsoft.Json;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Text;

using System.Web;

using System.Web.Mvc;

namespace Web.Controllers

{

public class TreeDataController : BaseController

{

BLL.TreeData bll = new BLL.TreeData();

#region 以树形式展示图纸目录

/// /// 视图

///

///

public ActionResult DrawingTree()

{

if (CurrentUser == null)//验证用户是否登录

return new HttpUnauthorizedResult();

return View();

}

#endregion

/// /// 文件树视图,页面初始化获取树数据,以json形式返回

///

///

public ActionResult GetTreeData()

{

ListlistTree = InitTree();

return Json(listTree, JsonRequestBehavior.AllowGet);

}

/// /// 初始化加载树

///

///

private ListInitTree()

{

ListlistNodes = new List();

var newTree = bll.QueryList(); //数据库查找数据源,此处也可以定义虚拟数据

#region 首次加载检测不到数据时默认插入项目节点

if (newTree.Count == 0)

{

bll.Add(new Model.TreeData()

{

BgColor = "#eee";//节点背景颜色

FgColor="#eee";//节点字体颜色

Level = 0,

Order = 0,

TreeName = "项目名称",

TreeCode = "节点编码",

ParentId = 0,

UpdateTime = DateTime.Now,

FilePath=null

});

}

#endregion

#region 一次性存储数据源,后面后面递归子集时多次使用

ListnodeList = new List();

foreach (var item in newTree)

{

FileNode node2 = new FileNode();

node2.id = item.Id;//要显示的id,此id一般为表的主键,具有唯一性

node2.topic = item.TreeName;//要显示的名称

node2.direction = "right";//思维导图伸向,目前只支持left/right

node2.parentId = item.ParentId;

node2.expanded = true;//该节点是否展开

nodeList.Add(node2);

}

#endregion

#region 装载数据源,此数据结果返回的是最终的所有结点树集合

ListrootNode = new List();

foreach (var plist in newTree.Where(t => t.ParentId== 0))

{

FileNode node = new FileNode();

node.id = plist.Id;

node.topic = plist.Code;

node.direction = plist.Note;//思维导图伸向,目前只支持left/right

node.parentId = plist.ParentId;

node.background = "#eee";//节点背景颜色

node.foreground = "blue";//节点字体颜色

node.expanded = true;

node.children = CreateChildTree(nodeList, node);

rootNode.Add(node);

}

return rootNode;

#endregion

}

/// /// 获取子集树

///

///

///

///

private ListCreateChildTree(ListTreeList, FileNode filenode)

{

ListnodeList = new List();

var children = TreeList.Where(t => t.parentId == filenode.Id);

foreach (var chl in children)

{

FileNode node = new FileNode();

node.id = chl.Id;

node.topic = chl.topic;

node.direction = chl.direction;//思维导图伸向,目前只支持left/right

node.parentId = chl.parentId;

node.background = chl.background;//节点背景颜色

node.foreground = chl.foreground;//节点字体颜色

node.expanded = true;

node.children = CreateChildTree(TreeList, node);

nodeList.Add(node);

}

return nodeList;

}

/// /// 根据选择的节点ID和方向参数,获取同级的上一个节点ID或下一个节点ID

///

/// 上一个或下一个节点排序号

[HttpPost]

public JsonResult GetMoveOrder()

{

var id = GetQueryString("id");

var parentId = GetQueryInt("parent", 0);

var direction = GetQueryString("direction");

var model = bll.GetModel(Convert.ToInt32(id));

int upId = -1;

int targetId = -1;//最终返回的相邻的上/下的节点ID

if (direction == "up") //向上移动

{

upId = Convert.ToInt32(model.order) - 1;

if (upId >= 0)

{

//执行修改本身

model.order= upId;

bll.Update(model);

//执行修改相邻的上一个

var list = bll.GetAllList("parentId='" + parentId+ "' and order='" + upId + "' and id<>'"+Id+"'");

if (list.Count > 0)

{

var upModel = list[0];

upModel.order= upId + 1;

bll.Update(upModel);

targetId = upModel.id;

}

}

}

else

{

upId = Convert.ToInt32(model.order) + 1;

var list = bll.GetAllList("ParentDrawingId='" + parentId+ "'");

if (upId < list.Count)

{

//执行修改本身

model.order= upId;

bll.Update(model);

//执行修改相邻的上一个

var newList = list.Where(c => c.order== upId && c.id!= model.id);

if (newList.Count() > 0)

{

var upModel = newList.FirstOrDefault();

upModel.order= upId - 1;

bll.Update(upModel);

targetId = upModel.DrawingId;

}

}

}

return Json(new

{

result = targetId.ToString()

}, JsonRequestBehavior.AllowGet);

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

namespace Web.Model.TreeData

{

//节点实体类

///

[Serializable]

public class FileNode

{

public int id { get; set; }//对应jsmind唯一id

public string topic { get; set; }//对应jsmind显示的名称

public string direction { get; set; }//对应jsmind思维导图的朝向 left/right

public bool expanded { get; set; } //对应jsmind该节点是否展开true/false

public string background { get; set; } //jsmind只识别background-color属性,此处定义“-”会编译不通过,待前台js批量替换处理

public string foreground { get; set; } //jsmind只识别foreground-color属性,此处定义“-”会编译不通过,待前台js批量替换处理

public int parentId { get; set; } //jsmind没有此属性,此处定义为了与数据库所属父节点字段对应,递归关联查询时会用到

public Listchildren { get; set; }//对应jsmind当前节点的子节点集合

}

}

前端页面代码,此处以asp.net mvc页面视图编写,都是插件获取后台返回的json,其他语言同理

@model List@{

ViewBag.Title = "上传文件";

}

检索

展开所有

合并所有

画布放大

画布缩小

新增节点

上传文件

查看节点

删除

上移

下移

@section Styles{

}

@section Scripts{

}

jsmind组件下载地址:https://files.cnblogs.com/files/fengyeqingxiang/jsmind.zip

原创文章,转载请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值