no message
parent
89ac95b3c2
commit
dde14015b5
@ -1,54 +0,0 @@
|
|||||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="ko">
|
|
||||||
<head>
|
|
||||||
<%@include file="/WEB-INF/jsp/include/fims/tail-biz.jsp" %>
|
|
||||||
<script type="text/javaScript">
|
|
||||||
var popup = null;
|
|
||||||
var unblockUI = () => $.unblockUI();
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<!-- <body> -->
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="skipnavigation">
|
|
||||||
<ul>
|
|
||||||
<li><a href="#content-box">본문 바로가기</a></li>
|
|
||||||
<li><a href="#lnb">주 메뉴 바로가기</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<!-- //skipnavigation -->
|
|
||||||
<div id="wrap">
|
|
||||||
<div class="bind-contents">
|
|
||||||
<t:insertAttribute name="header"/>
|
|
||||||
|
|
||||||
<div class="cont main">
|
|
||||||
<div class="cont_container">
|
|
||||||
<article class="main" id="content-box">
|
|
||||||
<p class="history"><%@include file="/WEB-INF/jsp/include/fims/breadcrumb.jsp" %></p>
|
|
||||||
<div class="container-window-header1">
|
|
||||||
<img src="${ctx }/resources/image/fims/biz/common/titleLogo_01.png"/>
|
|
||||||
<p class="container-window-header-title">${urlInfoMap.menuName}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="content">
|
|
||||||
<t:insertAttribute name="content"/>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- //cont main -->
|
|
||||||
</div>
|
|
||||||
<!-- //bind-contents -->
|
|
||||||
<t:insertAttribute name="footer"/>
|
|
||||||
</div>
|
|
||||||
<!-- //wrap -->
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
|
|
@ -0,0 +1,182 @@
|
|||||||
|
/**메뉴의 생성과 선택 시 동작을 지원한다.
|
||||||
|
*/
|
||||||
|
class FimsMenuSupport {
|
||||||
|
/**새 MenuSupport를 생성한다.
|
||||||
|
* @param selector {string} 메뉴를 담을 컨테이너에 대한 css selector
|
||||||
|
*/
|
||||||
|
constructor(selector) {
|
||||||
|
this._container = document.querySelector(this._selector = selector);
|
||||||
|
this._horizontal = this._container && this._container.classList.contains('menu-horizontal');
|
||||||
|
this._orientation = this._horizontal ? "horizontal" : "vertical";
|
||||||
|
this._template = this._orientation + "-menu-template";
|
||||||
|
|
||||||
|
this._menuItem = '<li data-key="{menuID}" class="menu-item">'
|
||||||
|
+'<a href="#" data-url="{url}" onclick="openMenu(this)" class="menu-link{toggle}">'
|
||||||
|
+'<i class="menu-icon tf-icons bx bx-layout"></i>'
|
||||||
|
+'<div data-i18n="{menuName}">{menuName}</div>'
|
||||||
|
+'</a>'
|
||||||
|
+'{menuSub}'
|
||||||
|
+'</li>';
|
||||||
|
|
||||||
|
this._menuSub = '<ul class="menu-sub">{children}</ul>';
|
||||||
|
this._menus = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**메뉴를 생성할 정보를 설정한다.
|
||||||
|
* @param menus {array} 메뉴 정보 배열<br />
|
||||||
|
* 각 메뉴 정보의 레이아웃은 다음과 같다.<br />
|
||||||
|
* {"id":메뉴 아이디, "name":"메뉴 이름", "url":"실행 url", "parentID":"상위 메뉴 아이디", "description":"메뉴 설명", "imagePath":"이미지 경로", "displayWindow":"표시 창", "children":[하위 메뉴 배열]}
|
||||||
|
* @returns MenuSupport
|
||||||
|
*/
|
||||||
|
setMenuInfo(menus) {
|
||||||
|
let setParent = menu => {
|
||||||
|
let children = menu.children || [];
|
||||||
|
if (children.length < 1) return;
|
||||||
|
|
||||||
|
children.forEach(child => {
|
||||||
|
child.parent = menu;
|
||||||
|
setParent(child);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
menus.forEach(menu => setParent(menu));
|
||||||
|
this._menus = menus;
|
||||||
|
|
||||||
|
let menuItemTag = menu => {
|
||||||
|
let tag = this._menuItem
|
||||||
|
.replace(/{menuID}/gi, menu.id)
|
||||||
|
.replace(/{menuName}/gi, menu.name)
|
||||||
|
.replace(/{url}/gi, !menu.url ? "javascript:void(0);" : wctx.url(menu.url));
|
||||||
|
let parent = menu.children && menu.children.length > 0;
|
||||||
|
tag = tag.replace(/{toggle}/gi, !parent ? "" : " menu-toggle");
|
||||||
|
if (!parent)
|
||||||
|
return tag.replace(/{menuSub}/gi, "");
|
||||||
|
|
||||||
|
let children = menu.children.map(child => menuItemTag(child)).join("\n\t")
|
||||||
|
return tag.replace(/{menuSub}/gi, this._menuSub.replace(/{children}/gi, children));
|
||||||
|
}
|
||||||
|
let tags = (menus || []).map(menu => menuItemTag(menu));
|
||||||
|
document.querySelector("#menus").innerHTML = tags.join("");
|
||||||
|
|
||||||
|
return this._init();
|
||||||
|
}
|
||||||
|
|
||||||
|
_init() {
|
||||||
|
document.querySelectorAll(this._selector).forEach(element => {
|
||||||
|
let menu = new Menu(element, {
|
||||||
|
orientation: this._orientation,
|
||||||
|
closeChildren: this._horizontal,
|
||||||
|
showDropdownOnHover: localStorage.getItem('templateCustomizer-' + this._template + '--ShowDropdownOnHover')
|
||||||
|
? localStorage.getItem('templateCustomizer-' + this._template + '--ShowDropdownOnHover') === 'true'
|
||||||
|
: window.templateCustomizer !== undefined
|
||||||
|
? window.templateCustomizer.settings.defaultShowDropdownOnHover
|
||||||
|
: true
|
||||||
|
});
|
||||||
|
|
||||||
|
window.Helpers.scrollToActive(false); //animate = false
|
||||||
|
window.Helpers.mainMenu = menu;
|
||||||
|
});
|
||||||
|
//Sets toggler
|
||||||
|
document.querySelectorAll('.layout-menu-toggle').forEach(item => {
|
||||||
|
item.addEventListener('click', event => {
|
||||||
|
event.preventDefault();
|
||||||
|
window.Helpers.toggleCollapsed();
|
||||||
|
if (config.enableMenuLocalStorage && !window.Helpers.isSmallScreen()) {
|
||||||
|
try {
|
||||||
|
localStorage.setItem(
|
||||||
|
'templateCustomizer-' + this._template + '--LayoutCollapsed',
|
||||||
|
String(window.Helpers.isCollapsed())
|
||||||
|
);
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Display menu toggle (layout-menu-toggle) on hover with delay
|
||||||
|
let delay = (elem, callback) => {
|
||||||
|
let timeout = null;
|
||||||
|
elem.onmouseenter = () => {
|
||||||
|
// Set timeout to be a timer which will invoke callback after 300ms (not for small screen)
|
||||||
|
timeout = !Helpers.isSmallScreen() ? setTimeout(callback, 300) : setTimeout(callback, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
elem.onmouseleave = () => {
|
||||||
|
// Clear any timers set to timeout
|
||||||
|
document.querySelector('.layout-menu-toggle').classList.remove('d-block');
|
||||||
|
clearTimeout(timeout);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
if (this._container) {
|
||||||
|
delay(this._container, () => {
|
||||||
|
// not for small screen
|
||||||
|
if (!Helpers.isSmallScreen()) {
|
||||||
|
document.querySelector('.layout-menu-toggle').classList.add('d-block');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**지정한 url의 메뉴를 활성화 한다.
|
||||||
|
* @param url {string} 메뉴 url
|
||||||
|
* @returns MenuSupport
|
||||||
|
*/
|
||||||
|
setActive(url) {
|
||||||
|
document
|
||||||
|
.querySelectorAll(this._selector + " li")
|
||||||
|
.forEach(li => li.classList.remove("active", "open"));
|
||||||
|
|
||||||
|
let a = document.querySelector(this._selector + ' a[href=\"' + wctx.url(url) + '\"]');
|
||||||
|
if (!a) return this;
|
||||||
|
|
||||||
|
let activate = (e, open) => {
|
||||||
|
let p = e.parentNode;
|
||||||
|
let tag = (p != this._container ? p : null) ? p.tagName : "";
|
||||||
|
if (!tag) return;
|
||||||
|
|
||||||
|
if ("li" == tag.toLowerCase()) {
|
||||||
|
p.classList.add("active");
|
||||||
|
if (open)
|
||||||
|
p.classList.add("open");
|
||||||
|
}
|
||||||
|
activate(p, true);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
activate(a);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**지정하는 url의 메뉴 정보를 반환한다.
|
||||||
|
* @param url {string} 메뉴 url
|
||||||
|
* @returns 지정하는 url의 메뉴 정보
|
||||||
|
*/
|
||||||
|
getMenu(url) {
|
||||||
|
let find = menus => {
|
||||||
|
for (let i = 0; i < menus.length; ++i) {
|
||||||
|
let menu = menus[i];
|
||||||
|
if (url == menu.url)
|
||||||
|
return menu;
|
||||||
|
let found = find(menu.children || []);
|
||||||
|
if (found)
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
return find(this._menus);
|
||||||
|
}
|
||||||
|
|
||||||
|
breadcrumb(url, separator = " / ") {
|
||||||
|
let menu = this.getMenu(url);
|
||||||
|
if (!menu)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
let getName = menu => {
|
||||||
|
let name = menu.name;
|
||||||
|
let parent = !menu.parent ? "" : getName(menu.parent);
|
||||||
|
return parent ? parent + separator + name : name;
|
||||||
|
}
|
||||||
|
|
||||||
|
return getName(menu);
|
||||||
|
}
|
||||||
|
}
|
@ -1,135 +0,0 @@
|
|||||||
/* ====================
|
|
||||||
* 2023.03.22 이범준
|
|
||||||
* 동적 메뉴 렌더링 함수
|
|
||||||
====================*/
|
|
||||||
class FimsMenuSupport {
|
|
||||||
constructor(selector) {
|
|
||||||
|
|
||||||
this.rootUlAttrDraw = function(element){
|
|
||||||
element.className = "menu-inner";
|
|
||||||
};
|
|
||||||
this.ulAttrDraw = function(element, menuObj){
|
|
||||||
element.className = "menu-sub";
|
|
||||||
};
|
|
||||||
this.liAttrDraw = function(element, menuObj){
|
|
||||||
element.className = "menu-item";
|
|
||||||
};
|
|
||||||
this.liContentDraw = function(element, menuObj){
|
|
||||||
|
|
||||||
let a = document.createElement("a");
|
|
||||||
a.href = "javascript:void(0)";
|
|
||||||
a.classList.add("menu-link");
|
|
||||||
if(menuObj.childCnt > 0){ //하위메뉴가 있으면
|
|
||||||
a.classList.add("menu-toggle");
|
|
||||||
} else {
|
|
||||||
a.setAttribute("onclick", "openMenu('"+menuObj.menuSid+"', '"+menuObj.menuName+"')");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 아이콘
|
|
||||||
let i = document.createElement("i");
|
|
||||||
i.classList.add("menu-icon");
|
|
||||||
i.classList.add("bx");
|
|
||||||
if(menuObj.iconClass != null && menuObj.iconClass != ""){
|
|
||||||
i.classList.add(menuObj.iconClass);
|
|
||||||
} else {
|
|
||||||
menuObj.childCnt > 0 ? i.classList.add("bx-folder-plus") : i.classList.add("bx-file");
|
|
||||||
}
|
|
||||||
|
|
||||||
a.appendChild(i);
|
|
||||||
|
|
||||||
let div = document.createElement("div");
|
|
||||||
let text = document.createTextNode(menuObj.menuName);
|
|
||||||
div.appendChild(text);
|
|
||||||
a.appendChild(div);
|
|
||||||
element.appendChild(a);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//메뉴 렌더링
|
|
||||||
menuDraw(allMenuList){
|
|
||||||
let rootUl = document.getElementById("menus");
|
|
||||||
this.rootUlAttrDraw(rootUl);
|
|
||||||
|
|
||||||
for(let status1 = 0; status1 < allMenuList.length; status1++){
|
|
||||||
let dep1 = allMenuList[status1];
|
|
||||||
if(dep1.menuDepth == 1){
|
|
||||||
let li = document.createElement("li");
|
|
||||||
this.liAttrDraw(li,dep1);
|
|
||||||
this.liContentDraw(li,dep1);
|
|
||||||
|
|
||||||
if(Number(dep1.childCnt) > 0){
|
|
||||||
let ul = document.createElement("ul");
|
|
||||||
this.ulAttrDraw(ul,dep1);
|
|
||||||
li.appendChild(ul);
|
|
||||||
|
|
||||||
for(let status2 = 0; status2 < allMenuList.length; status2++){
|
|
||||||
let dep2 = allMenuList[status2];
|
|
||||||
if(dep2.menuDepth == 2 && dep1.menuSid == dep2.parentSid) {
|
|
||||||
let li = document.createElement("li");
|
|
||||||
this.liAttrDraw(li,dep2);
|
|
||||||
this.liContentDraw(li,dep2);
|
|
||||||
|
|
||||||
if(Number(dep2.childCnt) > 0){
|
|
||||||
let ul = document.createElement("ul");
|
|
||||||
this.ulAttrDraw(ul,dep2);
|
|
||||||
li.appendChild(ul);
|
|
||||||
|
|
||||||
for(let status3 = 0; status3 < allMenuList.length; status3++){
|
|
||||||
let dep3 = allMenuList[status3];
|
|
||||||
if(dep3.menuDepth == 3 && dep2.menuSid == dep3.parentSid) {
|
|
||||||
let li = document.createElement("li");
|
|
||||||
this.liAttrDraw(li,dep3);
|
|
||||||
this.liContentDraw(li,dep3);
|
|
||||||
|
|
||||||
if(Number(dep3.childCnt) > 0){
|
|
||||||
let ul = document.createElement("ul");
|
|
||||||
this.ulAttrDraw(ul,dep3);
|
|
||||||
li.appendChild(ul);
|
|
||||||
|
|
||||||
for(let status4 = 0; status4 < allMenuList.length; status4++) {
|
|
||||||
let dep4 = allMenuList[status4];
|
|
||||||
if(dep4.menuDepth == 4 && dep3.menuSid == dep4.parentSid){
|
|
||||||
let li = document.createElement("li");
|
|
||||||
this.liAttrDraw(li,dep4);
|
|
||||||
this.liContentDraw(li,dep4);
|
|
||||||
|
|
||||||
ul.appendChild(li);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.appendChild(li);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.appendChild(li);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rootUl.append(li);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const menu1 = document.querySelector("#layout-menu");
|
|
||||||
menu1.classList.add("menu");
|
|
||||||
menu1.classList.add("menu-vertical");
|
|
||||||
menu1.classList.add("bg-menu-theme");
|
|
||||||
menu1.classList.add("overflow-hidden");
|
|
||||||
|
|
||||||
if (menu1) {
|
|
||||||
new Menu(menu1 , { closeChildren : false, accordion : false });
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//스크롤바 추가
|
|
||||||
new PerfectScrollbar(document.querySelector('.menu-inner'), {
|
|
||||||
wheelPropagation: false
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
Loading…
Reference in New Issue