• kevin's avatar
    # · fc5c7c68
    kevin authored
    fc5c7c68
common.svc.js 17.6 KB
// common web service proxy
webservices.factory('commonWebService', ['$http', 'apiConfig', 'loginContext', 'vatSessionService', function ($http, apiConfig, loginContext, vatSessionService) {
    'use strict';

    var getCookie = function (cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i].trim();
            // if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
            if (c.indexOf(name) == 0) return ATMS_EXTRA.decodeCookieValue(c.substring(name.length, c.length));
        }
        return "";
    };

    var apiTokenObj = JSON.parse(getCookie('AtmsApiToken'));
    var apiToken = apiTokenObj.access_token;
    var tokenType = apiTokenObj.token_type;
    var api_host = apiTokenObj.api_host;

    var glyph_opts = {
        map: {
            doc: "glyphicon glyphicon-file",
            docOpen: "glyphicon glyphicon-file",
            checkbox: "glyphicon glyphicon-unchecked",
            checkboxSelected: "glyphicon glyphicon-check",
            checkboxUnknown: "glyphicon glyphicon-share",
            dragHelper: "glyphicon glyphicon-play",
            dropMarker: "glyphicon glyphicon-arrow-right",
            error: "glyphicon glyphicon-warning-sign",
            expanderClosed: "fa fa-plus",
            expanderLazy: "glyphicon glyphicon-menu-right",  // glyphicon-plus-sign
            expanderOpen: "fa fa-minus",  // glyphicon-collapse-down
            folder: "glyphicon glyphicon-folder-close",
            folderOpen: "glyphicon glyphicon-folder-open",
            loading: "glyphicon glyphicon-refresh glyphicon-spin"
        }
    };

    return {

        changePassword: function (passwordList) {
            return $http.put('/Account/userPassword', passwordList, apiConfig.create());
        },
        initFancyTreeAjax: function (treeID, ajaxUrl, dblFn) {

            var prefixUrl = loginContext.apiHost + constant.webapi.prefix;
            var ajaxUrl = prefixUrl + ajaxUrl;

            var ajaxSource = $.ajax({
                url: ajaxUrl,
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('Authorization', tokenType + ' ' + apiToken);
                }
            });

            var treeOptions = {
                extensions: ["edit", "glyph", "table", "filter"],
                quicksearch: true,
                checkbox: false,
                glyph: glyph_opts,
                source: ajaxSource,
                table: {
                    checkboxColumnIdx: 1,
                    nodeColumnIdx: 2
                },
                dblclick: function (event, data) {
                    var node = data.node.data;
                    var code = node.code;
                    var name = node.fullName;
                    var acctProp = node.acctProp;
                    var direction = node.direction;
                    var hasChildren = node.hasChildren;

                    if (code != null && !hasChildren) {
                        dblFn(code, name, acctProp, direction);
                    }
                },
                renderColumns: function (event, data) {
                    var node = data.node,
                    $tdList = $(node.tr).find(">td");
                    $tdList.eq(3).text(!!node.folder);
                },
                filter: {
                    autoApply: true,   // Re-apply last filter if lazy data is loaded
                    autoExpand: true, // Expand all branches that contain matches while filtered
                    counter: true,     // Show a badge with number of matching child nodes near parent icons
                    fuzzy: false,      // Match single characters in order, e.g. 'fb' will match 'FooBar'
                    hideExpandedCounter: false,  // Hide counter badge if parent is expanded
                    hideExpanders: false,       // Hide expanders if all child nodes are hidden by filter
                    highlight: true,   // Highlight matches by wrapping inside <mark> tags
                    leavesOnly: false, // Match end nodes only
                    nodata: true,      // Display a 'no data' status node if result is empty
                    mode: "hide",      // Grayout unmatched nodes (pass "hide" to remove unmatched node instead)
                    regularExpression: false,
                    matchWholeBranch: false
                }
            };

            ///由于fancyTree第一次ajax请求加载的时候,只需要把发送ajax option即可,不需要使用callback去赋值
            ///但是第二次ajax请求重新渲染fancytree的话,需要ajax.done获取返回的数据并做为参数传递给fancytree去重新渲染
            ///所以使用了tick来判断是否是首次请求
            var tree = $.ui.fancytree.getTree("#" + treeID);
            if (tree) {
                ajaxSource.done(function (data) {
                    tree.reload(data).done(function () {
                        console.log('reloaded');
                    });
                }).fail(function (err) { console.log(err); });
            } else {
                $("#" + treeID).fancytree(treeOptions);
            }

            $("input[name=fancytree-search]").keyup(function (e) {
                var n,
                  tree = $.ui.fancytree.getTree("#" + treeID),
                  opts = {},
                  filterFunc = tree.options.filter.matchWholeBranch ? tree.filterBranches : tree.filterNodes,
                  match = $(this).val();

                opts.nodata = tree.options.filter.nodata;
                opts.leavesOnly = tree.options.filter.leavesOnly;
                opts.highlight = tree.options.filter.highlight;
                opts.hideExpanders = tree.options.filter.hideExpanders;
                opts.fuzzy = tree.options.filter.fuzzy;
                opts.autoApply = tree.options.filter.autoApply;
                opts.mode = tree.options.filter.mode;
                opts.autoExpand = tree.options.filter.autoExpand;
                opts.counter = tree.options.filter.counter;

                if (e && e.which === $.ui.keyCode.ESCAPE || $.trim(match) === "") {
                    $("input[name=fancytree-search]").val("");
                    tree.clearFilter();
                    return;
                }
                //opts.
                if (tree.options.filter.regularExpression) {
                    // Pass function to perform match
                    n = filterFunc.call(tree, function (node) {
                        return new RegExp(match, "i").test(node.title);
                    }, opts);
                } else {
                    // Pass a string to perform case insensitive matching
                    n = filterFunc.call(tree, match, opts);
                }
            }).focus();
        },

        initVATFancyTreeAjax: function (treeID, ajaxUrl, dblFn) {

            var prefixUrl = loginContext.vatApiHost + constant.webapi.prefix;
            var ajaxUrl = prefixUrl + ajaxUrl;

            var ajaxSource = $.ajax({
                url: ajaxUrl,
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('Authorization', tokenType + ' ' + apiToken);
                    xhr.setRequestHeader('from', vatSessionService.project.id);
                }
            });


            ajaxSource.done(function (data) {

                var treeOptions = {
                    extensions: ["edit", "glyph", "table", "filter"],
                    quicksearch: true,
                    checkbox: false,
                    glyph: glyph_opts,
                    source: JSON.parse(data),
                    table: {
                        checkboxColumnIdx: 1,
                        nodeColumnIdx: 2
                    },
                    dblclick: function (event, data) {
                        var node = data.node.data;
                        var code = node.code;
                        var name = node.fullName;
                        var acctProp = node.acctProp;
                        var direction = node.direction;
                        var hasChildren = node.hasChildren;

                        if (code != null && !hasChildren) {
                            dblFn(code, name, acctProp, direction);
                        }
                    },
                    renderColumns: function (event, data) {
                        var node = data.node,
                        $tdList = $(node.tr).find(">td");
                        $tdList.eq(3).text(!!node.folder);
                    },
                    filter: {
                        autoApply: true,   // Re-apply last filter if lazy data is loaded
                        autoExpand: true, // Expand all branches that contain matches while filtered
                        counter: true,     // Show a badge with number of matching child nodes near parent icons
                        fuzzy: false,      // Match single characters in order, e.g. 'fb' will match 'FooBar'
                        hideExpandedCounter: false,  // Hide counter badge if parent is expanded
                        hideExpanders: false,       // Hide expanders if all child nodes are hidden by filter
                        highlight: true,   // Highlight matches by wrapping inside <mark> tags
                        leavesOnly: false, // Match end nodes only
                        nodata: true,      // Display a 'no data' status node if result is empty
                        mode: "hide",      // Grayout unmatched nodes (pass "hide" to remove unmatched node instead)
                        regularExpression: false,
                        matchWholeBranch: false
                    }
                };
                $("#" + treeID).fancytree(treeOptions);

                $("input[name=fancytree-vat-search]").keyup(function (e) {
                    var n,
                      tree = $.ui.fancytree.getTree("#" + treeID),
                      opts = {},
                      filterFunc = tree.options.filter.matchWholeBranch ? tree.filterBranches : tree.filterNodes,
                      match = $(this).val();

                    opts.nodata = tree.options.filter.nodata;
                    opts.leavesOnly = tree.options.filter.leavesOnly;
                    opts.highlight = tree.options.filter.highlight;
                    opts.hideExpanders = tree.options.filter.hideExpanders;
                    opts.fuzzy = tree.options.filter.fuzzy;
                    opts.autoApply = tree.options.filter.autoApply;
                    opts.mode = tree.options.filter.mode;
                    opts.autoExpand = tree.options.filter.autoExpand;
                    opts.counter = tree.options.filter.counter;

                    if (e && e.which === $.ui.keyCode.ESCAPE || $.trim(match) === "") {
                        $("input[name=fancytree-vat-search]").val("");
                        tree.clearFilter();
                        return;
                    }
                    //opts.
                    if (tree.options.filter.regularExpression) {
                        // Pass function to perform match
                        n = filterFunc.call(tree, function (node) {
                            return new RegExp(match, "i").test(node.title);
                        }, opts);
                    } else {
                        // Pass a string to perform case insensitive matching
                        n = filterFunc.call(tree, match, opts);
                    }
                }).focus();
            });
        },
        expandCollapseAll: function (treeID, isCollapsed) {
            if (!isCollapsed) {
                $.ui.fancytree.getTree("#" + treeID).visit(function (node) {
                    node.setExpanded();
                });
            } else {

                $.ui.fancytree.getTree("#" + treeID).visit(function (node) {
                    node.setExpanded(false);
                });
            }
        },
        initAllFancyTreeAjax: function (treeID, ajaxUrl, dblFn) {

            var prefixUrl = loginContext.apiHost + constant.webapi.prefix;
            var ajaxUrl = prefixUrl + ajaxUrl;

            var ajaxSource = $.ajax({
                url: ajaxUrl,
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('Authorization', tokenType + ' ' + apiToken);
                }
            });

            var treeOptions = {
                extensions: ["edit", "glyph", "table", "filter"],
                quicksearch: true,
                checkbox: false,
                glyph: glyph_opts,
                source: ajaxSource,
                table: {
                    checkboxColumnIdx: 1,
                    nodeColumnIdx: 2
                },
                dblclick: function (event, data) {
                    var node = data.node.data;
                    var code = node.code;
                    var name = node.fullName;
                    var acctProp = node.acctProp;
                    var direction = node.direction;
                    var hasChildren = node.hasChildren;

                    if (code != null) {
                        dblFn(code, name, acctProp, direction);
                    }
                },
                renderColumns: function (event, data) {
                    var node = data.node,
                        $tdList = $(node.tr).find(">td");
                    $tdList.eq(3).text(!!node.folder);
                },
                filter: {
                    autoApply: true,   // Re-apply last filter if lazy data is loaded
                    autoExpand: true, // Expand all branches that contain matches while filtered
                    counter: true,     // Show a badge with number of matching child nodes near parent icons
                    fuzzy: false,      // Match single characters in order, e.g. 'fb' will match 'FooBar'
                    hideExpandedCounter: false,  // Hide counter badge if parent is expanded
                    hideExpanders: false,       // Hide expanders if all child nodes are hidden by filter
                    highlight: true,   // Highlight matches by wrapping inside <mark> tags
                    leavesOnly: false, // Match end nodes only
                    nodata: true,      // Display a 'no data' status node if result is empty
                    mode: "hide",      // Grayout unmatched nodes (pass "hide" to remove unmatched node instead)
                    regularExpression: false,
                    matchWholeBranch: false
                }
            };

            ///由于fancyTree第一次ajax请求加载的时候,只需要把发送ajax option即可,不需要使用callback去赋值
            ///但是第二次ajax请求重新渲染fancytree的话,需要ajax.done获取返回的数据并做为参数传递给fancytree去重新渲染
            ///所以使用了tick来判断是否是首次请求
            var tree = $.ui.fancytree.getTree("#" + treeID);
            if (tree) {
                ajaxSource.done(function (data) {
                    tree.reload(data).done(function () {
                        console.log('reloaded');
                    });
                }).fail(function (err) { console.log(err); });
            } else {
                $("#" + treeID).fancytree(treeOptions);
            }

            $("input[name=fancytree-search]").keyup(function (e) {
                var n,
                    tree = $.ui.fancytree.getTree("#" + treeID),
                    opts = {},
                    filterFunc = tree.options.filter.matchWholeBranch ? tree.filterBranches : tree.filterNodes,
                    match = $(this).val();

                opts.nodata = tree.options.filter.nodata;
                opts.leavesOnly = tree.options.filter.leavesOnly;
                opts.highlight = tree.options.filter.highlight;
                opts.hideExpanders = tree.options.filter.hideExpanders;
                opts.fuzzy = tree.options.filter.fuzzy;
                opts.autoApply = tree.options.filter.autoApply;
                opts.mode = tree.options.filter.mode;
                opts.autoExpand = tree.options.filter.autoExpand;
                opts.counter = tree.options.filter.counter;

                if (e && e.which === $.ui.keyCode.ESCAPE || $.trim(match) === "") {
                    $("input[name=fancytree-search]").val("");
                    tree.clearFilter();
                    return;
                }
                //opts.
                if (tree.options.filter.regularExpression) {
                    // Pass function to perform match
                    n = filterFunc.call(tree, function (node) {
                        return new RegExp(match, "i").test(node.title);
                    }, opts);
                } else {
                    // Pass a string to perform case insensitive matching
                    n = filterFunc.call(tree, match, opts);
                }
            }).focus();
        },
        _index :function (data) {
                var index = 1;
                for(var i in data){
                    data[i].index = index;
                    index++;
                }
            return data;
        },
        _dateByPicker  : function (start, end) {

            if(end){
                var _sp = end.toString().slice(4);
                if(_sp.length != 2){
                    _sp = "0" + _sp;
                };
                end = end.toString().substring(0, 4) +_sp;
            }
            if(start){
                var _sp = start.toString().slice(4);
                if(start.length != 2){
                    _sp = "0" + _sp;
                };
                start = start.toString().substring(0, 4) +_sp;
            }
            return {
                start : start,
                end : end
            }

        }
    };
}]);