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

    var flatpickrDateTimeConfig = {
        enableTime: true,
        time_24hr: true,
        "locale": "zh",
        onOpen: function () {
            $(this.calendarContainer).addClass('showTimeInput');
        }
    };

    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, opts) {
        var tps = {},
            id;
        $('script[type="text/html"]', dom).each(function () {
            id = $(this).attr('id');
            if (id)
                tps[id] = template.compile($(this).html(), opts);
        });
        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, errorFun) {
        $.ajax({
            url: url,
            method: 'POST',
            data: data,
            complete: function (xhr, ts) {
                ajaxComplete(xhr, ts, successFun, errorFun);
            }
        });
    };

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

    var $del = function (url, successFun) {
        $post(url, {'_method': 'delete'}, function (rs) {
            successFun && successFun(rs);
        });
    };

    var errorHead = '<span style="color:red;">服务器出现异常:</span>';

    function successHandle(json, succ, err) {
        var status = json.status;
        if (status == 407) {
            location.href = '/login.html';
            return;
        }

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

        if (status == 'ERROR'){
            UIkit.notification('异常,' + json.msg, 'danger');
            err && err();
        }
        else
            succ && succ(json);
    }

    function ajaxComplete(xhr, ts, succ, err) {
        if (ts == 'success') {
            successHandle(JSON.parse(xhr.responseText), succ, err);
        } else if (ts == 'error') {
            UIkit.notification('异常,' + xhr.responseText, 'danger');
        }
    }

    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 accAdd = function (a, b) {
        var c, d, e;
        try {
            c = a.toString().split(".")[1].length;
        } catch (f) {
            c = 0;
        }
        try {
            d = b.toString().split(".")[1].length;
        } catch (f) {
            d = 0;
        }
        return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e;
    };

    function accDiv(arg1,arg2){
        var t1=0,t2=0,r1,r2;
        try{t1=arg1.toString().split(".")[1].length}catch(e){}
        try{t2=arg2.toString().split(".")[1].length}catch(e){}
        with(Math){
            r1=Number(arg1.toString().replace(".",""))
            r2=Number(arg2.toString().replace(".",""))
            return (r1/r2)*pow(10,t2-t1);
        }
    }

    function mul(a, b) {
        var c = 0,
            d = a.toString(),
            e = b.toString();
        try {
            c += d.split(".")[1].length;
        } catch (f) {
        }
        try {
            c += e.split(".")[1].length;
        } catch (f) {
        }
        return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
    }

    var numSubtr = function (a, b) {
        var c, d, e;
        try {
            c = a.toString().split(".")[1].length;
        } catch (f) {
            c = 0;
        }
        try {
            d = b.toString().split(".")[1].length;
        } catch (f) {
            d = 0;
        }
        return e = Math.pow(10, Math.max(c, d)), (a * e - b * e) / e;
    };

    var trim = function (str, is_global) {
        var result;
        result = str.replace(/(^\s+)|(\s+$)/g, "");
        if (is_global.toLowerCase() == "g") {
            result = result.replace(/\s/g, "");
        }
        return result;
    };

    var inverse = function (map) {
        var rs = {};
        for(var k in map){
            rs[map[k]] = k;
        }

        return rs;
    };
    
    var next_elem = function (clazz, e) {
        var ne = e.next();
        if(ne.length==0)
            return [];
        else if(ne.hasClass(clazz))
            return ne;
        else
            return next_elem(clazz, ne);
    };

    var getDisabledVal = function (f) {
        var rs = {};
        $('input,select', f).each(function () {
            if($(this).attr('disabled')){
                rs[$(this).attr('name')]=$(this).val();
            }
        });
        return rs;
    };

    var companySelect = function (comSelect, fgsSelect, lineSelect) {
        //线路 selectize
        lineSelect.selectize({
            placeholder: '选择线路...'
        });

        //分公司切换,级联线路
        fgsSelect.on('change', function () {
            var c = comSelect.val();
            var f = $(this).val();
            var selize = lineSelect[0].selectize;
            selize.clearOptions();
            var array;
            if(f)
                array = groupLineArrays[c+'_'+f];
            else
                array = mergeArrays(get_vals(groupLineArrays));

            $.each(array, function () {
                selize.addOption({value:this.lineCode,text:this.name});
            });
        });

        //公司切换,级联分公司
        comSelect.on('change', function () {
            var c = $(this).val();
            var fgss = company_json[c].fgs;
            var opts='<option value="">请选择...</option>';

            for(var f in fgss){
                opts += '<option value="'+f+'">'+fgss[f]+'</option>';
            }

            fgsSelect.html(opts).trigger('change');
        });

        var opts = '';
        for(var c in company_json){
            opts += '<option value="'+c+'">'+company_json[c].name+'</option>'
        }
        comSelect.html(opts).trigger('change');
    };

    var mergeArrays = function (arrays) {
        var all=[];
        for(var i=0,arr;arr=arrays[i++];)
            all = all.concat(arr);

        return all;
    };

    /**
     * 默认 modal
     * @param page
     * @param data
     */
    var open_modal = function (page, title, data) {
        if(!data)
            data={};
        var id = 'uk3_' + Math.random().toString(36).substr(2);
        var modal_wrap = '<div id="'+id+'" uk-modal>' +
                            '<div class="uk-modal-dialog">' +
                                '<button class="uk-modal-close-default" type="button" uk-close></button>' +
                                '<div class="uk-modal-header">' +
                                    '<h2 class="uk-modal-title">'+title+'</h2>' +
                                '</div>' +
                                '<div class="uk-modal-body"><div uk-spinner></div></div>' +
                                '<div class="uk-modal-footer uk-text-right">' +
                                    '<button class="uk-button uk-button-default uk-modal-close" type="button">取消</button>&nbsp;' +
                                    '<button class="uk-button uk-button-primary submit-btn" type="button">提交</button>' +
                                '</div>' +
                            '</div>' +
                        '</div>';

        show_modal(id, modal_wrap, page, data);
    };

    /**
     * 无页脚小modal
     * @param page
     * @param title
     * @param data
     */
    var open_modal_2 = function (page, title, data) {
        if(!data)
            data={};
        var id = 'uk3_' + Math.random().toString(36).substr(2);
        var modal_wrap = '<div id="'+id+'" uk-modal>' +
            '<div class="uk-modal-dialog">' +
            '<button class="uk-modal-close-default" type="button" uk-close></button>' +
            '<div class="uk-modal-header">' +
            '<h2 class="uk-modal-title">'+title+'</h2>' +
            '</div>' +
            '<div class="uk-modal-body"><div uk-spinner></div></div>' +
            '</div>' +
            '</div>';

        show_modal(id, modal_wrap, page, data);
    };

    /**
     * 大 modal
     * @param page
     * @param title
     * @param data
     */
    var open_modal_3 = function (page, title, data) {
        if(!data)
            data={};
        var id = 'uk3_' + Math.random().toString(36).substr(2);
        var modal_wrap = '<div id="'+id+'" class="uk-modal-container" uk-modal>' +
            '<div class="uk-modal-dialog">' +
            '<button class="uk-modal-close-default" type="button" uk-close></button>' +
            '<div class="uk-modal-header">' +
            '<h2 class="uk-modal-title">'+title+'</h2>' +
            '</div>' +
            '<div class="uk-modal-body"><div uk-spinner></div></div>' +
            '</div>' +
            '</div>';

        show_modal(id, modal_wrap, page, data);
    };
    
    var show_modal = function (id, e, page, data) {
        $(document.body).append(e);
        UIkit.modal('#'+id, {bgClose: false, escClose: false}).show();

        var cont = $('.uk-modal-body', '#' + id);
        $.get(page, function (dom) {
            var $dom = $(dom).hide();
            cont.append($dom);
            data.caller = function () {
                $('.uk-spinner', cont).remove();
                $dom.show();
            };
            data.modalId = id;
            $dom.trigger('init', data);
        });
    };

    var pad_left = function (oriStr, len, alexin) {
        var str = '';
        var strlen = oriStr.length;
        if(strlen < len){
            for(var i=0;i<len-strlen;i++){
                str = str+alexin;
            }
        }
        str = str + oriStr;
        return str;
    };

    return {
        groupBy: groupBy,
        compileTempByDom: compileTempByDom,
        $get: $get,
        $post: $post,
        $post_arr: $post_arr,
        $del: $del,
        get_vals: get_vals,
        get_keys: get_keys,
        accAdd: accAdd,
        numSubtr: numSubtr,
        trim: trim,
        flatpickrDateTimeConfig: flatpickrDateTimeConfig,
        inverse: inverse,
        accDiv: accDiv,
        mul: mul,
        next_elem: next_elem,
        getDisabledVal: getDisabledVal,
        companySelect: companySelect,
        open_modal: open_modal,
        open_modal_2: open_modal_2,
        open_modal_3: open_modal_3,
        pad_left: pad_left
    };
})();