269 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var YourTeam = YourTeam || {};
 | 
						||
/**
 | 
						||
 * This is a description of the Ajax constructor function.
 | 
						||
 * @class Ajax
 | 
						||
 * @classdesc This is a description of the Ajax class.
 | 
						||
 * @author Darren Chen @2021/02/06
 | 
						||
 * @copyright Darren Chen @Your Team Co., Ltd. 2021
 | 
						||
 */
 | 
						||
class Ajax {
 | 
						||
    /**
 | 
						||
    * constructor
 | 
						||
    * @constructor
 | 
						||
    *  @param {String} apiUrl API URL. def="".
 | 
						||
    *  @param {String} sendData the data object which you will be send. def= null.
 | 
						||
    *  @param {Fcnction} successFunction successFunction. def=null.(use def successFunction)
 | 
						||
    *  @param {Fcnction} errorFunction errorFunction. def=null.(use def successFunction)
 | 
						||
    *  @param {String} type HTTP METHOD. def="GET".
 | 
						||
    *  @param {Object} conType content type
 | 
						||
    *  @param {String} dataType data format. def="JSON".
 | 
						||
    *  @param {String} isAsync the api synchronization. def=false.
 | 
						||
    *  @return {Object} this
 | 
						||
    */
 | 
						||
    constructor(apiUrl = "", sendData = null, successFunction = null, errorFunction = null, type = "GET", isAsync = false, conType = this.contentType.Json, dataType = "JSON") {
 | 
						||
        this.conType = conType;
 | 
						||
        this.apiUrl = apiUrl;
 | 
						||
        this.isAsync = isAsync;
 | 
						||
        this.type = type;
 | 
						||
        this.dataType = dataType;
 | 
						||
        this.sendData = sendData;
 | 
						||
        this.extSuccessFunction = successFunction;
 | 
						||
        /*if (successFunction) this.successFunction = successFunction;*/
 | 
						||
        if (errorFunction) this.errorFunction = errorFunction;
 | 
						||
        return this;
 | 
						||
    }
 | 
						||
    /**
 | 
						||
    * dataToString
 | 
						||
    * @description convert the data object to string
 | 
						||
    *  @param {Object} data API URL. def="".
 | 
						||
    *  @return {String} strJsonData
 | 
						||
    */
 | 
						||
    dataToString = function (data) {
 | 
						||
        let strJsonData = data ? (data.Data ? JSON.stringify(data.Data) : null) : null;
 | 
						||
        return strJsonData;
 | 
						||
    }
 | 
						||
    /**
 | 
						||
    * beforeSendFunction
 | 
						||
    * @description beforeSendFunction
 | 
						||
    */
 | 
						||
    beforeSendFunction = function (xhr) {
 | 
						||
        let cookies = new YourTeam.Utility.Cookie();
 | 
						||
        let token = cookies.get("JWT-Authorization");
 | 
						||
        xhr.setRequestHeader('Authorization', "Bearer " + token);
 | 
						||
    }
 | 
						||
    /**
 | 
						||
    * successFunction
 | 
						||
    * @description successFunction
 | 
						||
    * @param {Object} data the data object from the api return
 | 
						||
    * @return {Object} data
 | 
						||
    */
 | 
						||
    successFunction = function (data, callback) {
 | 
						||
        if (data && data.unauthorized == 401) {
 | 
						||
            let cookies = new YourTeam.Utility.Cookie();
 | 
						||
            let href = location.href;
 | 
						||
            cookies.remove("JWT-Authorization");
 | 
						||
            if (href.indexOf("localhost:5966") == -1) {
 | 
						||
                location.href = "/login";
 | 
						||
            } else {
 | 
						||
                location.href = "login.html";
 | 
						||
            }
 | 
						||
        }
 | 
						||
        if (callback) {
 | 
						||
            callback(data);
 | 
						||
        }
 | 
						||
        return data;
 | 
						||
    }
 | 
						||
    /**
 | 
						||
    * errorFunction
 | 
						||
    * @description errorFunction
 | 
						||
    * @param {Object} xhr HTTP STATUS
 | 
						||
    * @param {Object} ajaxOptions the ajax option message
 | 
						||
    * @param {String} thrownError the error message
 | 
						||
    */
 | 
						||
    errorFunction = function (xhr, ajaxOptions, thrownError) {
 | 
						||
        if (xhr.status != "201" && xhr.status != "204") {
 | 
						||
            console.log(xhr.status);
 | 
						||
            console.log(thrownError);
 | 
						||
            window.alert("執行失敗,請聯絡客服人員。");
 | 
						||
        } else if (xhr.status == "401") {
 | 
						||
            window.alert("登入時間超時,請重新登入!");
 | 
						||
            cookies.remove("JWT-Authorization");
 | 
						||
            location.href = "~/Login/Login";
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
    * completeFunction
 | 
						||
    * @description completeFunction
 | 
						||
    */
 | 
						||
    completeFunction = function () {
 | 
						||
 | 
						||
    }
 | 
						||
    /**
 | 
						||
    * content type
 | 
						||
    * @description content type
 | 
						||
    */
 | 
						||
    contentType = {
 | 
						||
        Json: 1,
 | 
						||
        FormData : 2
 | 
						||
    }
 | 
						||
    /**
 | 
						||
    * enum 
 | 
						||
    * @description enum
 | 
						||
    * @param {Object} eo object
 | 
						||
    * @return {Object} enum
 | 
						||
    */
 | 
						||
    enums(eo) {
 | 
						||
        var enums = function () { };
 | 
						||
        for (var key in eo) {
 | 
						||
            var enumObject = new enums();
 | 
						||
            enums[key] = eo[key];
 | 
						||
        }
 | 
						||
        return enums;
 | 
						||
    }
 | 
						||
    /**
 | 
						||
    * send
 | 
						||
    * @description send
 | 
						||
    * @param {Object} conType content type
 | 
						||
    * @param {Object} sendData send data
 | 
						||
    * @param {Function} successFunction the ajax success function
 | 
						||
    * @param {Function} errorFunction the ajax error function
 | 
						||
    * @return {Object} this
 | 
						||
    */
 | 
						||
    send = function (conType = this.contentType.Json, sendData = null, successFunction = null, errorFunction = null) {
 | 
						||
 | 
						||
        //if (!CheckMultiSend(this.apiUrl, this.type, this.dataToString(this.sendData))) { //連點防呆
 | 
						||
        //    return false;
 | 
						||
        //}
 | 
						||
        if (sendData) {
 | 
						||
            this.sendData = sendData;
 | 
						||
        }
 | 
						||
        if (successFunction) {
 | 
						||
            this.successFunction = successFunction;
 | 
						||
        }
 | 
						||
        if (errorFunction) {
 | 
						||
            this.errorFunction = errorFunction;
 | 
						||
        }
 | 
						||
        if (conType === this.contentType.Json) {
 | 
						||
            $.ajax({
 | 
						||
                url: this.apiUrl,
 | 
						||
                async: this.isAsync,
 | 
						||
                type: this.type,
 | 
						||
                dataType: this.dataType,
 | 
						||
                traditional: true,
 | 
						||
                contentType: "application/json; charset=utf-8",
 | 
						||
                data: this.dataToString(this.sendData),
 | 
						||
 | 
						||
                //cache: false,
 | 
						||
                //processData: false,
 | 
						||
 | 
						||
                beforeSend: this.beforeSendFunction,
 | 
						||
                success: (data) => this.successFunction(data, this.extSuccessFunction),
 | 
						||
                error: this.errorFunction,
 | 
						||
                complete: this.completeFunction,
 | 
						||
                statusCode: {
 | 
						||
                    201: (data) => this.successFunction(data, this.extSuccessFunction),
 | 
						||
                }
 | 
						||
            });
 | 
						||
        }
 | 
						||
        else if (conType === this.contentType.FormData) {
 | 
						||
            $.ajax({
 | 
						||
                url: this.apiUrl,
 | 
						||
                async: this.isAsync,
 | 
						||
                type: this.type,
 | 
						||
                dataType: this.dataType,
 | 
						||
 | 
						||
                traditional: true,
 | 
						||
 | 
						||
                contentType: false,
 | 
						||
                enctype: 'multipart/form-data',
 | 
						||
                data: this.sendData,
 | 
						||
                cache: false,
 | 
						||
                processData: false,
 | 
						||
                beforeSend: this.beforeSendFunction,
 | 
						||
                success: this.successFunction,
 | 
						||
                error: this.errorFunction,
 | 
						||
                complete: this.completeFunction
 | 
						||
            });
 | 
						||
            alert(conType);
 | 
						||
        }
 | 
						||
        else {
 | 
						||
            console.error("the content type is null.");
 | 
						||
        }
 | 
						||
        return this;
 | 
						||
    }
 | 
						||
}
 | 
						||
YourTeam.Ajax = YourTeam.Ajax || Ajax;
 | 
						||
 | 
						||
var ckeckMultiSendArr = [];
 | 
						||
function CheckMultiSend(url, type, data) {
 | 
						||
    //根據 url type data 
 | 
						||
    let text = String(url) + String(type);
 | 
						||
    if (type != "GET") {
 | 
						||
        if (ckeckMultiSendArr.indexOf(text) == -1) {
 | 
						||
            ckeckMultiSendArr.unshift(text);
 | 
						||
            let timer = setInterval(function () {
 | 
						||
                ckeckMultiSendArr.splice(0);
 | 
						||
                clearInterval(timer);
 | 
						||
            }, 500)
 | 
						||
        } else {
 | 
						||
            return false
 | 
						||
        }
 | 
						||
    }
 | 
						||
    return true;
 | 
						||
}
 | 
						||
//var YourTeamAjax = {
 | 
						||
//    apiUrl: "",
 | 
						||
//    isAsync: false,
 | 
						||
//    type: "GET",
 | 
						||
//    dataType: "JSON",
 | 
						||
//    sendData: null,
 | 
						||
//    dataToString: function (data) {
 | 
						||
//        let strJsonData = data ? (data.Data ? JSON.stringify(data.Data) : null) : null;
 | 
						||
//        return strJsonData;
 | 
						||
//    },
 | 
						||
//    beforeSendFunction: function () {
 | 
						||
//        $.blockUI({ message: '<h1><img src="/Content/img/loading.gif" style="width:200px;" /> Loding...</h1>' });
 | 
						||
//    },
 | 
						||
//    successFunction: function (data) {
 | 
						||
//        return data;
 | 
						||
//    },
 | 
						||
//    errorFunction: function (xhr, ajaxOptions, thrownError) {
 | 
						||
//        if (xhr.status != "201") {
 | 
						||
//            console.log(xhr.status);
 | 
						||
//            console.log(thrownError);
 | 
						||
//            window.alert("執行失敗,請聯絡YourTeam客服人員。");
 | 
						||
//        }
 | 
						||
//    },
 | 
						||
//    completeFunction: function () {
 | 
						||
//        $.unblockUI();
 | 
						||
//    },
 | 
						||
//    send: function (sendData = null, successFunction = null, errorFunction = null) {
 | 
						||
//        if (sendData) {
 | 
						||
//            this.sendData = sendData;
 | 
						||
//        }
 | 
						||
//        if (successFunction) {
 | 
						||
//            this.successFunction = successFunction;
 | 
						||
//        }
 | 
						||
//        if (errorFunction) {
 | 
						||
//            this.errorFunction = errorFunction;
 | 
						||
//        }
 | 
						||
//        $.ajax({
 | 
						||
//            url: this.apiUrl,
 | 
						||
//            async: this.isAsync,
 | 
						||
//            type: this.type,
 | 
						||
//            dataType: this.dataType,
 | 
						||
//            traditional: true,
 | 
						||
//            contentType: "application/json; charset=utf-8",
 | 
						||
//            data: this.dataToString(this.sendData),
 | 
						||
//            beforeSend: this.beforeSendFunction,
 | 
						||
//            success: this.successFunction,
 | 
						||
//            error: this.errorFunction,
 | 
						||
//            complete: this.completeFunction,
 | 
						||
//            statusCode: {
 | 
						||
//                201: this.successFunction
 | 
						||
//            }
 | 
						||
//        });
 | 
						||
//    }
 | 
						||
//};
 |