947 lines
35 KiB
JavaScript
947 lines
35 KiB
JavaScript
|
var YourTeam = YourTeam || {};
|
|||
|
YourTeam.Utility = YourTeam.Utility || {};
|
|||
|
class UrlHelper {
|
|||
|
constructor() {
|
|||
|
}
|
|||
|
/* @deprecated since version 0.2
|
|||
|
* @description get the param value
|
|||
|
* @param {String} sName url param name
|
|||
|
* @return {String}
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/04/18
|
|||
|
*/
|
|||
|
param = function (sName) {
|
|||
|
this._sName = sName;
|
|||
|
let sReg = new RegExp("(^|&)" + _sName + "=([^&]*)(&|$)"); //創建一個含有目標参数的正則表達式對象
|
|||
|
let sMatchTarget = window.location.search.substr(1).match(sReg); //匹配目標参數
|
|||
|
if (sMatchTarget !== null) {
|
|||
|
return unescape(sMatchTarget[2]);
|
|||
|
}
|
|||
|
return null; //返回参數值
|
|||
|
}
|
|||
|
/* @deprecated since version 0.2
|
|||
|
* @description get the param value form the page`s url
|
|||
|
* @param {String} sName url param name
|
|||
|
* @param {String} sPageName url page name
|
|||
|
* @return {String}
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/04/18
|
|||
|
*/
|
|||
|
paramForPage = function (sName, sPageName) {
|
|||
|
this.prototype = fnGetUrlParam;
|
|||
|
let str = this.prototype(sName);
|
|||
|
this._sPageName = sPageName;
|
|||
|
if (str !== null && window.location.href.indexOf(_sPageName) !== -1) {
|
|||
|
return str;
|
|||
|
}
|
|||
|
//if (location.pathname) {
|
|||
|
// var sReg = new RegExp("(^|&)" + sName + "=([^&]*)(&|$)"); //創建一個含有目標参数的正則表達式對象
|
|||
|
// var sMatchTarget = window.location.search.substr(1).match(sReg); //匹配目標参數
|
|||
|
// if (sMatchTarget !== null && window.location.href.indexOf(sPageName) !== -1) {
|
|||
|
// return unescape(sMatchTarget[2]);
|
|||
|
// }
|
|||
|
//}
|
|||
|
return null; //返回参數值
|
|||
|
}
|
|||
|
}
|
|||
|
YourTeam.Utility.Url = YourTeam.Utility.Url || UrlHelper;
|
|||
|
|
|||
|
class UIOperat {
|
|||
|
constructor() {
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description disabled all element in the page (close out some element)
|
|||
|
* @param {Array} aOutElementId close out element array
|
|||
|
* @return
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/04/22
|
|||
|
*/
|
|||
|
disabledAllElement = function (aOutElementId) {
|
|||
|
let aElement = document.getElementsByTagName("input");
|
|||
|
fnSetAllElementDisabled(aElement, aOutElementId);
|
|||
|
|
|||
|
aElement = document.getElementsByTagName("textarea");
|
|||
|
fnSetAllElementDisabled(aElement, aOutElementId);
|
|||
|
|
|||
|
aElement = document.getElementsByTagName("select");
|
|||
|
fnSetAllElementDisabled(aElement, aOutElementId);
|
|||
|
|
|||
|
aElement = document.getElementsByTagName("button");
|
|||
|
fnSetAllElementDisabled(aElement, aOutElementId);
|
|||
|
|
|||
|
//aElement = document.getElementsByTagName("label");
|
|||
|
//for (var i = 0; i < aElement.length; i++) {
|
|||
|
// for (var ii = 0; ii < aOutElementId.length; ii++) {
|
|||
|
// if (aElement[i] != aOutElementId[ii])
|
|||
|
// aElement[i].setAttribute("style", "pointer-events:none;display:block;");
|
|||
|
// }
|
|||
|
//}
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description set all element disabled (close out some element)
|
|||
|
* @param {Array} aElement element array
|
|||
|
* @param {Array} aOutElementId close out element array
|
|||
|
* @return
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/04/22
|
|||
|
*/
|
|||
|
setAllElementDisabled = function (aElement, aOutElementId) {
|
|||
|
for (let i = 0; i < aElement.length; i++) {
|
|||
|
|
|||
|
for (let ii = 0; ii < aOutElementId.length; ii++) {
|
|||
|
if (aElement[i] !== aOutElementId[ii])
|
|||
|
aElement[i].disabled = true;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description get checked checkboxs (array) for this project
|
|||
|
* @param {string} checkBoxName the delete checkbox`s element name
|
|||
|
* @return
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/07/24
|
|||
|
*/
|
|||
|
getCheckedArray(checkBoxName = "id") {
|
|||
|
return $('input:checkbox[name=' + checkBoxName + ']:checked').map(function () {
|
|||
|
return $(this).val();
|
|||
|
}).get();
|
|||
|
}
|
|||
|
}
|
|||
|
YourTeam.Utility.UIOperat = YourTeam.Utility.UIOperat || UIOperat;
|
|||
|
|
|||
|
class UIData {
|
|||
|
constructor() {
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description get checked checkboxs
|
|||
|
* @param {String} checkBoxName the delete checkbox`s element name
|
|||
|
* @return ex."551,676,991,188,457,125"
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/07/24
|
|||
|
*/
|
|||
|
checkBoxValueJoin = function (checkBoxName) {
|
|||
|
return $('input:checkbox[name=' + checkBoxName + ']:checked').map(function () {
|
|||
|
return $(this).val();
|
|||
|
}).get().join(',');
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description get checked checkboxs
|
|||
|
* @param {String} checkBoxName the delete checkbox`s element name
|
|||
|
* @return ex."551,676,991,188,457,125"
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/07/24
|
|||
|
*/
|
|||
|
checkBoxValueArray = function (checkBoxName) {
|
|||
|
let ary = [];
|
|||
|
$('input:checkbox[name=' + checkBoxName + ']:checked').each(function (index, element) {
|
|||
|
ary.push($(element).val());
|
|||
|
});
|
|||
|
return ary;
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description Convrt Int To Float
|
|||
|
* @param {String} number ori number
|
|||
|
* @param {String} keepNum keep number after .
|
|||
|
* @return {String}
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2019/12/31
|
|||
|
*/
|
|||
|
convrtIntToFloat = function (number, keepNum) {
|
|||
|
let zeroNumber = fnPaddingRight("1", keepNum + 1, "0");
|
|||
|
zeroNumber = parseInt(zeroNumber);
|
|||
|
return Math.round(parseFloat(number) * zeroNumber) / zeroNumber;
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description The string Padding Left char
|
|||
|
* @param {String} str ori string
|
|||
|
* @param {Number} lenght will get string`s lenght
|
|||
|
* @param {String} add char
|
|||
|
* @return {String}
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2019/12/31
|
|||
|
*/
|
|||
|
paddingLeft = function (str, lenght, char) {
|
|||
|
if (str.length >= lenght)
|
|||
|
return str;
|
|||
|
else
|
|||
|
return fnPaddingLeft(char + str, lenght);
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description The string Padding Right char
|
|||
|
* @param {String} str ori string
|
|||
|
* @param {Number} lenght will get string`s lenght
|
|||
|
* @param {String} add char
|
|||
|
* @return {String}
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2019/12/31
|
|||
|
*/
|
|||
|
paddingRight = function (str, lenght, char) {
|
|||
|
if (str.length >= lenght)
|
|||
|
return str;
|
|||
|
else
|
|||
|
return fnPaddingRight(str + char, lenght);
|
|||
|
}
|
|||
|
}
|
|||
|
YourTeam.Utility.UIData = YourTeam.Utility.UIData || UIData;
|
|||
|
|
|||
|
class CookieHelper {
|
|||
|
constructor() {
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description Create a simple cookie (The duration is preset to 2 days)
|
|||
|
* @param {String} name name with the cookie
|
|||
|
* @param {String} value value with the cookie
|
|||
|
* @return
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/07/24
|
|||
|
*/
|
|||
|
create = function (name, value) {
|
|||
|
let expires = new Date();
|
|||
|
//有效時間保存 2 天 2*24*60*60*1000
|
|||
|
expires.setTime(expires.getTime() + 172800000);
|
|||
|
document.cookie = name + "=" + escape(value) + ";expires=" + expires.toGMTString();
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description Get the cookie value by cookie name
|
|||
|
* @param {String} name name with the cookie
|
|||
|
* @return {String}
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/07/24
|
|||
|
*/
|
|||
|
get(name) {
|
|||
|
let arg = escape(name) + "=";
|
|||
|
let nameLen = arg.length;
|
|||
|
let cookieLen = document.cookie.length;
|
|||
|
let i = 0;
|
|||
|
while (i < cookieLen) {
|
|||
|
let j = i + nameLen;
|
|||
|
if (document.cookie.substring(i, j) === arg) return this.getByIndex(j);
|
|||
|
i = document.cookie.indexOf(" ", i) + 1;
|
|||
|
if (i === 0) break;
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description Get the cookie value by index
|
|||
|
* @param {Number} index name with the cookie
|
|||
|
* @return {String}
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/07/24
|
|||
|
*/
|
|||
|
getByIndex(startIndex) {
|
|||
|
let endIndex = document.cookie.indexOf(";", startIndex);
|
|||
|
if (endIndex === -1) endIndex = document.cookie.length;
|
|||
|
return unescape(document.cookie.substring(startIndex, endIndex));
|
|||
|
}
|
|||
|
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description Remove the cookie by cookie name
|
|||
|
* @param {String} name name with the cookie
|
|||
|
* @return {Boolean}
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2021/05/27
|
|||
|
*/
|
|||
|
remove(name) {
|
|||
|
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:01 GMT;";
|
|||
|
if (this.get(name) === null || this.get(name) === "undefined") {
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
YourTeam.Utility.Cookie = YourTeam.Utility.Cookie || CookieHelper;
|
|||
|
|
|||
|
var mathHelperRandomNotRepeatNum = [];
|
|||
|
class MathHelper {
|
|||
|
constructor() {
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 取得隨機值
|
|||
|
* @param {Number} min 最小值
|
|||
|
* @param {Number} max 最大值
|
|||
|
* @returns {Number}
|
|||
|
*/
|
|||
|
random(min, max) {
|
|||
|
return Math.floor(Math.random() * max) + min;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 取得GUID
|
|||
|
* @param {String} str 分隔符號,預設值'-'。
|
|||
|
* @param {Boolean} isUpperCase 是否大寫,預設值true。
|
|||
|
* @returns {String}
|
|||
|
*/
|
|||
|
guid(str = null, isUpperCase = true) {
|
|||
|
let strGuid = 'xxxxxxxx-xxxx-0xxx-yxyx-xxxxxxxxxxxx';
|
|||
|
if (str) {
|
|||
|
strGuid = strGuid.replace('-', str);
|
|||
|
}
|
|||
|
strGuid = strGuid.replace(/[xy]/g, function (c) {
|
|||
|
var string = Math.random() * 16 | 0, v = c === 'x' ? string : (string & 0x3 | 0x8);
|
|||
|
return string.toString(16);
|
|||
|
});
|
|||
|
if (isUpperCase) {
|
|||
|
strGuid.toUpperCase();
|
|||
|
}
|
|||
|
return strGuid;
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 四捨五入取小數點後2位
|
|||
|
* @param {Number} num 數值
|
|||
|
* @returns {Number}
|
|||
|
*/
|
|||
|
roundRight2p(num) {
|
|||
|
return +(Math.round(num + "e+2") + "e-2");
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 四捨五入取小數點後2位
|
|||
|
* @param {Number} num 數值
|
|||
|
* @returns {Number}
|
|||
|
*/
|
|||
|
roundRight2p2(num) {
|
|||
|
let m = Number((Math.abs(num) * 100).toPrecision(15));
|
|||
|
return Math.round(m) / 100 * Math.sign(num);
|
|||
|
}
|
|||
|
}
|
|||
|
YourTeam.Utility.Math = YourTeam.Utility.Math || MathHelper;
|
|||
|
|
|||
|
class DateHelper {
|
|||
|
constructor() {
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 取得現在時間(yyyy-MM-dd)
|
|||
|
* @param {Boolean} isTwYear it`s Taiwan year?
|
|||
|
* @returns {String}
|
|||
|
*/
|
|||
|
getNow = function (isTwYear = false) {
|
|||
|
let d = new Date();
|
|||
|
let year = isTwYear ? d.getFullYear() - 1911 : d.getFullYear();
|
|||
|
let month = d.getMonth() + 1;
|
|||
|
let day = d.getDate();
|
|||
|
|
|||
|
let now = year + '-' +
|
|||
|
(month < 10 ? '0' : '') + month + '-' +
|
|||
|
(day < 10 ? '0' : '') + day;
|
|||
|
|
|||
|
return now;
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 取得日期時間(2020/02/02 PM 18:05:25)
|
|||
|
* @param {Boolean} isTwYear it`s Taiwan year?
|
|||
|
* @param {String} dateInterval 最小值
|
|||
|
* @param {Boolean} isPadZero 最大值
|
|||
|
* @param {Number} timeTagType 時間前戳標記 1:AM/PM 2:上午/下午
|
|||
|
* @returns {String}
|
|||
|
*/
|
|||
|
getNowHaveTimeTag = function (isTwYear = false, dateInterval = '/', isPadZero = true, timeTagType = 1) {
|
|||
|
let now = new Date();
|
|||
|
let years = isTwYear ? now.getFullYear() - 1911 : now.getFullYear();
|
|||
|
let months = now.getMonth();
|
|||
|
let days = now.getDay();
|
|||
|
let hours = now.getHours();
|
|||
|
let minutes = now.getMinutes();
|
|||
|
let seconds = now.getSeconds();
|
|||
|
|
|||
|
let dateValue = years;
|
|||
|
let timeValue = ((hours >= 12) ? "下午 " : "上午 ");
|
|||
|
if (timeTagType === 2) timeValue = ((hours >= 12) ? "AM " : "PM ");
|
|||
|
if (isPadZero) {
|
|||
|
dateValue += (dateInterval + ((months < 10) ? "0" : "") + months);
|
|||
|
dateValue += (dateInterval + ((days < 10) ? "0" : "") + days);
|
|||
|
timeValue += ((hours > 12) ? "0" + (hours - 12) : hours);
|
|||
|
timeValue += ((minutes < 10) ? ":0" : ":") + minutes;
|
|||
|
timeValue += ((seconds < 10) ? ":0" : ":") + seconds;
|
|||
|
}
|
|||
|
else {
|
|||
|
dateValue += (dateInterval + months);
|
|||
|
dateValue += (dateInterval + days);
|
|||
|
timeValue += ((hours > 12) ? hours - 12 : hours);
|
|||
|
timeValue += minutes;
|
|||
|
timeValue += seconds;
|
|||
|
}
|
|||
|
return dateValue + " " + timeValue;
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 取得日期時間(2020/02/02 18:05:25)
|
|||
|
* @param {Boolean} isTwYear it`s Taiwan year?
|
|||
|
* @param {String} dateInterval 日期間隔字元
|
|||
|
* @param {Boolean} isPadZero 是否補0
|
|||
|
* @returns {String} 回傳時間字串
|
|||
|
*/
|
|||
|
getNowChangeInterval = function (isTwYear = false, dateInterval = '/', isPadZero = true) {
|
|||
|
let today = new Date();
|
|||
|
let year = isTwYear ? today.getFullYear() - 1911 : today.getFullYear();
|
|||
|
let currentDateTime =
|
|||
|
year + dateInterval + ((isPadZero && today.getMonth() + 1 < 10) ? '0' : '') +
|
|||
|
(today.getMonth() + 1) + dateInterval + ((isPadZero && today.getDate() < 10) ? '0' : '') +
|
|||
|
today.getDate() + ' ' + ((isPadZero && today.getHours() < 10) ? '0' : '') +
|
|||
|
today.getHours() + ':' + ((isPadZero && today.getMinutes() < 10) ? '0' : '') +
|
|||
|
today.getMinutes();
|
|||
|
return currentDateTime;
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 取得加減的日期時間(2020/02/02 18:05:25)
|
|||
|
* @param {Boolean} isTwYear it`s Taiwan year?
|
|||
|
* @param {String} dateInterval 日期間隔字元
|
|||
|
* @param {Boolean} isPadZero 是否補0
|
|||
|
* @returns {String} 回傳時間字串
|
|||
|
*/
|
|||
|
getChangeDateTime(isTwYear = false, dateInterval = '/', addYears = 0, addMonths = 0, addDays = 0, isPadZero = true) {
|
|||
|
let today = new Date();
|
|||
|
let year = isTwYear ? today.getFullYear() - 1911 : today.getFullYear();
|
|||
|
if (addYears > year || addMonths > today.getMonth() || addDays > today.getDate()) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
let date =
|
|||
|
(year + addYears) + dateInterval + ((isPadZero && today.getMonth() + addMonths + 1 < 10) ? '0' : '') +
|
|||
|
(today.getMonth() + addMonths + 1) + dateInterval + ((isPadZero && today.getDate() + addDays < 10) ? '0' : '') +
|
|||
|
(today.getDate() + addDays);
|
|||
|
return date;
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 取得禮拜/週幾(禮拜五)
|
|||
|
* @param {String} dayPreString 前置詞 (禮拜/週/周)
|
|||
|
* @returns {String} 回傳時間字串
|
|||
|
*/
|
|||
|
getWeekDay(dayPreString = "") {
|
|||
|
let day = "";
|
|||
|
let day_list = ['日', '一', '二', '三', '四', '五', '六'];
|
|||
|
|
|||
|
let today = new Date();
|
|||
|
let dayGet = today.getDay(); // or "new Date().getDay()";
|
|||
|
if (dayPreString === "") {
|
|||
|
day = "(" + day_list[dayGet] + ")";
|
|||
|
} else {
|
|||
|
day = dayPreString + day_list[dayGet];
|
|||
|
}
|
|||
|
return day;
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 取得月份天數
|
|||
|
* @param {Number} year 年份 (def null)
|
|||
|
* @param {Number} month 月份 (def null)
|
|||
|
* @returns {Number} 回傳月份天數
|
|||
|
*/
|
|||
|
getMonthDayCount(year=null,month=null) {
|
|||
|
let myYear = year;
|
|||
|
let myMonth = month;
|
|||
|
let myDate,myDayCount;
|
|||
|
|
|||
|
if (!myYear) {
|
|||
|
myYear = new Date().getFullYear();
|
|||
|
}
|
|||
|
if (!myMonth) {
|
|||
|
myMonth = new Date().getMonth();
|
|||
|
}
|
|||
|
|
|||
|
//宣告日期物件
|
|||
|
myDate = new Date(myYear, myMonth+1, 0);
|
|||
|
//取得天數
|
|||
|
myDayCount = myDate.getDate();
|
|||
|
|
|||
|
return daycount;
|
|||
|
}
|
|||
|
/*
|
|||
|
* @deprecated since version 0.1
|
|||
|
* @description 取得月份最後一天的日期字串
|
|||
|
* @param {Number} year 年份 (def null)
|
|||
|
* @param {Number} month 月份 (def null)
|
|||
|
* @returns {String} 回傳月份天數字串
|
|||
|
*/
|
|||
|
getMonthLastDateStr(year = null, month = null) {
|
|||
|
let myYear = year;
|
|||
|
let myMonth = month;
|
|||
|
let daycount;
|
|||
|
if (!myYear) {
|
|||
|
myYear = new Date().getFullYear();
|
|||
|
}
|
|||
|
if (!myMonth) {
|
|||
|
myMonth = new Date().getMonth();
|
|||
|
}
|
|||
|
daycount = this.getMonthDayCount(year, month);
|
|||
|
let myMonthLastDate = myYear + "/"
|
|||
|
+ (myMonth < 10) ? "0" : "" + myMonth + "/"
|
|||
|
+ (daycount < 10) ? "0" : "" + daycount;
|
|||
|
|
|||
|
return myMonthLastDate;
|
|||
|
}
|
|||
|
}
|
|||
|
YourTeam.Utility.DateHelper = YourTeam.Utility.DateHelper || DateHelper;
|
|||
|
|
|||
|
class File {
|
|||
|
constructor() {
|
|||
|
}
|
|||
|
readAndPreviewImages(files, containerId, imgWidth = null, imgHeight = null, frontHtml = null, backHtml = null, funDoSomeThing = null, limitMaxSize = null, limitMinSize = 0,limitFun = null) {
|
|||
|
let htmlImg = "";
|
|||
|
let container = document.getElementById(containerId);
|
|||
|
let width = imgWidth ? imgWidth + "px" : "auto";
|
|||
|
let height = imgHeight ? imgHeight + "px" : "auto";
|
|||
|
let myMath = new YourTeam.Utility.Math();
|
|||
|
let myFile = new YourTeam.Utility.File();
|
|||
|
let strExtName = "",strOrgName="";
|
|||
|
for (let i = 0; i < files.length; i++) {
|
|||
|
let file = files[i];
|
|||
|
if (limitMaxSize != null) {
|
|||
|
if (file.size / 1024 < limitMinSize || file.size / 1024 > limitMaxSize) {
|
|||
|
limitFun ? limitFun() : "";
|
|||
|
return false
|
|||
|
}
|
|||
|
}
|
|||
|
htmlImg = "";
|
|||
|
if (/\.(jpe?g|png|gif)$/i.test(file.name)) {
|
|||
|
|
|||
|
let reader = new FileReader();
|
|||
|
reader.addEventListener("load", function () {
|
|||
|
let image = new Image();
|
|||
|
let src = this.result;
|
|||
|
image.src = this.result;
|
|||
|
|
|||
|
image.onload = function () {
|
|||
|
strExtName = myFile.getFileExtension(file.name);
|
|||
|
strOrgName = (strExtName === null || strExtName === "") ? file.name : file.name.replace('.' + strExtName, '');
|
|||
|
htmlImg = frontHtml + '<img data-filename="' + file.name + '" data-orgname="' + strOrgName + '" data-savename="' + myMath.guid().replace(' ', '') + '" data-extname="' + strExtName
|
|||
|
+ '" data-size="' + file.size + '" width="' + width + '" height="' + height + '" src="' + src + '">'
|
|||
|
+ backHtml;
|
|||
|
container.insertAdjacentHTML("afterBegin", htmlImg);
|
|||
|
//$("[name=" + removeClickTagName + "]").on("click", function (e) {
|
|||
|
// e.preventDefault();
|
|||
|
// $(this).closest(removeTag).remove();
|
|||
|
//});
|
|||
|
if (i === files.length - 1 && funDoSomeThing) {
|
|||
|
funDoSomeThing();
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
reader.readAsDataURL(file);
|
|||
|
} else {
|
|||
|
if (showAlert) {
|
|||
|
showAlert("danger", "只支援圖片格式");
|
|||
|
}
|
|||
|
else {
|
|||
|
alert("只支援圖片格式");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
readAndPreviewFiles(files, containerId, imgWidth = null, imgHeight = null, frontHtml = null, backHtml = null, funDoSomeThing = null) {
|
|||
|
let htmlImg = "";
|
|||
|
let container = document.getElementById(containerId);
|
|||
|
let width = imgWidth ? imgWidth + "px" : "128px";
|
|||
|
let height = imgHeight ? imgHeight + "px" : "86px";
|
|||
|
let myMath = new YourTeam.Utility.Math();
|
|||
|
let myFile = new YourTeam.Utility.File();
|
|||
|
let strExtName = "", strOrgName = "", strSaveName = "";
|
|||
|
|
|||
|
for (let i = 0; i < files.length; i++) {
|
|||
|
let file = files[i];
|
|||
|
htmlImg = "";
|
|||
|
//alert(/\.(xls?x|doc?x|ptt?x|pdf|zip|rar|7zip|txt|odt|xml|rtf|ods|odp|pps?x)$/i.test(file.name));
|
|||
|
if (/\.(xls?x|doc?x|ptt?x|pdf|zip|rar|7zip|txt|odt|xml|rtf|ods|odp|pps?x)$/i.test(file.name)) {
|
|||
|
|
|||
|
if (file.size == 0) { //檔案大小為0時不會產生base64,需防呆
|
|||
|
showAlert("danger", "無法上傳大小為0的檔案");
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
//先新增a標籤 在套上src 可能解決多檔案上傳時無法讀取到最後上傳檔案的問題
|
|||
|
strSaveName = myMath.guid().replace(' ', '');
|
|||
|
strExtName = myFile.getFileExtension(file.name);
|
|||
|
strOrgName = (strExtName === null || strExtName === "") ? file.name : file.name.replace('.' + strExtName, '');
|
|||
|
|
|||
|
htmlImg = frontHtml + '<a id="' + strSaveName +'" data-filename="' + file.name + '" data-orgname="' + strOrgName + '" data-savename="' + strSaveName + '" data-extname="' + strExtName
|
|||
|
+ '" data-size="' + file.size + '" width="' + width + '" height="' + height +'" download="' + strOrgName + '.' + strExtName + '" target="_blank">' + strOrgName + '.' + strExtName + '</a>'
|
|||
|
+ backHtml;
|
|||
|
container.insertAdjacentHTML("afterBegin", htmlImg);
|
|||
|
let reader = new FileReader();
|
|||
|
|
|||
|
reader.addEventListener("load", function (event) {
|
|||
|
$($(container).find("a")[i]).attr("href", this.result);
|
|||
|
if (i === files.length - 1 && funDoSomeThing) {
|
|||
|
funDoSomeThing();
|
|||
|
}
|
|||
|
});
|
|||
|
reader.readAsDataURL(file);
|
|||
|
|
|||
|
} else {
|
|||
|
if (showAlert) {
|
|||
|
showAlert("danger", "只支援文件格式");
|
|||
|
} else {
|
|||
|
alert("只支援文件格式");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
async getBase64Image(path, callback) {
|
|||
|
//生成canvas
|
|||
|
var canvas = document.createElement('canvas');
|
|||
|
var ctx = canvas.getContext('2d');
|
|||
|
var img = new Image();
|
|||
|
img.src = path;
|
|||
|
img.setAttribute("crossOrigin", "Anonymous");
|
|||
|
img.onload = await function () {
|
|||
|
return new Promise((resolve) => {
|
|||
|
//默認按比例壓縮
|
|||
|
var w = this.width,
|
|||
|
h = this.height;
|
|||
|
var quality = 0.95; // 默認圖片質量為0.7
|
|||
|
|
|||
|
// 創建屬性節點
|
|||
|
canvas.setAttribute("width", w);
|
|||
|
canvas.setAttribute("height", h);
|
|||
|
|
|||
|
ctx.drawImage(this, 0, 0, w, h);
|
|||
|
// quality值越小,所繪制出的圖像越模糊
|
|||
|
var base64 = canvas.toDataURL('image/jpeg', quality);
|
|||
|
// 回調函數返回base64的值
|
|||
|
callback(base64);
|
|||
|
resolve();
|
|||
|
})
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
getFileExtension(filename) {
|
|||
|
return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2).toLowerCase();
|
|||
|
}
|
|||
|
}
|
|||
|
YourTeam.Utility.File = YourTeam.Utility.File || File;
|
|||
|
|
|||
|
|
|||
|
/* @deprecated since version 0.1
|
|||
|
* @description jQuery Ajax Cors Setings (JSONP)
|
|||
|
* @return
|
|||
|
* @author Darren Chen
|
|||
|
* @date 2018/07/24
|
|||
|
*/
|
|||
|
///// <reference path="/Scripts/YourTeam/js/yourteam.jq.ajax.cors.js" />
|
|||
|
//var script = document.createElement("script"); //Make a script DOM node
|
|||
|
//script.src = "/Scripts/YourTeam/js/yourteam.jq.ajax.cors.js"; //Set it's src to the provided URL
|
|||
|
//document.head.appendChild(script); //Add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)
|
|||
|
|
|||
|
///* @deprecated since version 0.2
|
|||
|
//* @description get the param value
|
|||
|
//* @param {String} sName url param name
|
|||
|
//* @return {String}
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2018/04/18
|
|||
|
//*/
|
|||
|
//function fnGetUrlParam(sName) {
|
|||
|
// this._sName = sName;
|
|||
|
// let sReg = new RegExp("(^|&)" + _sName + "=([^&]*)(&|$)"); //創建一個含有目標参数的正則表達式對象
|
|||
|
// let sMatchTarget = window.location.search.substr(1).match(sReg); //匹配目標参數
|
|||
|
// if (sMatchTarget !== null) {
|
|||
|
// return unescape(sMatchTarget[2]);
|
|||
|
// }
|
|||
|
// return null; //返回参數值
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.2
|
|||
|
//* @description get the param value form the page`s url
|
|||
|
//* @param {String} sName url param name
|
|||
|
//* @param {String} sPageName url page name
|
|||
|
//* @return {String}
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2018/04/18
|
|||
|
//*/
|
|||
|
//function fnGetUrlParamForPage(sName, sPageName) {
|
|||
|
// this.prototype = fnGetUrlParam;
|
|||
|
// let str = this.prototype(sName);
|
|||
|
// this._sPageName = sPageName;
|
|||
|
// if (str !== null && window.location.href.indexOf(_sPageName) !== -1) {
|
|||
|
// return str;
|
|||
|
// }
|
|||
|
// //if (location.pathname) {
|
|||
|
// // var sReg = new RegExp("(^|&)" + sName + "=([^&]*)(&|$)"); //創建一個含有目標参数的正則表達式對象
|
|||
|
// // var sMatchTarget = window.location.search.substr(1).match(sReg); //匹配目標参數
|
|||
|
// // if (sMatchTarget !== null && window.location.href.indexOf(sPageName) !== -1) {
|
|||
|
// // return unescape(sMatchTarget[2]);
|
|||
|
// // }
|
|||
|
// //}
|
|||
|
// return null; //返回参數值
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.1
|
|||
|
//* @description disabled all element in the page (close out some element)
|
|||
|
//* @param {Array} aOutElementId close out element array
|
|||
|
//* @return
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2018/04/22
|
|||
|
//*/
|
|||
|
//function fnDisabledAllElement(aOutElementId) {
|
|||
|
// let aElement = document.getElementsByTagName("input");
|
|||
|
// fnSetAllElementDisabled(aElement, aOutElementId);
|
|||
|
|
|||
|
// aElement = document.getElementsByTagName("textarea");
|
|||
|
// fnSetAllElementDisabled(aElement, aOutElementId);
|
|||
|
|
|||
|
// aElement = document.getElementsByTagName("select");
|
|||
|
// fnSetAllElementDisabled(aElement, aOutElementId);
|
|||
|
|
|||
|
// aElement = document.getElementsByTagName("button");
|
|||
|
// fnSetAllElementDisabled(aElement, aOutElementId);
|
|||
|
|
|||
|
// //aElement = document.getElementsByTagName("label");
|
|||
|
// //for (var i = 0; i < aElement.length; i++) {
|
|||
|
// // for (var ii = 0; ii < aOutElementId.length; ii++) {
|
|||
|
// // if (aElement[i] != aOutElementId[ii])
|
|||
|
// // aElement[i].setAttribute("style", "pointer-events:none;display:block;");
|
|||
|
// // }
|
|||
|
// //}
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.1
|
|||
|
//* @description set all element disabled (close out some element)
|
|||
|
//* @param {Array} aElement element array
|
|||
|
//* @param {Array} aOutElementId close out element array
|
|||
|
//* @return
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2018/04/22
|
|||
|
//*/
|
|||
|
//function fnSetAllElementDisabled(aElement, aOutElementId) {
|
|||
|
// for (let i = 0; i < aElement.length; i++) {
|
|||
|
|
|||
|
// for (let ii = 0; ii < aOutElementId.length; ii++) {
|
|||
|
// if (aElement[i] !== aOutElementId[ii])
|
|||
|
// aElement[i].disabled = true;
|
|||
|
// }
|
|||
|
|
|||
|
// }
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.1
|
|||
|
//* @description get checked checkboxs
|
|||
|
//* @param {String} checkBoxName the delete checkbox`s element name
|
|||
|
//* @return
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2018/07/24
|
|||
|
//*/
|
|||
|
//function fnGetCheckedValue(checkBoxName) {
|
|||
|
// return $('input:checkbox[name=' + checkBoxName + ']:checked').map(function () {
|
|||
|
// return $(this).val();
|
|||
|
// }).get().join(',');
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.1
|
|||
|
//* @description Create a simple cookie (The duration is preset to 2 days)
|
|||
|
//* @param {String} name name with the cookie
|
|||
|
//* @param {String} value value with the cookie
|
|||
|
//* @return
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2018/07/24
|
|||
|
//*/
|
|||
|
//function fnCreateCookie(name, value) {
|
|||
|
// let expires = new Date();
|
|||
|
// //有效時間保存 2 天 2*24*60*60*1000
|
|||
|
// expires.setTime(expires.getTime() + 172800000);
|
|||
|
// document.cookie = name + "=" + escape(value) + ";expires=" + expires.toGMTString();
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.1
|
|||
|
//* @description Get the cookie value by cookie name
|
|||
|
//* @param {String} name name with the cookie
|
|||
|
//* @return
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2018/07/24
|
|||
|
//*/
|
|||
|
//function fnGetCookie(name) {
|
|||
|
// let arg = escape(name) + "=";
|
|||
|
// let nameLen = arg.length;
|
|||
|
// let cookieLen = document.cookie.length;
|
|||
|
// let i = 0;
|
|||
|
// while (i < cookieLen) {
|
|||
|
// let j = i + nameLen;
|
|||
|
// if (document.cookie.substring(i, j) === arg) return getCookieValueByIndex(j);
|
|||
|
// i = document.cookie.indexOf(" ", i) + 1;
|
|||
|
// if (i === 0) break;
|
|||
|
// }
|
|||
|
// return null;
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.1
|
|||
|
//* @description Get the cookie value by index
|
|||
|
//* @param {Number} index name with the cookie
|
|||
|
//* @return
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2018/07/24
|
|||
|
//*/
|
|||
|
//function fnGetCookieValueByIndex(startIndex) {
|
|||
|
// let endIndex = document.cookie.indexOf(";", startIndex);
|
|||
|
// if (endIndex === -1) endIndex = document.cookie.length;
|
|||
|
// return unescape(document.cookie.substring(startIndex, endIndex));
|
|||
|
//}
|
|||
|
///*
|
|||
|
//* @deprecated since version 0.1
|
|||
|
//* @description 取得隨機值
|
|||
|
//* @param {Number} min 最小值
|
|||
|
//* @param {Number} max 最大值
|
|||
|
//* @returns {Number}
|
|||
|
//*/
|
|||
|
//function fnGetRandom(min, max) {
|
|||
|
// return Math.floor(Math.random() * max) + min;
|
|||
|
//}
|
|||
|
///*
|
|||
|
// * @deprecated since version 0.1
|
|||
|
// * @description 取得現在時間(yyyy-MM-dd)
|
|||
|
// * @param {Boolean} isTwYear it`s Taiwan year?
|
|||
|
// * @returns {String}
|
|||
|
// */
|
|||
|
//function fnGetNow(isTwYear = false) {
|
|||
|
// let d = new Date();
|
|||
|
// let year = isTwYear ? d.getFullYear() - 1911 : d.getFullYear();
|
|||
|
// let month = d.getMonth() + 1;
|
|||
|
// let day = d.getDate();
|
|||
|
|
|||
|
// let now = year + '-' +
|
|||
|
// (month < 10 ? '0' : '') + month + '-' +
|
|||
|
// (day < 10 ? '0' : '') + day;
|
|||
|
|
|||
|
// return now;
|
|||
|
//}
|
|||
|
///*
|
|||
|
// * @deprecated since version 0.1
|
|||
|
// * @description 取得日期時間(2020/02/02 PM 18:05:25)
|
|||
|
// * @param {Boolean} isTwYear it`s Taiwan year?
|
|||
|
// * @param {String} dateInterval 最小值
|
|||
|
// * @param {Boolean} isPadZero 最大值
|
|||
|
// * @param {Number} timeTagType 時間前戳標記 1:AM/PM 2:上午/下午
|
|||
|
// * @returns {String}
|
|||
|
// */
|
|||
|
//function fnShowDateTimeNow(isTwYear = false, dateInterval = '/', isPadZero = true, timeTagType = 1) {
|
|||
|
// let now = new Date();
|
|||
|
// let years = isTwYear ? now.getFullYear() - 1911 : now.getFullYear();
|
|||
|
// let months = now.getMonth();
|
|||
|
// let days = now.getDay();
|
|||
|
// let hours = now.getHours();
|
|||
|
// let minutes = now.getMinutes();
|
|||
|
// let seconds = now.getSeconds();
|
|||
|
|
|||
|
// let dateValue = years;
|
|||
|
// let timeValue = ((hours >= 12) ? "下午 " : "上午 ");
|
|||
|
// if (timeTagType === 2) timeValue = ((hours >= 12) ? "AM " : "PM ");
|
|||
|
// if (isPadZero) {
|
|||
|
// dateValue += (dateInterval + ((months < 10) ? "0" : "") + months);
|
|||
|
// dateValue += (dateInterval + ((days < 10) ? "0" : "") + days);
|
|||
|
// timeValue += ((hours > 12) ? "0" + (hours - 12) : hours);
|
|||
|
// timeValue += ((minutes < 10) ? ":0" : ":") + minutes;
|
|||
|
// timeValue += ((seconds < 10) ? ":0" : ":") + seconds;
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// dateValue += (dateInterval + months);
|
|||
|
// dateValue += (dateInterval + days);
|
|||
|
// timeValue += ((hours > 12) ? hours - 12 : hours);
|
|||
|
// timeValue += minutes;
|
|||
|
// timeValue += seconds;
|
|||
|
// }
|
|||
|
// return dateValue + " " + timeValue;
|
|||
|
//}
|
|||
|
///*
|
|||
|
// * @deprecated since version 0.1
|
|||
|
// * @description 取得日期時間(2020/02/02 18:05:25)
|
|||
|
// * @param {Boolean} isTwYear it`s Taiwan year?
|
|||
|
// * @param {String} dateInterval 日期間隔字元
|
|||
|
// * @param {Boolean} isPadZero 是否補0
|
|||
|
// * @returns {string} 回傳時間字串
|
|||
|
// */
|
|||
|
//function fnGetDateTimeNow(isTwYear = false, dateInterval = '/', isPadZero = true) {
|
|||
|
// let today = new Date();
|
|||
|
// let year = isTwYear ? today.getFullYear() - 1911 : today.getFullYear();
|
|||
|
// let currentDateTime =
|
|||
|
// year + dateInterval + ((isPadZero && today.getMonth() + 1 < 10) ? '0' : '') +
|
|||
|
// (today.getMonth() + 1) + dateInterval + ((isPadZero && today.getDate() < 10) ? '0' : '') +
|
|||
|
// today.getDate() + ' ' + ((isPadZero && today.getHours() < 10) ? '0' : '') +
|
|||
|
// today.getHours() + ':' + ((isPadZero && today.getMinutes() < 10) ? '0' : '') +
|
|||
|
// today.getMinutes();
|
|||
|
// return currentDateTime;
|
|||
|
//}
|
|||
|
///*
|
|||
|
// * @deprecated since version 0.1
|
|||
|
// * @description 取得加減的日期時間(2020/02/02 18:05:25)
|
|||
|
// * @param {Boolean} isTwYear it`s Taiwan year?
|
|||
|
// * @param {String} dateInterval 日期間隔字元
|
|||
|
// * @param {Boolean} isPadZero 是否補0
|
|||
|
// * @returns {string} 回傳時間字串
|
|||
|
// */
|
|||
|
//function fnGetDate(isTwYear = false, dateInterval = '/', addYears = 0, addMonths = 0, addDays = 0, isPadZero = true) {
|
|||
|
// let today = new Date();
|
|||
|
// let year = isTwYear ? today.getFullYear() - 1911 : today.getFullYear();
|
|||
|
// if (addYears > year || addMonths > today.getMonth() || addDays > today.getDate()) {
|
|||
|
// return false;
|
|||
|
// }
|
|||
|
// let date =
|
|||
|
// (year + addYears) + dateInterval + ((isPadZero && today.getMonth() + addMonths + 1 < 10) ? '0' : '') +
|
|||
|
// (today.getMonth() + addMonths + 1) + dateInterval + ((isPadZero && today.getDate() + addDays < 10) ? '0' : '') +
|
|||
|
// (today.getDate() + addDays);
|
|||
|
// return date;
|
|||
|
//}
|
|||
|
///*
|
|||
|
// * @deprecated since version 0.1
|
|||
|
// * @description 取得禮拜/週幾(禮拜五)
|
|||
|
// * @param {String} dayPreString 前置詞 (禮拜/週/周)
|
|||
|
// * @returns {string} 回傳時間字串
|
|||
|
// */
|
|||
|
//function fnGetDay(dayPreString = "") {
|
|||
|
// let day = "";
|
|||
|
// let day_list = ['日', '一', '二', '三', '四', '五', '六'];
|
|||
|
|
|||
|
// let today = new Date();
|
|||
|
// let dayGet = today.getDay(); // or "new Date().getDay()";
|
|||
|
// if (dayPreString === "") {
|
|||
|
// day = "(" + day_list[dayGet] + ")";
|
|||
|
// } else {
|
|||
|
// day = dayPreString + day_list[dayGet];
|
|||
|
// }
|
|||
|
// return day;
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.1
|
|||
|
//* @description Convrt Int To Float
|
|||
|
//* @param {String} number ori number
|
|||
|
//* @param {String} keepNum keep number after .
|
|||
|
//* @return {String}
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2019/12/31
|
|||
|
//*/
|
|||
|
//function fnConvrtIntToFloat(number, keepNum) {
|
|||
|
// let zeroNumber = fnPaddingRight("1", keepNum + 1, "0");
|
|||
|
// zeroNumber = parseInt(zeroNumber);
|
|||
|
// return Math.round(parseFloat(number) * zeroNumber) / zeroNumber;
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.1
|
|||
|
//* @description The string Padding Left char
|
|||
|
//* @param {String} str ori string
|
|||
|
//* @param {Number} lenght will get string`s lenght
|
|||
|
//* @param {String} add char
|
|||
|
//* @return {String}
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2019/12/31
|
|||
|
//*/
|
|||
|
//function fnPaddingLeft(str, lenght, char) {
|
|||
|
// if (str.length >= lenght)
|
|||
|
// return str;
|
|||
|
// else
|
|||
|
// return fnPaddingLeft(char + str, lenght);
|
|||
|
//}
|
|||
|
///* @deprecated since version 0.1
|
|||
|
//* @description The string Padding Right char
|
|||
|
//* @param {String} str ori string
|
|||
|
//* @param {Number} lenght will get string`s lenght
|
|||
|
//* @param {String} add char
|
|||
|
//* @return {String}
|
|||
|
//* @author Darren Chen
|
|||
|
//* @date 2019/12/31
|
|||
|
//*/
|
|||
|
//function fnPaddingRight(str, lenght, char) {
|
|||
|
// if (str.length >= lenght)
|
|||
|
// return str;
|
|||
|
// else
|
|||
|
// return fnPaddingRight(str + char, lenght);
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|