223 lines
10 KiB
JavaScript
223 lines
10 KiB
JavaScript
![]() |
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();
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|