This repo is archived. You can view files and clone it, but cannot push or open issues or pull requests.
SXS20240115/SRC/iMES_PAD/config/bootstrap.js

223 lines
10 KiB
JavaScript
Raw Normal View History

2024-01-24 16:47:50 +08:00
define(['angular', 'angularAMD', 'app', 'text!config/config.json', 'moment', 'd3'],
function (angular, angularAMD, app, config) {
'use strict';
config = JSON.parse(config);
config.menu = [];
config.program = [];
config.cache = config.cache || {};
//20201005 雋辰,確保客製module在最後一個
var index = config.module.indexOf("moduleCustomer");
if (index >= 0) {
var tmpItems = config.module.splice(index, 1);
config.module.splice(config.module.length, 0, tmpItems[0]);
}
if ($(window).width() < 1024) {
var scale = Math.round($(window).width() / 1024 * 100) / 100;
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.75) {
scale = 0.75; // 0.8 以下比例過小,所以最小一律為 0.8
}
document.getElementsByTagName('style')[0].innerHTML += "html, body{ zoom:" + scale + "; }";
} catch (e) { }
}
var mergeConfig = function (menus, module_menus) {
if (module_menus.length > 0) {
module_menus.forEach(function (module_menu) {
var isMerge = false;
if (menus.length > 0) {
for (var i in menus) {
if (menus[i].name === module_menu.name) {
menus[i] = module_menu;
isMerge = true;
break;
}
}
}
if (!isMerge) {
menus.push(module_menu);
}
});
}
return menus;
}
//20201005 雋辰,處理客製menu、program
var mergeConfigMenu = function (menus, module_menus) {
//module - moduleItem - page
if (module_menus.length > 0) {
module_menus.forEach(function (module_menu) {
if (menus.length > 0) {
for (var i in menus) {
//如果無相同module不進行動作 , 禁止客製新模組 只可新item、page
if (menus[i].name === module_menu.name) {
var subFlag = false;
//存在childs即為menu 否則為 program
if (menus[i].childs && module_menu.childs) {
module_menu.childs.forEach(moduleItem => {
var child = menus[i].childs.filter(item=> {
return moduleItem.name == item.name;
});
//在此module下 不存在相同 item
if (child.length <= 0) {
menus[i].childs.push(moduleItem);
menus[i].childs[menus[i].childs.length - 1].isCustom = true;
}
else {
//在此module下 存在相同 item , 須將 成員(欄位) 等於 客製的成員(欄位)值
child[0].isCustom = true;
child[0].title = moduleItem.title;
child[0].icon = moduleItem.icon;
child[0].enTitle = moduleItem.enTitle;
child[0].color = moduleItem.color;
child[0].isShow = moduleItem.isShow;
child[0].order = moduleItem.order;
child[0].default = moduleItem.default;
//處理page
moduleItem.childs.forEach(itemPage=> {
var index = -1;
var page = child[0].childs.filter(function (orgItemPage, pageIndex) {
if (itemPage.name == orgItemPage.name) index = pageIndex;
return itemPage.name == orgItemPage.name;
});
if (page.length <= 0) {
child[0].childs.push(itemPage);
child[0].childs[child[0].childs.length - 1].isCustom = true;
}
else {
child[0].childs[index] = itemPage;
child[0].childs[index].isCustom = true;
}
});
}
});
}
break;
}
}
}
});
}
return menus;
}
var mergeConfigProgram = function (programs, module_programs) {
if (module_programs.length > 0) {
module_programs.forEach(function (module_program) {
var isMerge = false;
module_program.isCustom = true;
if (programs.length > 0) {
for (var i in programs) {
if (programs[i].name === module_program.name) {
programs[i] = module_program;
isMerge = true;
break;
}
}
}
if (!isMerge) {
programs.push(module_program);
}
});
}
return programs;
},
loadSetting = function (i, callback) {
var menuPath = 'text!module/' + config.module[i] + '/config/menu.json';
var programPath = 'text!module/' + config.module[i] + '/config/program.json';
require([menuPath, programPath], function (module_menu, module_program) {
if (config.module[i] == "moduleCustomer") {
if (module_menu !== '')
config.menu = mergeConfigMenu(config.menu, JSON.parse(module_menu));
if (module_program !== '')
config.program = mergeConfigProgram(config.program, JSON.parse(module_program));
}
else {
if (module_menu !== '')
config.menu = mergeConfig(config.menu, JSON.parse(module_menu));
if (module_program !== '')
config.program = mergeConfig(config.program, JSON.parse(module_program));
}
i = i + 1;
if (i < config.module.length) {
loadSetting(i, callback);
} else {
app.constant('config', config).constant('config_menu', config.menu);
callback();
}
}, function (e) {
alert('can\'t load module ' + config.module[i] + '\r\n' + e);
i = i + 1;
if (i < config.module.length) {
loadSetting(i, callback);
} else {
app.constant('config', config).constant('config_menu', config.menu);
callback();
}
});
},
onDeviceReady = function () {
angularAMD.bootstrap(app);
},
ExcuteConfig = function (i, callback) {
var configPath = 'module/' + config.module[i] + '/config/config';
require([configPath], function () {
i = i + 1;
if (i < config.module.length) {
ExcuteConfig(i, callback);
} else {
callback();
}
}, function () {
//console.error('module '+config.module[i]+' didn\'t have config.js');
i = i + 1;
if (i < config.module.length) {
ExcuteConfig(i, callback);
} else {
callback();
}
});
},
bootstrap = function (callback) {
require(['sys-config', 'sys-common', 'cus-common', 'sys-menu', 'module/system/service/MMWService',
'module/system/program/menu/RouterExtendProvider'], callback);
};
loadSetting(0, function () {
bootstrap(function () {
ExcuteConfig(0, function () {
if (typeof cordova === 'undefined') {
//非APP的啟動
angular.element().ready(function () {
try {
onDeviceReady();
} catch (e) {
console.error(e.stack || e.message || e);
}
});
} else {
//裝置上運行時的啟動
//因為已經運行了startup.js, 所以已經deviceready了
//document.addEventListener('deviceready', onDeviceReady, false);
//進行裝置方向的鎖定
if (config.cache.device != 'phone') {
var orientation = screen.msOrientation || (screen.orientation || screen.mozOrientation || {
}).type;
if (screen.lockOrientation != undefined)
screen.lockOrientation(orientation);
else if (screen.orientation.lock)
screen.orientation.lock(orientation);
//screen.orientation.lock(screen.orientation.type);
}
onDeviceReady();
}
});
});
});
});