refreshHelper.js 4.85 KB
/**
 * Created by xueyin on 2016/10/29.
 * 支持页面刷新
 * 本工具将页面指定对象的值保存到cookie或localstorage中
 * 同时支持从缓存获取对应的参数
 */
var $ = require('jquery'),
    util = require('./util');

var toast = function(id) {
    this.cache = {};
}

toast.prototype.constructor = toast;

toast.prototype.init = function(refreshButton) {
    var __self = this;

    __self.cache = __self.getQueryString();

    // $(window).on("load", function () {
    //     $(refreshButton).on("click", function (event) {
    //         __self.setQueryString(__self.cache);
    //     });
    // });

    // 因为当前通过一个helper方法,无法判断是取值还是设置值
    // 1、注册在筛选按钮真正处理事件之前,把从url中获取到的数据全部清空
    $(refreshButton).on("click", function (event) {
        __self.cache = {};

        // 2、设置定时器,当刷新事件完成后,再将当前筛选条件设置到url中
        var timer_id = window.setTimeout(function () {
            window.clearTimeout(timer_id);
            __self.setQueryString(__self.cache);
        }, 500);
    });
}

/**
 * 支持Input筛选项
 */
toast.prototype.inputHelper = function (id) {
    var new_value = util.__input(id);
    if (this.cache[id] != undefined && this.cache[id] != "") {
        util.__setInput(id, this.cache[id]);
    }
    else {
        if (new_value != undefined) {
            this.cache[id] = new_value;
        }
    }

    return this.cache[id];
}

/**
 * 强制刷新缓存中的值
 */
toast.prototype.inputFocusHelper = function (id, value) {
    
    util.__setInput(id, value);
    
    this.cache[id] = value;
    

    return this.cache[id];
}

/**
 * 支持Select筛选项
 * @param eles_id
 */
toast.prototype.dropDownHelper = function(obj) {
    var new_value = obj.getValue();
    var ret_id = -1;
    if (this.cache[new_value.name] && this.cache[new_value.name] != "") {
        // 使用缓存的值
        var obj_value = JSON.parse(this.cache[new_value.name]);
        obj.setValue(obj_value);

        ret_id = obj_value.id;
    }
    else {
        if (new_value && new_value.name && new_value.id != -1) {
            // 使用新值替换缓存中的值
            this.cache[new_value.name] = JSON.stringify(new_value);
            ret_id = new_value.id;
        }
    }

    return ret_id;
}

/**
 * 支持类目选择控件
 * @param tabTree    类目筛选对象
 * @param sort       类目级别: 0 - 一级  1 - 二级 2 - 三级 3 - 四级
 */
toast.prototype.tabTreeHelper = function (tabTree, sort) {
    if (0 >= sort && 3 <= sort) {
        // 最多支持四级类目
        return 0;
    }

    var ret_val = "";
    var sortName = "sortTree" + sort;
    var value = tabTree.selected[sort] ? tabTree.selected[sort].id : "";
    if (this.cache[sortName] && this.cache[sortName] != "") {
        // 使用缓存的值
        ret_val = this.cache[sortName];
        tabTree.setDisplayName(this.cache["sortTreeName"]);
    }
    else {
        if (value != "") {
            this.cache[sortName] = value;
            this.cache["sortTreeName"] = tabTree.getDisplayName();
        }

        ret_val = value;
    }

    return ret_val;
}

/**
 * 获取url上配置的page参数,如果没有则返回1
 * @returns {number}
 */
toast.prototype.pageHelper = function () {
    var page = 1;
    if (location.hash.search(/page=(\d+)/g) > -1) {
        page = /page=(\d+)/g.exec(location.hash)[1];
    }

    return page;
}

/**
 * 获取url上配置的pageSize参数,如果没有则返回1
 * pageSize 平台端全部默认10条
 * @returns {number}
 */
toast.prototype.pageSizeHelper = function (g) {
    var pageSize = 10;
    if (location.hash.search(/size=(\d+)/g) > -1) {
        pageSize = /size=(\d+)/g.exec(location.hash)[1];
    }

    return pageSize;
}

/**
 * 获取url上的查询串,通过数据返回
 * @returns 包含所有查询参数的对象,可以通过returnValue["xxx"]方式获取
 */
toast.prototype.getQueryString = function() {
    var splitUrl = window.location.href.split("?");
    var strUrl = (splitUrl.length>1) ? splitUrl[1].split("&") : 0;

    var i = 0,
        iLen = strUrl.length,
        str = '',
        obj = {};

    for(i = 0; i < iLen; i++) {
        str = strUrl[i].split("=");
        obj[str[0]] = str[1];
    }

    return Array.prototype.sort.call(obj);
}

/**
 * 设置所有查询参数到url
 * @param params
 */
toast.prototype.setQueryString = function(params) {
    var url = window.location.href;
    var splitUrl = url.split("?");
    url = (splitUrl.length > 1) ? splitUrl[0] : url;
    url += "?";

    $.each(params, function (id, value) {
        splitUrl = url.split("?");
        var has_params = splitUrl[1].split("=");
        if (has_params.length > 1) {
            url += "&";
        }

        url += (id + "=" + value);
    })

    window.location.href = url;
}

module.exports = toast;