All Downloads are FREE. Search and download functionalities are using the official Maven repository.

static.org.tinygroup.flowprocess.js.flowprocess.js Maven / Gradle / Ivy

The newest version!
(function ($) {
    var defaults = {
        fnClick: function () {

        },
        fnDbClick: function () {

        },
        //这是连接线路的绘画样式
        connectorPaintStyle: {
            lineWidth: 2,
            strokeStyle: '#49afcd',
            joinstyle: 'round'
        },
        disableConnectorPaintStyle: {
            lineWidth: 2,
            strokeStyle: '#999',
            joinstyle: 'round',
            dashstyle: '4 1'
        },
        itemSize: {
            top: 10,
            width: 150,
            height: 120
        }

    };
    /*defaults end*/

    var initEndPoints = function (_dom) {
        _dom.find('.process-flag').each(function (i, e) {
            var p = $(e).parent();
            jsPlumb.makeSource($(e), {
                parent: p,
                anchor: 'Continuous',
                endpoint: ['Dot', {radius: 1}],
                connector: ['Flowchart', {stub: [5, 5]}],
                connectorStyle: p.attr('disabled') === 'disabled' ? defaults.disableConnectorPaintStyle : defaults.connectorPaintStyle,
                dragOptions: {},
                maxConnections: -1
            });
        });
    };
    var clear = function () {

        try {

            jsPlumb.detachEveryConnection();
            jsPlumb.deleteEveryEndpoint();
            jsPlumb.repaintEverything();
            return true;
        } catch (e) {
            return false;
        }

    };
    var initFlow = function (_tempId) {

        var _dom = $('
'); var processData = []; $('.popover').remove(); _tempId.children('.process-step').each(function () { var _this = $(this); processData.push({'id': _this.attr('process_id'), 'pid': _this.attr('process_pid')}); }).on('mouseover', function () { $(this).popover('show'); }).on('mouseout', function () { $(this).popover('hide'); }); var level_count = 0; var data_len = processData.length; var pids_arr = []; var groupData = []; var node_arr = []; for (var i = 0; i < data_len; i++) { if (processData[i]['pid'] === '' || processData[i]['pid'] === null) { processData[i]['pid'] = 0; } if (!groupData[processData[i]['pid']]) { groupData[processData[i]['pid']] = []; } groupData[processData[i]['pid']].push(processData[i]); pids_arr.push(processData[i]['pid']); node_arr[processData[i]['id']] = processData[i]['pid']; } function getLevel(id) { if (node_arr[id]) { return getLevel(node_arr[id]) + 1; } else { return 1; } } var max_level = 0; for (var i = 0; i < data_len; i++) { var c = getLevel(processData[i]['id']); max_level = Math.max(max_level, c); if ($.inArray(processData[i]['id'], pids_arr) == -1) { level_count++; } } _tempId.css({ 'width': defaults.itemSize.width * level_count + 180 + 'px', 'height': max_level * defaults.itemSize.height + 50 + 'px', 'margin': '0 auto' }); defaults.itemSize.left = defaults.itemSize.width * (level_count - 1) / 2; var setPosition = function (pid, top_level, left_level) { if (!groupData[pid]) { return []; } var list = groupData[pid]; var len = list.length; var left = left_level - list.length / 2; var top = top_level; var ileft = ''; var itop = ''; var subIds = []; var thisw = defaults.itemSize.width * (len - 1) / 2; for (var i = 0; i < len; i++) { ileft = left_level - thisw + i * defaults.itemSize.width; itop = top_level + defaults.itemSize.height; groupData[pid][i]['left'] = ileft; groupData[pid][i]['top'] = itop - defaults.itemSize.height; subIds.push(list[i]['id']); var sub_idarr = setPosition(list[i]['id'], itop, ileft); groupData[pid][i]['process_to'] = sub_idarr.join(','); } return subIds; }; var setChildrenNode = function () { var data = []; for (i in groupData) { for (var j = 0, jl = groupData[i].length; j < jl; j++) { data.push(groupData[i][j]); } } for (var i = 0; i < data_len; i++) { var id = data[i]['id']; $('#process-step-' + id).attr({ 'process_to': data[i]['process_to'] }).css({ 'left': data[i]['left'] + 'px', 'top': data[i]['top'] + 'px', 'width': defaults.itemSize.width - 30 + 'px' }); } }; setPosition(0, defaults.itemSize.top, defaults.itemSize.left); setChildrenNode(); }; $.fn.flowprocess = function (options) { var _canvas = $(this); //右键步骤的步骤号 options = options || {}; /*配置*/ $.each(options, function (i, val) { if (typeof val == 'object' && defaults[i]) $.extend(defaults[i], val); else defaults[i] = val; }); clear(); initFlow(_canvas.find('.tiny_flow_process_info:first')); jsPlumb.importDefaults({ DragOptions: {cursor: 'pointer'}, EndpointStyle: {fillStyle: '#225588'}, Endpoint: ['Dot', {radius: 1}], ConnectionOverlays: [ ['Arrow', {location: 1}], ['Label', { location: 0.1, id: 'label', cssClass: 'aLabel' }] ], Anchor: 'Continuous', ConnectorZIndex: 5, HoverPaintStyle: defaults.connectorHoverStyle }); if ($.browser.msie && $.browser.version < '9.0') { //ie9以下,用VML画图 jsPlumb.setRenderMode(jsPlumb.VML); } else { //其他浏览器用SVG jsPlumb.setRenderMode(jsPlumb.SVG); } /*var timeout = null; //点击或双击事件,这里进行了一个单击事件延迟,因为同时绑定了双击事件 _canvas.find(".process-step").on('click', function () { var obj = this; _canvas.find('.tiny_flow_active_id').val($(this).attr("process_id")), clearTimeout(timeout); timeout = setTimeout(defaults.fnClick, 300); }).on('dblclick', function () { clearTimeout(timeout); defaults.fnDbClick(); }).each(function (index) { var _this = $(this); var id = _this.attr("process_id"); _this.mousedown(function (e) { if (e.which == 3) { //右键绑定 _this.contextMenu("process-menu-" + id); } }); });*/ initEndPoints(_canvas); //reset start var _canvas_design = function () { //连接关联的步骤 _canvas.find('.process-step').each(function (i) { var sourceId = $(this).attr('process_id'); var prcsto = $(this).attr('process_to'); if (!prcsto || !sourceId) { return true; } var toArr = prcsto.split(','); $.each(toArr, function (j, targetId) { if (targetId != '' && targetId != 0) { if ($('#process-step-' + prcsto).length > 0) { jsPlumb.connect({ source: 'process-step-' + sourceId, target: 'process-step-' + targetId }); } } }); }); };//_canvas_design end reset _canvas_design(); return { getActiveId: function () { return _canvas.find('.tiny_flow_active_id').val(); }, clear: function () { try { jsPlumb.detachEveryConnection(); jsPlumb.deleteEveryEndpoint(); jsPlumb.repaintEverything(); return true; } catch (e) { return false; } }, refresh: function () { try { this.clear(); _canvas_design(); return true; } catch (e) { return false; } } }; };//$.fn })(jQuery);




© 2015 - 2025 Weber Informatics LLC | Privacy Policy