; (function (factory) { if (typeof module === 'object' && typeof module.exports === 'object') { factory(require('jquery'), window, document); } else { factory(jQuery, window, document); } }(function ($, window, document, undefined) { var treeClass = 'iwb-package-tree', lineClass = 'line-v', roundClass = 'round-box', nodeRoundClass = 'round-node', nodeStartRoundClass = 'start-node', nodeEndRoundClass = 'end-node', nodeBlockClass = 'block-node', leftBlockClass = 'left', rightBlockClass = 'right', roundSettingClass = 'round-setting', contentClass = 'content', blockBoxClass = 'block-box', objBlockBoxClass = 'obj-block-box', evBlockBoxClass = 'evolution-block-box', blockContentClass = 'block-content', settingBoxClass = 'setting-box', settingBoxClass2 = 'setting-btn-box', flowBoxClass = 'flow-box', flowInfoClass = 'flow-info', flowNameClass = 'flow-name', flowSettingClass = 'flow-setting'; var _SettingStr = '
{1}已配置
', _NonSettingStr = '
{1}未配置
'; var PackageTree = function (elem, opts) { this.$nodeContainer = $(elem); this.opts = opts; this.defaultOptions = { 'data': {}, 'nodeTitle': 'name', 'nodeMinWith': 280, 'nodeId': 'id', 'parentId': 'parentId', 'nodeClass': '', 'visibleLevel': 999, 'exportButton': false, 'exportFilename': 'PackageTree', 'exportFileExtension': 'png', 'draggable': true, 'dragDelay': 200, 'zoom': true, 'zoomMaxLimit': 2, 'zoomMinLimit': 0.5, 'exportDataInput': false, 'customMenu': 'package-menu', 'customMenuBefore': null, 'offset': undefined, 'flowDetailFun': undefined, 'settingFun': function(that) { console.log("setting", $(that).data("type")); } }; }; PackageTree.prototype = { init: function (opts) { var that = this; this.options = $.extend({}, this.defaultOptions, this.opts, opts || {}); // var $nodeContainer = this.$nodeContainer; this.$nodeTree = $nodeContainer.find('.' + treeClass); if (this.$nodeTree && this.$nodeTree.length > 0) { if (this.options.offset) { this.options.offset = this.$nodeTree.offset(); } this.$nodeTree.remove(); } else { this.options.offset = false; } var data = this.options.data; var $nodeTree = this.$nodeTree = $('
', { 'data': { 'options': this.options }, 'class': treeClass + (this.options.nodeClass !== '' ? ' ' + this.options.nodeClass : ''), }); this.buildHierarchy($nodeTree, data); $nodeContainer.append($nodeTree); $nodeTree.find('.' + settingBoxClass2 + ' .setting').off("click.setting").on("click.setting",function() {that.options.settingFun($(this));}); if (this.options.offset) { $nodeTree.offset(this.options.offset); } if (this.options.zoom) { this.$nodeContainer.on('wheel', { 'nt': that }, this.zoomWheel); } if (this.options.draggable) { this.drag(this.$nodeTree); } return this; }, buildHierarchy: function ($appendTo, data) { var that = this; var opts = this.options; var $roundNode = $('
', { 'class': nodeRoundClass + ' ' + nodeStartRoundClass, text: (data.name ? data.name : '') + " 场景" }); var $startBox = $('
', { 'class': roundClass }).append($('
', { 'class': lineClass })) .append($roundNode); that.customMenu($roundNode, function ($node,$menu) { $menu.find("a.dropdown-item").hide(); $menu.find("a.dropdown-item.comp").show(); $menu.find("a.dropdown-item.guide").show(); if (!data.children || data.children.length===0) { $menu.find("a.dropdown-item.round.add").show(); } if (opts.customMenuBefore && $.type(opts.customMenuBefore) === 'function') { opts.customMenuBefore($node, $menu); } }); $appendTo.append($startBox); if (data.children && data.children.length > 0) { var i = 0; data.children.forEach(function (v) { i++; that.buildRoundInfoBox($appendTo, v, i === data.children.length); }); } var $endNode = $('
', { 'class': roundClass }).append($('
', { 'class': lineClass })).append($('
', { 'class': nodeRoundClass + ' ' + nodeEndRoundClass, text: 'END' }));; $appendTo.append($endNode); }, buildRoundInfoBox: function ($appendTo, data,isEnd) { var that = this; var $round = that.buildRoundInfo(data, isEnd); $appendTo.append($round); }, buildRoundInfo: function (data,isEnd) { var that = this; var opts = this.options; var $round = $('
', { 'class': roundClass, data: { path: data.path, parentPath: data.parentPath } }).append($('
', { 'class': lineClass })); var blocks = $.extend([], data.children); var objBlock = blocks.shift();//第一个是客观情景块移除出来,剩下的是演化情景块, //左边是 客观情景块 var $leftBlock = $('
', { 'class': nodeBlockClass + ' ' + leftBlockClass, data: { path: data.path, parentPath: data.parentPath } }); //轮次配置 that.buildRoundSettingBox($leftBlock, data); var $objBlockBox = $('
', { 'class': blockBoxClass + ' ' + objBlockBoxClass, data: { path: data.path, parentPath: data.parentPath } }).append('
客观情景块 (' + objBlock.path +')
'); that.buildBlockContent($objBlockBox, objBlock); $leftBlock.append($objBlockBox); $round.append($leftBlock); //中间是 轮次几点 var $roundNode = $('
', { 'class': nodeRoundClass + ' no-select', text: data.roundIndex, data: { path: data.path, parentPath: data.parentPath } }); $round.append($roundNode); if (isEnd) { $roundNode.addClass("last"); } that.customMenu($roundNode, function ($node, $menu) { $menu.find("a.dropdown-item").hide(); $menu.find("a.dropdown-item.r-setting").show(); $menu.find("a.dropdown-item.comp").show(); $menu.find("a.dropdown-item.guide").show(); if ($node.hasClass("last")) { $menu.find("a.dropdown-item.round").show(); } if (opts.customMenuBefore && $.type(opts.customMenuBefore) === 'function') { opts.customMenuBefore($node, $menu); } }); if (opts.draggable) { this.drag($roundNode); } //右边是 演化情景块 var $rightBlock = $('
', { 'class': nodeBlockClass + ' ' + rightBlockClass, data: { path: data.path, parentPath: data.parentPath } }); that.buildRightBlock($rightBlock, blocks,data.path); $round.append($rightBlock); return $round; }, buildRoundSettingBox: function ($appendTo, data) { var that = this; var opts = this.options; var $setting = $('
', { 'class': roundSettingClass, data: { path: data.path, parentPath: data.parentPath } }).append('
轮次规则配置
'); var $setContent = $('
', { 'class': contentClass + ' ' + settingBoxClass2, data: { path: data.path, parentPath: data.parentPath } }); var str = that.buildRoundSetting(data); $setContent.append(str); $setting.append($setContent); that.customMenu($setting, function ($node, $menu) { $menu.find("a.dropdown-item").hide(); $menu.find("a.dropdown-item.r-setting").show(); $menu.find("a.dropdown-item.comp").show(); $menu.find("a.dropdown-item.guide").show(); if (opts.customMenuBefore && $.type(opts.customMenuBefore) === 'function') { opts.customMenuBefore($node, $menu); } }); $appendTo.append($setting); }, buildRoundSetting: function (data) { var that = this; var str = ''; str += '
轮次总分: ' + data.roundFullScore + '
'; str += '
随机抽取概率: ' + data.controlRate + ' %
'; str += '
演化情景流数: ' + data.sceneCount + '
'; str += that.buildSetting(data,true); return str; }, buildSetting: function (data,isRound) { var str = ''; if (data) { str += (data.guideNos ? _SettingStr : _NonSettingStr).format('guide', '引导信息', isRound?"1":"0"); str += (data.preComponent ? _SettingStr : _NonSettingStr).format('PRE', '运行前事务', isRound ? "1" : "0"); str += (data.runningComponent ? _SettingStr : _NonSettingStr).format('RUN', '运行时事务', isRound ? "1" : "0"); str += (data.postComponent ? _SettingStr : _NonSettingStr).format('POST', '运行后事务', isRound ? "1" : "0"); } return str; }, buildRightBlock: function ($appendTo, data,parentPath) { var that = this; var opts = this.options; var $navTab = $('