common.js 4.86 KB
var gb_common = (function() {

    var groupBy = function(list, field) {
        var rs = {},
            key;
        $.each(list, function() {
            key = this[field];
            if (!rs[key])
                rs[key] = [];

            rs[key].push(this);
        });

        return rs;
    }

    var compileTempByDom = function(dom) {
        var tps = {},
            id;
        $('script[type="text/html"]', dom).each(function() {
            id = $(this).attr('id');
            if (id)
                tps[id] = template.compile($(this).html());
        });
        return tps;
    }

    var $get = function(url, data, successFun) {
        $.ajax({
            url: url,
            data: data,
            complete: function(xhr, ts) {
                ajaxComplete(xhr, ts, successFun);
            }
        });
    }

    var $post = function(url, data, successFun) {
        $.ajax({
            url: url,
            method: 'POST',
            data: data,
            complete: function(xhr, ts) {
                ajaxComplete(xhr, ts, successFun);
            }
        });
    }

    function successHandle(json, handle) {
        var status = json.status;
        if (status == 407) {
            alert('被注销的登录');
            location.reload(true);
            return;
        }

        if (!status) {
            handle && handle(json);
            return;
        }

        if (status == 'ERROR')
            UIkit.modal.alert('服务器出现异常: ' + (json.msg ? json.msg : '未知异常'));
        else
            handle && handle(json);
    }

    function ajaxComplete(xhr, ts, succ) {
        if (ts == 'success') {
            successHandle(JSON.parse(xhr.responseText), succ);
        } else if (ts == 'error') {
            layer.alert(xhr.responseText, {
                icon: 2,
                title: '操作失败'
            });
        }
    }

    var get_vals = function(json) {
        var array = [];
        for (var key in json) {
            array.push(json[key]);
        }

        return array;
    }

    var get_keys = function(json){
      var array = [];
      for (var key in json) {
          array.push(key);
      }
      return array;
    }

    var get_device_tree_data = function() {
        var treeData = [];
        var data = groupBy(get_vals(gb_data_gps.allGps), 'lineId');
        var name;
        for (var code in data) {
            name = gb_data_basic.codeToLine[code].name;
            data[name] = groupBy(data[code], 'upDown');
            treeData.push({
                'text': name,
                'children': [{
                    'text': '上行',
                    'children': grabs(data[name][0])
                }, {
                    'text': '下行',
                    'children': grabs(data[name][1])
                }]
            });
        }

        function grabs(array) {
            if (!array)
                return;
            var rs = [];
            $.each(array, function() {
                rs.push({
                    'text': this.nbbm,
                    'a_attr': {
                        'type': 'device'
                    },
                    'icon': 'uk-icon-bus'
                });
            });
            return rs;
        }

        return treeData;
    }

    var lineAutocomplete = function(element) {
        //construction data
        var data = [],
            code2Name = gb_data_basic.lineCode2NameAll(),
            name;
        for (var code in code2Name) {
            name = code2Name[code];
            data.push({
                value: name,
                code: code,
                fullChars: pinyin.getFullChars(name).toUpperCase(),
                camelChars: pinyin.getCamelChars(name)
            });
        }

        // init autocomplete
        var autocomplete = UIkit.autocomplete(element, {
            minLength: 1,
            delay: 50,
            source: function(release) {
                var q = $('input', element).val().toUpperCase(),
                    rs = [],
                    count = 0;

                $.each(data, function() {
                    if (this.value.indexOf(q) != -1 || this.fullChars.indexOf(q) != -1 || this.camelChars.indexOf(q) != -1)
                        rs.push(this);

                    if (count >= 10)
                        return false;
                    count++;
                });

                release && release(rs);
            }
        });
    };

    return {
        groupBy: groupBy,
        compileTempByDom: compileTempByDom,
        $get: $get,
        $post: $post,
        get_vals: get_vals,
        get_keys: get_keys,
        get_device_tree_data: get_device_tree_data,
        lineAutocomplete: lineAutocomplete
    };
})();