948 lines
31 KiB
JavaScript
948 lines
31 KiB
JavaScript
var window, platform, log, servicePlatform, win, isDebug = false, isFull;
|
||
|
||
if ($(window).width() < 1024) {
|
||
var scale = Math.round($(window).width() / 1024 * 10) / 10;
|
||
try {
|
||
// document.getElementsByName('viewport')[0].setAttribute('content','user-scalable=no, initial-scale='+scale+', maximum-scale='+scale+', minimum-scale='+scale+',target-densitydpi=device-dpi');
|
||
// 20200730 modify by WeiTing for M#72479 - 針對螢幕解析度過小的裝置,縮小畫面比例。
|
||
if (+(scale) < 0.7) {
|
||
scale = 0.7; // 0.8 以下比例過小,所以最小一律為 0.8
|
||
}
|
||
document.getElementsByTagName('style')[0].innerHTML += "html, body{ zoom:" + scale + "; }";
|
||
} catch (e) { }
|
||
}
|
||
|
||
if (typeof cordova === 'undefined') {
|
||
//判斷目前是使用NW.js 還是electron
|
||
try {
|
||
try {
|
||
|
||
var remote = nodeRequire('electron').remote;
|
||
window = win = remote.getCurrentWindow();
|
||
var appVersion = remote.app.getVersion();
|
||
if (appVersion != '6.0.1') {
|
||
//win.setFullScreen(false);
|
||
win.setMinimumSize(1024, 768);
|
||
win.setSize(1024, 768);
|
||
win.center();
|
||
win.setResizable(false);
|
||
win.setMaximizable(false);
|
||
isFull = true;
|
||
}
|
||
|
||
platform = 'electron';
|
||
} catch (e) {
|
||
window = win = nodeRequire('nw.gui').Window.get();
|
||
isFull = true;
|
||
platform = 'nw';
|
||
}
|
||
} catch (e) {
|
||
//platform = 'web';
|
||
}
|
||
//網頁時的啟動
|
||
angular.element().ready(startup);
|
||
} else {
|
||
//裝置上運行時的啟動
|
||
document.addEventListener("deviceready", function () {
|
||
try {
|
||
//設定全螢幕
|
||
AndroidFullScreen.immersiveMode(function () {
|
||
console.info("It worked!");
|
||
}, function (error) {
|
||
console.error(error);
|
||
});
|
||
//綁定橫向螢幕
|
||
screen.lockOrientation('landscape');
|
||
//關閉狀態列
|
||
StatusBar.hide();
|
||
navigator.splashscreen.hide();
|
||
} catch (e) { };
|
||
startup();
|
||
}, false);
|
||
}
|
||
|
||
function startup() {
|
||
init();
|
||
var domElement = document.querySelector('body');
|
||
angular.bootstrap(domElement, ["update"]);
|
||
}
|
||
|
||
function parseParamsToConfig(config) {
|
||
if (platform == 'electron' || platform == 'nw') {
|
||
try {
|
||
var outside_params = [];
|
||
var remote;
|
||
if (platform == 'electron') {
|
||
remote = nodeRequire('electron').remote;
|
||
outside_params = remote.process.argv;
|
||
} else if (platform == 'nw') {
|
||
outside_params = nodeRequire('nw.gui').App.argv;
|
||
}
|
||
|
||
//20200929 雋辰,透過sc開啟,處理參數 參數格式:imes:-params
|
||
if (outside_params && outside_params.length == 2) {
|
||
if (outside_params[1].indexOf('imes:') == 0) {
|
||
outside_params = outside_params[1].replace('imes:', '').split('&');
|
||
}
|
||
}
|
||
|
||
for (var index in outside_params) {
|
||
var param = outside_params[index];
|
||
if (param.indexOf('-params?') == 0) {
|
||
var paramArray = param.replace('-params?', '').split(';');
|
||
for (var index_y in paramArray) {
|
||
var keyValue = paramArray[index_y].split('=');
|
||
if (keyValue[0] == 'ip') {
|
||
//20201125 雋辰,新增選擇DNS/IP
|
||
var tmp = keyValue[1].split('.');
|
||
var isIP = false , isNum = true;
|
||
for (var i = 0; i < tmp.length; i++) {
|
||
if (isNaN(new Number(tmp[i]))) {
|
||
isNum = false;
|
||
break;
|
||
}
|
||
}
|
||
isIP = tmp.length == 4 && isNum;
|
||
if (isIP)
|
||
{
|
||
config.setting.DNSMode = false;
|
||
config.server.ip = keyValue[1];
|
||
}
|
||
else
|
||
{
|
||
config.setting.DNSMode = true;
|
||
config.server.DNS = keyValue[1];
|
||
}
|
||
|
||
}
|
||
if (keyValue[0] == 'port') {
|
||
config.server.port = keyValue[1];
|
||
}
|
||
if (keyValue[0] == 'name') {
|
||
config.server.name = keyValue[1];
|
||
}
|
||
if (keyValue[0] == 'eainame') {
|
||
config.server.eainame = keyValue[1];
|
||
}
|
||
if (keyValue[0] == 'env') {
|
||
//20220826,13871,0118013: 【先之科】PAD更新sop修改功能后测试错误提示
|
||
try {
|
||
if (config.serverList && config.serverList.hasOwnProperty(keyValue[1])) {
|
||
config.setting.environment = keyValue[1];
|
||
config.server.name = config.serverList[keyValue[1]].name;
|
||
config.server.eainame = config.serverList[keyValue[1]].eainame;
|
||
config.server.scname = config.serverList[keyValue[1]].scname;
|
||
config.server.timeout = config.serverList[keyValue[1]].timeout;
|
||
if (typeof (Storage) !== "undefined") {
|
||
localStorage.setItem(config.appName + "_server", JSON.stringify(config.server));
|
||
}
|
||
}
|
||
//config.setting.environment = keyValue[1];
|
||
} catch (e) {
|
||
|
||
}
|
||
}
|
||
}
|
||
} else if (param.indexOf('-debug') == 0) {
|
||
if (platform == 'electron') {
|
||
isDebug = true;
|
||
remote.getCurrentWebContents().openDevTools();
|
||
} else if (platform == 'nw') {
|
||
isDebug = true;
|
||
win.showDevTools();
|
||
}
|
||
} else if (param.indexOf('-online') == 0) {
|
||
config.cache.offline = false;
|
||
} else if (param.indexOf('-noneFullScreen') == 0) {
|
||
config.setting.fullScreen = 'N'
|
||
}
|
||
}
|
||
} catch (e) {
|
||
console.log(e);
|
||
}
|
||
}
|
||
localStorage.setItem(config.appName + "_server", JSON.stringify(config.server));
|
||
localStorage.setItem(config.appName + "_setting", JSON.stringify(config.setting));
|
||
return config;
|
||
}
|
||
|
||
function fullScreen(config) {
|
||
if (platform == 'electron') {
|
||
try {
|
||
const remote = nodeRequire('electron').remote;
|
||
var version = remote.app.getVersion();
|
||
if (version != '6.0.1') {
|
||
win = remote.getCurrentWindow();
|
||
if (config.setting.fullScreen == 'Y') {
|
||
win.setFullScreen(true);
|
||
} else {
|
||
win.setMinimumSize(1024, 768);
|
||
win.setSize(1024, 768);
|
||
win.center();
|
||
win.setResizable(false);
|
||
win.setMaximizable(false);
|
||
isFull = true;
|
||
}
|
||
}
|
||
} catch (e) { }
|
||
}
|
||
}
|
||
|
||
function init() {
|
||
var app = angular.module("update", ['pascalprecht.translate', 'ngMaterialLite', 'angularCSS']);
|
||
app.config(["$httpProvider", "$provide", "$translateProvider",
|
||
function ($httpProvider, $provide, $translateProvider) {
|
||
$translateProvider.useStaticFilesLoader({ prefix: 'module/system/localization/localization-', suffix: '.json' });
|
||
$translateProvider.preferredLanguage('zh_TW');
|
||
}
|
||
]);
|
||
app.value('config', {});
|
||
app.controller("update_controller", ["$scope", "$timeout", "$http", "$mdDialog", "config", "$translate", "$filter", function ($scope, $timeout, $http, $mdDialog, config, $translate, $filter) {
|
||
var newAppVersion;
|
||
$scope.mode = '';
|
||
$scope.isFull = isFull;
|
||
|
||
//20201023 雋辰,新增WS設定
|
||
$scope.showWS = false;
|
||
var showWSClickCount = 0;
|
||
|
||
$scope.init = function () {
|
||
//log.innerHTML = '...';
|
||
log = document.getElementById('update_log');
|
||
log.innerHTML = '...';
|
||
downloadConfig();
|
||
|
||
}
|
||
|
||
$scope.close = function () {
|
||
window.close();
|
||
}
|
||
|
||
$scope.loadServerList = function () {
|
||
var serverList = [];
|
||
if (config.serverList) {
|
||
for (var env_name in config.serverList) {
|
||
serverList.push({ code: env_name, label: $filter('translate')('Login.env.' + env_name), server: config.serverList[env_name] });
|
||
}
|
||
}
|
||
showSelect({
|
||
title: $filter('translate')('Login.ServerList'),
|
||
label: 'label',
|
||
code: 'code',
|
||
selectCode: '',
|
||
list: serverList,
|
||
confirm: function (item, dialog) {
|
||
dialog.hide();
|
||
config.setting.environment = $scope.environment = item.code;
|
||
config.server.name = item.server.name;
|
||
config.server.eainame = item.server.eainame;
|
||
//20220419 13871,增加sc設定
|
||
config.server.scname = item.server.scname;
|
||
if (typeof (Storage) !== "undefined") {
|
||
localStorage.setItem(config.appName + "_server", JSON.stringify(config.server));
|
||
localStorage.setItem(config.appName + "_setting", JSON.stringify(config.setting));
|
||
//localStorage.setItem(config.appName + "_lang", $scope.currentUse);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
$scope.checkNecessaryInformation = function () {
|
||
if (config.setting && config.setting.deviceName && config.setting.deviceName.length > 0) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//20201023 雋辰,顯示/隱藏WS設定
|
||
$scope.showWSClick = function () {
|
||
showWSClickCount++;
|
||
if (showWSClickCount >= 5) {
|
||
showWSClickCount = 0;
|
||
$scope.showWS = !$scope.showWS;
|
||
}
|
||
}
|
||
|
||
function showSelect(options) {
|
||
$mdDialog.dialog('JSplugins/angular-material-lite/template/radioList.tmp.html', function (dialog) {
|
||
//20210320 雋辰 , 增加額外功能按鈕
|
||
dialog.EXECUTE_FUNCTION = options.EXECUTE_FUNCTION;
|
||
dialog.EXECUTE_FUNCTION_BTN_IMG_URL = options.EXECUTE_FUNCTION_BTN_IMG_URL;
|
||
|
||
return {
|
||
//20220419 13871同步common.js,$rootScope.showSelect
|
||
title: options.title || $filter('translate')('common.msg.plz_select'),
|
||
label: options.label || 'label',
|
||
sub_label: options.sub_label, //2021/02/26 傳入subLabel
|
||
order: options.order || options.label,
|
||
selectCode: options.selectCode,
|
||
|
||
labelOutput: function (item) {
|
||
if (typeof (options.label) === 'function') {
|
||
return options.label(item);
|
||
} else {
|
||
return item[dialog.label];
|
||
}
|
||
},
|
||
code: options.code,
|
||
valueOutput: function (item) {
|
||
if (typeof (options.code) === 'function') {
|
||
return options.code(item);
|
||
} else {
|
||
return item[dialog.code];
|
||
}
|
||
},
|
||
back: function () {
|
||
this.hide();
|
||
},
|
||
itemList: options.list,
|
||
|
||
search: function (itemList, filter_string, strkey) {
|
||
|
||
var key = strkey;
|
||
var obj = {
|
||
[key]: filter_string
|
||
};
|
||
|
||
return filter_string != "" ? $filter('filter')(itemList, obj): itemList;
|
||
|
||
},
|
||
|
||
itemClick: function (item, event) {
|
||
if (options.confirm)
|
||
options.confirm(item, this);
|
||
},
|
||
itemCancel: function () {
|
||
dialog.hide();
|
||
if (options.cancel)
|
||
options.cancel(this);
|
||
},
|
||
isCancel: options.cancel != undefined,
|
||
background: {
|
||
click: function() {
|
||
dialog.hide();
|
||
}
|
||
},
|
||
//20210320 雋辰 , 增加額外功能按鈕,需要動態變更原資料寬度
|
||
checkItemWidth: function () {
|
||
if (dialog.EXECUTE_FUNCTION)
|
||
return { float: 'left', position: 'relative', width: 'calc(100% - 68px)' };
|
||
else
|
||
return { float: 'left', position: 'relative', width: '100%' };
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
function downloadConfig() {
|
||
$http.post('config/config.json').then(function (res) {
|
||
angular.merge(config, res.data);
|
||
if (typeof (Storage) !== "undefined") {
|
||
//20201023 雋辰,新增WS設定
|
||
angular.merge(config.serverList, JSON.parse(localStorage.getItem(config.appName + "_serverList")));
|
||
angular.merge(config.server, JSON.parse(localStorage.getItem(config.appName + "_server")));
|
||
angular.merge(config.setting, JSON.parse(localStorage.getItem(config.appName + "_setting")));
|
||
//config.server.name = 'mobilemiddleware';
|
||
//config.server.name = 'MES_Production_MESws_STD';
|
||
//config.server.eainame = 'MES_Production_MESws_EAI';
|
||
$scope.environment = config.setting.environment;
|
||
|
||
if (!config.setting.fullScreen) {
|
||
config.setting.fullScreen = 'N';
|
||
}
|
||
|
||
//載入Server設定
|
||
config.server = angular.merge({}, config.serverList[config.setting.environment]);//取出預設的Server資訊
|
||
var LocalServerConfig = JSON.parse(localStorage.getItem(config.appName + '_server'));//取出本地端儲存的Server資訊
|
||
angular.merge(config.server, LocalServerConfig);
|
||
if (config.server.name == '') {
|
||
config.server.name = 'MES_Production_MESws_STD';
|
||
}
|
||
if (config.server.eainame == '') {
|
||
config.server.eainame = 'MES_Production_MESws_EAI';
|
||
}
|
||
|
||
parseParamsToConfig(config);
|
||
//20220826,13871,0118013: 【先之科】PAD更新sop修改功能后测试错误提示
|
||
$scope.environment = config.setting.environment;
|
||
|
||
if (platform == 'electron') { win.setFullScreen(false); }
|
||
else if (platform == 'nw') { win.leaveFullscreen(); }
|
||
|
||
var temp = config.server.ip.split('.');
|
||
if (temp.length == 4) {
|
||
$scope.serverIp = temp;
|
||
} else {
|
||
$scope.serverIp = ["0", "0", "0", "0"];
|
||
}
|
||
$translate.use(config.setting.lang);
|
||
if (window.cordova) {
|
||
//20201223 雋辰,修正APK版初始版號被暫存值(空值)蓋掉
|
||
var storageVer = localStorage.getItem(config.appName + '_version');
|
||
if (storageVer && storageVer != '')
|
||
config.appVersion = storageVer;
|
||
}
|
||
$scope.config = config;
|
||
|
||
}
|
||
angular.element(document.querySelector('#update_controller')).css('display', 'block');
|
||
if (window.nodeRequire) {
|
||
$scope.isElectron = true;
|
||
checkUpdate();
|
||
} else if (window.cordova) {
|
||
try {
|
||
navigator.splashscreen.hide();
|
||
} catch (e) { };
|
||
$timeout(function () {
|
||
checkUpdate();
|
||
});
|
||
} else {
|
||
changeMode('setting');
|
||
}
|
||
});
|
||
}
|
||
|
||
function checkUpdate() {
|
||
//20201125 雋辰,新增選擇DNS/IP
|
||
var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip;
|
||
|
||
//2021/09/13 0099745: [嘉聯益] KMI平板開啟異常
|
||
if (ip == undefined) {
|
||
ip = "";
|
||
}
|
||
|
||
if (config.cache.offline) {
|
||
reDirect('index.html');
|
||
} else if ((!config.setting.DNSMode && config.server.ip != '0.0.0.0') ||
|
||
(config.setting.DNSMode && ip.length > 0) ) {
|
||
log.innerHTML = $filter('translate')('update.msg.checking_update');//檢查更新中...
|
||
|
||
sendToMESSrv_plain({
|
||
uri: 'tcMES_LiveUpdate.clsLiveUpdate.LiveUpdate',
|
||
content: {
|
||
applicationId: config.applicationId
|
||
},
|
||
success: function (data) {
|
||
data = JSON.parse(data);
|
||
if (data.Result != 'fail') {
|
||
//console.log(data.version);
|
||
newAppVersion = data.version;
|
||
servicePlatform = data.platform;
|
||
|
||
if (data.version == config.appVersion || data.version == '0.0.0.0' || data.version == '') {
|
||
checkUpdateExist();
|
||
} else {
|
||
if (data.url.indexOf('http://') == -1) {
|
||
data.url = 'http://' + ip + ':' + config.server.port + "/" + data.url;
|
||
}
|
||
downloadZip(data.url);
|
||
}
|
||
} else {
|
||
log.innerHTML = data.SysMsg;
|
||
}
|
||
}
|
||
});
|
||
} else {
|
||
//一開始IP還未設定的時候
|
||
changeMode('setting');
|
||
}
|
||
}
|
||
|
||
//檢查是否已經更新過
|
||
function checkUpdateExist() {
|
||
if (window.resolveLocalFileSystemURL) {
|
||
window.resolveLocalFileSystemURL(cordova.file.dataDirectory + 'update', function (updateFolder) {
|
||
reDirect(updateFolder.toURL() + '/index.html');
|
||
}, function () {
|
||
reDirect('index.html');
|
||
});
|
||
} else {
|
||
reDirect('index.html');
|
||
}
|
||
}
|
||
|
||
//download ZIP file
|
||
function downloadZip(url) {
|
||
log.innerHTML = $filter('translate')('update.msg.update_download_start');//开始下载更新...
|
||
try {
|
||
var zipDistUrl = cordova.file.dataDirectory;
|
||
var ft = new FileTransfer();
|
||
ft.onprogress = function (progressEvent) {
|
||
if (progressEvent.lengthComputable) {
|
||
//更新下載中
|
||
log.innerHTML = $filter('translate')('update.msg.update_downloading') + Math.floor(progressEvent.loaded / progressEvent.total * 100) + '%';
|
||
}
|
||
};
|
||
ft.download(url, zipDistUrl + 'update.zip',
|
||
function (r) {
|
||
log.innerHTML = $filter('translate')('update.msg.updating');//程式更新中...
|
||
if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {
|
||
unZIPforIOS(zipDistUrl);
|
||
} else {
|
||
prepareUnZip(zipDistUrl);
|
||
}
|
||
}, function (error) {
|
||
log.innerHTML = $filter('translate')('update.msg.cant_download');//無法下載更新,請確認伺服器連線是否正常;
|
||
changeMode('setting');
|
||
}
|
||
);
|
||
} catch (e) {
|
||
if (window.nodeRequire) {
|
||
var data = {
|
||
url: url,
|
||
method: 'GET',
|
||
type: "application/octet-stream",
|
||
responseType: 'arraybuffer'
|
||
},
|
||
request = nodeRequire('request'),
|
||
progress = nodeRequire('request-progress'),
|
||
fs = nodeRequire('fs'),
|
||
AppPath;
|
||
const Zip = nodeRequire('adm-zip-electron');
|
||
|
||
log.innerHTML = $filter('translate')('update.msg.updating');
|
||
if (platform == 'electron') {
|
||
AppPath = nodeRequire('electron').remote.app.getAppPath() + '\\';
|
||
} else {
|
||
var nwDir = nodeRequire('path').dirname(process.execPath);
|
||
AppPath = nwDir + '\\package.nw\\';
|
||
}
|
||
|
||
var updateFile = AppPath + 'update.zip';
|
||
var tempFile = fs.createWriteStream(updateFile);
|
||
tempFile.on('finish', function () {
|
||
tempFile.close(function () {
|
||
try {
|
||
log.innerHTML = $filter('translate')('update.msg.updating');//程式更新中...
|
||
var zip = new Zip(updateFile);
|
||
zip.extractAllTo(AppPath + 'www\\', true);
|
||
clearUpdate(AppPath, 'update.zip', function () {
|
||
reDirect('index.html');
|
||
});
|
||
|
||
} catch (e) {
|
||
log.innerHTML = $filter('translate')('update.msg.zip_cant_download') + '<br>' + e;//無法下載更新,更新用的檔案不存在,請確認伺服器連線資訊是否正確
|
||
changeMode('setting');
|
||
}
|
||
});
|
||
});
|
||
|
||
var request = request(url, function (error, response, body) {
|
||
if (error) {
|
||
log.innerHTML = $filter('translate')('update.msg.zip_cant_download');//無法下載更新,更新用的檔案不存在,請確認伺服器連線資訊是否正確
|
||
changeMode('setting');
|
||
} else {
|
||
log.innerHTML = $filter('translate')('update.msg.update_downloading') + '100%';
|
||
}
|
||
});
|
||
request.pipe(tempFile);
|
||
progress(request, {
|
||
throttle: 200, // Throttle the progress event to 2000ms, defaults to 1000ms
|
||
// delay: 1000, // Only start to emit after 1000ms delay, defaults to 0ms
|
||
// lengthHeader: 'x-transfer-length' // Length header to use, defaults to content-length
|
||
})
|
||
.on('progress', function (state) {
|
||
//更新下載中
|
||
log.innerHTML = $filter('translate')('update.msg.update_downloading') +
|
||
(Math.round(state.percent * 100)) + '%';
|
||
})
|
||
.on('error', function (err) {
|
||
log.innerHTML = $filter('translate')('update.msg.zip_cant_download');//無法下載更新,更新用的檔案不存在,請確認伺服器連線資訊是否正確
|
||
changeMode('setting');
|
||
});
|
||
} else {
|
||
reDirect('index.html');
|
||
}
|
||
}
|
||
}
|
||
|
||
var g_zipDistUrl;
|
||
function prepareUnZip(zipDistUrl) {
|
||
var srcUrl = cordova.file.applicationDirectory + 'www/';
|
||
g_zipDistUrl = zipDistUrl;
|
||
window.resolveLocalFileSystemURL(srcUrl,
|
||
function (directoryEntry) {
|
||
window.resolveLocalFileSystemURL(zipDistUrl, function (dstDirectoryEntry) {
|
||
dstDirectoryEntry.getDirectory('update', { create: true }, function (updateDirEntry) {
|
||
log.innerHTML = $filter('translate')('update.msg.prepare_updat'); //正在準備更新程式...
|
||
//get file cordova.js, cordova_plugins.js, plugins
|
||
directoryEntry.getFile('cordova.js', {}, function (fileEntry) {
|
||
//copy cordova.js
|
||
fileEntry.copyTo(updateDirEntry, 'cordova.js', function () {
|
||
directoryEntry.getFile('cordova_plugins.js', {}, function (fileEntry) {
|
||
//copy cordova_plugins.js
|
||
fileEntry.copyTo(updateDirEntry, 'cordova_plugins.js', function () {
|
||
directoryEntry.getDirectory('plugins', {}, function (pluginsDirEntry) {
|
||
//copy plugins
|
||
pluginsDirEntry.copyTo(updateDirEntry, 'plugins', function () {
|
||
directoryEntry.getDirectory('cordova-js-src', {}, function (pluginsDirEntry) {
|
||
//copy cordova-js-src
|
||
pluginsDirEntry.copyTo(updateDirEntry, 'cordova-js-src', function () {
|
||
directoryEntry.getDirectory('scripts', {}, function (pluginsDirEntry) {
|
||
//copy scripts
|
||
pluginsDirEntry.copyTo(updateDirEntry, 'scripts', function () {
|
||
unZIPforCordova(zipDistUrl);
|
||
}, copyfileError);
|
||
}, getDirectoryError);
|
||
}, copyfileError);
|
||
}, getDirectoryError);
|
||
}, copyfileError);
|
||
}, getDirectoryError);
|
||
}, copyfileError);
|
||
}, getDirectoryError);
|
||
}, copyfileError);
|
||
}, getDirectoryError);
|
||
}, getDirectoryError);
|
||
}, getDirectoryError);
|
||
}, getDirectoryError
|
||
);
|
||
}
|
||
|
||
function copyfileError(error) {
|
||
if (error.code == 9 || error.code == 12) {
|
||
unZIPforCordova(g_zipDistUrl);
|
||
} else {
|
||
log.innerHTML = $filter('translate')('update.msg.temp_file_cant_dele') + ":" + error.code;//暫存檔案刪除失敗,請重新下載
|
||
changeMode('setting');
|
||
}
|
||
}
|
||
|
||
function unZIPforCordova(zipDistUrl) {
|
||
log.innerHTML = $filter('translate')('update.msg.updating');//程式更新中...
|
||
var dstDir = zipDistUrl + 'update'
|
||
zip.unzip(zipDistUrl + 'update.zip', dstDir,
|
||
function (result) {
|
||
if (result == 0) {
|
||
clearUpdate(zipDistUrl, 'update.zip', function () {
|
||
//localStorage.setItem(config.appName + "_version", newAppVersion);
|
||
reDirect(zipDistUrl + 'update/index.html');
|
||
});
|
||
} else {
|
||
log.innerHTML = $filter('translate')('update.msg.zip_server_connect');//'更新檔解析失敗,請重新下載';
|
||
changeMode('setting');
|
||
}
|
||
},
|
||
function (progressEvent) {
|
||
log.innerHTML = $filter('translate')('update.msg.updating') + Math.round((progressEvent.loaded / progressEvent.total) * 100) + '%';
|
||
}
|
||
);
|
||
}
|
||
|
||
function unZIPforIOS(zipDistUrl) {
|
||
var srcUrl = cordova.file.applicationDirectory + 'www/';
|
||
var dstDir = zipDistUrl + 'update'
|
||
window.resolveLocalFileSystemURL(
|
||
srcUrl,
|
||
function (directoryEntry) {
|
||
window.resolveLocalFileSystemURL(zipDistUrl, function (dstDirectoryEntry) {
|
||
log.innerHTML = $filter('translate')('update.msg.prepare_updat'); //正在準備更新程式...
|
||
directoryEntry.copyTo(dstDirectoryEntry, 'update', function () {
|
||
zip.unzip(zipDistUrl + 'update.zip', dstDir,
|
||
function (result) {
|
||
if (result == 0) {
|
||
clearUpdate(zipDistUrl, 'update.zip', function () {
|
||
//localStorage.setItem(config.appName + "_version", newAppVersion);
|
||
reDirect(zipDistUrl + 'update/index.html');
|
||
});
|
||
} else {
|
||
log.innerHTML = $filter('translate')('update.msg.zip_server_connect');//'更新檔解析失敗,請重新下載';
|
||
changeMode('setting');
|
||
}
|
||
},
|
||
function (progressEvent) {
|
||
log.innerHTML = $filter('translate')('update.msg.updating') + Math.round((progressEvent.loaded / progressEvent.total) * 100) + '%';
|
||
}
|
||
);
|
||
}, function (error) {
|
||
if (error.code == 9 || error.code == 12) {
|
||
log.innerHTML = $filter('translate')('update.msg.delete_temp_file');//正在刪除暫存檔案...
|
||
resolveLocalFileSystemURL(dstDir, function (dstDirectory) {
|
||
dstDirectory.removeRecursively(function () {
|
||
unZIPforCordova(zipDistUrl);
|
||
}, function (error) {
|
||
log.innerHTML = $filter('translate')('update.msg.temp_file_cant_dele');//暫存檔案刪除失敗,請重新下載
|
||
changeMode('setting');
|
||
});
|
||
}, getDirectoryError);
|
||
} else {
|
||
log.innerHTML = $filter('translate')('update.msg.temp_file_cant_dele') + ":" + error.code;//暫存檔案刪除失敗,請重新下載
|
||
changeMode('setting');
|
||
}
|
||
});
|
||
}, getDirectoryError);
|
||
|
||
},
|
||
getDirectoryError
|
||
);
|
||
}
|
||
|
||
function getDirectoryError(error) {
|
||
log.innerHTML = "ERROR" + ":" + error.code;//暫存檔案刪除失敗,請重新下載
|
||
changeMode('setting');
|
||
}
|
||
|
||
//delete update.zip file
|
||
function clearUpdate(url, fileName, feedback) {
|
||
try {
|
||
resolveLocalFileSystemURL(url, function (dir) {
|
||
dir.getFile(fileName, { create: false }, function (fileEntry) {
|
||
fileEntry.remove(function () {
|
||
if (feedback)
|
||
feedback();
|
||
// The file has been removed succesfully
|
||
}, function (error) {
|
||
log.innerHTML = $filter('translate')('update.msg.temp_file_cant_dele');//暫存檔案刪除失敗
|
||
if (feedback)
|
||
feedback();
|
||
}, function () {
|
||
log.innerHTML = $filter('translate')('update.msg.temp_file_not_exist');//暫存檔案不存在
|
||
if (feedback)
|
||
feedback();
|
||
});
|
||
});
|
||
});
|
||
} catch (e) {
|
||
nodeRequire('fs').unlink(url + '\\' + fileName, function (error) {
|
||
if (feedback)
|
||
feedback();
|
||
});
|
||
}
|
||
}
|
||
|
||
function changeMode(mode) {
|
||
$timeout(function () {
|
||
$scope.mode = mode;
|
||
if (mode == 'setting') {
|
||
if (platform == 'electron') {
|
||
win.setSize(1024, 768);
|
||
win.center();
|
||
} else if (platform == 'nw') {
|
||
win.resizeTo(1024, 768);
|
||
}
|
||
} else {
|
||
if (platform == 'electron') {
|
||
win.setSize(1024, 768);
|
||
win.center();
|
||
} else if (platform == 'nw') {
|
||
win.resizeTo(1024, 768);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
$scope.reCheckUpdate = function () {
|
||
config.server.ip = combineIP($scope.serverIp);
|
||
config.server.name = config.serverList[config.setting.environment].name;
|
||
config.server.eainame = config.serverList[config.setting.environment].eainame;
|
||
//20220419 13871,增加sc設定
|
||
config.server.scname = config.serverList[config.setting.environment].scname;
|
||
|
||
localStorage.setItem(config.appName + "_serverList", JSON.stringify(config.serverList));
|
||
localStorage.setItem(config.appName + "_server", JSON.stringify(config.server));
|
||
localStorage.setItem(config.appName + "_setting", JSON.stringify(config.setting));
|
||
changeMode('');
|
||
checkUpdate();
|
||
}
|
||
|
||
function combineIP(array) {
|
||
var totalip;
|
||
array.forEach(function (ipstring) {
|
||
if (!totalip)
|
||
totalip = ipstring;
|
||
else
|
||
totalip += "." + ipstring;
|
||
});
|
||
return totalip;
|
||
}
|
||
|
||
function reDirect(url, msg) {
|
||
log.innerHTML = msg || $filter('translate')('update.msg.update_complete');//程式更新完成...
|
||
//底層為Cordova 的狀態下,一旦更新完成就把新的版本號寫入localStorage
|
||
if (window.cordova && newAppVersion != '0.0.0.0') {
|
||
localStorage.setItem(config.appName + "_version", newAppVersion);
|
||
}
|
||
localStorage.setItem(config.appName + "_servicePlatform", servicePlatform);
|
||
|
||
$timeout(function () {
|
||
if (platform == 'electron') {
|
||
createWindow(url);
|
||
} else if (platform == 'nw') {
|
||
createWindowNW(url);
|
||
} else {
|
||
document.location.href = url;
|
||
}
|
||
}, 100);
|
||
}
|
||
|
||
function createWindow(url) {
|
||
var BrowserWindow = nodeRequire('electron').remote.BrowserWindow;
|
||
var newWin = new BrowserWindow({
|
||
width: 1024,
|
||
minWidth: 1024,
|
||
height: 768,
|
||
minHeight: 768,
|
||
frame: false,
|
||
fullscreen: false,
|
||
fullscreenable: true,
|
||
titleBarStyle: 'customButtonsOnHover',
|
||
show: false
|
||
});
|
||
newWin.loadURL('file://' + __dirname + '/' + url);
|
||
newWin.on('closed', function () {
|
||
newWin = null;
|
||
});
|
||
newWin.once('ready-to-show', function () {
|
||
if (isDebug)
|
||
newWin.webContents.openDevTools();
|
||
newWin.show();
|
||
newWin.setFullScreen(config.setting.fullScreen == 'Y');
|
||
win.close();
|
||
});
|
||
}
|
||
|
||
function createWindowNW(url) {
|
||
var nw = nodeRequire('nw.gui'),
|
||
settings = {
|
||
position: "center",
|
||
min_width: 1024,
|
||
min_height: 768,
|
||
width: 1024,
|
||
height: 768,
|
||
resizable: true,
|
||
fullscreen: config.setting.fullScreen == 'N',
|
||
frame: false,
|
||
show: false,
|
||
icon: "icon/icon.png"
|
||
};
|
||
nw.Window.open('www/' + url, settings, function (new_win) {
|
||
if (isDebug)
|
||
new_win.showDevTools();
|
||
new_win.on('loaded', function () {
|
||
new_win.show();
|
||
win.close();
|
||
});
|
||
});
|
||
}
|
||
|
||
function prepareHeader(data) {
|
||
var header = {};
|
||
//TODO
|
||
header.Method = data.uri;
|
||
header["mds.userid"] = '';
|
||
header["mds.password"] = '';
|
||
header["mds.environment"] = config.setting.environment;
|
||
header["mds.language_mode"] = $translate.use();
|
||
header["mds.computer_name"] = config.client.ip;
|
||
header["mds.sessionno"] = config.mdssessionno;
|
||
return header;
|
||
}
|
||
|
||
function prepareContent(data) {
|
||
var content = {};
|
||
content.CompanyID = config.setting.companyId;
|
||
content.Equipment = '';
|
||
content = angular.merge(content, data.content);
|
||
return content;
|
||
}
|
||
|
||
function prepareMESHeader(data) {
|
||
var header = {};
|
||
//TODO
|
||
header["method"] = data.uri;
|
||
header["userid"] = config.cache.account || '';
|
||
header["languagemode"] = $translate.use();
|
||
header["computername"] = config.client.ip;
|
||
header["sessionno"] = config.mdssessionno;
|
||
return header;
|
||
}
|
||
|
||
function sendToMESSrv_plain(sendData) {
|
||
//20201125 雋辰,新增選擇DNS/IP
|
||
var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip;
|
||
var apiurl = config.server.name + '/wsInvoke.asmx/InvokeSrv_plainjson';
|
||
var liveupdate_url = 'http://' + ip + ':' + config.server.port + '/' + apiurl;
|
||
var header = prepareMESHeader(sendData);
|
||
|
||
var data = {
|
||
url: liveupdate_url,
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json;charset=UTF-8'
|
||
},
|
||
data: {
|
||
"uri": JSON.stringify(header),
|
||
"content": JSON.stringify(sendData.content)
|
||
}
|
||
};
|
||
if (config.server.timeout != 0)
|
||
data.timeout = config.server.timeout;
|
||
|
||
$http(data).success(function (data, status, headers, config) {
|
||
try {
|
||
var contentData = JSON.parse(data.d);
|
||
if (contentData.Code === '0' || contentData.Code === null || contentData.code === '0' || contentData.code === null) {
|
||
if (sendData.success)
|
||
sendData.success(contentData.ResultJson);
|
||
} else {
|
||
if (sendData.error) {
|
||
sendData.error(contentData);
|
||
} else {
|
||
log.innerHTML = contentData.exception;
|
||
changeMode('setting');
|
||
}
|
||
}
|
||
} catch (e) {
|
||
log.innerHTML = e
|
||
changeMode('setting');
|
||
}
|
||
}).error(function (a, b, c, d) {
|
||
log.innerHTML = $filter('translate')('update.msg.cant_get_verInfo');//無法取得版本資訊
|
||
changeMode('setting');
|
||
});
|
||
}
|
||
|
||
|
||
function send(sendData) {
|
||
var data = {
|
||
url: 'http://' + config.server.ip + ':' + config.server.port + '/mobilemiddleware/api/v1/transaction/json',
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json;charset=UTF-8'
|
||
},
|
||
data: {
|
||
"applicationId": config.applicationId,
|
||
"uri": sendData.uri,
|
||
"headers": prepareHeader(sendData),
|
||
"cookies": [],
|
||
'content': JSON.stringify(prepareContent(sendData))
|
||
}
|
||
};
|
||
if (config.server.timeout != 0)
|
||
data.timeout = config.server.timeout;
|
||
|
||
$http(data).success(function (data, status, headers, config) {
|
||
try {
|
||
var contentData = JSON.parse(data.content);
|
||
if (contentData.IsSuccess) {
|
||
if (sendData.success)
|
||
sendData.success(contentData.Result);
|
||
} else {
|
||
if (sendData.error) {
|
||
sendData.error(contentData);
|
||
} else {
|
||
log.innerHTML = contentData.SysException;
|
||
changeMode('setting');
|
||
}
|
||
}
|
||
} catch (e) {
|
||
log.innerHTML = e
|
||
changeMode('setting');
|
||
}
|
||
}).error(function (a, b, c, d) {
|
||
log.innerHTML = $filter('translate')('update.msg.cant_get_verInfo');//無法取得版本資訊
|
||
changeMode('setting');
|
||
});
|
||
}
|
||
}]);
|
||
};
|