You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2682 lines
101 KiB

function ___iframeload() {
try {
if (!iframe.readyState || iframe.readyState == "complete") {
ShowArtAlert("Local iframe is now loaded.");
}
} catch (e) {
}
}
function checkDel() {
//ShowArtAlert(111);
if (confirm("確定刪除該筆資料") == true) {
ShowArtAlert("刪除成功");
}
}
$(document).ready(function () {
try {
BackTop();
} catch (e) {
}
})
/********************************************
* 函數名稱:fnGetActullyIn(element)
* 目的:金額控件不能輸入小數點
* 作者:Alina
* 時間:2013/02/26
* 參數說明:
*********************************************/
function fnGetActullyIn(element) {
var strActullyIncome = element.value;
var strActullyIn = "";
var len = 0;
if (strActullyIncome.indexOf(".") != -1) {
for (var i = 0; i <= strActullyIncome.length - 1; i++) {
if (strActullyIncome.charAt(i) != ".") {
strActullyIn += strActullyIncome.charAt(i);
}
else {
len = i;
}
}
element.value = strActullyIn;
if (document.selection) {
var sel = element.createTextRange();
sel.moveStart('character', len);
sel.collapse();
sel.select();
} else if (typeof element.selectionStart == 'number' && typeof element.selectionEnd == 'number') {
element.selectionStart = element.selectionEnd = len;
}
}
}
/********************************************
* 函數名稱:
* 目的:移動DIV
* 作者:Vivian
* 時間:2012/09/23
* 參數說明:無
*********************************************/
var rDrag = {
o: null,
init: function (o) {
o.onmousedown = this.start;
},
start: function (e) {
var CurryMouseObj = event.srcElement ? event.srcElement : event.target;
if (CurryMouseObj.tagName.toLowerCase() == "input" || CurryMouseObj.tagName.toLowerCase() == "select" || CurryMouseObj.tagName.toLowerCase() == "textarea") {
//滑鼠在以上標籤上時不可以移動
return;
}
var o;
e = rDrag.fixEvent(e);
e.preventDefault && e.preventDefault();
rDrag.o = o = this;
o.x = e.clientX - rDrag.o.offsetLeft;
o.y = e.clientY - rDrag.o.offsetTop;
document.onmousemove = rDrag.move;
document.onmouseup = rDrag.end;
},
move: function (e) {
var CurryMouseObj = event.srcElement ? event.srcElement : event.target;
e = rDrag.fixEvent(e);
var oLeft, oTop;
oLeft = e.clientX - rDrag.o.x;
oTop = e.clientY - rDrag.o.y;
if (oLeft < 0) {
oLeft = 0;
}
if (oTop < 0) {
oTop = 0;
}
//if (oLeft > ($(window).width() - $(CurryMouseObj).width())) {
// oLeft = $(window).width() - $(CurryMouseObj).width();
//}
//if (oTop > ($(window).height() - $(CurryMouseObj).height())) {
// oTop = ($(window).height() - $(CurryMouseObj).height());
//}
rDrag.o.style.left = oLeft + 'px';
rDrag.o.style.top = oTop + 'px';
},
end: function (e) {
e = rDrag.fixEvent(e);
rDrag.o = document.onmousemove = document.onmouseup = null;
//ShowArtAlert(document.getElementById("Operation"));
//document.getElementById("Operation").scrolling = "auto"; //顯示滚动条
},
fixEvent: function (e) {
if (!e) {
e = window.event;
e.target = e.srcElement;
e.layerX = e.offsetX;
e.layerY = e.offsetY;
}
return e;
}
}
/********************************************
* 函數名稱:fnDisabledThisCtl(fields)
* 目的:禁用指定ID的控件
* 作者:Ethan
* 時間:2012/12/18
* 參數說明:fields:所有控件ID字符串
* 範例:fnDisabledThisCtl('id1,id2,id3,…idn');
*********************************************/
function fnDisabledThisCtl(fields) {
if (fields != null) {
var fieldsArray = fields.split(",");
if (fieldsArray != null && fieldsArray.length > 0) {
for (var i = 0; i < fieldsArray.length; i++) {
$('#' + fieldsArray[i]).attr("disabled", "disabled");
}
}
}
}
/********************************************
* 函數名稱:fnUpdInBack()
* 目的:是否編輯按鈕通過後台
* 作者:Gary
* 時間:2014/5/30
* 參數說明:目前預設為false,直接透過JS效果,return改為true則會通過後台
*********************************************/
function fnUpdInBack() {
return false;
}
/********************************************
* 函數名稱:fnLeaveInBack()
* 目的:是否編輯按鈕通過後台
* 作者:Gary
* 時間:2014/5/30
* 參數說明:目前預設為false,直接透過JS效果,return改為true則會通過後台
*********************************************/
function fnLeaveInBack() {
return false;
}
/********************************************
* 函數名稱:fnCustomBack()
* 目的:使用JS離開時,預設前往的畫面是目前畫面的Qry畫面,如果需要自定義,則在個別的Js加上此Function,並把Return改為True,
然後Function內添加類似parent.OpenPageTab('PhoneSurveyForEmp_Qry');的語法即可。@PhoneSurveyForEmp_Qry 是要前往的頁面名稱
請參考Bwt專案的PhoneSurvey_Upd.js寫法。
* 作者:Gary
* 時間:2014/7/31
* 參數說明:目前預設為false,直接前往目前畫面的Qry畫面,如改成True,請添加前往頁面的JS語法
*********************************************/
function fnCustomBack() {
return false;
}
/********************************************
* 函數名稱:fnDisabledThisCtl(fields,NoUpd)
* 目的:禁用頁面所有控件,排除指定ID的控件
* 作者:Ethan
* 時間:2012/12/18
* 編輯人員:Gary
* 編輯時間:2014/03/25
* 參數說明:
fields:非禁用所有控件ID字符串
NoUpd:如果有值,則代表沒有UPD權限,所有Toolbar隱藏,除fields參數所包含的btnItem //Modify by Gary
* 範例:fnDisabledThisCtl('id1,id2,id3,…idn');
*********************************************/
function fnUnDisabledThisCtl(fields, upd) {
var Showbtn = fields;
//fields = ',' + fields + ',';
//modfiy by Alina 2014/4/26 由於目前其他程式還未掉用公用的Toolbar,而且除了DM以外,其他的程式的按鈕還保持都可用 Star
// fields = ',' + fields + ',__EVENTTARGET,__EVENTARGUMENT,__VIEWSTATE,__EVENTVALIDATION,';
fields = ',' + fields + ',__EVENTTARGET,__EVENTARGUMENT,__VIEWSTATE,__EVENTVALIDATION,btnSave,btnDel,btnClear,btnUpd,btnQry,btnImp,btnExp,btnLeave,btnCpy,btnPrint,btnSub,btnChk,btnTmp';
//modfiy by Alina 2014/4/26 由於目前其他程式還未掉用公用的Toolbar,而且除了DM以外,其他的程式的按鈕還保持都可用 End
//排除以上四種狀態被disabled,避免無法正確判斷是否postback導致影響程式執行順序而無法正確執行功能。
//如沒排除則會出現「有瀏覽權限但沒有修改權限」的Upd頁面點選離開按鈕時無法離開。 Add by Gary 2014/03/25
//modfiy by Alina 2014/4/26可以取得Toolbar上的所有按鈕的ID Star
// var inputTypes = new Array("input", "select", "radio", "textarea", "checkbox");
var inputTypes = new Array("select", "input", "radio", "textarea", "checkbox", "button", "submit");
//modfiy by Alina 2014/4/26可以取得Toolbar上的所有按鈕的ID End
var ArybtnVisible = new Array("btnSave", "btnDel", "btnClear", "btnUpd", "btnQry", "btnImp", "btnExp", "btnLeave", "btnCpy", "btnPrint", "btnSub", "btnChk", "btnTmp");
for (var intInputCount = 0; intInputCount < inputTypes.length; intInputCount++) {
var inputArray = $(inputTypes[intInputCount]); //循环得到某种类型的所有元素
// alert(inputTypes[intInputCount]);
inputArray.each(
function () {
var input = $(this);
var tempId = input.attr("id");
// alert(tempId);
//Modified by Gary,20140325 Start.
// 先把所有編輯功能鎖定,除了Toolbar
//mdofiy by Alina 2014/4/26 不禁用fields中的值 Star
// if (fields.indexOf(',' + tempId + ',') == -1 && ArybtnVisible.indexOf(tempId) == -1) {
// $('#' + tempId).attr("disabled", "disabled");
// }
if (fields.indexOf(',' + tempId + ',') == -1) {
//$('#' + tempId).attr("disabled", "disabled"); Modify By Gary 2014/07/29 修正如果物件沒有ID則找不到問題。
$(input).not('.CanShow').attr("disabled", "disabled"); //如果Class等於CanShow,則不隱藏。 Add By Gary 2014/10/16
}
//如果沒有編輯權限時,把所有Toolbar都隱藏,除了fields參數所包含的btnItem
if (upd != null) {
// if (fields.indexOf(',' + tempId + ',') == -1 && ArybtnVisible.indexOf(tempId) != -1) {
// $('#' + tempId).attr("class", "showoff");
// }
//mdofiy by Alina 2014/4/26 tempId的值可以取到Toobar上的按鈕的ID,所以不用再用ArybtnVisible去過濾,Star
if (Showbtn.indexOf(',' + tempId + ',') >= 0) {
$('#' + tempId).attr("class", "showoff");
}
//mdofiy by Alina 2014/4/26 tempId的值可以取到Toobar上的按鈕的ID,所以不用再用ArybtnVisible去過濾,End
}
else {
//Add by Alina 20141016 有修改權限的,畫面上不需要再顯示修改按鈕和禁用的效果 Star
fnUpdRemove(); //解禁畫面
$('#Toolbar1_Upd').attr("class", "displayNone"); //隱藏修改按鈕
//Add by Alina 20141016 有修改權限的,畫面上不需要再顯示修改按鈕和禁用的效果 End
}
//Modified by Gary,20140325 end
}
)
}
//分頁部分 Star Add by Jack 20140526 編輯畫面的分頁控件部分不禁用
// alert(111);
try {
var ele = ".pagebar";
$(ele).find(':input').each(function () {
switch (this.type) {
case 'text':
// alert(this.id + "AAAA");
$('#' + this.id).removeAttr("disabled");
break;
case 'submit':
$('#' + this.id).removeAttr("disabled");
break;
}
});
$(ele).find(':a').each(function () {
// alert(tempId+"AAAA");
switch (this.type) {
case 'button':
$('#' + this.id).removeAttr("disabled");
break;
}
});
} catch (e) {
// alert(e);
}
//分頁部分 End Add by Jack 20140526 編輯畫面的分頁控件部分不禁用
}
/********************************************
* 函數名稱:fnHiddenUpd()
* 目的:當畫面有修改權限時,需要把修改按鈕隱藏掉
* 作者:Alina
* 時間:2014/11/15
*********************************************/
function fnHiddenUpd() {
$('#Toolbar1_Upd').attr("class", "displayNone"); //隱藏修改按鈕
}
/********************************************
* 函數名稱:fnUpdRemove(fields)
* 目的:禁用頁面所有控件,排除指定ID的控件
* 作者:Gary
* 時間:2014/03/25
* 參數說明:解除disabled
* 範例:fnUpdRemove();
*********************************************/
function fnUpdRemove(fields) {
fnLoadPageSaveValueAAA();
//modfiy by Alina 2014/4/26 這個方法是啟用畫面上所有的控件,所以需要可以取得所有的ID,包括Toolbar上的所有按鈕的ID和 checkbox Star
var inputTypes = new Array("input", "select", "radio", "textarea", "checkbox", "button", "submit");
//modfiy by Alina 2014/4/26 這個方法是啟用畫面上所有的控件,所以需要可以取得所有的ID,包括Toolbar上的所有按鈕的ID和 checkbox End
for (var intInputCount = 0; intInputCount < inputTypes.length; intInputCount++) {
var inputArray = $(inputTypes[intInputCount]); //循环得到某种类型的所有元素
inputArray.each(
function () {
var input = $(this);
var tempId = input.attr("id");
var att_readonly = input.attr("readonly");
// alert(tempId);
if (fields == null) {
//Modify Start 保留ReadOnly屬性即可,不需一次保留ReadOnly跟Disabled,有Disabled會導致後台無法讀取值 Modify By Gary 2014/07/10
if (inputTypes[intInputCount] == "select" && att_readonly == "readonly") {
}
else {
//$('#' + tempId).removeAttr("disabled"); Modify By Gary 2014/07/29 修正如果物件沒有ID則找不到問題。
$(input).removeAttr("disabled");
}
//Modify End 保留ReadOnly屬性即可,不需一次保留ReadOnly跟Disabled,有Disabled會導致後台無法讀取值 Modify By Gary 2014/07/10
}
else {
if (fields.indexOf(tempId) == -1) {
//tempId不在fields裡時,才啟用
if (att_readonly != "readonly") {
$(input).removeAttr("disabled");
}
}
}
}
)
}
}
/********************************************
* 函數名稱:fnGetQueryString(name)
* 目的:獲取Url參數
* 作者:Ethan
* 時間:2012/12/18
* 參數說明:name:參數名稱
* 範例:fnGetQueryString('Action');
*********************************************/
function fnGetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
/********************************************
* 函數名稱:fnChenckGridviewRowCount()
* 目的:驗證匯出是否有資料
* 作者:Ethan
* 時間:2012/12/12
* 參數說明:strGridId:GridView的ID
* 範例:OnClientClick="return fnChenckGridviewRowCount();"
*********************************************/
function fnChenckGridviewRowCount(strGridId) {
var intGridviewRowCount = $("table[id$='" + strGridId + "']>tbody").children("tr").length;
//ShowArtAlert(intGridviewRowCount);
if (intGridviewRowCount == 1) {
ShowArtAlert("無資料匯出!");
return false;
}
return true;
}
/********************************************
* 函數名稱:Url编码
* 目的:JS UrlEncode加密
* 作者:Ethan
* 時間:2012/09/01
* 參數說明:unzipStr:傳入的參數
*********************************************/
fnUrlEncode = function (unzipStr) {
var zipstr = "";
var strSpecial = "!\"#$%&'()*+,/:;<=>?[]^`{|}~%";
var tt = "";
for (var i = 0; i < unzipStr.length; i++) {
var chr = unzipStr.charAt(i);
var c = StringToAscii(chr);
tt += chr + ":" + c + "n";
if (parseInt("0x" + c) > 0x7f) {
zipstr += encodeURI(unzipStr.substr(i, 1));
} else {
if (chr == " ")
zipstr += "+";
else if (strSpecial.indexOf(chr) != -1)
zipstr += "%" + c.toString(16);
else
zipstr += chr;
}
}
return zipstr;
}
/********************************************
* 函數名稱: Url解码
* 目的:JS UrlDecode解密
* 作者:Ethan
* 時間:2012/09/01
* 參數說明:zipStr:傳入的參數
*********************************************/
fnUrlDecode = function (zipStr) {
var uzipStr = "";
for (var i = 0; i < zipStr.length; i++) {
var chr = zipStr.charAt(i);
if (chr == "+") {
uzipStr += " ";
} else if (chr == "%") {
var asc = zipStr.substring(i + 1, i + 3);
if (parseInt("0x" + asc) > 0x7f) {
uzipStr += decodeURI("%" + asc.toString() + zipStr.substring(i + 3, i + 9).toString()); ;
i += 8;
} else {
uzipStr += AsciiToString(parseInt("0x" + asc));
i += 2;
}
} else {
uzipStr += chr;
}
}
return uzipStr;
}
StringToAscii = function (str) {
return str.charCodeAt(0).toString(16);
}
AsciiToString = function (asccode) {
return String.fromCharCode(asccode);
}
/********************************************
* 函數名稱:Date.dateAdd
* 目的:日期添加屬性
* 作者:Ethan
* 時間:2012/09/01
* 參數說明:interval:y:年;q:季度;m:月;w:星期;d:天;h:小時;n:分;s:秒;ms:毫秒;number:添加的數值;
*********************************************/
Date.prototype.dateAdd = function (interval, number) {
var d = this;
var k = { 'y': 'FullYear', 'q': 'Month', 'm': 'Month', 'w': 'Date', 'd': 'Date', 'h': 'Hours', 'n': 'Minutes', 's': 'Seconds', 'ms': 'MilliSeconds' };
var n = { 'q': 3, 'w': 7 };
eval('d.set' + k[interval] + '(d.get' + k[interval] + '()+' + ((n[interval] || 1) * number) + ')');
return d;
}
/**
* 对Date的扩展,将 Date 转化为指定格式的String
* 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符
* 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
* eg:
* (new Date()).formate("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
* (new Date()).formate("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04
* (new Date()).formate("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04
* (new Date()).formate("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04
* (new Date()).formate("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
*/
Date.prototype.formate = function (fmt) {
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
var week = {
"0": "\u65e5",
"1": "\u4e00",
"2": "\u4e8c",
"3": "\u4e09",
"4": "\u56db",
"5": "\u4e94",
"6": "\u516d"
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
if (/(E+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468") : "") + week[this.getDay() + ""]);
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
}
/********************************************
* 函數名稱:fnFrameGoUrl(strFrameName,strGoUrl)
* 目的:指定Frame跳轉到指定的Url
* 作者:Ethan
* 時間:2012/08/06
* 參數說明:strFrameName:Frame的名稱;strGoUrl:跳轉的目標Url;
*********************************************/
function fnFrameGoUrl(strFrameName, strGoUrl) {
window.parent.frames[strFrameName].location = strGoUrl;
}
/********************************************
* 函數名稱:fnShowOrHidMenu(objButton)
* 目的:顯示或者隱藏Menu區域
* 作者:Ethan
* 時間:2012/08/07
* 參數說明:objButton:觸發事件按鈕;
* 無法執行時請確認CSS有此Class
*********************************************/
function fnShowOrHidMenu(objButton) {
if (window.parent.document.getElementById("Content").cols == "200px,*") {
window.parent.document.getElementById("Content").cols = "0px,*";
objButton.className = "righticon";
}
else {
window.parent.document.getElementById("Content").cols = "200px,*";
objButton.className = "lefticon";
}
}
/********************************************
* 函數名稱:fnShowOrHidMenu(objButton)
* 目的:顯示或者隱藏Header區域
* 作者:Ethan
* 時間:2012/08/07
* 參數說明:objButton:觸發事件按鈕;
* 無法執行時請確認CSS有此Class
*********************************************/
function fnShowOrHidHeader(objButton) {
if (window.parent.document.getElementById("Header").rows == "85px,55px,*,30px") {
window.parent.document.getElementById("Header").rows = "0px,55px,*,30px";
objButton.className = "tooldown right";
}
else {
window.parent.document.getElementById("Header").rows = "85px,55px,*,30px";
objButton.className = "toolup right";
}
}
/********************************************
* 函數名稱:fnSetToolbarVisible(objOperationWindow)
* 目的:Operation頁面加載後設定Toolbar的顯示狀態,在BasePage調用。
* 作者:Ethan
* 時間:2012/08/10
* 參數說明:objOperationWindow:Operation的Window對象。
*********************************************/
function fnSetToolbarVisible(objOperationWindow) {
try {
//ShowArtAlert(objOperationWindow.document.getElementById("tbToolbar").getElementsByTagName("input").length);
if (objOperationWindow.document.getElementById("tbToolbar") != null) {
var objToolbarButtons = objOperationWindow.document.getElementById("tbToolbar").getElementsByTagName("input");
if (objOperationWindow.name == "Operation" && objToolbarButtons != null) {
//如果是操作區域
//添加Tabs
//ShowArtAlert(objOperationWindow.location);
Tabs_Add(objOperationWindow.location, window.parent.frames["Operation"].document.getElementById("lbFunctionTitle").innerText);
//ShowArtAlert(window.parent.frames["Toolbar"].document.getElementById("ulToolbar").getElementsByTagName("li").length);
var objToolbarLis = window.parent.frames["Toolbar"].document.getElementById("ulToolbar").getElementsByTagName("li");
for (var i = 0, j = objToolbarLis.length; i < j; i++) {
//ShowArtAlert(objToolbarLis.item(i).style.display);
objToolbarLis.item(i).style.display = 'none';
}
//window.parent.frames["Toolbar"].document.getElementById("liTopButton").style.display = '';
for (var i = 0, j = objToolbarButtons.length; i < j; i++) {
//ShowArtAlert(objToolbarButtons.item(i).id);
var objLi = window.parent.frames["Toolbar"].document.getElementById(objToolbarButtons.item(i).id.replace("btn", "li"));
//ShowArtAlert(objToolbarButtons[i].disabled);
if (objLi != null && (objToolbarButtons[i].disabled == undefined || objToolbarButtons[i].disabled == false)) {
window.parent.frames["Toolbar"].document.getElementById(objToolbarButtons.item(i).id.replace("btn", "li")).style.display = '';
}
}
}
}
else {
//ShowArtAlert("請重新登入!");
if (objOperationWindow.name == "Operation" && location.href.indexOf("ModuleDefault.aspx") > -1) {
//如果是操作區域,ModuleDefault.aspx,則隱藏Toolbar.
//ShowArtAlert(window.parent.frames["Toolbar"].document.getElementById("ulToolbar").getElementsByTagName("li").length);
var objToolbarLis = window.parent.frames["Toolbar"].document.getElementById("ulToolbar").getElementsByTagName("li");
for (var i = 0, j = objToolbarLis.length; i < j; i++) {
//ShowArtAlert(objToolbarLis.item(i).style.display);
objToolbarLis.item(i).style.display = 'none';
}
}
//window.parent.frames["Toolbar"].document.getElementById("liTopButton").style.display = '';
}
} catch (e) { }
}
/********************************************
* 函數名稱:ToolBar_click(Tag)
* 目的:Toolbar頁面點擊調用內容頁面方法
* 作者:Ethan
* 時間:2012/08/06
* 參數說明:Tag:事件標誌
*********************************************/
function ToolBar_click(Tag) {
try {
window.parent.frames["Operation"].document.getElementById("btn" + Tag).click();
} catch (e) { }
}
/********************************************
* 函數名稱:ToolBar_click(Tag)
* 目的:Toolbar頁面點擊調用內容頁面方法
* 作者:Ethan
* 時間:2012/08/06
* 參數說明:Tag:事件標誌
*********************************************/
function Tabs_Add(Url, Tag) {
try {
//先判斷此TAG是否存在,此TAG 為PROGRAM裡面某個欄位 TAGNAME
//如果存在 將裡面的URL 更新
//如果不存在 加上一個新的TAB
var objTabsUl = window.parent.frames["Toolbar"].document.getElementById("ulTabs");
var tabTemplate = document.createElement("li");
tabTemplate.innerHTML = "<li><a href='" + Url + "' target='Operation'>" + Tag + "</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>";
//SPAN 裡面加IFRAME
//ShowArtAlert(objTabsUl.innerHTML);
//ShowArtAlert(tabTemplate);
objTabsUl.appendChild(tabTemplate);
//ShowArtAlert(objTabsUl.innerHTML);
} catch (e) { }
}
/********************************************
* 函數名稱:fnChkAllBox(blIsChecked)
* 目的:選中或者取消選中頁面中的checkbox
* 作者:Ethan
* 時間:2012/03/14
* 參數說明:blIsChecked:設置checkbox的狀態
*********************************************/
function fnChkAllBox(blIsChecked) {
$("input[type='checkbox']").each(function () {
this.checked = blIsChecked;
});
return false;
}
/********************************************
* 函數名稱:fnChkAllBox(blIsChecked)
* 目的:選中或者取消選中頁面中的checkbox
* 作者:Ethan
* 時間:2012/03/14
* 參數說明:objSelAll:全選控件
* 使用範例:在全選Checkbox上的onclick="fnChkAllBoxByCtl(this);"
*********************************************/
function fnChkAllBoxByCtl(objSelAll) {
$("input[type='checkbox']").each(function () {
this.checked = objSelAll.checked;
});
}
/********************************************
* 函數名稱:fnChkAllBox(blIsChecked)
* 目的:選中或者取消選中頁面中的checkbox
* 作者:Ethan
* 時間:2012/03/14
* 參數說明:objSelAll:全選控件
* 使用範例:在全選Checkbox上的onclick="fnChkAllBoxByCtl(this);"
*********************************************/
function fnChkAllBoxByCtlAndGrid(objSelAll, strGridId) {
$("input[type='checkbox']").each(function () {
if (this.id.indexOf(strGridId) != -1) {
this.checked = objSelAll.checked;
}
});
}
/********************************************
* 函數名稱:fnChkAllBox(blIsChecked)
* 目的:選中或者取消選中頁面中的checkbox
* 作者:Ethan
* 時間:2012/03/14
* 參數說明:blIsChecked:設置checkbox的狀態
*********************************************/
function fnChkAllModuleBox(objChkAll, strChkType, strModuleID) {
if (objChkAll.checked) {
// alert(strChkType);
//alert(strModuleID);
$("input[type='checkbox']").each(function () {
//alert($(this).attr('moduleid'));
// Del by jack 20140529 不用判斷父層,直接判斷它的moduleid start
//if (this.id.indexOf(strChkType) > -1 && $(this).parent().attr('moduleid') == strModuleID) {
// Del by jack 20140529 不用判斷父層,直接判斷它的moduleid start
if (this.id.indexOf(strChkType) > -1 && $(this).attr('moduleid') == strModuleID) {
//alert(2);
this.checked = true;
}
});
}
else {
$("input[type='checkbox']").each(function () {
// Del by jack 20140529 不用判斷父層,直接判斷它的moduleid start
//if (this.id.indexOf(strChkType) > -1 && $(this).parents("span").attr('moduleid') == strModuleID) {
// Del by jack 20140529 不用判斷父層,直接判斷它的moduleid start
if (this.id.indexOf(strChkType) > -1 && $(this).attr('moduleid') == strModuleID) {
//alert(3);
this.checked = false;
}
});
}
return false;
}
/********************************************
* 函數名稱:fnReInitIframe()
* 目的:調整功能區的高度
* 作者:Ethan
* 時間:2012/03/15
* 參數說明:
*********************************************/
function fnShowIframeMenu(objImg) {
var tdMenu1 = top.document.getElementById("tdMenu1");
var iframeMenu = top.document.getElementById("iframeMenu");
try {
objImg.src = objImg.src.indexOf("arrow-r.gif") > -1 ? "../../App_Themes/Default/Images/arrow-l.gif" : "../../App_Themes/Default/Images/arrow-r.gif";
//ShowArtAlert(tdMenu1.style.width);
iframeMenu.style.display = iframeMenu.style.display == "none" ? "" : "none";
//ShowArtAlert(iframeMenu.style.display);
tdMenu1.style.width = tdMenu1.style.width == "290px" ? "10px" : "290px";
//ShowArtAlert(tdMenu1.style.width);
}
catch (ex) {
}
}
/********************************************
* 屬性名稱:indexOf
* 目的:給Arry添加查找Index屬性
* 作者:Ethan
* 時間:2012/03/15
* 參數說明:Arry.indexOf(val)
*********************************************/
Array.prototype.indexOf = function (val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
};
/********************************************
* 方法名稱:AddMoneyFormat(id)
* 目的:金額添加三位一撇
* 作者:John
* 時間:2014/03/18
* 參數說明:
*********************************************/
function AddMoneyFormat(objID) {
var objValue = document.getElementById(objID);
objValue.value = objValue.value.replace(/\d+?(?=(?:\d{3})+$)/g, function (s) {
return s + ',';
});
}
/********************************************
* 方法名稱:DelMoneyFormat(id)
* 目的:金額去除三位一撇
* 作者:John
* 時間:2014/04/18
* 參數說明:
*********************************************/
function DelMoneyFormat(objID) {
var objValue = document.getElementById(objID);
objValue.value = objValue.value.replace(/,/g, '');
}
/********************************************
* 方法名稱:SetMoneyFormat(obj)
* 目的:使用三位一撇在文字更變時
* 作者:Gary
* 時間:2014/06/02
* 參數說明:
*********************************************/
function SetMoneyFormat(obj) {
DelMoneyFormat(obj.id);
AddMoneyFormat(obj.id);
}
/********************************************
* 屬性名稱:remove()
* 目的:給Arry添加刪除指定值屬性
* 作者:Ethan
* 時間:2012/03/15
* 參數說明:var array = [1, 2, 3, 4, 5];array.remove(3);
*********************************************/
Array.prototype.remove = function (val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
function fnWinDialog(strUrl, strParam) {
return window.showModalDialog(strUrl, strParam, 'location:no;dialogWidth=700px;dialogHeight=550px');
}
/********************************************
* 屬性名稱:remove()
* 目的:頁面列印,只會列印<!--startprint--><!--endprint-->之間的內容。
* 作者:Ethan
* 時間:2012/05/06
*********************************************/
function fnPrint() {
var bdhtml = window.document.body.innerHTML;
var sprnstr = "<!--startprint-->";
var eprnstr = "<!--endprint-->";
var prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr) + 17);
prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));
var strprnhtml = bdhtml.substr(bdhtml.lastIndexOf(sprnstr) + 17);
strprnhtml = strprnhtml.substring(0, strprnhtml.indexOf(eprnstr));
var strCSS = " <style type=\"text/css\">body{font-family: 微軟正黑體;font-size: 15px;}</style> ";
prnhtml = strCSS + prnhtml + strprnhtml;
window.document.body.innerHTML = prnhtml;
window.focus(); ///加了这个后才有效果
window.print();
window.document.body.innerHTML = bdhtml;
return false;
}
/********************************************
* 屬性名稱:funOpenFile(Url,FileName)
* 目的:下載檔案
* 作者:Ethan
* 時間:2012/05/10
* 參數說明:Url文件下載地址,FileName:檔案原始名稱
*********************************************/
function funOpenFile(Url, FileName) {
//ShowArtAlert(Url);
var width = screen.availWidth;
var height = screen.availHeight;
var strU = funStringToBase64(Url);
var resStr = "";
for (var i = 0; i < strU.length; i++) {
resStr = resStr + (strU.substring(i, i + 1)).replace('=', '!').replace("/", "@").replace("+", "*");
}
var strUrl = "../../OpenFile.aspx?U=" + resStr + "&FileName=" + FileName;
//ShowArtAlert(strUrl);
window.open(strUrl, '', 'width=' + width + 'px,height=' + height + 'px,dependent,left=0,top=0');
}
/********************************************
* 屬性名稱:funStringToBase64(input)
* 目的:字符串Base64編碼
* 作者:Ethan
* 時間:2012/05/24
* 參數說明:input:需要轉換的字符串
*********************************************/
function funStringToBase64(input) {
var keyStr = "ABCDEFGHIJKLMNOP" +
"QRSTUVWXYZabcdef" +
"ghijklmnopqrstuv" +
"wxyz0123456789+/" +
"=";
input = escape(input);
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
}
/********************************************
* 屬性名稱:funStringToBase64(input)
* 目的:Base64解碼成字符串
* 作者:Ethan
* 時間:2012/05/24
* 參數說明:input:需要轉換的字符串
*********************************************/
function funBase64ToString(input) {
var keyStr = "ABCDEFGHIJKLMNOP" +
"QRSTUVWXYZabcdef" +
"ghijklmnopqrstuv" +
"wxyz0123456789+/" +
"=";
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
var base64test = /[^A-Za-z0-9\+\/\=]/g;
if (base64test.exec(input)) {
}
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do {
enc1 = keyStr.indexOf(input.charAt(i++));
enc2 = keyStr.indexOf(input.charAt(i++));
enc3 = keyStr.indexOf(input.charAt(i++));
enc4 = keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return unescape(output);
}
function fnSetErrorImg(obj) {
obj.src = "/App_Themes/Default/Images/errorpic.png";
}
/********************************************
* 屬性名稱:全屏覆蓋提示框
* 目的:全屏覆蓋提示框
* 作者:Ethan
* 時間:2012/07/19
* 參數說明:strShowMsg:需要提示的信息
*********************************************/
function ShowAlert(strShowMsg) {
var msgw, msgh, bordercolor;
msgw = 400; //提示窗口的寬度
msgh = 100; //提示窗口的高度
titleheight = 25 //提示窗口標題高度
bordercolor = "#336699"; //提示窗口的邊框顏色
titlecolor = "#99CCFF"; //提示窗口的邊框顏色
var sWidth, sHeight;
sWidth = document.body.offsetWidth;
sHeight = screen.height;
var bgObj = document.createElement("div");
bgObj.setAttribute('id', 'bgDiv');
bgObj.style.position = "absolute";
bgObj.style.top = "0";
bgObj.style.background = "#777";
bgObj.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=3,opacity=25,finishOpacity=75";
bgObj.style.opacity = "0.6";
bgObj.style.left = "0";
bgObj.style.width = sWidth + "px";
bgObj.style.height = sHeight + "px";
bgObj.style.zIndex = "10000";
document.body.appendChild(bgObj);
var msgObj = document.createElement("div")
msgObj.setAttribute("id", "msgDiv");
msgObj.setAttribute("align", "center");
msgObj.style.background = "white";
msgObj.style.border = "1px solid " + bordercolor;
msgObj.style.position = "absolute";
msgObj.style.left = "50%";
msgObj.style.top = "50%";
msgObj.style.font = "12px/1.6em Verdana, Geneva, Arial, Helvetica, sans-serif";
msgObj.style.marginLeft = "-225px";
msgObj.style.marginTop = -75 + document.documentElement.scrollTop + "px";
msgObj.style.width = msgw + "px";
msgObj.style.height = msgh + "px";
msgObj.style.textAlign = "center";
msgObj.style.lineHeight = "25px";
msgObj.style.zIndex = "10001";
var title = document.createElement("h4");
title.setAttribute("id", "msgTitle");
title.setAttribute("align", "right");
title.style.margin = "0";
title.style.padding = "3px";
title.style.background = bordercolor;
title.style.filter = "progid:DXImageTransform.Microsoft.Alpha(startX=20, startY=20, finishX=100, finishY=100,style=1,opacity=75,finishOpacity=100);";
title.style.opacity = "0.75";
title.style.border = "1px solid " + bordercolor;
title.style.height = "18px";
title.style.font = "12px Verdana, Geneva, Arial, Helvetica, sans-serif";
title.style.color = "white";
title.style.cursor = "pointer";
title.innerHTML = "關閉";
title.onclick = function () {
document.body.removeChild(bgObj);
document.getElementById("msgDiv").removeChild(title);
document.body.removeChild(msgObj);
}
document.body.appendChild(msgObj);
document.getElementById("msgDiv").appendChild(title);
var txt = document.createElement("p");
txt.style.margin = "1em 0"
txt.setAttribute("id", "msgTxt");
txt.innerHTML = strShowMsg;
document.getElementById("msgDiv").appendChild(txt);
}
function Transfer(obj, num) {
var _value = parseFloat(obj.value);
if (isNaN(_value)) {
return;
}
obj.value = _value.toFixed(num);
}
try {
$(function () {
$("input[type='text'][Amount='true']").bind("focus", function () {
if ($(this).val() == "0") {
$(this).val("");
}
});
$("input[type='text'][Amount='true']").bind("blur", function () {
if ($(this).val() == "") {
$(this).val("0");
}
});
setTimeout(LoadDateJs, 200);
setTimeout(fnLoadPopDiv, 200);
try {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function () {
LoadDateJs();
fnLoadPopDiv();
});
}
catch (e) {
;
}
});
}
catch (e) { ; }
function fnLoadPopDiv() {
$(".popdiv").each(function (i, val) {
rDrag.init(val);
});
$("[iscanmove='true']").each(function (i, val) {
rDrag.init(val);
});
}
function LoadDateJs() {
//$("input[isdatectl='true']").datepicker({ showOn: 'button', buttonImage: '../../App_Themes/Default/Images/calendar.gif', buttonImageOnly: true });
$("input[isdatectl='true']").each(function (i, val) {
if (($(this).attr("disabled") == false || $(this).attr("disabled") == undefined) && ($(this).attr("readonly") == false || $(this).attr("readonly") == undefined)) {
val.onmousemove();
}
});
}
function fnLoadPageSaveValueAAA() {
//alert('123');
//alert("hi");
$(".text-user input,.box-style textarea,.box-style select,.box-style checked,#hidChangeShow").each(function () {
$(this).attr('_value', $(this).val());
});
$(".text-user input").each(function () {
switch (this.type) {
case 'checkbox':
if (this.checked) {
$(this).attr('_value', $(this).val());
} else { $(this).attr('_value', null); }
//↓↓↓↓↓add by Gary 2014/07/09 排除radio清除功能不正常問題
case 'radio':
if (this.checked) {
$(this).attr('_value', 'true');
} else { $(this).attr('_value', null); }
//↑↑↑↑↑add by Gary 2014/07/09 排除radio清除功能不正常問題
}
});
$(".box-style select").each(function () {
if ($(this).attr("id").indexOf("dr") > -1) {
//下拉選單
$(this).attr('_value', $(this).val());
}
else {
//ListBox
var value = "";
var hidValue = "";
$(this).find('option').each(function () {
if ($(this).val() != "") {
value += $(this).val() + "/" + $(this).text() + "|";
hidValue += ($(this).val() + "|");
}
});
$(this).attr('_value', value);
switch (this.name) {
case 'lstRight':
if ((hidValue != "") && (hidValue != null)) {
$(this).attr('hidValue', hidValue);
//alert($(this).attr('hidValue') + 555);
}
}
}
});
//alert(777);
}
function fnTestAAA() {
//alert(9999);
fnLoadPageSaveValueAAA();
//setTimeout("fnLoadPageChangeJs", 5000);
//setTimeout("fnLoadPageSaveValueAAA", 300);
//alert(888);
}
/********************************************
* 函數名稱:fnClientAllClear(element)
* 目的:清除功能Client
* 作者:Dean
* 時間:2014/06/03
* 參數說明:主要是用在除了Qry頁面中的清除功能
* 目前會預設清除#text-user裡面的所有物件
* 若有其他的清除項目則由各Page內增加清除的項目
* 增加此函數在於避免有些用不到的PAGE忘記加時會出現錯誤
*********************************************/
function fnClientAllClear(ele) {
return false;
}
function fnGetReturn_Supplier(strSupplierId, strTELId, strSupplierNameId, strSuptypeId, strContactId) {
var returnValue = window.showModalDialog('../SYS/DrawSupplier_Pop.aspx', '委外資料', 'location:no;titlebar:no;toolbar:no;dialogWidth:800px;dialogHeight:600px');
if (returnValue != null) {
if (strSupplierId != "")
document.getElementById(strSupplierId).value = returnValue.SupplierID;
if (strTELId != "")
document.getElementById(strTELId).value = returnValue.TEL;
if (strSupplierNameId != "")
document.getElementById(strSupplierNameId).value = returnValue.SupplierName;
if (strSuptypeId != "")
document.getElementById(strSuptypeId).value = returnValue.Suptype;
if (strContactId != "")
document.getElementById(strContactId).value = returnValue.Contact;
// var objSupplierName = document.getElementById("txtSupplierName");
// var objSupplierFullName = document.getElementById("hidSupplierFullName");
// objSupplierName.value = returnValue.SupplierName;
//Page_ClientValidate("");
// if (document.getElementById("rfvCustomerName") != undefined) {
// document.getElementById("rfvCustomerName").style.display = "none";
// }
}
else {
//ShowArtAlert('無選擇資料');
}
return false;
}
function fnGetReturn_Customer(strCustomerId, strTELId, strSnoId, strCustomerNameId, strContactId, strADDId) {
var returnValue;
returnValue = window.showModalDialog('../SYS/DrawCustomer_Pop.aspx', '客戶資料', 'location:no;titlebar:no;toolbar:no;dialogWidth:800px;dialogHeight:600px');
if (returnValue != null) {
if (strCustomerId != "")
document.getElementById(strCustomerId).value = returnValue.CustomerID;
if (strTELId != "")
document.getElementById(strTELId).value = returnValue.TEL;
if (strSnoId != "")
document.getElementById(strSnoId).value = returnValue.Sno;
if (strCustomerNameId != "")
document.getElementById(strCustomerNameId).value = returnValue.CustomerName;
if (strContactId != "")
document.getElementById(strContactId).value = returnValue.Contact;
if (strADDId != "")
document.getElementById(strADDId).value = returnValue.ADD;
}
else {
//ShowArtAlert('無選擇資料');
}
return false;
}
function CloseWin() {
window.opener = null;
window.open("", "_self");
window.close();
}
/********************************************
* 函數名稱:fnLoadPageSaveValueAAA(element)
* 目的:紀錄清除前之值功能
* 作者:Jack
* 時間:2014/06/03
* 參數說明:
*********************************************/
function fnLoadPageSaveValueAAA() {
//alert('123');
//.box-style select,.box-style checked,
$(".text-user input,.text-user textarea,#hidChangeShow").each(function () {
//alert($(this).attr('value'));
$(this).attr('_value', $(this).val());
});
$(".text-user input").each(function () {
switch (this.type) {
case 'checkbox':
if (this.checked) {
$(this).attr('_value', $(this).val());
} else { $(this).attr('_value', null); }
break;
case 'password':
$(this).attr('_value', $(this).val());
break;
}
});
$(".text-user select").each(function () {
//alert($(this).attr('_value'));
if ($(this).attr("id").indexOf("dr") > -1) {
//下拉選單
//alert($(this).attr('_value'));
if (typeof ($(this).attr('_value')) == 'undefined') {
$(this).attr('_value', $(this).val());
}
else {
$(this).attr('_value', $(this).attr('_value'));
}
$(".text-user").append("<div id=\"div" + this.id + "\" class=\"displayNone\" style=\"position:absolute;top:-999px;left:-999px;\">" + $(this).html() + "</div>"); //add by Gary 2014/06/06 排除連動之dropdownlist問題
}
else {
//ListBox
var value = "";
var hidValue = "";
$(this).find('option').each(function () {
if ($(this).val() != "") {
value += $(this).val() + "/" + $(this).text() + "|";
hidValue += ($(this).val() + "|");
}
});
$(this).attr('_value', value);
switch (this.name) {
case 'lstRight':
if ((hidValue != "") && (hidValue != null)) {
$(this).attr('hidValue', hidValue);
//alert($(this).attr('hidValue') + 555);
}
}
}
});
//alert(777);
}
/********************************************
* 函數名稱:fnALLClear(element)
* 目的:清除功能
* 作者:Jack
* 時間:2014/06/03
* 參數說明:主要是用在個頁面的清除功能
* 目前預設Qry會清除#searchbar裡面的所有物件
* Upd會清除#text-user裡面的所有物件
* 若有其他的清除項目則由各Page內增加清除的項目
* 增加此函數在於避免有些用不到的PAGE忘記加時會出現錯誤
*********************************************/
function fnALLClear(ele) {
//alert(111);
if (ele == undefined || ele == "") {
ele = ".box-style";
}
$(ele).find(':input').each(function () {
//alert(this.id + ":" + this.type);
switch (this.type) {
case 'password':
$(this).val($(this).attr('_value'));
break;
case 'select-multiple':
case 'select-one':
if ($(this).attr("id").indexOf("dr") > -1) {
//下拉選單
//↓↓↓↓↓add by Gary 2014/06/06 排除連動之dropdownlist問題
var thisID = this.id;
$(this).html($("#div" + thisID).html());
//$(this).val($(this).attr('_value'));
//↑↑↑↑↑add by Gary 2014/06/06 排除連動之dropdownlist問題
//主要用在“人事資料編輯.行事曆顯示顏色”顏色還原Start
try {
fnColorChange($(this).attr("id"));
} catch (e) {
}
//主要用在“人事資料編輯.行事曆顯示顏色”顏色還原End
}
else {
//ListBox
var varid = this.id;
var strvalue = "";
var strhidSelAllValue = "";
strvalue += $(this).attr('_value');
strhidSelAllValue += $('#lstRight').attr('hidValue');
$(this).find('option').each(function () {
$(this).remove();
});
arr = strvalue.split("|");
for (i = 0; i <= arr.length; i++) {
var valueItemandText = arr[i];
if (valueItemandText != "" && valueItemandText != null) {
Array1 = valueItemandText.split("/");
$(this).append("<option value='" + Array1[0] + "'>" + Array1[1] + "</option>");
}
}
var strId = "#" + $(this).attr('id'); //找到listbox的id
strId = strId.replace("lst", "hid"); //找到隱藏控件的id
$(strId).val(strhidSelAllValue); //將串好的值賦給隱藏控件
}
break;
case 'text':
case 'file':
case 'textarea':
$(this).val($(this).attr('_value'));
try {
UE.getEditor($(this).attr('id')).setContent(($(this).attr('_value')));
} catch (e) {
}
break;
case 'checkbox':
if ($(this).attr('_value') != null) {
this.checked = true;
}
else {
this.checked = false;
}
break;
case 'radio':
this.checked = false;
$('input[name=\'' + this.name + '\']')[0].checked = true;
break;
}
});
}
try {
/********************************************
* 函數名稱:
* 目的:設定jQuery之datepicker為中文語系
* 作者:Gary
* 時間:2014/06/16
*********************************************/
$.datepicker.regional['zh-TW'] = {
dayNames: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
dayNamesMin: ["日", "一", "二", "三", "四", "五", "六"],
monthNames: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthNamesShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
prevText: "上月",
nextText: "次月",
weekHeader: "週",
dateFormat: "yy-mm-dd"
};
//將預設語系設定為中文
$.datepicker.setDefaults($.datepicker.regional["zh-TW"]);
} catch (e) {
}
/********************************************
* 函數名稱:getPageUrl()
* 目的:紀錄清除前之值功能
* 作者:Jack
* 時間:2014/07/24
* 參數說明:
*********************************************/
var aryAllPageValue = new Array(); //定義數組arrID
var aryCurrentPageValue = new Array();
function getPageUrl(obj) {
//if (obj == "Load") {
// j++;
//}
var herf = document.location.href;
var search = document.location.search;
var strHerf = herf.replace(search, '').split("/");
var Url = strHerf[strHerf.length - 1].replace('.aspx', '');
//alert(Url);
return Url;
}
/********************************************
* 函數名稱:fnLoadPageSaveArrayValue(element)
* 目的:紀錄清除前之值功能
* 作者:Jack
* 時間:2014/07/24
* 參數說明:主要是用在個頁面的清除功能
× ele這個參數是抱在最外層的div的樣式
* 目前預設Qry會清除#searchbar裡面的所有物件
* Upd會清除#text-user裡面的所有物件
* 若有其他的清除項目則由各Page內增加清除的項目
* 增加此函數在於避免有些用不到的PAGE忘記加時會出現錯誤
*********************************************/
function fnLoadPageSaveArrayValue(ele) {
var strCurrentPageUrl = getPageUrl();
if (ele == undefined || ele == "") {//判斷傳入的樣式是否不存在或者等於空的情況
ele = ".box-style"; //該參數是包在最外層的div的樣式,如果不在一個專案中只要調整該樣式即可實現效果
}
//1.處理input類型
$(ele).find(':input').each(function () {
var ArrayName = new Object(); //實例化對象
switch (this.type) {
case 'text':
ArrayName.ID = $(this).attr("id");
if (strCurrentPageUrl.indexOf("Qry") > -1) {
ArrayName.Value = "";
} else {
ArrayName.Value = $(this).val();
}
ArrayName.Type = "text";
ArrayName.Checked = null;
ArrayName.text = null;
aryCurrentPageValue.push(ArrayName);
case 'password':
ArrayName.ID = $(this).attr("id");
if (strCurrentPageUrl.indexOf("Qry") > -1) {
ArrayName.Value = "";
} else {
ArrayName.Value = $(this).val();
}
ArrayName.Type = "password";
ArrayName.Checked = null;
ArrayName.text = null;
aryCurrentPageValue.push(ArrayName);
case 'hidden':
ArrayName.ID = $(this).attr("id");
if (strCurrentPageUrl.indexOf("Qry") > -1) {
ArrayName.Value = "";
} else {
ArrayName.Value = $(this).val();
}
ArrayName.Type = "hidden";
ArrayName.Checked = null;
ArrayName.text = null;
aryCurrentPageValue.push(ArrayName);
case 'checkbox':
if (this.checked) {
ArrayName.ID = $(this).attr("id");
if (strCurrentPageUrl.indexOf("Qry") > -1) {
ArrayName.Value = "";
} else {
ArrayName.Value = $(this).val();
}
ArrayName.Type = "checkbox";
ArrayName.Checked = true;
ArrayName.text = null;
aryCurrentPageValue.push(ArrayName);
} else {
ArrayName.ID = $(this).attr("id");
if (strCurrentPageUrl.indexOf("Qry") > -1) {
ArrayName.Value = "";
} else {
ArrayName.Value = $(this).val();
}
ArrayName.Type = "checkbox";
ArrayName.Checked = false;
ArrayName.text = null;
aryCurrentPageValue.push(ArrayName);
}
case 'radio':
if (this.checked) {
ArrayName.ID = $(this).attr("id");
//if (strCurrentPageUrl.indexOf("Qry") > -1) { //Remove By Gary 2014/10/03 這裡會導致選取的RadioButton 值遺失
//ArrayName.Value = "";
//} else {
ArrayName.Value = $(this).val();
//}
ArrayName.Type = "radio";
ArrayName.Checked = true;
ArrayName.text = null;
aryCurrentPageValue.push(ArrayName);
} else {
ArrayName.ID = $(this).attr("id");
//if (strCurrentPageUrl.indexOf("Qry") > -1) { //Remove By Gary 2014/10/03 這裡會導致選取的RadioButton 值遺失
// ArrayName.Value = "";
//} else {
ArrayName.Value = $(this).val();
//}
ArrayName.Type = "radio";
ArrayName.Checked = false;
ArrayName.text = null;
aryCurrentPageValue.push(ArrayName);
}
}
});
//2.處理textarea類型
$(ele).find("textarea").each(function () {
var ArrayName = new Object(); //實例化對象
ArrayName.ID = $(this).attr("id");
if (strCurrentPageUrl.indexOf("Qry") > -1) {
ArrayName.Value = "";
} else {
ArrayName.Value = $(this).val();
}
ArrayName.Type = "textarea";
ArrayName.Checked = null;
ArrayName.text = null;
aryCurrentPageValue.push(ArrayName);
});
//3.1處理select類型
$(ele).find("select").each(function () {
var ArrayName = new Object(); //實例化對象
var strSelectID = $(this).attr("id");
if ($(this).attr("id").indexOf("dr") > -1) {
//下拉選單
ArrayName.ID = $(this).attr("id");
if (strCurrentPageUrl.indexOf("Qry") > -1) {
ArrayName.Value = "";
} else {
ArrayName.Value = $(this).val();
}
ArrayName.Type = "select";
ArrayName.Checked = null;
ArrayName.text = null;
aryCurrentPageValue.push(ArrayName);
$(".box-style").append("<div id=\"div" + this.id + "\" class=\"displayNone\">" + $(this).html() + "</div>"); //add by Gary 2014/06/06 排除連動之dropdownlist問題
}
else {
//3.2處理listBox類型
$(this).find('option').each(function () {
var ArrayName = new Object(); //實例化對象
ArrayName.ID = strSelectID;
if (strCurrentPageUrl.indexOf("Qry") > -1) {
ArrayName.Value = "";
} else {
ArrayName.Value = $(this).val();
}
ArrayName.Type = "option";
ArrayName.Checked = null;
ArrayName.text = $(this).text();
aryCurrentPageValue.push(ArrayName);
});
}
if ($(this).attr("id").indexOf("lst") > -1) {
//ListBox
ArrayName.ID = $(this).attr("id");
if (strCurrentPageUrl.indexOf("Qry") > -1) {
ArrayName.Value = "";
} else {
ArrayName.Value = $(this).val();
}
ArrayName.Type = "select";
ArrayName.Checked = null;
ArrayName.text = "";
aryCurrentPageValue.push(ArrayName);
}
});
aryAllPageValue[strCurrentPageUrl] = aryCurrentPageValue;
}
/********************************************
* 函數名稱:fnAllPageClear()
* 目的:紀錄清除前之值功能
* 作者:Jack
* 時間:2014/07/24
* 參數說明:主要是用在個頁面的清除功能
* 目前預設Qry會清除#searchbar裡面的所有物件
* Upd會清除#text-user裡面的所有物件
* 若有其他的清除項目則由各Page內增加清除的項目
* 增加此函數在於避免有些用不到的PAGE忘記加時會出現錯誤
*********************************************/
function fnAllPageClear() {
var ClearPageName = getPageUrl();
var arr = new Array();
var obj = new Object();
//alert(aryAllPageValue[ClearPageName].length + "....");
// for (var item in aryAllPageValue) {
// //alert(ArrayPageName[ClearPageName]);
// //alert(ClearPageName);
// arr = ArrayPageName[ClearPageName];
// break;
// }
try {
$(".Date").datepicker("option", "maxDate", ""); //清除Datepicker的MaxDate Add By Gary 2014/11/27
$(".Date").datepicker("option", "minDate", ""); //清除Datepicker的MinDate Add By Gary 2014/11/27
for (var i = 0; i < aryAllPageValue[ClearPageName].length; i++) {
obj = aryAllPageValue[ClearPageName][i];
if (obj.Checked != null && obj.Checked == true) {
$("#" + obj.ID).attr("checked", "checked");
//$("#" + obj.ID).attr("checked", "true");
$("#" + obj.ID).checked = true;
$("#" + obj.ID).prop('checked', true); //Add By Gary 2014/10/03
} else if (obj.Checked != null && obj.Checked == false) {
$("#" + obj.ID).removeAttr("checked");
$("#" + obj.ID).checked = false;
//$("#" + obj.ID).attr("checked", "false");
}
if (obj.Type == "option") {
$("#" + obj.ID).find('option').each(function () {
$(this).remove();
});
} else {
$("#" + obj.ID).val(obj.Value);
}
}
//後面這個for循環是對LIstBox特殊處理
var strOptionID = "";
for (var i = 0; i < aryAllPageValue[ClearPageName].length; i++) {
obj = aryAllPageValue[ClearPageName][i];
if (obj.Type == "option") {
strOptionID += obj.ID + ";";
$("#" + obj.ID).append("<option value='" + obj.Value + "'>" + obj.text + "</option>");
}
}
//解決新增進入畫面時LIstBox的問題
for (var i = 0; i < aryAllPageValue[ClearPageName].length; i++) {
obj = aryAllPageValue[ClearPageName][i];
if (obj.Type == "select") {
if (strOptionID.indexOf(obj.ID) < 0 && obj.ID.indexOf("dr") < 0) {
$("#" + obj.ID).find('option').each(function () {
$(this).remove();
});
}
}
}
} catch (e) {
}
}
/********************************************
* 函數名稱:fnALLClear(ele)
* 目的:百威架構瀏覽頁面清除
* 作者:Ted
* 時間:2014/07/31
* 參數說明:百威結構為.text-user因此要清除就要加此fn 目前更改BasePage
* 在SetButtonRight()的清除事件JS後加上fnALLClear('.text-user');就能正常清除搜尋區塊
*********************************************/
function fnALLClear(ele) {
if (ele == undefined || ele == "") {
ele = ".tr2";
}
$(ele).find(':input').each(function () {
//alert(this.id + ":" + this.type);
switch (this.type) {
case 'password':
case 'select-multiple':
case 'select-one':
if ($(this).attr("id").indexOf("dr") > -1) {
//下拉選單
//↓↓↓↓↓add by Gary 2014/06/06 排除連動之dropdownlist問題
var thisID = this.id;
$(this).html($("#div" + thisID).html());
//$(this).val($(this).attr('_value'));
//↑↑↑↑↑add by Gary 2014/06/06 排除連動之dropdownlist問題
//主要用在“人事資料編輯.行事曆顯示顏色”顏色還原Start
try {
fnColorChange($(this).attr("id"));
} catch (e) {
}
//主要用在“人事資料編輯.行事曆顯示顏色”顏色還原End
}
else {
//ListBox
var varid = this.id;
var strvalue = "";
var strhidSelAllValue = "";
strvalue += $(this).attr('_value');
strhidSelAllValue += $('#lstRight').attr('hidValue');
$(this).find('option').each(function () {
$(this).remove();
});
arr = strvalue.split("|");
for (i = 0; i <= arr.length; i++) {
var valueItemandText = arr[i];
if (valueItemandText != "" && valueItemandText != null) {
Array1 = valueItemandText.split("/");
$(this).append("<option value='" + Array1[0] + "'>" + Array1[1] + "</option>");
}
}
var strId = "#" + $(this).attr('id'); //找到listbox的id
strId = strId.replace("lst", "hid"); //找到隱藏控件的id
$(strId).val(strhidSelAllValue); //將串好的值賦給隱藏控件
}
break;
case 'text':
case 'file':
case 'textarea':
$(this).val($(this).attr('_value'));
break;
case 'checkbox':
if ($(this).attr('_value') != null) {
this.checked = true;
}
else {
this.checked = false;
}
break;
case 'radio':
//↓↓↓↓↓add by Gary 2014/07/09 排除radio清除功能不正常問題
var blChecked = $(this).attr("_value");
if (blChecked) {
this.checked = blChecked;
}
else {
$(this).removeAttr("checked");
}
//↑↑↑↑↑add by Gary 2014/07/09 排除radio清除功能不正常問題
// this.checked = false;
// $('input[name=\'' + this.name + '\']')[0].checked = true;
break;
}
});
}
///********************************************
//* 屬性名稱:等待遮罩視窗
//* 目的:顯示Waiting文字
//* 作者:Ted
//* 時間:2014/07/31
//* 參數說明:目前用於Toolbar
//* 以及GridView 限定 .table-A .table-title th > a
//*********************************************/
//function showwaiting() {
// //工具列單擊時的等待畫面
// $('*').delegate('[showwaiting]', 'click', function () {
// $.blockUI({
// message: $('<div id="Divshowwaiting"><img src="../../App_Themes/Default/images/ajax-loader.gif">Waiting...</div>'),
// css: {
// 'font-size': '36px',
// border: '0px',
// 'border-radius': '10px',
// 'background-color': '#FFF',
// padding: '15px 15px',
// opacity: .5,
// color: 'orange',
// cursor: 'wait'
// }
// });
// window.setTimeout($.unblockUI, 60000);
// });
// //表格雙擊進入編輯畫面時的等待畫面
// $('tr[class*="tbShowWaiting"]').dblclick(function () {
// $.blockUI({
// message: $('<div id="Divshowwaiting"><img src="../../App_Themes/Default/images/ajax-loader.gif">Waiting...</div>'),
// css: {
// 'font-size': '36px',
// border: '0px',
// 'border-radius': '10px',
// 'background-color': '#FFF',
// padding: '15px 15px',
// opacity: .5,
// color: 'orange',
// cursor: 'wait'
// }
// });
// window.setTimeout($.unblockUI, 60000);
// });
// $('.table-A .table-title th > a').each(function () {
// $(this).click(function () {
// $.blockUI({
// message: $('<div id="Divshowwaiting"><img src="../../App_Themes/Default/images/ajax-loader.gif">Waiting...</div>'),
// css: {
// 'font-size': '36px',
// border: '0px',
// 'border-radius': '10px',
// 'background-color': '#FFF',
// padding: '15px 15px',
// opacity: .5,
// color: 'orange',
// cursor: 'wait'
// }
// });
// });
// });
//}
function ShowLoading() {
$.blockUI({
message: $('<div id="Divshowwaiting"><img src="../../App_Themes/Default/images/ajax-loader.gif">Waiting...</div>'),
css: {
'font-size': '36px',
border: '0px',
'border-radius': '10px',
'background-color': '#FFF',
padding: '15px 15px',
opacity: .5,
color: 'orange',
cursor: 'wait'
}
});
window.setTimeout($.unblockUI, 60000);
}
function pageLoad() {
//modify by Dean 2014/11/03 配合 COMMON.JS 的固定顯示Showwaiting() 事件
//需要固定在每一頁
//setTimeout(function () { showwaiting(); }, 500); //有載入本頁的預設會執行此段程式,作用在於啟動Toolbar的showwaiting功能
$(document).ready(function () {
setTimeout($.unblockUI, 30); setTimeout(showwaiting, 500);
});
}
/********************************************
* 屬性名稱:攔截鍵盤按鍵
* 目的:攔截鍵盤按鍵
* 作者:Ted
* 時間:2014/07/31
* 參數說明:目前用於Toolbar
*********************************************/
/*攔截查詢頁面Enter事件,設定為執行查詢 Add By Ted 2014/07/31*/
$(document).keypress(function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
var elid = document.activeElement; //抓取當前foucs的Element
switch (code) {
case 13:
//alert($('#Toolbar1_Qry').val
//當沒有查詢按紐時,Enter按鍵沒功能
if (elid.tagName.toLowerCase() != 'textarea') {
$('#Toolbar1_Qry').click();
return false;
}
break;
}
});
$(document).keydown(function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
//var elid = $(document.activeElement).attr('type'); //抓取當前foucs的Element
var elid = document.activeElement; //抓取當前foucs的Element
//alert(elid.tagName.toLowerCase());
if ((code == 8) && elid.type != 'text' && elid.type != 'search' && elid.type != 'password' && elid.tagName.toLowerCase() != 'textarea') { /*攔截Backspace事件*/
return false;
}
else if (code == 116) { /*攔截F5事件*/
return false;
}
});
/********************************************
* 屬性名稱:CheckMobile(str)
* 目的:驗證台灣地區手機格式
* 作者:Gary
* 時間:2014/11/14
* 參數說明:
*********************************************/
function CheckMobile(str) {
if (str.search(/^(09)\d{8}$/) != -1) {
return true;
}
else {
return false;
}
}
/********************************************
* 函數名稱:encodeURL(url)
* 目的:對網址、路徑進行編碼
* 作者:Ted
* 時間:2014/11/28
* 參數說明:
* url:要編碼的url path
*********************************************/
function encodeURL(encodeurl) {
return encodeURIComponent(encodeurl).replace(/\'/g, "%27").replace(/\!/g, "%21").replace(/\(/g, "%28").replace(/\)/g, "%29");
}
/********************************************
* 函數名稱:decodeURL(url)
* 目的:對網址、路徑進行編碼
* 作者:Ted
* 時間:2014/11/28
* 參數說明:
* url:要解碼的url path
*********************************************/
function decodeURL(decodeurl) {
return decodeURIComponent(decodeurl);
}
/********************************************
* 函數名稱:getUrlParam(name)
* 目的:取得Url參數
* 作者:Gary
* 時間:2014/06/03
* 參數說明:name:取得部分的名稱 例如輸入"Action",就能取到"Add"之類參數
*********************************************/
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //構造一個含有目標參數的正則表達式對象
var r = window.location.search.substr(1).match(reg); //匹配目標參數
if (r != null) return unescape(r[2]); return null; //返回參數值
}
/********************************************
* 函數名稱:clearSelection()
* 目的:取消反白
* 作者:Gary
* 時間:2015/01/23
* 參數說明:
*********************************************/
function clearSelection() {
if (document.selection && document.selection.empty) {
document.selection.empty();
} else if (window.getSelection) {
var sel = window.getSelection();
sel.removeAllRanges();
}
}
/********************************************
* 函數名稱:NumText()
* 目的:限制只能打數字
* 作者:Gary
* 時間:2014/06/03
* 用法:<input id="txtText" type="text" onkeypress="return NumText()" />
*********************************************/
function NumText() {
var chk = window.event.keyCode
if ((chk >= 48 && chk <= 57) || chk == 44 || chk == 45) {
return true;
}
return false;
}
var guid = (function () {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return function () {
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
};
})();
/********************************************
* 函數名稱:.indexOf()
* 目的:IE9以前沒有indexOf()的效果,所以在此定義,避免使用者版本不同導致錯誤。
* 作者:Gary
* 時間:2015/02/05
* 參數說明:
*********************************************/
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (elt /*, from*/) {
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++) {
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
/********************************************
* 函數名稱:.JSON()
* 目的:IE8以前沒有JSON()的效果,所以在此定義,避免使用者版本不同導致錯誤。
* 作者:Gary
* 時間:2015/02/05
* 參數說明:
*********************************************/
if (typeof (JSON) == 'undefined') { //沒有 JSON 時才讓 browser 下載 json2.js
$('head').append($("<script type='text/javascript' src='/Js/json2.js'>"));
}
/********************************************
* 函數名稱:.yyyymmdd()
* 目的:日期取回年月日
* 作者:Gary
* 時間:2015/02/05
* 參數說明:
*********************************************/
Date.prototype.yyyymmdd = function () {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
var dd = this.getDate().toString();
return yyyy + '/' + GetFormatDate(mm) + '/' + GetFormatDate(dd); // padding
};
/********************************************
* 函數名稱: GetFormatDate(InputValue)
* 目的:格式化將月份和日期的數字補滿兩位數(如果是一位數的話)
* 作者:Gary
* 時間:2015/02/04
* 參數說明:
*********************************************/
function GetFormatDate(InputValue) {
if (InputValue < 10) {
InputValue = '0' + InputValue;
}
return InputValue;
}
/********************************************
* 函數名稱:getObjects(obj, key, val)
* 目的:Json取回條件內資料
* 作者:Gary
* 時間:2015/02/03
* 參數說明:
*********************************************/
function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else if (i == key && obj[key] == val) {
objects.push(obj);
}
}
return objects;
}
/********************************************
* 函數名稱:daydiff(first, second)
* 目的:兩日期相減,回傳相差天數
* 作者:Gary
* 時間:2015/02/04
* 參數說明:
*********************************************/
function daydiff(first, second) {
return (second - first) / (1000 * 60 * 60 * 24);
}
/********************************************
* 方法名稱:MoneyFormatByString(strMoney)
* 目的:金額添加三位一撇
* 作者:Gary
* 時間:2014/12/25
* 參數說明:
*********************************************/
function MoneyFormatByString(strMoney) {
if (strMoney) {
strMoney = strMoney.toString();
strMoney = strMoney.replace(/,/g, '');
strMoney = strMoney.replace(/\d+?(?=(?:\d{3})+$)/g, function (s) {
return s + ',';
});
}
return strMoney;
}
/********************************************
* 名稱:BackTop()
* 目的:回最上層
* 作者:John
* 時間:2015/03/31
* 參數說明:
*********************************************/
function BackTop() {
if ($('#DivTop').html() === undefined) {
var ThisFormID = $('form').attr('id');
var htmldiv = "<div style='position: fixed; bottom: 5%; right: 1%; z-index: 999;' runat='server' id='DivTop'><a href='#" + ThisFormID + "' style='background-image: url(../../App_Themes/Default/images/top.png); background-repeat: no-repeat; background-position: -243px -45px; padding: 20px 27px 15px 26px;'></a> </div>";
$('#' + ThisFormID).append(htmldiv);
$('#DivTop').attr('class', 'displayNone');
$(window).bind('scroll', function () {
//為頁面添加頁面滾動監聽事件
var wst = $(window).scrollTop() //滾動條距離頂部的值
wst < 20 ? $('#DivTop').attr('class', 'displayNone') : $('#DivTop').removeAttr('class');
//windowstop = $('table[id^=gv]').offset().top - wst;
//$('#btnLeave').val() == '顯示' ? windowstop = $('table[id^=gv]').offset().top - wst + 35 + $("#searchbar").height() : windowstop = $('table[id^=gv]').offset().top - wst;
});
//添加置頂控件
// $("a[href*=#]").click(function () {
// $("html, body").animate({
// scrollTop: $($(this).attr("href")).offset().top + "px"
// }, {
// duration: 500,
// easing: "swing"
// });
// return false;
// });
try {
$("a[href*=#]").click(function () {
var strscrollTop = '';
($($(this).attr("href")).offset() != undefined && $($(this).attr("href")).offset() != null) ? strscrollTop = $($(this).attr("href")).offset().top + "px" : strscrollTop = '0px';
if (strscrollTop != "0px") {
$("html, body").animate({
scrollTop: strscrollTop
}, {
duration: 500,
easing: "swing"
});
return false;
}
});
} catch (e) {
}
}
}
/********************************************
* 名稱:replaceAll()
* 目的:取代所有
* 作者:Gary
* 時間:2015/05/21
* 參數說明:
*********************************************/
String.prototype.replaceAll = stringReplaceAll;
function stringReplaceAll(AFindText, ARepText) {
var raRegExp = new RegExp(AFindText.replace(/([\(\)\[\]\{\}\^\$\+\-\*\?\.\"\'\|\/\\])/g, "\\$1"), "ig");
return this.replace(raRegExp, ARepText);
}
/********************************************
* 名稱:BirthDayToAge(BirthDay)
* 目的:生日轉年齡
* 作者:Gary
* 時間:2015/05/21
* 參數說明:
*********************************************/
function BirthDayToAge(BirthDay) {
var cha = ((Date.parse(new Date().yyyymmdd()) - Date.parse(BirthDay)) / 86400000 / 365);
var age = Math.abs(cha) + 1 + "";
return age.split(".")[0];
}
; (function ($) {
var Method = {
GetList: 'GetList',
SetSession: 'SetSession',
GetSession: 'GetSession'
};
var JSON_Sort = {
sort: 'asc'
};
var GridViewSettingOption = {
AjaxUrl: '../../../WS/OTKGridView.asmx/',
method: 'GetGridViewSetting',
table_name: '',
limit_count: ''
};
var Json = {
List: {},
Session: {}
};
$.fn.OTKGridViewSetting = function (para) {
var GridView = this;
var setting = $.extend('', para);
var PageTag = $(setting.PageTag).val();
var PageName = $(setting.PageName).val();
/********************************************
* 函數名稱:CallPageMethod(UrlAspx, MethodName, JsonData)
* 目的:使用Ajax呼叫後台Method
* 作者:Gary
* 時間:2015/02/05
*********************************************/
var CallPageMethod = function (UrlAspx, MethodName, Data, callback) {
$.ajax({
type: 'Post',
url: UrlAspx + MethodName,
data: JSON.stringify(Data), //傳送區域參數
contentType: 'application/json; charset=utf-8',
dataType: 'json',
beforeSend: function () {
ShowLoading();
},
success: function (msg) {
if (typeof callback !== 'function') return;
callback(msg);
}, error: function (res, status) {
if (status === "error") {
var errorMessage = $.parseJSON(res.responseText);
console.log(errorMessage.Message);
}
}, complete: function () {
window.setTimeout($.unblockUI, 0);
}
});
}
/********************************************
* 函數名稱: SetListToTable(Json)
* 目的:Json資料建入Table
* 作者:Gary
* 時間:2015/05/20
* 參數說明:
*********************************************/
var SetListToTable = function (ObjJson, callback) {
callback = callback || false;
var a_sort = $('a[selected="selected"]');
var sort_type = a_sort.attr('sorttype') || JSON_Sort.sort || '';
var sorting = a_sort.attr('sorting') || 'asc';
var ShowColumn = '';
var ColumnWidth = '';
var ColumnAlign = '';
var str_field = $('#str_field').html();
var str_fieldName = $('#str_fieldName').html();
var str_column = $('#str_column').html();
var str_columnAlign = $('#str_align').html();
$.each(str_field.split('|'), function (index, value) {
ShowColumn += '\"' + str_field.split('|')[index] + '\":\"' + str_fieldName.split('|')[index] + '\",';
ColumnWidth += '\"' + str_field.split('|')[index] + '\":\"' + str_column.split('|')[index] + '\",';
ColumnAlign += '\"' + str_field.split('|')[index] + '\":\"' + str_columnAlign.split('|')[index] + '\",';
});
ShowColumn = $.parseJSON('{' + ShowColumn.slice(0, -1) + '}');
ColumnWidth = $.parseJSON('{' + ColumnWidth.slice(0, -1) + '}');
ColumnAlign = $.parseJSON('{' + ColumnAlign.slice(0, -1) + '}');
GridViewSettingOption.ColumnAlign = ColumnAlign;
//var ShowColumn = { '0': '編號', '1': '身份證字號', 'CNM': '姓名', 'SEX': '性別', 'BRTH_DT': '生日', 'Phone': '聯絡電話', 'STUS_CD': '往來' }
//var ColumnWidth = { 'PAX_CD': '10%', 'ID_NO': '15%', 'CNM': '15%', 'SEX': '5%', 'BRTH_DT': '15%', 'BRTH_DT': '10%', 'Phone': '20%', 'STUS_CD': '10%' };
$(GridView).OTKGridView({
dataset: {
source: ObjJson
, sorts: $.parseJSON('{\"' + sort_type + '\":\"' + sorting + '\"}')
, ShowColumn: ShowColumn
, key: [sort_type]
},
BaseSet: {
HeaderClass: 'table-title'
},
writers: {
_CreateInfo: setting.CreateInfo ? CustomerCreateInfo : {}
},
table: {
ColumnWidth: ColumnWidth,
ColumnAlign: ColumnAlign
}
}, callback);
//Complete(); //綁定自定義事件
//有Session值還原頁面設定
if (Json.Session) {
var Sortting = (Json.Session['Sortting'] == 'desc') ? 'asc' : 'desc';
var Page = (Json.Session['Page']) ? Json.Session['Page'] : 1;
$('#txtSearch').val(Json.Session['Search']).next().click();
var $a = $('a[sorttype=' + Json.Session['Sorttype'] + ']');
$a.attr('selected', 'selected');
$a.attr('sorting', Sortting).click();
$('#a' + Page).click();
}
};
/********************************************
* 函數名稱: CustomerCreateInfo(JObj)
* 目的:自定義表格事件
* 作者:Ted
* 時間:2015/06/08
* 參數說明:
* JObj:物件相關資料
*********************************************/
var CustomerCreateInfo = function (JObj) {
var objHeader = $(GridView).find('tr:first');
var $Tr = $('<tr />');
objHeader.children().each(function (index, value) {
var strDataField = $(this).attr('DataField');
var $Td;
var align = GridViewSettingOption.ColumnAlign[strDataField] || '';
$Td = $('<td />', { 'text': JObj[strDataField], 'align': (align || 'center') });
$Tr.append($Td);
});
$(GridView).append($Tr);
$.each(setting.DataRowBound, function (index, table_setting) {
if (table_setting.element && table_setting.event) {
if ($Tr[0].nodeName.toLowerCase() === table_setting.element.toLowerCase()) {
$Tr.bind(table_setting.event, function () {
if (table_setting.session) {
SetOrGetSession('SetSession', {
strKey: PageTag + '_Qry_Param',
strJObj: JSON.stringify(GetState())
}, {});
}
table_setting.dothing(this, JObj);
});
}
}
else {
$Tr.find(table_setting.element).bind(table_setting.event, function () {
if (table_setting.session) {
SetOrGetSession('SetSession', {
strKey: PageTag + '_Qry_Param',
strJObj: JSON.stringify(GetState())
}, {});
}
table_setting.dothing(this, JObj);
});
}
});
}
/********************************************
* 函數名稱: GetSessionDone(msg)
* 目的:當GetSession完成後,做的事情。
* 作者:Gary
* 時間:2015/05/20
* 參數說明:
*********************************************/
var GetGridViewSettingDone = function (msg) {
var JSON_Setting = JSON.parse(msg.d)[0];
if (JSON_Setting) {
if (JSON_Setting.GridSetting && (JSON_Setting.GridSetting || '|').split('|').length >= 5) $.extend(JSON_Sort, { sort: JSON_Setting.GridSetting.split('|')[4] });
var grid = $(GridView).find('.OTKGridViewSetting');
if (grid.length < 1) {
//頁面中沒找到先產生
grid = $('<div />').addClass('OTKGridViewSetting').css('display', 'none');
}
var str_setting = $('<div />', { 'id': 'str_setting' }).html(JSON_Setting.GridSetting); //表格基本設定
var str_field = $('<div />', { 'id': 'str_field' }).html(JSON_Setting.DataField); //欄位名稱
var str_fieldName = $('<div />', { 'id': 'str_fieldName' }).html(JSON_Setting.FieldName); //欄位中文名稱
var str_queryType = $('<div />', { 'id': 'str_queryType' }).html(JSON_Setting.QueryType); //查詢型態
var str_sort_order = $('<div />', { 'id': 'str_sort_order' }).html(JSON_Setting.sort_Order); //排序順序
var str_sort = $('<div />', { 'id': 'str_sort' }).html(JSON_Setting.sort); //排序欄位名稱
var str_column = $('<div />', { 'id': 'str_column' }).html(JSON_Setting.columnWidth); //欄位寬度
var str_align = $('<div />', { 'id': 'str_align' }).html(JSON_Setting.columnAlign); //欄位對齊
var str_type = $('<div />', { 'id': 'str_type' }).html(JSON_Setting.Type); //類型
grid.html('').append(str_setting, str_field, str_fieldName, str_queryType, str_sort_order, str_sort, str_column, str_align, str_type).appendTo(document.body);
GridViewSettingOption.table_name = JSON_Setting.TableName || '';
GridViewSettingOption.limit_count = JSON_Setting.limitCount || '0';
SetOrGetSession(Method.GetSession, { strKey: PageTag + '_Qry_Param' }, GetSessionDone);
//產生Searchbar Start
if (setting.SearchBar && $(setting.SearchBar).length) {
var SearchBar = $(setting.SearchBar);
var SearchSetting = '';
$.each(JSON_Setting.QueryField.split('|'), function (i, v) {
if (v) {
SearchSetting += '\"' + v + '\":{\"FieldName\":\"' + SplitStringToArray('|', JSON_Setting.QueryName, i) + '\",\"QueryType\":\"' + SplitStringToArray('|', JSON_Setting.QueryType, i) + '\",\"QueryDefault\":\"' + SplitStringToArray('|', JSON_Setting.QueryDefault, i) + '\",\"QueryWidth\":\"' + SplitStringToArray('|', JSON_Setting.QueryWidth, i) + '\"},';
}
});
if (SearchSetting) {
SearchSetting = $.parseJSON('{' + SearchSetting.slice(0, -1) + '}');
for (item in SearchSetting) {
var $lbl = $('<lable />');
var $span = $('<span />').text((SearchSetting[item].FieldName || item) + ':').appendTo($lbl);
var $input = $('<input />');
var First_Type = SearchSetting[item].QueryType.substring(0, 1);
switch (First_Type.toLowerCase()) {
case 'd':
$input.attr({
'type': 'text',
'value': SearchSetting[item].QueryDefault || '',
'class': 'w' + SearchSetting[item].QueryWidth + ' Date',
'name': item
})
break;
case 'r':
$.each(SearchSetting[item].QueryDefault.split(';'), function (index, value) {
$input.hide();
var $lbl_item = $('<label />').text(value.split('@')[1]).appendTo($lbl);
var $input_radio = $('<input type=\"radio\" />').attr({
'name': item,
'value': value.split('@')[0]
}).prependTo($lbl_item);
});
break;
case 'c':
break;
case 't':
default:
$input.attr({
'type': 'text',
'value': SearchSetting[item].QueryDefault || '',
'class': 'w' + SearchSetting[item].QueryWidth,
'name': item
})
break;
};
$lbl.append($input).appendTo(SearchBar);
}
}
}
//產生Searchbar End
}
};
/********************************************
* 函數名稱: GetSessionDone(msg)
* 目的:當GetSession完成後,做的事情。
* 作者:Gary
* 時間:2015/05/20
* 參數說明:
*********************************************/
var GetSessionDone = function (msg) {
Json.Session = JSON.parse(msg.d);
var Search_List = {
Tb_Name: GridViewSettingOption.table_name,
limitCount: GridViewSettingOption.limit_count
};
CallPageMethod(GridViewSettingOption.AjaxUrl, Method.GetList, Search_List, GetListDone); //頁面載入預設沒有條件輸入
};
/********************************************
* 函數名稱: GetListDone(msg)
* 目的:當GetList完成後,做的事情。
* 作者:Gary
* 時間:2015/05/20
* 參數說明:
*********************************************/
var GetListDone = function (msg) {
Json.List = JSON.parse(msg.d);
SetListToTable(Json.List);
};
/********************************************
* 函數名稱: GetState()
* 目的:取得Session所要存取的值
* 作者:Gary
* 時間:2015/02/25
*********************************************/
var GetState = function () {
var State = {
Search: $('#txtSearch').val(), //搜尋區塊
Page: $('#txtGoPage').val(), //當前頁數
Sortting: $('a[selected=selected]').attr('sorting'), //排序狀態 asc or desc
Sorttype: $('a[selected=selected]').attr('sorttype') //排序的欄位
}
return State;
}
/********************************************
* 函數名稱:CallPageMethod(UrlAspx, MethodName, JsonData)
* 目的:使用Ajax呼叫後台Method
* 作者:Gary
* 時間:2015/02/05
*********************************************/
var SetOrGetSession = function (MethodName, Data, callback) {
$.ajax({
type: 'Post',
url: '../../../WS/OTKGridView.asmx/' + MethodName,
data: JSON.stringify(Data), //傳送區域參數
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
if (!callback) return;
try {
callback(msg);
} catch (e) {
}
}, error: function (res, status) {
if (status === "error") {
var errorMessage = $.parseJSON(res.responseText);
console.log(errorMessage.Message);
}
}
});
}
/********************************************
* 函數名稱: SplitStringToArray(splitstring, str_array, sel_index)
* 目的:字串分割成陣列並搜尋符合項目
* 作者:Ted
* 時間:2015/06/09
* 參數說明:
* splitstring:分割字串
* str_array:要分割成陣列的字串
* sel_index:選擇索引值
*********************************************/
var SplitStringToArray = function (splitstring, str_array, sel_index) {
var result = '';
if (splitstring && str_array) {
if (str_array.indexOf(splitstring) > -1) {
result = str_array.split(splitstring);
if (sel_index <= result.length) result = str_array.split(splitstring)[sel_index];
}
}
return result;
}
//if(typeof setting.CustomerSearch === 'function') setting.CustomerSearch(setting, Method, SetListToTable, CallPageMethod); //綁定自訂義搜尋
if (PageName) {
//取得資料表相關設定
CallPageMethod(GridViewSettingOption.AjaxUrl, GridViewSettingOption.method, { PageName: PageName }, GetGridViewSettingDone);
}
};
})(jQuery);
/********************************************
* 函數名稱:.clean(deleteValue)
* 目的:刪除陣列內包含deleteValue資料。
* 作者:Gary
* 時間:2015/06/02
* 參數說明:
*********************************************/
Array.prototype.clean = function (deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
/********************************************
* 函數名稱:___CloseWaitingForm(intSleep)
* 目的:關閉Waiting視窗事件
* 作者:Ethan
* 時間:2014/11/07
* 參數說明:intSleep:延遲時間,單位為毫秒
*********************************************/
function ___CloseWaitingForm(intSleep) {
$(function () {
if (intSleep == undefined) {
intSleep = 100;
}
setTimeout($.unblockUI, intSleep);
});
}
/********************************************
* 函數名稱:fnShowWaitingDiv(strTag)
* 目的:開啟Waiting視窗
* 作者:Ethan
* 時間:2014/11/07
* 參數說明:strTag:暫時無用
*********************************************/
function fnShowWaitingDiv(strTag) {
$.blockUI({
message: $('<div id="Divshowwaiting"><img src="../../App_Themes/Default/images/ajax-loader.gif">Waiting...</div>'),
css: {
'font-size': '36px',
border: '0px',
'border-radius': '10px',
'background-color': '#FFF',
padding: '15px 15px',
opacity: .5,
color: 'orange',
cursor: 'wait'
}
});
window.setTimeout($.unblockUI, 30000); //預設開啟30秒後關閉
}
/********************************************
* 函數名稱:showwaiting()
* 目的:為指定控件添加開啟Waiting視窗事件
* 作者:Ted
* 時間:2014/07/31
* 參數說明:目前用於Toolbar以及GridView 限定 .table-A .table-title th > a
*********************************************/
function showwaiting() {
//工具列單擊時的等待畫面
$('[showwaiting]').click(function () {
fnShowWaitingDiv();
});
//表格雙擊進入編輯畫面時的等待畫面
$('tr[class*="tbShowWaiting"]').dblclick(function () {
window.setTimeout(fnShowWaitingDiv(), 10);
});
if ($('#Pager_btn') != undefined) {
$('#Pager_btn').attr('onclick', 'fnShowWaitingDiv();');
}
if ($('#btnQry') != undefined) {
$('#btnQry').click(function () {
window.setTimeout(fnShowWaitingDiv(), 10);
});
}
//排序用
$('.table-A .table-title th > a').each(function () {
$(this).click(function () {
window.setTimeout(fnShowWaitingDiv(), 10);
});
});
}
/********************************************
* 函數名稱:fnCheckStr()
* 目的:驗證必須是數字和符號
* 作者:John
* 時間:2013/11/03
* 參數說明:無
*********************************************/
function fnCheckStr(obj) {
var pattern = "()()-+0123456789";
var rs = "";
for (var i = 0; i < obj.value.length; i++) {
if (pattern.indexOf(obj.value.substr(i, 1)) > -1) {
rs = rs + obj.value.substr(i, 1);
}
}
if (obj.value != rs) {
obj.value = rs;
}
}