//-------------------------------------------- // 取得網頁上元件的 X 座標 //-------------------------------------------- function offsetLeft(obj) { x = obj.offsetLeft; for (objParent = obj.offsetParent; objParent; objParent = objParent.offsetParent) x += objParent.offsetLeft; return x; } //-------------------------------------------- // 取得網頁上元件的 Y 座標 //-------------------------------------------- function offsetTop(obj) { y = obj.offsetTop; for (objParent = obj.offsetParent; objParent; objParent = objParent.offsetParent) y += objParent.offsetTop; return y; } //-------------------------------------------- // 存檔前檢查 //-------------------------------------------- function CheckInput() { var i = 0; // 檢查不可空白欄位 for (i in arNotEmpty) { obj = document.getElementById(arNotEmpty[i]); if (!CheckEmpty(obj, arObjName[arNotEmpty[i]])) return false; } // 檢查數值欄位 i = 0; for (i in arIsNumber) { obj = document.getElementById(arIsNumber[i]); if (!CheckNumber(obj, arObjName[arIsNumber[i]])) return false; } // 檢查日期欄位 i = 0; for (i in arIsDate) { obj = document.getElementById(arIsDate[i]); if (!CheckDate(obj, arObjName[arIsDate[i]])) return false; } return confirm(msgConfirmSave); } //-------------------------------------------- // 檢查是否空白 //-------------------------------------------- function CheckEmpty(obj, objCaption) { if (obj.value == "") { s = msgNotEmpty + " \"" + objCaption + "\"."; alert(s); obj.focus(); return false; } return true; } //-------------------------------------------- // 檢查是否輸入為數值 //-------------------------------------------- function CheckNumber(obj, objCaption) { if (isNaN(parseFloat(obj.value))) { s = " \"" + objCaption + "\" " + msgMustNumber; alert(s); obj.focus(); return false; } return true; } //-------------------------------------------- // 檢查日期是否合理 //-------------------------------------------- function CheckDate(obj, objCaption) { if (parseDate(obj) != null) { s = " \"" + objCaption + "\" " + msgMustDate; alert(s); obj.focus(); return false; } return true; } //------------------------------------------------------------ // 取得按下按鍵相關資料 //------------------------------------------------------------ function GetKeyData(evt) { if (!evt) { // grab IE event object evt = window.event } else if (!evt.keyCode) { // grab NN4 event info evt.keyCode = evt.which; evt.altKey = evt.modifiers & Event.ALT_MASK; evt.ctrlKey = evt.modifiers & Event.CONTROL_MASK; evt.shiftKey = evt.modifiers & Event.SHIFT_MASK; } return evt; } //------------------------------------------------------------ // 取得按下的按鍵,可在 onKeyDown, onKeyUp, onKeyPress 中使用 //------------------------------------------------------------ function GetKeyCode(evt) { return GetKeyData(evt).keyCode; } //------------------------------------------------------------ // 判斷按下的是否為某鍵 //------------------------------------------------------------ function IsKeyCode(evt, keyCode, altKey, ctrlKey, shiftKey) { var keyEvt = GetKeyData(evt); return (keyEvt.keyCode == keyCode && ((!altKey && !keyEvt.altKey) || (altKey && keyEvt.altKey)) && ((!ctrlKey && !keyEvt.ctrlKey) || (ctrlKey && keyEvt.ctrlKey)) && ((!shiftKey && !keyEvt.shiftKey) || (shiftKey && keyEvt.shiftKey))); } //------------------------------------------------------------ // 延遲若干毫秒後顯示 "處理中" //------------------------------------------------------------ function ShowProcessing(delay) { if (typeof delay != "undefined") window.setTimeout(ShowProcessing1, delay); else ShowProcessing1(); } //------------------------------------------------------------ // 顯示 "處理中" //------------------------------------------------------------ function ShowProcessing1() { var datePicker = document.getElementById("DatePicker"); datePicker.src="utility/Processing.htm"; datePicker.style.width = 340; datePicker.style.height = 180; datePicker.style.left = Math.round((document.body.clientWidth - datePicker.offsetWidth) / 2) + "px"; datePicker.style.top = Math.round((document.body.clientHeight - datePicker.offsetHeight) / 2) + "px"; datePicker.style.border = "none"; } //------------------------------------------------------------ // 隱藏 "處理中" //------------------------------------------------------------ function HideProcessing() { var datePicker = document.getElementById("DatePicker"); datePicker.style.width = 0; datePicker.style.height = 0; datePicker.style.left = 0; datePicker.style.top = 0; } //------------------------------------------------------------ // 清理具名的 Vue 實例 //------------------------------------------------------------ function DestroyVue(key) { var vm = window.__vms && window.__vms[key] if (vm && !vm._isDestroyed) { vm.$destroy() delete window.__vms[key] console.log(`DestroyVue - ${key} Destroied`); return; } console.log('DestroyVue - nothing to destroy'); } /** * 用 jQuery dialog 開啟連結 * @param {string} url 要開啟的URL * @param {string} title Dialog的標題文字 * @param {number} width Dialog的寬度(px) * @param {number} height Dialog的高度(px) * @param {boolean} refresh Dialog關閉時是否重新整理網頁 */ function OpenDialog(url, title, width, height, refresh) { var horizontalPadding = 20; var verticalPadding = 20; if (width && width > window.innerWidth) width = window.innerWidth - 20; if (height && height > window.innerHeight - 120) height = window.innerHeight - 120; if (!width) width = window.innerWidth - 100; if (!height) height = window.innerHeight - 150; $('