//common function define(["app", "moment"], function (app, moment) { app.run(["$state", "$rootScope", "$filter", "$mdDialog", "$mdlToast", "$timeout", "$location", "$anchorScroll", "$templateRequest", "$compile", "config", 'MMWService', function ($state, $rootScope, $filter, $mdDialog, $mdlToast, $timeout, $location, $anchorScroll, $templateRequest, $compile, config, $MMWService) { //2021-12-03 modify by YENRU //Add Title Info. $rootScope.title_hidden=false; $rootScope.login_environment_info; $rootScope.login_user_info; $rootScope.loadFinish = false; $rootScope.lang = config.setting.lang config.APKVersion = ""; //20170802 modify by Dustdusk for 判斷目前版本 if (window.nodeRequire) { $rootScope.platform = 'desktop'; } else if (typeof cordova !== 'undefined') { $rootScope.platform = 'cordova'; //20220418 13871,取得cordova apk version try { cordova.getAppVersion.getVersionNumber(function (version) { config.APKVersion = version; }); } catch (e) { } } else { $rootScope.platform = 'web'; } // 紀錄目前Loading的狀態 //disabled : true - 隱藏/false - 顯示 $rootScope.Loading = { disabled: true, count: 0, msg: '' } //顯示Loading, 會記錄目前顯示幾次Loading $rootScope.showLoading = function (msg) { angular.element(document.getElementsByClassName('LoadingContener')[0]).removeClass('ng-hide'); $rootScope.Loading.msg = msg || 'Loading...'; $rootScope.Loading.disabled = false; $rootScope.Loading.count++; } window.showLoading = function (msg) { $timeout(function () { $rootScope.showLoading(msg); }); } //隱藏Loading, 當Loading 全部被關閉的時候才會完全關閉 $rootScope.hideLoading = function (isForce) { if (isForce) { $rootScope.Loading.count = 0; } $rootScope.Loading.count--; if ($rootScope.Loading.count <= 0) { angular.element(document.getElementsByClassName('LoadingContener')[0]).addClass('ng-hide'); $rootScope.Loading.disabled = true; $rootScope.Loading.count == 0; } } window.hideLoading = function (isForce) { $timeout(function () { $rootScope.hideLoading(isForce); }); } //20210730 13871,組成Alert物件 $rootScope.CreateAlert = function () { } //顯示 Alert $rootScope.showAlert = function (alertMsg, confirm) { if (alertMsg.length != undefined) { $mdDialog.alert(alertMsg, confirm); } else if (Object.keys(alertMsg).length > 1) { if (Object.keys(alertMsg).length == 3) { $mdDialog.alert_top_right(alertMsg, confirm); } else { //20210730 13871,錯誤訊息,Action翻譯 if (alertMsg.code != undefined) { var action = $filter('translate')('imes_action.' + alertMsg.code); if (action == 'imes_action.' + alertMsg.code) action = "N/A"; alertMsg.action = action; var codeInfo = $filter('translate')('imes_name.' + alertMsg.code); if (codeInfo != 'imes_name.' + alertMsg.code) alertMsg.title = codeInfo; } $mdDialog.alert_full(alertMsg, confirm); } } } window.showAlert = function (alertMsg, confirm) { $timeout(function () { $rootScope.showAlert(alertMsg, confirm); }); } //20211125 13871,顯示 Message,msg允許傳入[%%]翻譯格式 $rootScope.showMessage = function (msg, code, confirm) { var message = ""; if (code != undefined) message = code + ":" + $filter('translate')('imes_name.' + code); if (message.length > 0) message += "
"; var index = msg.indexOf('[%'); while (index >= 0) { var index2 = msg.indexOf('%]', index + 2); if (index2 < 0) break; var key = msg.substring(index + 2, index2); var key_tran = $filter('translate')('imes_resources.' + key); msg = msg.substring(0, index) + (key == key_tran ? key : key_tran) + msg.substring(index2 + 2, msg.length); index = msg.indexOf('[%'); } message += msg; $mdDialog.alert(message, confirm); } //Yes Or No Dialog $rootScope.ShowYesOrNo = function (options, callback, cancel) { //沒有msg直接回傳 if (options.msg == null || options.msg == undefined) { if (callback) callback(); return; } $mdDialog.dialog('JSplugins/angular-material-lite/template/rule.tmp.html', function (dialog) { //2020/09/22 雋辰,增加取消確認按鈕 dialog.isOKCancel = options.isOKCancel; return { title: options.title, msg: options.msg, confirm: function () { dialog.hide(); if (callback) callback(); }, back: function () { dialog.hide(); if (cancel) cancel(); } }; }); } //顯示 confirm $rootScope.showConfirm = function (alertMsg, confirm, cancel) { $mdDialog.confirm(alertMsg, confirm, cancel); } //顯示Select /* * options : { * title : 標題 * label : list 中外顯值得變數名稱 * sub_label : list 中外顯值得其他資訊 * code : list 中內存值的變數名稱 * selectCode : 預設值,對應code設定的變數 * list : 要呈現的list * confirm : 按下list以後的處理,會傳入dialog,可以用dialog.hide() * 關閉開窗 * } */ $rootScope.showSelect = function (options) { if (options.list.length != 0) { $mdDialog.dialog('JSplugins/angular-material-lite/template/radioList.tmp.html', function (dialog) { return { title: options.title || $filter('translate')('common.msg.plz_select'), label: options.label, sub_label: options.sub_label, code: options.code, order: options.order || options.label, selectCode: options.selectCode, back: function () { this.hide(); }, itemList: options.list, itemClick: function (item, event) { //$translate.use(item.code); //$scope.currentUse = item.code; if (options.confirm) options.confirm(item, this); //this.hide(); }, itemCancel: function () { dialog.hide(); if (options.cancel) options.cancel(this); }, isCancel: options.cancel != undefined, background: { click: function () { dialog.hide(); if (typeof (feedback) == 'function') feedback(); } } } }); } else { $rootScope.showAlert($filter('translate')('common.msg.no_data')); } } $rootScope.showToast = function (msg) { $mdlToast.show(msg); }; //顯示模糊查詢開窗 QueryList /* * options : { * title : 標題 * label : list 中外顯值得變數名稱 * code : list 中內存值的變數名稱 * selectCode : 預設值,對應code設定的變數 * confirm : 按下list以後的處理,會傳入dialog,可以用dialog.hide() * 關閉開窗 * } */ $rootScope.showQueryList = function (options) { //20180331 增加初始化Conditions,modeList沒設定的話則使用預設值 //預設查詢條件 var modeList = [ { name: $filter('translate')('common.report.condition.equal'), code: '0' }, { name: $filter('translate')('common.report.condition.nequal'), code: '1' }, { name: $filter('translate')('common.report.condition.contain'), code: '2' }, { name: $filter('translate')('common.report.condition.ncontain'), code: '3' }, { name: $filter('translate')('common.report.condition.exceed-equal'), code: '4' }, { name: $filter('translate')('common.report.condition.less-equal'), code: '5' }, { name: $filter('translate')('common.report.condition.exceed'), code: '6' }, { name: $filter('translate')('common.report.condition.less'), code: '7' } ]; function initConditions(conditions) { if (conditions && conditions.length) { conditions.forEach(function (condition) { var temp_modeList = modeList;//用來判斷目前該使用哪些條件 if (condition.modeList == undefined) { condition.modeList = modeList;//將預設條件放進查詢裡面 } else if (condition.modeList.length > 0) { temp_modeList = condition.modeList;//因為查詢有設定條件,所以將條件放進temp_modeList } if (temp_modeList.length > 0) { var isMatch = false; //當有設定query_mode時則需要從modeList找出對應的查詢條件名稱 //如果沒有對應的則抓第一筆 if (condition.query_mode && condition.query_mode != '') { for (var i = 0; i < temp_modeList.length; i++) { if (condition.query_mode == temp_modeList[i].code) { condition.query_name = temp_modeList[i].name; isMatch = true; break; } } if (!isMatch) { //表示設定的query_mode並不在modeList內 //使用第一筆作為預設值 condition.query_name = modeList[0].name; condition.query_mode = modeList[0].code; } } } }); return conditions; } } function getConditions(conditions) { var query_condition_info = []; if (conditions && conditions.length > 0) { conditions.forEach(function (condition) { if (condition.column_name != '' && condition.query_mode != '' && condition.value && condition.value != '') { var query_conditoin = angular.extend({}, condition); query_conditoin.modeList = undefined; if (!query_conditoin.merge_condition_model) query_conditoin.merge_condition_model = 'AND'; if (condition.data_type == 'D') { query_conditoin.value = moment(condition.value).format('YYYY-MM-DD'); } else if (condition.query_mode == '2') { query_conditoin.value = '%' + condition.value + '%'; } else { query_conditoin.value = condition.value; } query_condition_info.push(query_conditoin); } }); } return query_condition_info; } function calcPage(queryResults, pageInfo) { pageInfo.totalPage = Math.floor(queryResults.length / pageInfo.perPageRow); if (queryResults.length % pageInfo.perPageRow > 0) { pageInfo.totalPage++; } return queryResults.slice((pageInfo.nowPage - 1) * pageInfo.perPageRow, (pageInfo.nowPage) * pageInfo.perPageRow); } function getQueryOrder(key, header) { if (key) { for (var i = 0; i < header.length; i++) { if (header[i].code == key) { return i; } } return -1; } else { return 0; } } function QueryListCompile(template, options) { var header = template.find('#query_list_header'); var list = template.find('#query_list'); if (options.header && options.header.length > 0) { for (var i = 0; i < options.header.length; i++) { var headerColumn = '
'; headerColumn += '
'; headerColumn += ''; headerColumn += 'clear'; headerColumn += '
'; headerColumn += '
'; headerColumn += 'search'; headerColumn += ''; headerColumn += '{{!dialog.header[' + i + '].order?\'\':\'\'}}'; headerColumn += '
'; headerColumn += '
'; headerColumn += '
'; header.append(headerColumn); var listColumn = '
'; listColumn += '
'; list.append(listColumn); } list.append('
'); } return template; } function openDialog(options, pageInfo, queryResults) { var selectItem; options.condition = initConditions(options.condition); if (options.mode == 'M') { if (options.selectItem && options.selectItem.length > 0) { selectItem = {}; options.selectItem.forEach(function (item) { selectItem[item[options.key || options.header[0].code]] = item; }); } } $mdDialog.dialog('JSplugins/angular-material-lite/template/queryList.tmp.html', function (dialog) { return { mode: options.mode || 'S', //m (多選) / s (單選) key: options.key || options.header[0].code, queryTitle: options.title || $filter('translate')('common.msg.plz_select'), qeryOrder: getQueryOrder(options.order || options.key, options.header), orderColumn: function () { if (dialog.qeryOrder == -1) { return options.order; } else { return dialog.header[dialog.qeryOrder].code; } }, orderColumnSeq: function () { if (dialog.qeryOrder == -1) { return options.orderSeq; } else { return dialog.header[dialog.qeryOrder].order; } }, IsSelect: function (item) { if (dialog.mode == 'S') { return item[dialog.key] == dialog.selectCode; } else if (dialog.mode == 'M') { if (options.selectKey != undefined) { item.$is_select = item[options.selectKey.key] == options.selectKey.true; } return false; } return false; }, selectCode: options.selectCode, seletItem: selectItem, condition: options.condition, filterColumns: options.filterColumns || {},//20180202 新增模糊查詢 beforeShown: options.beforeShown, beforeCompile: function (template) { return QueryListCompile(template, options); }, loadCodeList: function (item) { if (!item.require) { $rootScope.showSelect({ title: $filter('translate')('common.report.condition_fields'), label: 'name', code: 'column_name', selectCode: item.column_name, list: options.condition, confirm: function (selectItem, CodeDialog) { item.modeList = []; item.query_name = undefined; item.query_mode = undefined; item.data_type = undefined; item.value = undefined; item = angular.extend(item, selectItem); CodeDialog.hide(); } }); } }, loadTypeList: function (item) { if (!item.require) { if (item.modeList && item.modeList.length > 0) { $rootScope.showSelect({ title: $filter('translate')('common.condition_title'), label: 'name', code: 'code', order: 'code', selectCode: item.code, list: item.modeList, confirm: function (selectItem, TypeDialog) { item.query_name = selectItem.name; item.query_mode = selectItem.code; TypeDialog.hide(); } }); } } }, header: options.header, orderResult: function (index, head) { if (dialog.qeryOrder != index) { head.order = false; } else { head.order = !head.order; } dialog.qeryOrder = index; }, pageInfo: pageInfo, getPageRange: function () { return new Array(dialog.pageInfo.totalPage); }, gotoPage: function (pageNum) { dialog.pageInfo.nowPage = pageNum; }, getQueryResults: function () { var _queryResults = queryResults.filter(function (item, index, array) { var isOK = true, keys = Object.keys(dialog.filterColumns); for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (isOK && item[key] && dialog.filterColumns[key] && dialog.filterColumns[key] != '') { if ((item[key] + '').indexOf(dialog.filterColumns[key]) == -1) { isOK = false; break; } } } return isOK; }); if (dialog.pageInfo != undefined) { return calcPage(_queryResults, dialog.pageInfo); } else { return _queryResults; } }, confirm: function () { //var selectItem = []; if (dialog.mode == 'S') { if (!dialog.seletItem) { //完全未選擇的情況 if (queryResults && queryResults.length > 0) { if (dialog.selectCode && dialog.selectCode != '') { var tObject = {}; tObject[dialog.key] = dialog.selectCode; var temp = $filter('filter')(queryResults, tObject); if (temp && temp.length > 0) { dialog.seletItem = temp[0]; } } } } } else if (dialog.mode == 'M') { if (options.selectKey != undefined) { dialog.seletItem = queryResults; } else if (dialog.seletItem != undefined) { var selectItem = []; for (var key in dialog.seletItem) { if (dialog.seletItem[key] != undefined) selectItem.push(dialog.seletItem[key]); } dialog.seletItem = selectItem; } } if (dialog.seletItem) { if (options.confirm) options.confirm(dialog.seletItem, dialog); } else { $rootScope.showAlert($filter('translate')('common.msg.plz_select_one')); } }, back: function () { if (options.back) { options.back(dialog.hide); } else { dialog.hide(); } }, itemClick: function (item) { if (dialog.mode == 'S') { dialog.selectCode = item[dialog.key]; dialog.seletItem = item; } else { //dialog.selectCode = item[dialog.key]; if (options.selectKey != undefined) { item.$is_select = item[options.selectKey.key] == options.selectKey.true; if (item.$is_select) { item[options.selectKey.key] = options.selectKey.false; item.$is_select = false; } else { item[options.selectKey.key] = options.selectKey.true; item.$is_select = true; } } else if (dialog.seletItem) { //dialog.seletItem = {}; if (dialog.seletItem[item[dialog.key]]) { dialog.seletItem[item[dialog.key]] = undefined; } else { dialog.seletItem[item[dialog.key]] = item; } } } }, itemDbClick: function (item, event) { if (dialog.mode == 'S') { dialog.selectCode = item[dialog.key]; dialog.seletItem = item; dialog.confirm(); } else { dialog.itemClick(item, event); } }, search: function () { var query_condition_info = getConditions(options.condition); options.query(query_condition_info, function (_queryResults) { if (!_queryResults || _queryResults.length == 0) { $rootScope.showToast($filter('translate')('common.msg.no_data'), 'error'); } if (dialog.pageInfo != undefined) { dialog.pageInfo.nowPage = 1; } queryResults = _queryResults; }); }, cancel: options.cancel }; }); } (function (options) { if (options.header && options.header.length > 0) { if (options.query) { var pageInfo; if (options.pageRecord != undefined) { pageInfo = { nowPage: 1, perPageRow: options.pageRecord, totalPage: 0 }; } if (options.notQuery && options.condition) { //當有設定查詢條件以及 notQuery 的時候,開啟不會伴隨查詢 openDialog(options, pageInfo, []); } else { var query_condition_info = getConditions(options.condition); options.query(query_condition_info, function (queryResults) { if (queryResults && queryResults.length > 0) { openDialog(options, pageInfo, queryResults); } else if (options.noDataException) { options.noDataException(options, function () { openDialog(options, pageInfo, queryResults); }); } else { $rootScope.showAlert($filter('translate')('common.msg.no_data')); //20181024 modify by Dustdusk for M#: 當有設定查詢條件時,查無資料還是會開啟視窗 if (options.condition && options.condition.length > 0) openDialog(options, pageInfo, queryResults); } }); } } else { console.error('showQueryList : plz set options.query'); } } else { console.error('showQueryList : plz set options.header'); } })(options); }; // Change Program $rootScope.changeProgram = function (program, parameters, isLeave) { if(program=='mms03_system_home' || program=='mms01_user_login' || program =='mms02_system_setting'){ $rootScope.hideSideTitle(); } else{ $rootScope.showSideTitle(); } $rootScope.reciprocalRestart(); if (typeof (parameters) == 'boolean') { isLeave = parameters; } else { isLeave = isLeave || false; } if (!isLeave) { //從任何地點 > 載入一般程式 $rootScope.programState = 'load-program'; } else { //從其他程式> 載入home $rootScope.programState = 'leave-program'; } //20210601 13871,檢查頁面是否存在避免錯誤 if (!config.program.some(item => item.name == program)) { $rootScope.showAlert(program + $filter('translate')('error.pageNotFound')); return; } if (parameters != undefined) { $state.go(program, parameters); } else { $state.go(program); } } $rootScope.showSideTitle = function () { angular.element(document.getElementById('side-title')).removeClass('title-hide'); $rootScope.title_hidden = true; }; $rootScope.hideSideTitle = function () { angular.element(document.getElementById('side-title')).addClass('title-hide'); $rootScope.title_hidden = false; }; /*** * 顯示 local Notification, 由App本身所觸發的通知 * 此部分有加入使用html5 實作 web browser 通知 * data { * id : id表示此訊息的身分,當有兩個相同的id時,後者會覆蓋前者 * msg : 通知的訊息 * sound : 通知的聲音, 預設是file://sound/sound.mp3 * target : 點擊通知訊息後會開啟的頁面 * } */ $rootScope.ShowNotification = function (data, prepareData, clickHandler) { try { if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|IEMobile)/)) { cordova.plugins.notification.local.schedule(prepareData(data)); cordova.plugins.notification.local.on("click", clickHandler(data), this); } else { //產生HTML5的通知 Notification.requestPermission(function (permission) { var feedbackData = prepareData(data); var notification = new Notification(feedbackData.title, { body: feedbackData.text, dir: 'auto' }); notification.click = function () { window.location = "/"; } }); } } catch (error) { console.log(error); } } // Open Background Service $rootScope.OpenBackgroundService = function (data) { try { // Android customization cordova.plugins.backgroundMode.setDefaults(data); // Enable background mode cordova.plugins.backgroundMode.enable(); // Called when background mode has been activated cordova.plugins.backgroundMode.onactivate = function () { } } catch (error) { console.log(error); } } // Screen always on $rootScope.DisplayOn = function (ScreenOn) { if (window.plugins) { if (ScreenOn) window.plugins.insomnia.keepAwake(); else window.plugins.insomnia.allowSleepAgain(); } } // open Server Send Event Connection $rootScope.openSSECenection = function (config, prepareData, clickHandler) { if (typeof (EventSource) !== "undefined") { var server = config.server; var source = new EventSource('http://' + server.ip + ':' + server.port + '/' + server.name + '/' + 'startSSE'); source.addEventListener('open', function (e) { //console.log("Open Connection"); }, false); //Set CallbackFunction source.addEventListener('message', function (msg) { //console.log("SSE get message "); //console.log(msg.data); var data = JSON.parse(msg.data); if (data.command == 'refresh') { if ($rootScope.refresh != undefined) { $rootScope.refresh(data); } if (data.equipment && config.setting.machineNot) { $rootScope.ShowNotification(data, prepareData, clickHandler); } } }); source.addEventListener('error', function (e) { console.log(e); try { if (cordova.plugins.backgroundMode.isEnabled()) { cordova.plugins.backgroundMode.configure({ text: $filter('translate')('error.connectRefused') }); } } catch (error) { console.log(error); } source.close(); console.log('prepare alert'); $MDLUtirlity.alert($filter('translate')('error.connectRefused'), function () { $rootScope.openSSECenection(); $MDLUtirlity.alertClose(); }); }, false); } else { console.log('Your browser don\'t support SSE.'); } } //20201113 雋辰,深拷貝 $rootScope.deepCopy = function (obj, cache) { if (cache == undefined) cache = new WeakMap(); // 基本型別 & function if (obj === null || typeof obj !== 'object') return obj // Date 及 RegExp if (obj instanceof Date || obj instanceof RegExp) return obj.constructor(obj) // 檢查快取 if (cache.has(obj)) return cache.get(obj) // 使用原物件的 constructor const copy = new obj.constructor() // 先放入 cache 中 cache.set(obj, copy) // 取出所有一般屬性 & 所有 key 為 symbol 的屬性 ; [...Object.getOwnPropertyNames(obj), ...Object.getOwnPropertySymbols(obj)].forEach(key => { copy[key] = $rootScope.deepCopy(obj[key], cache) }); return copy; } //20210911 13871,檢查提示視窗是否已經開啟 $rootScope.CheckAlertDialog = function () { var doc = document.getElementById("alertpage"); if (doc != undefined) return true; doc = document.getElementById("alertpage_full"); if (doc != undefined) return true; return false; } /** * open Camera for barcode/QRcode scan * options { * descript, * after, * exception, * formats, * orientation // Android only (portrait|landscape), default unset so it rotates with the device * } */ $rootScope.OpenScanner = function (options) { //options.formats = options.formats||"QR_CODE"; options.orientation = options.orientation || "unset"; options.descript = options.descript || ""; setTimeout(function () { $rootScope.showLoading(); $rootScope.$apply(); setTimeout(function () { try { /*** * result.text * Format: " + result.format * result.cancelled */ cordova.plugins.barcodeScanner.scan( function (result) { $rootScope.hideLoading(true); $rootScope.$apply(); if (options.after) options.after(result); }, function (error) { $rootScope.hideLoading(true); $rootScope.$apply(); }, { "preferFrontCamera": false, // iOS and Android //使用前鏡頭 "showFlipCameraButton": false, // iOS and Android //切換前後鏡頭 "prompt": options.descript, // 掃描的文字 "formats": options.formats, // 要掃描的格式 "orientation": options.orientation // Android only (portrait|landscape), default unset so it rotates with the device } ); } catch (e) { $rootScope.hideLoading(true); $rootScope.$apply(); if (options.exception) options.exception(); } }, 400); }, 200); } //auto logout var LogoutTimer = (function () { var reciprocalTime = 0; var timer; function LogoutTimer(rt) { if (rt) reciprocalTime = rt; } LogoutTimer.prototype.start = function (rt) { if (!timer) { if (rt) reciprocalTime = rt; reciprocal(); } } LogoutTimer.prototype.stop = function () { clearTimeout(timer); timer = undefined; } LogoutTimer.prototype.refresh = function (rt) { LogoutTimer.prototype.stop(); LogoutTimer.prototype.start(rt); } function reciprocal() { if (reciprocalTime != 0) { timer = setTimeout(function () { //$rootScope.hideMenu(); //$rootScope.changeProgram('login',true); $MMWService.sendToMESSrv_plain({ uri: 'wsUSR.ClearLoginInfo_plainjson', content: { userno: config.cache.account, computername: config.client.ip, sessionid: config.mdssessionno }, success: function (data) { $rootScope.hideMenu(); $timeout(function () { $rootScope.changeProgram("mms01_user_login", true); }, 200); } }); }, reciprocalTime * 60 * 1000); } else { console.warn('config.setting.timeout is 0, auto logout wound\'t start'); } } return LogoutTimer; })(); var logoutTimerIns; $rootScope.reciprocalStart = function () { logoutTimerIns = new LogoutTimer(config.setting.timeout); logoutTimerIns.start(); } $rootScope.reciprocalRestart = function () { if (logoutTimerIns) logoutTimerIns.refresh(); } /* //fix keyboard cover input problem - only work with 'Material Design Lite' framework and cordova-keyboard-plugin window.addEventListener('native.keyboardshow', function(info) { var element = document.activeElement; if(element!=undefined && element.tagName == 'INPUT'){ $timeout(function(){ if($location.hash() == element.id){ // set the $location.hash to `newHash` and // $anchorScroll will automatically scroll to it $anchorScroll(); } else{ // call $anchorScroll() explicitly, // since $location.hash hasn't changed $location.hash(element.id); } }); } }); */ /* if($ && $.jqplot && $.jqplot.postDrawHooks){ $.jqplot.preDrawHooks.push(function(){ $rootScope.showLoading(); }); $.jqplot.postDrawHooks.push(function(){ $rootScope.hideLoading(); }); } */ $rootScope.isElectron = false; try { $rootScope.isElectron = nodeRequire ? true : false; } catch (e) { } //20210703 13871,判斷undefined null 空值 $rootScope.IsNullOrEmpty = function (str) { if (str == undefined || str === "") return true; return false; } /* *20220510 13871,取得ValueList,並將翻譯後的值放入指定欄位 *tblName:ValueList資料表名稱 *colName:ValueList資料表欄位名稱 *list:資料集合 *sourceCol:資料集合的欄位名稱,會將此欄位的值用作語系翻譯 *replaceCol:資料集合的欄位名稱,會將翻譯後的值放入此欄位 *callback:執行完後端取得ValueList資訊,並翻譯值後呼叫 */ $rootScope.GetValueList = function (tblName, colName, list, sourceCol, replaceCol, callback) { var uri = []; var content = []; uri.push("kcSYS.clsValueList.LoadValueList"); content.push({ pTableName: tblName, pColumnName: colName }); $MMWService.sendToMESSrv_Multi({ uri: uri, content: content, success: function (data) { var tmpJson = JSON.parse(data.ResultJson); var tmp; var index = 0; tmp = JSON.parse(tmpJson[uri[index]]); tmp = tmp[Object.keys(tmp)[0]]; if (list) { list.forEach(item=> { var drSel; drSel = tmp.filter(valList => { return valList.COLUMNVALUE == item[sourceCol]; }); if (drSel.length > 0) item[replaceCol] = $filter('translate')('imes_resources.' + drSel[0].DISPLAYTEXT); else item[replaceCol] = item[sourceCol]; }); } if (callback) { callback(); } } }); } $rootScope.focusById = function (id) { $timeout(function () { var target = document.getElementById(id); if (target) { target.focus(); target.select(); } }); } $rootScope.logout = function (callback) { $rootScope.showConfirm( $filter('translate')('common.msg.is_logout'), function (dialog) { dialog.hide(); $MMWService.sendToMESSrv_plain({ uri: 'wsUSR.ClearLoginInfo_plainjson', content: { userno: config.cache.account, computername: config.client.ip, sessionid: config.mdssessionno }, success: function (data) { //20220425 13871,登出,清除使用的session config.mdssessionno = ''; if (callback) callback(); if ($rootScope.brLogOut) { $rootScope.brLogOut(); $rootScope.brLogOut = undefined; } $rootScope.hideMenu(); $timeout(function () { $rootScope.changeProgram("mms01_user_login", true); }, 200); } }); }, function (dialog) { dialog.hide(); }); } //20170809 modify by Dustdusk for 開啟虛擬鍵盤 if ($rootScope.platform != 'web' && $rootScope.platform != 'cordova') { $(document).on('click', 'input', function (event) { if (config.setting.virtualKeyboard == 'Y') { if (!$(event.currentTarget).is('[readonly]') && !$(event.currentTarget).is('[disabled]')) { const exec = window.nodeRequire('child_process').exec; exec('start /d "C:\\Program Files\\Common Files\\microsoft shared\\ink" TabTip.exe', function (error, stdout, stderr) { if (error) { console.error(error); return; } }); } } }); } }]).controller('gallery', ["$scope", "$gallery", function ($scope, $gallery) { $scope.gallery = $gallery; }]).provider('$gallery', function () { this.$get = ["$rootScope", "$controller", function ($rootScope, $controller) { return { url: '', title: '', isHide: true, hide: function () { this.isHide = true; if (this.feedback) { this.feedback(); } }, show: function (title, url, feedback) { this.title = title; this.url = url; this.feedback = feedback; this.isHide = false; try { StatusBar.backgroundColorByHexString("#000000"); } catch (e) { } }, feedback: null }; }]; }) .directive('kmiReportPanel', ["$rootScope", "$filter", function ($rootScope, $filter) { return { restrict: "C", replace: true, templateUrl: "program/C00/C00.html", link: function (scope, elem, attrs, ctrl) { scope.queryMode = 'query'; scope.addCondition = function () { scope.conditionList.push({ column_name: '', query_mode: '', value: '' }); }; scope.removeCondition = function (index, item) { scope.conditionList.splice(index, 1); } //設定查詢畫面的"欄位"有哪些 scope.loadCodeList = function (item, $index) { if (!item.require) { $rootScope.showSelect({ title: $filter('translate')('common.report.condition_fields'), label: 'name', code: 'column_name', selectCode: item.column_name, list: scope.codeList, confirm: function (selectItem, dialog) { item.modeList = []; item.query_name = undefined; item.query_mode = undefined; item.data_type = undefined; item.value = undefined; item = angular.extend(item, selectItem); dialog.hide(); } }); } }; //根據欄位的modeList決定他條件有哪些 scope.loadTypeList = function (item, $index) { if (!item.require) { if (item.modeList) { $rootScope.showSelect({ title: $filter('translate')('common.condition_title'), label: 'name', code: 'code', selectCode: item.code, list: item.modeList, confirm: function (selectItem, dialog) { item.query_name = selectItem.name; item.query_mode = selectItem.code; dialog.hide(); } }); } } }; scope.changeDate = function (item, date) { item.value_s = moment(new Date()).subtract(date, 'days').toDate(); item.value_e = new Date(); item.date_type = date; } $rootScope.genConditioninfo = function () { var query_condition_info = []; scope.conditionList.forEach(function (condition) { if (condition.data_type == 'D-SE') { query_condition_info.push({ column_name: condition.column_name_s, query_mode: 4, merge_condition_model: 'AND', value: moment(condition.value_s).format('YYYY-MM-DD') }); query_condition_info.push({ column_name: condition.column_name_e, query_mode: 5, merge_condition_model: 'AND', value: moment(condition.value_e).format('YYYY-MM-DD') }); } else if (condition.column_name != '' && condition.query_mode != '' && condition.value && condition.value != '') { var query_conditoin = {}; query_conditoin.column_name = condition.column_name; query_conditoin.query_mode = condition.query_mode; query_conditoin.merge_condition_model = 'AND'; if (condition.data_type == 'D') { query_conditoin.value = moment(condition.value).format('YYYY-MM-DD'); } else { query_conditoin.value = condition.value; } query_condition_info.push(query_conditoin); } }); return query_condition_info; }; } } }]); });