@bwg-ui/core 1.3.5 → 1.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{CMSearchIntfGwP01-CuGDAfFM.cjs → CMSearchIntfGwP01-0t3umcc_.cjs} +1 -1
- package/dist/chunks/{CMSearchIntfGwP01-DBpDpgQr.js → CMSearchIntfGwP01-DCHZJn2H.js} +1 -1
- package/dist/chunks/{MenuReport-yw8tZDUk.cjs → MenuReport-C70mGz2g.cjs} +1 -1
- package/dist/chunks/{MenuReport-CCbCy7yt.js → MenuReport-IBdoU2S3.js} +2 -2
- package/dist/chunks/common-components-DNgQR-Ge.cjs +1109 -0
- package/dist/chunks/{common-components-DtzVj5lz.js → common-components-DeYL3J6X.js} +13058 -13574
- package/dist/chunks/layout-components-Bf9IsLUS.cjs +38 -0
- package/dist/chunks/{layout-components-ljht1sHh.js → layout-components-DnuV2Psp.js} +831 -759
- package/dist/chunks/provider-Bi5OYngn.cjs +1 -0
- package/dist/chunks/{provider-Kxea5IoZ.js → provider-Bx4VpaFf.js} +90 -74
- package/dist/components/common/BwgGrid.d.ts +31 -8
- package/dist/components/common/BwgGrid.d.ts.map +1 -1
- package/dist/components/common/BwgView.d.ts.map +1 -1
- package/dist/components/common/index.cjs +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/core/BwgEmpSearch.d.ts +2 -2
- package/dist/components/core/BwgEmpSearch.d.ts.map +1 -1
- package/dist/components/core/BwgMaskedDate.d.ts.map +1 -1
- package/dist/components/core/BwgMaskedRange.d.ts.map +1 -1
- package/dist/components/core/index.cjs +1 -1
- package/dist/components/core/index.js +211 -208
- package/dist/components/guide/index.cjs +1 -1
- package/dist/components/guide/index.js +2 -2
- package/dist/components/layout/AppWrapper.d.ts +5 -1
- package/dist/components/layout/AppWrapper.d.ts.map +1 -1
- package/dist/components/layout/BwgCoreLogin.d.ts.map +1 -1
- package/dist/components/layout/BwgPortal01.d.ts.map +1 -1
- package/dist/components/layout/extension/ContentWrapper.d.ts.map +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +1 -1
- package/dist/components/pages/board/CMMyBoardM01.d.ts.map +1 -1
- package/dist/components/pages/rsrc/CMPopuMstrM01.d.ts.map +1 -1
- package/dist/components/popup/SearchOrganizationP01.d.ts.map +1 -1
- package/dist/components/popup/SearchOrganizationP02.d.ts.map +1 -1
- package/dist/components/popup/index.cjs +1 -1
- package/dist/components/popup/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +273 -271
- package/dist/provider/contexts/PageContentContext.d.ts +23 -0
- package/dist/provider/contexts/PageContentContext.d.ts.map +1 -0
- package/dist/provider/contexts/index.d.ts +1 -0
- package/dist/provider/contexts/index.d.ts.map +1 -1
- package/dist/provider/index.cjs +1 -1
- package/dist/provider/index.js +21 -19
- package/dist/public/realgrid/css/realgrid-style-custom.css +6 -10
- package/dist/stores/index.cjs +1 -1
- package/dist/stores/index.js +1 -1
- package/dist/styles/assets/images/backgrounds/kiam_login_bg.png +0 -0
- package/dist/styles/assets/images/header/icon/ico-bell.svg +3 -3
- package/dist/styles/assets/images/header/icon/ico-logout.svg +10 -10
- package/dist/styles/assets/images/header/icon/ico-setting.svg +4 -4
- package/dist/styles/assets/images/header/icon/ico-sidebar-arrow.svg +3 -3
- package/dist/styles/components_02.css +35 -0
- package/dist/styles/global.css +9 -1
- package/dist/styles/index.css +3 -0
- package/dist/styles/layout.css +14 -4
- package/dist/styles/layout_02.css +99 -0
- package/dist/styles/login.css +7 -44
- package/dist/styles/login_02.css +35 -0
- package/dist/utils/apiUtils.d.ts.map +1 -1
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.d.ts +16 -22
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1253 -1222
- package/dist/utils/messageUtils.d.ts +36 -48
- package/dist/utils/messageUtils.d.ts.map +1 -1
- package/dist/utils/modalUtils.d.ts +68 -0
- package/dist/utils/modalUtils.d.ts.map +1 -0
- package/dist/utils/notificationUtils.d.ts +50 -41
- package/dist/utils/notificationUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/common-components-CbkWoYfX.cjs +0 -1111
- package/dist/chunks/layout-components-BzLAGXiu.cjs +0 -38
- package/dist/chunks/provider-r4mkv5Zs.cjs +0 -1
package/dist/provider/index.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
|
-
import { A as o, B as
|
|
1
|
+
import { A as o, B as a, C as r, P as u, o as i, S as d, p as C, r as t, f as v, b as P, j as c, h as n, k as S, i as g, g as m, l as p, n as B, s as h, m as l, e as L, c as w, q as A, u as f } from "../chunks/provider-Bx4VpaFf.js";
|
|
2
2
|
export {
|
|
3
3
|
o as AuthProvider,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
u as
|
|
7
|
-
i as
|
|
8
|
-
d as
|
|
9
|
-
C as
|
|
10
|
-
|
|
11
|
-
v as
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
a as BwgViewProvider,
|
|
5
|
+
r as CommonCodeProvider,
|
|
6
|
+
u as PageContentProvider,
|
|
7
|
+
i as ScreenProtectProvider,
|
|
8
|
+
d as SearchBoxProvider,
|
|
9
|
+
C as ServiceCodeProvider,
|
|
10
|
+
t as useAllServiceCodes,
|
|
11
|
+
v as useAuth,
|
|
12
|
+
P as useBwgView,
|
|
13
|
+
c as useCodeColor,
|
|
14
|
+
n as useCodeList,
|
|
15
|
+
S as useCodeListByOption,
|
|
16
|
+
g as useCodeName,
|
|
17
|
+
m as useCommonCode,
|
|
17
18
|
p as useGridLookup,
|
|
18
19
|
B as useLock,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
h as useLogServiceCodeConfig,
|
|
21
|
+
l as usePageContent,
|
|
22
|
+
L as usePopup,
|
|
23
|
+
w as useSearchBox,
|
|
24
|
+
A as useServiceCode,
|
|
25
|
+
f as useServiceCodeValue
|
|
24
26
|
};
|
|
@@ -101,7 +101,6 @@ THEME : Realgrid style 재정의
|
|
|
101
101
|
.rg-fixed-row {
|
|
102
102
|
background-color: none;
|
|
103
103
|
}
|
|
104
|
-
|
|
105
104
|
.rg-fixed-body .rg-data-row {
|
|
106
105
|
background-color: none;
|
|
107
106
|
}
|
|
@@ -515,26 +514,23 @@ THEME : Realgrid style 재정의
|
|
|
515
514
|
|
|
516
515
|
/* 250822 고현아 추가 */
|
|
517
516
|
.rg-rowbarcontainer .rg-table tr td.rg-rowindicator-focus {
|
|
517
|
+
/* background: none; */
|
|
518
518
|
background-color: #e1efff;
|
|
519
519
|
border-top: 1px solid #85c2fe;
|
|
520
520
|
border-bottom: 1px solid #85c2fe;
|
|
521
521
|
}
|
|
522
522
|
|
|
523
523
|
.rg-rowbarcontainer .rg-table tr td.rg-rowindicator-select {
|
|
524
|
-
|
|
525
|
-
border-top: 1px solid #85c2fe;
|
|
526
|
-
border-bottom: 1px solid #85c2fe;
|
|
524
|
+
background: none;
|
|
527
525
|
}
|
|
528
526
|
.rg-focused-cell {
|
|
529
|
-
|
|
530
|
-
border-top: 1px solid #85c2fe !important;
|
|
531
|
-
border-bottom: 1px solid #85c2fe !important;
|
|
527
|
+
border: 1px solid #85c2fe;
|
|
532
528
|
}
|
|
533
529
|
|
|
534
|
-
.rg-focused-row {
|
|
530
|
+
.rg-data-row.rg-focused-row {
|
|
535
531
|
background: #e1efff !important;
|
|
536
|
-
border-top: 1px solid #85c2fe
|
|
537
|
-
border-bottom: 1px solid #85c2fe
|
|
532
|
+
border-top: 1px solid #85c2fe;
|
|
533
|
+
border-bottom: 1px solid #85c2fe;
|
|
538
534
|
}
|
|
539
535
|
.rg-selection-cell {
|
|
540
536
|
background: none !important;
|
package/dist/stores/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("zustand"),I=require("../utils/index.cjs"),L=require("antd"),V=require("../chunks/layout-components-BzLAGXiu.cjs"),k=require("react"),Q=require("axios");function ee(r,n){let e;try{e=r()}catch{return}return{getItem:o=>{var t;const a=d=>d===null?null:JSON.parse(d,void 0),c=(t=e.getItem(o))!=null?t:null;return c instanceof Promise?c.then(a):a(c)},setItem:(o,t)=>e.setItem(o,JSON.stringify(t,void 0)),removeItem:o=>e.removeItem(o)}}const G=r=>n=>{try{const e=r(n);return e instanceof Promise?e:{then(s){return G(s)(e)},catch(s){return this}}}catch(e){return{then(s){return this},catch(s){return G(s)(e)}}}},te=(r,n)=>(e,s,o)=>{let t={storage:ee(()=>localStorage),partialize:C=>C,version:0,merge:(C,N)=>({...N,...C}),...n},a=!1;const c=new Set,d=new Set;let i=t.storage;if(!i)return r((...C)=>{console.warn(`[zustand persist middleware] Unable to update item '${t.name}', the given storage is currently unavailable.`),e(...C)},s,o);const l=()=>{const C=t.partialize({...s()});return i.setItem(t.name,{state:C,version:t.version})},h=o.setState;o.setState=(C,N)=>(h(C,N),l());const m=r((...C)=>(e(...C),l()),s,o);o.getInitialState=()=>m;let u;const f=()=>{var C,N;if(!i)return;a=!1,c.forEach(g=>{var M;return g((M=s())!=null?M:m)});const S=((N=t.onRehydrateStorage)==null?void 0:N.call(t,(C=s())!=null?C:m))||void 0;return G(i.getItem.bind(i))(t.name).then(g=>{if(g)if(typeof g.version=="number"&&g.version!==t.version){if(t.migrate){const M=t.migrate(g.state,g.version);return M instanceof Promise?M.then(A=>[!0,A]):[!0,M]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,g.state];return[!1,void 0]}).then(g=>{var M;const[A,Z]=g;if(u=t.merge(Z,(M=s())!=null?M:m),e(u,!0),A)return l()}).then(()=>{S?.(u,void 0),u=s(),a=!0,d.forEach(g=>g(u))}).catch(g=>{S?.(void 0,g)})};return o.persist={setOptions:C=>{t={...t,...C},C.storage&&(i=C.storage)},clearStorage:()=>{i?.removeItem(t.name)},getOptions:()=>t,rehydrate:()=>f(),hasHydrated:()=>a,onHydrate:C=>(c.add(C),()=>{c.delete(C)}),onFinishHydration:C=>(d.add(C),()=>{d.delete(C)})},t.skipHydration||f(),u||m},v=te,P=b.create()(v((r,n)=>({user:null,hrInfo:null,buttonAuths:{},componentSize:1,gridSize:2,spacingSize:2,enableProtectWrapper:!0,gridLayouts:{},theme:"modern",isLoggedIn:()=>!!n().user,setLoginUser:(e,s)=>{r({user:e,hrInfo:s??null}),console.log("사용자 로그인:",e,s)},clearLoginUser:()=>{r({user:null,hrInfo:null,buttonAuths:{}}),console.log("사용자 로그아웃")},updateUser:(e,s)=>{const o=n().user,t=n().hrInfo;o&&r({user:{...o,...e}}),t&&r({hrInfo:{...t,...s}})},setComponentSize:e=>{r({componentSize:e}),console.log("컴포넌트 사이즈 변경:",e)},setGridSize:e=>{r({gridSize:e}),console.log("그리드 사이즈 변경:",e)},setSpacingSize:e=>{r({spacingSize:e}),console.log("여백 사이즈 변경:",e)},setEnableProtectWrapper:e=>{r({enableProtectWrapper:e})},setTheme:e=>{r({theme:e}),console.log("테마 변경:",e)},getButtonAuth:(e,s)=>{const o=`${e}_${s}`;return n().buttonAuths[o]||null},setButtonAuth:(e,s,o)=>{const t=`${e}_${s}`;r(a=>({buttonAuths:{...a.buttonAuths,[t]:o}}))},clearButtonAuths:()=>{r({buttonAuths:{}})},getGridLayouts:e=>n().gridLayouts[e]||[],getGridLayout:(e,s,o)=>n().getGridLayouts(e).find(c=>c.menuId===s&&c.gridId===o)||null,saveGridLayout:(e,s,o,t)=>{const a={...n().gridLayouts};a[e]||(a[e]=[]);const c=a[e].findIndex(i=>i.menuId===s&&i.gridId===o),d={menuId:s,gridId:o,layout:t};c>=0?a[e][c]=d:a[e].push(d),r({gridLayouts:a}),console.log(`[UserStore] 그리드 레이아웃 저장 완료: ${e}/${s}/${o}`)},removeGridLayout:(e,s,o)=>{const t={...n().gridLayouts};t[e]&&(t[e]=t[e].filter(a=>!(a.menuId===s&&a.gridId===o)),r({gridLayouts:t}),console.log(`[UserStore] 그리드 레이아웃 삭제 완료: ${e}/${s}/${o}`))},clearGridLayouts:e=>{const s={...n().gridLayouts};delete s[e],r({gridLayouts:s}),console.log(`[UserStore] ${e}의 모든 그리드 레이아웃 삭제 완료`)},clearAllGridLayouts:()=>{r({gridLayouts:{}}),console.log("[UserStore] 전체 그리드 레이아웃 삭제 완료")}}),{name:"user-storage",partialize:r=>({user:r.user,hrInfo:r.hrInfo,componentSize:r.componentSize,gridSize:r.gridSize,spacingSize:r.spacingSize,enableProtectWrapper:r.enableProtectWrapper,gridLayouts:r.gridLayouts,theme:r.theme})})),E={CACHE_SIZE_LIMIT:1e3},p={codeCache:new Map,nameCache:new Map,optionCache:new Map,colorCache:new Map,loadedGroups:new Set,cacheHits:new Map,clearCache(){this.codeCache.clear(),this.nameCache.clear(),this.optionCache.clear(),this.colorCache.clear(),this.loadedGroups.clear(),this.cacheHits.clear()},cleanupCache(){const r=Array.from(this.cacheHits.entries());r.sort((e,s)=>e[1]-s[1]),r.slice(0,Math.floor(r.length*.3)).forEach(([e])=>{this.codeCache.delete(e),this.nameCache.delete(e),this.optionCache.delete(e),this.colorCache.delete(e),this.cacheHits.delete(e)})},isGroupLoaded(r){return this.loadedGroups.has(r)},markGroupLoaded(r){this.loadedGroups.add(r)}},O=r=>{console.log("대규모 데이터 변환 시작:",r);const n={};if(r&&r.code&&Array.isArray(r.code)){const e=r.code,s=r.opt||[],o=new Map;s.forEach(t=>{t.cmmnCd&&t.enblYn==="Y"&&(o.has(t.cmmnCd)||o.set(t.cmmnCd,[]),o.get(t.cmmnCd).push(t))}),e.forEach(t=>{if(t&&t.cmmnCdGrp&&t.cmmnCd&&t.enblYn==="Y"){const a=t.cmmnCdGrp;n[a]||(n[a]={});const d=(o.get(t.cmmnCd)||[]).reduce((i,l)=>(l.optnCd&&l.optnNm&&(i[l.optnCd]=l.optnNm),i),{});n[a][t.cmmnCd]={codeValue:t.cmmnCd,codeNm:t.cmmnCdNm,groupCode:t.cmmnCdGrp,commonCode:t.cmmnCd,labelColor:t.cmmnCdClr,systemCodeYn:t.syscdYn,sortOrder:parseInt(t.sortOrd)||1,enabled:t.enblYn==="Y",options:Object.keys(d).length>0?d:null,originalData:t}}})}return console.log("대규모 데이터 변환 완료:",n),n},y=b.create()(v((r,n)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchSystemCodes:async()=>{r({isLoading:!0,error:null});try{console.log("시스템 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await I.callService(I.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("시스템 공통코드 응답:",e),console.log("시스템 공통코드목록:",e.code),console.log("시스템 공통코드옵션목록:",e.opt);const s=O(e),t={...n().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),r({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("시스템 공통코드 데이터 가져오기 완료")}catch(e){console.error("시스템 공통코드 데이터 가져오기 실패:",e),r({isLoading:!1,error:e instanceof Error?e.message:"시스템 공통코드 데이터 가져오기 실패"})}},fetchBusinessCodes:async()=>{r({isLoading:!0,error:null});try{console.log("업무 공통코드 데이터 가져오기 시작: SCMSIGN00302");const e=await I.callService("SCMSIGN00302",{sysCd:__SYS_CD__});console.log("업무 공통코드 응답:",e),console.log("업무 공통코드목록:",e.code),console.log("업무 공통코드옵션목록:",e.opt);const s=O(e),t={...n().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),r({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("업무 공통코드 데이터 가져오기 완료")}catch(e){console.error("업무 공통코드 데이터 가져오기 실패:",e),r({isLoading:!1,error:e instanceof Error?e.message:"업무 공통코드 데이터 가져오기 실패"})}},fetchData:async()=>{r({isLoading:!0,error:null});try{console.log("전체 공통코드 데이터 가져오기 시작 (시스템 + 업무)");const[e,s]=await Promise.all([I.callService(I.getServiceCode("SRCH_CODE"),{crprCd:"100"}),I.callService("SCMSIGN00302",{sysCd:__SYS_CD__})]);console.log("시스템 공통코드 응답:",e),console.log("업무 공통코드 응답:",s);const o=O(e),t=O(s),a={...o,...t};p.clearCache();const c=new Set(Object.keys(a));c.forEach(d=>{p.markGroupLoaded(d)}),r({codeData:a,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:c}),console.log("전체 공통코드 데이터 가져오기 완료")}catch(e){console.error("전체 공통코드 데이터 가져오기 실패:",e),r({isLoading:!1,error:e instanceof Error?e.message:"전체 공통코드 데이터 가져오기 실패"})}},loadSpecificGroup:async e=>{const{codeData:s,loadedGroups:o}=n();if(!s||o.has(e))return;const t=new Set(o).add(e);r({loadedGroups:t}),p.markGroupLoaded(e)},setData:e=>{p.clearCache();const s=new Set(Object.keys(e));s.forEach(o=>{p.markGroupLoaded(o)}),r({codeData:e,lastUpdated:new Date,loadedGroups:s})},clearData:()=>{p.clearCache(),r({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set})},getLoadedGroups:()=>Array.from(n().loadedGroups)}),{name:"large-data-storage",partialize:r=>({codeData:r.codeData,lastUpdated:r.lastUpdated,loadedGroups:Array.from(r.loadedGroups)})})),D=b.create()(v((r,n)=>({get codeData(){return y.getState().codeData},get isLoading(){return y.getState().isLoading},get error(){return y.getState().error},get lastUpdated(){return y.getState().lastUpdated},fetchCommonCodes:async()=>{await y.getState().fetchData()},getCodeList:(e,s)=>{const{enabledOnly:o=!0,systemCodeOnly:t=!1,sortByOrder:a=!1,excludeParentCode:c=!1}=s||{},d=`simpleCodeList_${e}_${o}_${t}_${a}_${c}`;if(p.optionCache.has(d)){const f=p.cacheHits.get(d)||0;return p.cacheHits.set(d,f+1),p.optionCache.get(d)}const i=y.getState().codeData;if(!i)return[];if(!p.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],h=i[e];h&&Object.values(h).forEach(f=>{if(!(o&&!f.enabled)&&!(t&&f.systemCodeYn!=="Y"))if(c){const C=e.length,N=f.codeValue.substring(C);N.length>0&&l.push({...f,codeValue:N})}else l.push(f)});let m;a?m=l.sort((f,C)=>f.sortOrder!==C.sortOrder?f.sortOrder-C.sortOrder:f.codeValue.localeCompare(C.codeValue)):m=l.sort((f,C)=>f.codeValue.localeCompare(C.codeValue));const u=m.map(f=>({label:f.codeNm,value:f.codeValue,tagColor:f.labelColor}));return p.optionCache.size>=E.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.optionCache.set(d,u),p.cacheHits.set(d,1),u},getCodeName:e=>{if(p.nameCache.has(e)){const o=p.cacheHits.get(`name_${e}`)||0;return p.cacheHits.set(`name_${e}`,o+1),p.nameCache.get(e)}const s=y.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.nameCache.set(e,t.codeNm),p.cacheHits.set(`name_${e}`,1),t.codeNm;return null},getCodeColor:e=>{if(p.colorCache.has(e)){const o=p.cacheHits.get(`color_${e}`)||0;return p.cacheHits.set(`color_${e}`,o+1),p.colorCache.get(e)}const s=y.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.colorCache.set(e,t.labelColor||""),p.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getGridLookup:e=>{const s=`gridLookup_${e}`;if(p.optionCache.has(s)){const i=p.cacheHits.get(s)||0;return p.cacheHits.set(s,i+1),p.optionCache.get(s)}const o=y.getState().codeData;if(!o)return{labels:[],values:[],lookupDisplay:!0};const t=o[e];if(!t)return{labels:[],values:[],lookupDisplay:!0};const a=[],c=[];Object.values(t).filter(i=>i.enabled).sort((i,l)=>i.sortOrder-l.sortOrder).forEach(i=>{a.push(i.codeNm),c.push(i.codeValue)});const d={labels:a,values:c,lookupDisplay:!0};return p.optionCache.set(s,d),p.cacheHits.set(s,1),d},getCodeByOption:(e,s,o)=>{const t=`codeByOption_${e}_${s}_${o}`;if(p.codeCache.has(t)){const l=p.cacheHits.get(t)||0;return p.cacheHits.set(t,l+1),p.codeCache.get(t)}const a=y.getState().codeData;if(!a)return[];const c=[],d=a[e];d&&Object.values(d).forEach(l=>{l.enabled&&l.options&&l.options[s]===o&&c.push({...l,codeNm:l.options[s]||l.codeNm})});const i=c.sort((l,h)=>l.codeValue.localeCompare(h.codeValue));return p.codeCache.size>=E.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.codeCache.set(t,i),p.cacheHits.set(t,1),i},getCodeListByOption:(e,s,o)=>{const{enabledOnly:t=!0,systemCodeOnly:a=!1,sortByOrder:c=!1}=o||{},d=`codeListByOption_${e}_${s}_${t}_${a}_${c}`;if(p.codeCache.has(d)){const u=p.cacheHits.get(d)||0;return p.cacheHits.set(d,u+1),p.codeCache.get(d)}const i=y.getState().codeData;if(!i)return[];if(!p.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],h=i[e];h&&Object.values(h).forEach(u=>{t&&!u.enabled||a&&u.systemCodeYn!=="Y"||u.options&&u.options[s]&&l.push({label:u.options[s],value:u.commonCode,tagColor:u.labelColor})});let m;return c?m=l.sort((u,f)=>u.value.localeCompare(f.value)):m=l.sort((u,f)=>u.value.localeCompare(f.value)),p.codeCache.size>=E.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.codeCache.set(d,m),p.cacheHits.set(d,1),m},getAvailableGroupCodes:()=>{const e="available_group_codes";if(p.nameCache.has(e)){const t=p.cacheHits.get(e)||0;return p.cacheHits.set(e,t+1),JSON.parse(p.nameCache.get(e))}const s=y.getState().codeData;if(!s)return[];const o=Object.keys(s).sort();return p.nameCache.set(e,JSON.stringify(o)),p.cacheHits.set(e,1),o},clearCodes:()=>{y.getState().clearData()}}),{name:"code-storage",partialize:r=>({})})),oe=b.create()(v((r,n)=>({get codeData(){return y.getState().codeData},get isLoading(){return y.getState().isLoading},get error(){return y.getState().error},get lastUpdated(){return y.getState().lastUpdated},fetchCommonCodes:async()=>{await y.getState().fetchData()},getOptionValue:(e,s)=>{const o=`option_${e}_${s}`;if(p.optionCache.has(o)){const c=p.cacheHits.get(o)||0;return p.cacheHits.set(o,c+1),p.optionCache.get(o)}const t=y.getState().codeData;if(!t)return null;const a=t[e];if(a&&a[s]){const c=a[s].options;return p.optionCache.set(o,c),p.cacheHits.set(o,1),c}return null},getOptionByKey:(e,s,o)=>{const t=`option_${e}_${s}_${o}`;if(p.optionCache.has(t)){const d=p.cacheHits.get(t)||0;return p.cacheHits.set(t,d+1),p.optionCache.get(t)}const a=n().getOptionValue(e,s),c=a?a[o]:null;return p.optionCache.set(t,c),p.cacheHits.set(t,1),c},clearCodes:()=>{y.getState().clearData()}}),{name:"option-storage",partialize:r=>({})})),se=b.create()(v((r,n)=>({get codeData(){return y.getState().codeData},get isLoading(){return y.getState().isLoading},get error(){return y.getState().error},get lastUpdated(){return y.getState().lastUpdated},fetchCommonCodes:async()=>{await y.getState().fetchData()},getColorCode:e=>{if(p.colorCache.has(e)){const o=p.cacheHits.get(`color_${e}`)||0;return p.cacheHits.set(`color_${e}`,o+1),p.colorCache.get(e)}const s=y.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.colorCache.set(e,t.labelColor||""),p.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(p.optionCache.has(e)){const t=p.cacheHits.get(e)||0;return p.cacheHits.set(e,t+1),p.optionCache.get(e)}const s=y.getState().codeData;if(!s)return[];const o=[];return Object.values(s).forEach(t=>{Object.values(t).forEach(a=>{a.labelColor&&o.push({code:a.codeValue,color:a.labelColor})})}),p.optionCache.set(e,o),p.cacheHits.set(e,1),o},clearCodes:()=>{y.getState().clearData()}}),{name:"color-storage",partialize:r=>({})})),re=(r,n)=>({nodes:{},rootIds:[],loadedFor:void 0,loading:!1,error:void 0,treeNodes:[],isMenuBookmarked:e=>Object.values(n().nodes).some(s=>s.type==="M"&&s.menuId===e),getPrntBkmkIdByMenuId:e=>{const s=F(n().nodes,e);return s?n().nodes[s]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const s=F(n().nodes,e);if(!s)return null;const o=n().nodes[s];return o?.type==="M"?o:null},getFolderTree:e=>{const{nodes:s,rootIds:o}=n(),t=c=>e?c.toLowerCase().includes(e.toLowerCase()):!0,a=c=>{const d=s[c];if(!d||d.type!=="F")return null;const i=d,l=(i.children||[]).map(m=>s[m]).filter(m=>!!m&&m.type==="F").map(m=>a(m.bkmkId)).filter(Boolean);return t(i.bkmkNm)||l.length>0?{key:i.bkmkId,title:`📁 ${i.bkmkNm}`,children:l.length?l:void 0}:null};return o.map(c=>a(c)).filter(Boolean)},loadFavorites:async(e,s=!1)=>{console.log("loadFavorites ::::: ",e,s);const o=n();if(!(!s&&o.loadedFor===e&&Object.keys(o.nodes).length)){r({loading:!0,error:void 0});try{const t=await I.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],c=ne(a),d=w(c.nodes,c.rootIds);r({...c,treeNodes:d,loadedFor:e,loading:!1})}catch(t){throw r({loading:!1,error:t?.message||"즐겨찾기 로드 실패"}),t}}},loadFavoritesIfNeeded:async e=>{const s=n();(s.loadedFor!==e||Object.keys(s.nodes).length===0)&&await n().loadFavorites(e)},clearFavorites:()=>{r({nodes:{},rootIds:[],treeNodes:[],loadedFor:void 0,loading:!1,error:void 0}),console.log("📚 북마크 스토어 초기화 완료")},addNode:async e=>{const s=K(n()),o=ae();r(t=>{const a=e.sortOrdr??x(t,e.prntBkmkId),c={...t,nodes:{...t.nodes,[o]:e.type==="F"?{bkmkId:o,type:"F",prntBkmkId:e.prntBkmkId||"-",sortOrdr:a,bkmkNm:e.bkmkNm??"새 폴더",children:[],sysCd:e.sysCd,userId:e.userId}:{bkmkId:o,type:"M",prntBkmkId:e.prntBkmkId,sortOrdr:a,menuId:e.menuId??"",menuNm:e.menuNm,sysCd:e.sysCd,userId:e.userId}},rootIds:t.rootIds.slice(),treeNodes:t.treeNodes};return ce(c,o,e.prntBkmkId),c.treeNodes=w(c.nodes,c.rootIds),c});try{let t=o;const a=x(n(),e.prntBkmkId),c=await I.callService("SCMBKMK00102",{iudFlag:"I",type:e.type,sysCd:e.sysCd,userId:e.userId,bkmkId:o,bkmkNm:e.bkmkNm,prntBkmkId:e.prntBkmkId,menuId:e.menuId,sortOrdr:a,chngId:I.getUserId()});return t=String(c?.bkmkId??c?.itemId??o),r(d=>{const i=le(d,o,t);return{...i,treeNodes:w(i.nodes,i.rootIds)}}),t}catch(t){throw r(s),t}},moveNode:async({bkmkId:e,newPrntBkmkId:s,sortOrdr:o,userId:t})=>{const a=n(),c=structuredClone(a.nodes),d=[...a.rootIds],i=c[e];if(!i)return;if(s!=="-"){const u=c[s];if(!u||u.type!=="F")throw new Error("부모는 폴더만 가능합니다.")}const l=i.prntBkmkId??"-",h=l==="-"?d:c[l].children||=[];{const u=h.indexOf(e);u>=0&&h.splice(u,1)}const m=s==="-"?d:c[s].children||=[];m.splice(Math.max(0,Math.min(o,m.length)),0,e),i.prntBkmkId=s,r({nodes:c,rootIds:d}),j(c,d,s),j(c,d,l);try{await I.callService("SCMBKMK00104",{bkmkId:e,prntBkmkId:s,sortOrdr:o,chngId:t})}catch(u){throw r(a),u}},removeNode:async e=>{const s=K(n());r(o=>{if(!o.nodes[e])return o;const t={...o,nodes:{...o.nodes},rootIds:o.rootIds.slice(),treeNodes:o.treeNodes};return X(t,e),t.treeNodes=w(t.nodes,t.rootIds),t});try{await I.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw r(s),o}},editNode:async({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const c=K(n());r(d=>{const i={...d,nodes:{...d.nodes}},l=i.nodes[e];return l?.type==="F"&&typeof o=="string"&&(i.nodes[e]={...l,bkmkNm:o}),i});try{await I.callService("SCMBKMK00102",{iudFlag:"U",userId:s,bkmkId:e,bkmkNm:o,prntBkmkId:t,sortOrdr:a,chngId:I.getUserId()})}catch(d){throw r(c),d}},addFolder:async(e,s,o,t)=>await n().addNode({type:"F",bkmkNm:e,prntBkmkId:s,sysCd:o,userId:t}),addMenuToFolder:async(e,s)=>F(n().nodes,s.menuId)?"이미 북마크에 저장된 메뉴입니다.":await n().addNode({type:"M",prntBkmkId:e,sysCd:"KH",userId:I.getUserId(),menuId:s.menuId,menuNm:s.menuNm}),toggleMenuFavorite:async(e,s)=>{if(!e)return;const o=n(),t=Object.values(o.nodes).find(c=>c.type==="M"&&c.menuId===s.menuId);if(t){await n().removeNode(t.bkmkId);return}let a=z(o);a||(await n().loadFavorites(e,!0),a=z(n())),a&&await n().addNode({type:"M",prntBkmkId:a,sysCd:"KH",userId:I.getUserId(),menuId:s.menuId,menuNm:s.menuNm})},removeMenuByMenuId:async e=>{const s=n(),o=F(s.nodes,e);o&&await n().removeNode(o)},removeMenu:async e=>{await n().removeNode(e)},removeFolder:async e=>{await n().removeNode(e)},editFolder:async(e,s,o,t,a)=>{await n().editNode({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})},convertToAntTreeData:(e,s,o,t=!1)=>{const a=d=>o?d.toLowerCase().includes(o.toLowerCase()):!0,c=d=>{const i=e[d];if(!i||t&&i.type!=="F")return null;if(i.type==="F"){const l=i,h=(l.children||[]).map(u=>c(u)).filter(Boolean);return a(l.bkmkNm)||h.length>0?{key:l.bkmkId,type:"F",title:`📁 ${l.bkmkNm}`,bkmkNm:l.bkmkNm,prntBkmkId:l.prntBkmkId,sortOrdr:l.sortOrdr,fullPath:l.fullPath,children:h.length?h:void 0}:null}else{const l=i,h=l.menuNm?`${l.menuNm} (${l.menuId})`:l.menuId;return a(h)?{key:l.bkmkId,type:"M",title:`📄 ${h}`,prntBkmkId:l.prntBkmkId,sortOrdr:l.sortOrdr,fullPath:l.fullPath,isLeaf:!0}:null}};return s.map(c).filter(Boolean)}}),R=b.create(re);function ne(r){const n={},e=[],s=o=>{o.forEach(t=>{const a={type:t.type,bkmkId:t.bkmkId??t.BKMK_ID??t.id,prntBkmkId:t.prntBkmkId??t.PRNT_BKMK_ID??"-",sortOrdr:Number(t.sortOrdr??t.SORT_ORDR??0),sysCd:t.sysCd??t.SYS_CD,userId:t.userId??t.USER_ID,fullPath:t.fullPath??t.FULL_PATH};if(t.type==="F"){n[a.bkmkId]={...a,bkmkNm:t.bkmkNm??t.BKMK_NM??t.name??a.bkmkId,children:[]};const c=Array.isArray(t.children)?t.children:[];s(c)}else n[a.bkmkId]={...a,menuId:t.menuId??t.MENU_ID??"",menuNm:t.menuNm??t.MENU_NM}})};return s(r),Object.values(n).forEach(o=>{if(o.prntBkmkId&&o.prntBkmkId!=="-"){const t=n[o.prntBkmkId];t?.type==="F"&&t.children.push(o.bkmkId)}else o.type==="F"&&e.push(o.bkmkId)}),e.sort((o,t)=>(n[o].sortOrdr??0)-(n[t].sortOrdr??0)),Object.values(n).forEach(o=>{o.type==="F"&&o.children.sort((a,c)=>(n[a].sortOrdr??0)-(n[c].sortOrdr??0))}),{nodes:n,rootIds:e}}function K(r){return{...r,nodes:JSON.parse(JSON.stringify(r.nodes)),rootIds:r.rootIds.slice()}}function ae(){return`tmp_${I.generateUID()}`}function x(r,n){if(!n||n==="-")return r.rootIds.length;const e=r.nodes[n];return e?e.children.length:0}function ce(r,n,e){const s=r.nodes[n];if(s)if(e&&e!=="-"){const o=r.nodes[e];if(!o||o.type!=="F")return;s.prntBkmkId=e,o.children=[...o.children,n]}else s.prntBkmkId="-",r.rootIds=[...r.rootIds,n]}function de(r,n){const e=r.nodes[n];if(!e)return;const s=e.prntBkmkId;if(s&&s!=="-"){const o=r.nodes[s];o?.type==="F"&&(o.children=o.children.filter(t=>t!==n))}else r.rootIds=r.rootIds.filter(o=>o!==n)}function X(r,n){const e=r.nodes[n];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>X(r,a)),de(r,n);const{[n]:s,...o}=r.nodes;r.nodes=o}function le(r,n,e){if(n===e)return r;const s=r.nodes[n];if(!s)return r;const o=JSON.parse(JSON.stringify(s));o.bkmkId=e;const t={...r.nodes,[e]:o};delete t[n];let a=r.rootIds;if(o.prntBkmkId&&o.prntBkmkId!=="-"){const c=t[o.prntBkmkId];c?.type==="F"&&(t[o.prntBkmkId]={...c,children:c.children.map(d=>d===n?e:d)})}else a=r.rootIds.map(c=>c===n?e:c);return{...r,nodes:t,rootIds:a}}function z(r){return r.rootIds.find(n=>r.nodes[n]?.type==="F")??null}function w(r,n){const e={};Object.values(r).forEach(d=>{const i=d.bkmkId,l=d.prntBkmkId;!i||!l||l==="-"||l===i||(e[l]??=[]).push(i)});const s=new Set,o=d=>{if(s.has(d))return null;const i=r[d];if(!i)return null;s.add(d);try{if(i.type==="F"){const h=i,m=e[d]??[];return{type:"F",bkmkId:d,bkmkNm:h.bkmkNm,prntBkmkId:h.prntBkmkId,children:m.map(o).filter(Boolean)}}const l=i;return{type:"M",bkmkId:d,bkmkNm:l.menuNm,menuId:l.menuId,menuNm:l.menuNm,prntBkmkId:l.prntBkmkId}}finally{s.delete(d)}},t=Object.values(r).filter(d=>d.prntBkmkId==="-"&&d.type==="M").map(d=>d.bkmkId),a=Object.values(r).filter(d=>d.prntBkmkId==="-"&&d.type==="F").map(d=>d.bkmkId);return Array.from(new Set([...n,...t,...a])).map(o).filter(Boolean)}function F(r,n){for(const e of Object.values(r))if(e.type==="M"&&e.menuId===n)return e.bkmkId;return null}function j(r,n,e){(!e||e==="-"?n:r[e].children||[]).forEach((o,t)=>{const a=r[o];a&&(a.sortOrdr=t)})}const H={DEFAULT_PRNT_GBCD:1},pe=r=>r&&typeof r=="object"&&typeof r.menuId=="string"&&typeof r.menuNm=="string",Y=r=>Array.isArray(r)&&r.every(pe);let B=[],q=[];const ie=r=>{if(r&&typeof r=="object"){const n=r;if(n.menus&&Y(n.menus))return n.menus;if(Y(r))return r}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},ue=(r,n)=>!!n&&r.crprCd===n.crprCd&&r.userId===n.userId&&(r.prntGbcd??H.DEFAULT_PRNT_GBCD)===(n.prntGbcd??H.DEFAULT_PRNT_GBCD),me=r=>{if(B.length===r.length&&B.every((t,a)=>t.menuId===r[a]?.menuId&&t.menuPrntId===r[a]?.menuPrntId))return q;if(!r.length)return[];const n=new Map,e=[];r.forEach(t=>t?.menuId&&n.set(t.menuId,{...t,children:[]})),r.forEach(t=>{const a=n.get(t.menuId);a&&(t.menuPrntId&&t.menuPrntId!==""&&t.menuPrntId!=="-"?n.get(t.menuPrntId)?.children?.push(a):e.push(a))});const s=t=>t.sort((a,c)=>(a?.menuNo??0)-(c?.menuNo??0)).map(a=>({...a,children:a.children&&a.children.length?s(a.children):void 0})),o=s(e);return B=[...r],q=o,o},_=b.create((r,n)=>({menuList:[],flatMenuList:[],isLoading:!1,error:null,_lastFetchParams:null,fetchMenu:async({crprCd:e,userId:s,prntGbcd:o})=>{const t={crprCd:e,userId:s,prntGbcd:o??H.DEFAULT_PRNT_GBCD};if(ue(t,n()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}r({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await I.callService(I.getServiceCode("AUTH_MENU"),t),c=ie(a),d=me(c);r({flatMenuList:c,menuList:d,isLoading:!1,error:null})}catch(a){r({isLoading:!1,error:a?.message??"메뉴 로드 실패"})}},clearMenu:()=>{r({menuList:[],flatMenuList:[],error:null,_lastFetchParams:null})},findMenuById:e=>{const{flatMenuList:s}=n();return s.find(o=>o.menuId===e)??null}})),T={MAX_TABS:15},U=b.create((r,n)=>({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:T.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},pinnedTabs:new Set,refreshTabKey:{},clearMenuViewStore:()=>{r({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:T.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},pinnedTabs:new Set,refreshTabKey:{}})},openTabFromMenu:(e,s,o)=>{const{tabs:t}=n(),a=t.find(i=>i.key===e.menuId),c=o?.skipRefreshModal??!1;if(a){if(c){n().focusTab(e.menuId),n().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&n().setProtectFlagForKey(e.menuId);return}L.Modal.confirm({title:`[${e.menuNm}] 메뉴이동 알림`,content:"이미 열린 화면입니다. 새로고침 하시겠습니까?",centered:!0,okText:"예",cancelText:"아니오",onOk:()=>{n().refreshTab(e.menuId),n().focusTab(e.menuId),n().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&n().setProtectFlagForKey(e.menuId)},onCancel:()=>{n().focusTab(e.menuId),n().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&n().setProtectFlagForKey(e.menuId)}});return}if(t.length>=T.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),L.message.warning(`최대 ${T.MAX_TABS}개의 탭만 열 수 있습니다.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("zustand"),I=require("../utils/index.cjs"),L=require("antd"),V=require("../chunks/layout-components-Bf9IsLUS.cjs"),k=require("react"),Q=require("axios");function ee(r,n){let e;try{e=r()}catch{return}return{getItem:o=>{var t;const a=d=>d===null?null:JSON.parse(d,void 0),c=(t=e.getItem(o))!=null?t:null;return c instanceof Promise?c.then(a):a(c)},setItem:(o,t)=>e.setItem(o,JSON.stringify(t,void 0)),removeItem:o=>e.removeItem(o)}}const G=r=>n=>{try{const e=r(n);return e instanceof Promise?e:{then(s){return G(s)(e)},catch(s){return this}}}catch(e){return{then(s){return this},catch(s){return G(s)(e)}}}},te=(r,n)=>(e,s,o)=>{let t={storage:ee(()=>localStorage),partialize:C=>C,version:0,merge:(C,N)=>({...N,...C}),...n},a=!1;const c=new Set,d=new Set;let i=t.storage;if(!i)return r((...C)=>{console.warn(`[zustand persist middleware] Unable to update item '${t.name}', the given storage is currently unavailable.`),e(...C)},s,o);const l=()=>{const C=t.partialize({...s()});return i.setItem(t.name,{state:C,version:t.version})},h=o.setState;o.setState=(C,N)=>(h(C,N),l());const m=r((...C)=>(e(...C),l()),s,o);o.getInitialState=()=>m;let u;const f=()=>{var C,N;if(!i)return;a=!1,c.forEach(g=>{var M;return g((M=s())!=null?M:m)});const S=((N=t.onRehydrateStorage)==null?void 0:N.call(t,(C=s())!=null?C:m))||void 0;return G(i.getItem.bind(i))(t.name).then(g=>{if(g)if(typeof g.version=="number"&&g.version!==t.version){if(t.migrate){const M=t.migrate(g.state,g.version);return M instanceof Promise?M.then(A=>[!0,A]):[!0,M]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,g.state];return[!1,void 0]}).then(g=>{var M;const[A,Z]=g;if(u=t.merge(Z,(M=s())!=null?M:m),e(u,!0),A)return l()}).then(()=>{S?.(u,void 0),u=s(),a=!0,d.forEach(g=>g(u))}).catch(g=>{S?.(void 0,g)})};return o.persist={setOptions:C=>{t={...t,...C},C.storage&&(i=C.storage)},clearStorage:()=>{i?.removeItem(t.name)},getOptions:()=>t,rehydrate:()=>f(),hasHydrated:()=>a,onHydrate:C=>(c.add(C),()=>{c.delete(C)}),onFinishHydration:C=>(d.add(C),()=>{d.delete(C)})},t.skipHydration||f(),u||m},v=te,P=b.create()(v((r,n)=>({user:null,hrInfo:null,buttonAuths:{},componentSize:1,gridSize:2,spacingSize:2,enableProtectWrapper:!0,gridLayouts:{},theme:"modern",isLoggedIn:()=>!!n().user,setLoginUser:(e,s)=>{r({user:e,hrInfo:s??null}),console.log("사용자 로그인:",e,s)},clearLoginUser:()=>{r({user:null,hrInfo:null,buttonAuths:{}}),console.log("사용자 로그아웃")},updateUser:(e,s)=>{const o=n().user,t=n().hrInfo;o&&r({user:{...o,...e}}),t&&r({hrInfo:{...t,...s}})},setComponentSize:e=>{r({componentSize:e}),console.log("컴포넌트 사이즈 변경:",e)},setGridSize:e=>{r({gridSize:e}),console.log("그리드 사이즈 변경:",e)},setSpacingSize:e=>{r({spacingSize:e}),console.log("여백 사이즈 변경:",e)},setEnableProtectWrapper:e=>{r({enableProtectWrapper:e})},setTheme:e=>{r({theme:e}),console.log("테마 변경:",e)},getButtonAuth:(e,s)=>{const o=`${e}_${s}`;return n().buttonAuths[o]||null},setButtonAuth:(e,s,o)=>{const t=`${e}_${s}`;r(a=>({buttonAuths:{...a.buttonAuths,[t]:o}}))},clearButtonAuths:()=>{r({buttonAuths:{}})},getGridLayouts:e=>n().gridLayouts[e]||[],getGridLayout:(e,s,o)=>n().getGridLayouts(e).find(c=>c.menuId===s&&c.gridId===o)||null,saveGridLayout:(e,s,o,t)=>{const a={...n().gridLayouts};a[e]||(a[e]=[]);const c=a[e].findIndex(i=>i.menuId===s&&i.gridId===o),d={menuId:s,gridId:o,layout:t};c>=0?a[e][c]=d:a[e].push(d),r({gridLayouts:a}),console.log(`[UserStore] 그리드 레이아웃 저장 완료: ${e}/${s}/${o}`)},removeGridLayout:(e,s,o)=>{const t={...n().gridLayouts};t[e]&&(t[e]=t[e].filter(a=>!(a.menuId===s&&a.gridId===o)),r({gridLayouts:t}),console.log(`[UserStore] 그리드 레이아웃 삭제 완료: ${e}/${s}/${o}`))},clearGridLayouts:e=>{const s={...n().gridLayouts};delete s[e],r({gridLayouts:s}),console.log(`[UserStore] ${e}의 모든 그리드 레이아웃 삭제 완료`)},clearAllGridLayouts:()=>{r({gridLayouts:{}}),console.log("[UserStore] 전체 그리드 레이아웃 삭제 완료")}}),{name:"user-storage",partialize:r=>({user:r.user,hrInfo:r.hrInfo,componentSize:r.componentSize,gridSize:r.gridSize,spacingSize:r.spacingSize,enableProtectWrapper:r.enableProtectWrapper,gridLayouts:r.gridLayouts,theme:r.theme})})),E={CACHE_SIZE_LIMIT:1e3},p={codeCache:new Map,nameCache:new Map,optionCache:new Map,colorCache:new Map,loadedGroups:new Set,cacheHits:new Map,clearCache(){this.codeCache.clear(),this.nameCache.clear(),this.optionCache.clear(),this.colorCache.clear(),this.loadedGroups.clear(),this.cacheHits.clear()},cleanupCache(){const r=Array.from(this.cacheHits.entries());r.sort((e,s)=>e[1]-s[1]),r.slice(0,Math.floor(r.length*.3)).forEach(([e])=>{this.codeCache.delete(e),this.nameCache.delete(e),this.optionCache.delete(e),this.colorCache.delete(e),this.cacheHits.delete(e)})},isGroupLoaded(r){return this.loadedGroups.has(r)},markGroupLoaded(r){this.loadedGroups.add(r)}},O=r=>{console.log("대규모 데이터 변환 시작:",r);const n={};if(r&&r.code&&Array.isArray(r.code)){const e=r.code,s=r.opt||[],o=new Map;s.forEach(t=>{t.cmmnCd&&t.enblYn==="Y"&&(o.has(t.cmmnCd)||o.set(t.cmmnCd,[]),o.get(t.cmmnCd).push(t))}),e.forEach(t=>{if(t&&t.cmmnCdGrp&&t.cmmnCd&&t.enblYn==="Y"){const a=t.cmmnCdGrp;n[a]||(n[a]={});const d=(o.get(t.cmmnCd)||[]).reduce((i,l)=>(l.optnCd&&l.optnNm&&(i[l.optnCd]=l.optnNm),i),{});n[a][t.cmmnCd]={codeValue:t.cmmnCd,codeNm:t.cmmnCdNm,groupCode:t.cmmnCdGrp,commonCode:t.cmmnCd,labelColor:t.cmmnCdClr,systemCodeYn:t.syscdYn,sortOrder:parseInt(t.sortOrd)||1,enabled:t.enblYn==="Y",options:Object.keys(d).length>0?d:null,originalData:t}}})}return console.log("대규모 데이터 변환 완료:",n),n},y=b.create()(v((r,n)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchSystemCodes:async()=>{r({isLoading:!0,error:null});try{console.log("시스템 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await I.callService(I.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("시스템 공통코드 응답:",e),console.log("시스템 공통코드목록:",e.code),console.log("시스템 공통코드옵션목록:",e.opt);const s=O(e),t={...n().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),r({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("시스템 공통코드 데이터 가져오기 완료")}catch(e){console.error("시스템 공통코드 데이터 가져오기 실패:",e),r({isLoading:!1,error:e instanceof Error?e.message:"시스템 공통코드 데이터 가져오기 실패"})}},fetchBusinessCodes:async()=>{r({isLoading:!0,error:null});try{console.log("업무 공통코드 데이터 가져오기 시작: SCMSIGN00302");const e=await I.callService("SCMSIGN00302",{sysCd:__SYS_CD__});console.log("업무 공통코드 응답:",e),console.log("업무 공통코드목록:",e.code),console.log("업무 공통코드옵션목록:",e.opt);const s=O(e),t={...n().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),r({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("업무 공통코드 데이터 가져오기 완료")}catch(e){console.error("업무 공통코드 데이터 가져오기 실패:",e),r({isLoading:!1,error:e instanceof Error?e.message:"업무 공통코드 데이터 가져오기 실패"})}},fetchData:async()=>{r({isLoading:!0,error:null});try{console.log("전체 공통코드 데이터 가져오기 시작 (시스템 + 업무)");const[e,s]=await Promise.all([I.callService(I.getServiceCode("SRCH_CODE"),{crprCd:"100"}),I.callService("SCMSIGN00302",{sysCd:__SYS_CD__})]);console.log("시스템 공통코드 응답:",e),console.log("업무 공통코드 응답:",s);const o=O(e),t=O(s),a={...o,...t};p.clearCache();const c=new Set(Object.keys(a));c.forEach(d=>{p.markGroupLoaded(d)}),r({codeData:a,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:c}),console.log("전체 공통코드 데이터 가져오기 완료")}catch(e){console.error("전체 공통코드 데이터 가져오기 실패:",e),r({isLoading:!1,error:e instanceof Error?e.message:"전체 공통코드 데이터 가져오기 실패"})}},loadSpecificGroup:async e=>{const{codeData:s,loadedGroups:o}=n();if(!s||o.has(e))return;const t=new Set(o).add(e);r({loadedGroups:t}),p.markGroupLoaded(e)},setData:e=>{p.clearCache();const s=new Set(Object.keys(e));s.forEach(o=>{p.markGroupLoaded(o)}),r({codeData:e,lastUpdated:new Date,loadedGroups:s})},clearData:()=>{p.clearCache(),r({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set})},getLoadedGroups:()=>Array.from(n().loadedGroups)}),{name:"large-data-storage",partialize:r=>({codeData:r.codeData,lastUpdated:r.lastUpdated,loadedGroups:Array.from(r.loadedGroups)})})),D=b.create()(v((r,n)=>({get codeData(){return y.getState().codeData},get isLoading(){return y.getState().isLoading},get error(){return y.getState().error},get lastUpdated(){return y.getState().lastUpdated},fetchCommonCodes:async()=>{await y.getState().fetchData()},getCodeList:(e,s)=>{const{enabledOnly:o=!0,systemCodeOnly:t=!1,sortByOrder:a=!1,excludeParentCode:c=!1}=s||{},d=`simpleCodeList_${e}_${o}_${t}_${a}_${c}`;if(p.optionCache.has(d)){const f=p.cacheHits.get(d)||0;return p.cacheHits.set(d,f+1),p.optionCache.get(d)}const i=y.getState().codeData;if(!i)return[];if(!p.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],h=i[e];h&&Object.values(h).forEach(f=>{if(!(o&&!f.enabled)&&!(t&&f.systemCodeYn!=="Y"))if(c){const C=e.length,N=f.codeValue.substring(C);N.length>0&&l.push({...f,codeValue:N})}else l.push(f)});let m;a?m=l.sort((f,C)=>f.sortOrder!==C.sortOrder?f.sortOrder-C.sortOrder:f.codeValue.localeCompare(C.codeValue)):m=l.sort((f,C)=>f.codeValue.localeCompare(C.codeValue));const u=m.map(f=>({label:f.codeNm,value:f.codeValue,tagColor:f.labelColor}));return p.optionCache.size>=E.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.optionCache.set(d,u),p.cacheHits.set(d,1),u},getCodeName:e=>{if(p.nameCache.has(e)){const o=p.cacheHits.get(`name_${e}`)||0;return p.cacheHits.set(`name_${e}`,o+1),p.nameCache.get(e)}const s=y.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.nameCache.set(e,t.codeNm),p.cacheHits.set(`name_${e}`,1),t.codeNm;return null},getCodeColor:e=>{if(p.colorCache.has(e)){const o=p.cacheHits.get(`color_${e}`)||0;return p.cacheHits.set(`color_${e}`,o+1),p.colorCache.get(e)}const s=y.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.colorCache.set(e,t.labelColor||""),p.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getGridLookup:e=>{const s=`gridLookup_${e}`;if(p.optionCache.has(s)){const i=p.cacheHits.get(s)||0;return p.cacheHits.set(s,i+1),p.optionCache.get(s)}const o=y.getState().codeData;if(!o)return{labels:[],values:[],lookupDisplay:!0};const t=o[e];if(!t)return{labels:[],values:[],lookupDisplay:!0};const a=[],c=[];Object.values(t).filter(i=>i.enabled).sort((i,l)=>i.sortOrder-l.sortOrder).forEach(i=>{a.push(i.codeNm),c.push(i.codeValue)});const d={labels:a,values:c,lookupDisplay:!0};return p.optionCache.set(s,d),p.cacheHits.set(s,1),d},getCodeByOption:(e,s,o)=>{const t=`codeByOption_${e}_${s}_${o}`;if(p.codeCache.has(t)){const l=p.cacheHits.get(t)||0;return p.cacheHits.set(t,l+1),p.codeCache.get(t)}const a=y.getState().codeData;if(!a)return[];const c=[],d=a[e];d&&Object.values(d).forEach(l=>{l.enabled&&l.options&&l.options[s]===o&&c.push({...l,codeNm:l.options[s]||l.codeNm})});const i=c.sort((l,h)=>l.codeValue.localeCompare(h.codeValue));return p.codeCache.size>=E.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.codeCache.set(t,i),p.cacheHits.set(t,1),i},getCodeListByOption:(e,s,o)=>{const{enabledOnly:t=!0,systemCodeOnly:a=!1,sortByOrder:c=!1}=o||{},d=`codeListByOption_${e}_${s}_${t}_${a}_${c}`;if(p.codeCache.has(d)){const u=p.cacheHits.get(d)||0;return p.cacheHits.set(d,u+1),p.codeCache.get(d)}const i=y.getState().codeData;if(!i)return[];if(!p.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],h=i[e];h&&Object.values(h).forEach(u=>{t&&!u.enabled||a&&u.systemCodeYn!=="Y"||u.options&&u.options[s]&&l.push({label:u.options[s],value:u.commonCode,tagColor:u.labelColor})});let m;return c?m=l.sort((u,f)=>u.value.localeCompare(f.value)):m=l.sort((u,f)=>u.value.localeCompare(f.value)),p.codeCache.size>=E.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.codeCache.set(d,m),p.cacheHits.set(d,1),m},getAvailableGroupCodes:()=>{const e="available_group_codes";if(p.nameCache.has(e)){const t=p.cacheHits.get(e)||0;return p.cacheHits.set(e,t+1),JSON.parse(p.nameCache.get(e))}const s=y.getState().codeData;if(!s)return[];const o=Object.keys(s).sort();return p.nameCache.set(e,JSON.stringify(o)),p.cacheHits.set(e,1),o},clearCodes:()=>{y.getState().clearData()}}),{name:"code-storage",partialize:r=>({})})),oe=b.create()(v((r,n)=>({get codeData(){return y.getState().codeData},get isLoading(){return y.getState().isLoading},get error(){return y.getState().error},get lastUpdated(){return y.getState().lastUpdated},fetchCommonCodes:async()=>{await y.getState().fetchData()},getOptionValue:(e,s)=>{const o=`option_${e}_${s}`;if(p.optionCache.has(o)){const c=p.cacheHits.get(o)||0;return p.cacheHits.set(o,c+1),p.optionCache.get(o)}const t=y.getState().codeData;if(!t)return null;const a=t[e];if(a&&a[s]){const c=a[s].options;return p.optionCache.set(o,c),p.cacheHits.set(o,1),c}return null},getOptionByKey:(e,s,o)=>{const t=`option_${e}_${s}_${o}`;if(p.optionCache.has(t)){const d=p.cacheHits.get(t)||0;return p.cacheHits.set(t,d+1),p.optionCache.get(t)}const a=n().getOptionValue(e,s),c=a?a[o]:null;return p.optionCache.set(t,c),p.cacheHits.set(t,1),c},clearCodes:()=>{y.getState().clearData()}}),{name:"option-storage",partialize:r=>({})})),se=b.create()(v((r,n)=>({get codeData(){return y.getState().codeData},get isLoading(){return y.getState().isLoading},get error(){return y.getState().error},get lastUpdated(){return y.getState().lastUpdated},fetchCommonCodes:async()=>{await y.getState().fetchData()},getColorCode:e=>{if(p.colorCache.has(e)){const o=p.cacheHits.get(`color_${e}`)||0;return p.cacheHits.set(`color_${e}`,o+1),p.colorCache.get(e)}const s=y.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.colorCache.set(e,t.labelColor||""),p.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(p.optionCache.has(e)){const t=p.cacheHits.get(e)||0;return p.cacheHits.set(e,t+1),p.optionCache.get(e)}const s=y.getState().codeData;if(!s)return[];const o=[];return Object.values(s).forEach(t=>{Object.values(t).forEach(a=>{a.labelColor&&o.push({code:a.codeValue,color:a.labelColor})})}),p.optionCache.set(e,o),p.cacheHits.set(e,1),o},clearCodes:()=>{y.getState().clearData()}}),{name:"color-storage",partialize:r=>({})})),re=(r,n)=>({nodes:{},rootIds:[],loadedFor:void 0,loading:!1,error:void 0,treeNodes:[],isMenuBookmarked:e=>Object.values(n().nodes).some(s=>s.type==="M"&&s.menuId===e),getPrntBkmkIdByMenuId:e=>{const s=F(n().nodes,e);return s?n().nodes[s]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const s=F(n().nodes,e);if(!s)return null;const o=n().nodes[s];return o?.type==="M"?o:null},getFolderTree:e=>{const{nodes:s,rootIds:o}=n(),t=c=>e?c.toLowerCase().includes(e.toLowerCase()):!0,a=c=>{const d=s[c];if(!d||d.type!=="F")return null;const i=d,l=(i.children||[]).map(m=>s[m]).filter(m=>!!m&&m.type==="F").map(m=>a(m.bkmkId)).filter(Boolean);return t(i.bkmkNm)||l.length>0?{key:i.bkmkId,title:`📁 ${i.bkmkNm}`,children:l.length?l:void 0}:null};return o.map(c=>a(c)).filter(Boolean)},loadFavorites:async(e,s=!1)=>{console.log("loadFavorites ::::: ",e,s);const o=n();if(!(!s&&o.loadedFor===e&&Object.keys(o.nodes).length)){r({loading:!0,error:void 0});try{const t=await I.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],c=ne(a),d=w(c.nodes,c.rootIds);r({...c,treeNodes:d,loadedFor:e,loading:!1})}catch(t){throw r({loading:!1,error:t?.message||"즐겨찾기 로드 실패"}),t}}},loadFavoritesIfNeeded:async e=>{const s=n();(s.loadedFor!==e||Object.keys(s.nodes).length===0)&&await n().loadFavorites(e)},clearFavorites:()=>{r({nodes:{},rootIds:[],treeNodes:[],loadedFor:void 0,loading:!1,error:void 0}),console.log("📚 북마크 스토어 초기화 완료")},addNode:async e=>{const s=K(n()),o=ae();r(t=>{const a=e.sortOrdr??x(t,e.prntBkmkId),c={...t,nodes:{...t.nodes,[o]:e.type==="F"?{bkmkId:o,type:"F",prntBkmkId:e.prntBkmkId||"-",sortOrdr:a,bkmkNm:e.bkmkNm??"새 폴더",children:[],sysCd:e.sysCd,userId:e.userId}:{bkmkId:o,type:"M",prntBkmkId:e.prntBkmkId,sortOrdr:a,menuId:e.menuId??"",menuNm:e.menuNm,sysCd:e.sysCd,userId:e.userId}},rootIds:t.rootIds.slice(),treeNodes:t.treeNodes};return ce(c,o,e.prntBkmkId),c.treeNodes=w(c.nodes,c.rootIds),c});try{let t=o;const a=x(n(),e.prntBkmkId),c=await I.callService("SCMBKMK00102",{iudFlag:"I",type:e.type,sysCd:e.sysCd,userId:e.userId,bkmkId:o,bkmkNm:e.bkmkNm,prntBkmkId:e.prntBkmkId,menuId:e.menuId,sortOrdr:a,chngId:I.getUserId()});return t=String(c?.bkmkId??c?.itemId??o),r(d=>{const i=le(d,o,t);return{...i,treeNodes:w(i.nodes,i.rootIds)}}),t}catch(t){throw r(s),t}},moveNode:async({bkmkId:e,newPrntBkmkId:s,sortOrdr:o,userId:t})=>{const a=n(),c=structuredClone(a.nodes),d=[...a.rootIds],i=c[e];if(!i)return;if(s!=="-"){const u=c[s];if(!u||u.type!=="F")throw new Error("부모는 폴더만 가능합니다.")}const l=i.prntBkmkId??"-",h=l==="-"?d:c[l].children||=[];{const u=h.indexOf(e);u>=0&&h.splice(u,1)}const m=s==="-"?d:c[s].children||=[];m.splice(Math.max(0,Math.min(o,m.length)),0,e),i.prntBkmkId=s,r({nodes:c,rootIds:d}),j(c,d,s),j(c,d,l);try{await I.callService("SCMBKMK00104",{bkmkId:e,prntBkmkId:s,sortOrdr:o,chngId:t})}catch(u){throw r(a),u}},removeNode:async e=>{const s=K(n());r(o=>{if(!o.nodes[e])return o;const t={...o,nodes:{...o.nodes},rootIds:o.rootIds.slice(),treeNodes:o.treeNodes};return X(t,e),t.treeNodes=w(t.nodes,t.rootIds),t});try{await I.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw r(s),o}},editNode:async({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const c=K(n());r(d=>{const i={...d,nodes:{...d.nodes}},l=i.nodes[e];return l?.type==="F"&&typeof o=="string"&&(i.nodes[e]={...l,bkmkNm:o}),i});try{await I.callService("SCMBKMK00102",{iudFlag:"U",userId:s,bkmkId:e,bkmkNm:o,prntBkmkId:t,sortOrdr:a,chngId:I.getUserId()})}catch(d){throw r(c),d}},addFolder:async(e,s,o,t)=>await n().addNode({type:"F",bkmkNm:e,prntBkmkId:s,sysCd:o,userId:t}),addMenuToFolder:async(e,s)=>F(n().nodes,s.menuId)?"이미 북마크에 저장된 메뉴입니다.":await n().addNode({type:"M",prntBkmkId:e,sysCd:"KH",userId:I.getUserId(),menuId:s.menuId,menuNm:s.menuNm}),toggleMenuFavorite:async(e,s)=>{if(!e)return;const o=n(),t=Object.values(o.nodes).find(c=>c.type==="M"&&c.menuId===s.menuId);if(t){await n().removeNode(t.bkmkId);return}let a=z(o);a||(await n().loadFavorites(e,!0),a=z(n())),a&&await n().addNode({type:"M",prntBkmkId:a,sysCd:"KH",userId:I.getUserId(),menuId:s.menuId,menuNm:s.menuNm})},removeMenuByMenuId:async e=>{const s=n(),o=F(s.nodes,e);o&&await n().removeNode(o)},removeMenu:async e=>{await n().removeNode(e)},removeFolder:async e=>{await n().removeNode(e)},editFolder:async(e,s,o,t,a)=>{await n().editNode({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})},convertToAntTreeData:(e,s,o,t=!1)=>{const a=d=>o?d.toLowerCase().includes(o.toLowerCase()):!0,c=d=>{const i=e[d];if(!i||t&&i.type!=="F")return null;if(i.type==="F"){const l=i,h=(l.children||[]).map(u=>c(u)).filter(Boolean);return a(l.bkmkNm)||h.length>0?{key:l.bkmkId,type:"F",title:`📁 ${l.bkmkNm}`,bkmkNm:l.bkmkNm,prntBkmkId:l.prntBkmkId,sortOrdr:l.sortOrdr,fullPath:l.fullPath,children:h.length?h:void 0}:null}else{const l=i,h=l.menuNm?`${l.menuNm} (${l.menuId})`:l.menuId;return a(h)?{key:l.bkmkId,type:"M",title:`📄 ${h}`,prntBkmkId:l.prntBkmkId,sortOrdr:l.sortOrdr,fullPath:l.fullPath,isLeaf:!0}:null}};return s.map(c).filter(Boolean)}}),R=b.create(re);function ne(r){const n={},e=[],s=o=>{o.forEach(t=>{const a={type:t.type,bkmkId:t.bkmkId??t.BKMK_ID??t.id,prntBkmkId:t.prntBkmkId??t.PRNT_BKMK_ID??"-",sortOrdr:Number(t.sortOrdr??t.SORT_ORDR??0),sysCd:t.sysCd??t.SYS_CD,userId:t.userId??t.USER_ID,fullPath:t.fullPath??t.FULL_PATH};if(t.type==="F"){n[a.bkmkId]={...a,bkmkNm:t.bkmkNm??t.BKMK_NM??t.name??a.bkmkId,children:[]};const c=Array.isArray(t.children)?t.children:[];s(c)}else n[a.bkmkId]={...a,menuId:t.menuId??t.MENU_ID??"",menuNm:t.menuNm??t.MENU_NM}})};return s(r),Object.values(n).forEach(o=>{if(o.prntBkmkId&&o.prntBkmkId!=="-"){const t=n[o.prntBkmkId];t?.type==="F"&&t.children.push(o.bkmkId)}else o.type==="F"&&e.push(o.bkmkId)}),e.sort((o,t)=>(n[o].sortOrdr??0)-(n[t].sortOrdr??0)),Object.values(n).forEach(o=>{o.type==="F"&&o.children.sort((a,c)=>(n[a].sortOrdr??0)-(n[c].sortOrdr??0))}),{nodes:n,rootIds:e}}function K(r){return{...r,nodes:JSON.parse(JSON.stringify(r.nodes)),rootIds:r.rootIds.slice()}}function ae(){return`tmp_${I.generateUID()}`}function x(r,n){if(!n||n==="-")return r.rootIds.length;const e=r.nodes[n];return e?e.children.length:0}function ce(r,n,e){const s=r.nodes[n];if(s)if(e&&e!=="-"){const o=r.nodes[e];if(!o||o.type!=="F")return;s.prntBkmkId=e,o.children=[...o.children,n]}else s.prntBkmkId="-",r.rootIds=[...r.rootIds,n]}function de(r,n){const e=r.nodes[n];if(!e)return;const s=e.prntBkmkId;if(s&&s!=="-"){const o=r.nodes[s];o?.type==="F"&&(o.children=o.children.filter(t=>t!==n))}else r.rootIds=r.rootIds.filter(o=>o!==n)}function X(r,n){const e=r.nodes[n];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>X(r,a)),de(r,n);const{[n]:s,...o}=r.nodes;r.nodes=o}function le(r,n,e){if(n===e)return r;const s=r.nodes[n];if(!s)return r;const o=JSON.parse(JSON.stringify(s));o.bkmkId=e;const t={...r.nodes,[e]:o};delete t[n];let a=r.rootIds;if(o.prntBkmkId&&o.prntBkmkId!=="-"){const c=t[o.prntBkmkId];c?.type==="F"&&(t[o.prntBkmkId]={...c,children:c.children.map(d=>d===n?e:d)})}else a=r.rootIds.map(c=>c===n?e:c);return{...r,nodes:t,rootIds:a}}function z(r){return r.rootIds.find(n=>r.nodes[n]?.type==="F")??null}function w(r,n){const e={};Object.values(r).forEach(d=>{const i=d.bkmkId,l=d.prntBkmkId;!i||!l||l==="-"||l===i||(e[l]??=[]).push(i)});const s=new Set,o=d=>{if(s.has(d))return null;const i=r[d];if(!i)return null;s.add(d);try{if(i.type==="F"){const h=i,m=e[d]??[];return{type:"F",bkmkId:d,bkmkNm:h.bkmkNm,prntBkmkId:h.prntBkmkId,children:m.map(o).filter(Boolean)}}const l=i;return{type:"M",bkmkId:d,bkmkNm:l.menuNm,menuId:l.menuId,menuNm:l.menuNm,prntBkmkId:l.prntBkmkId}}finally{s.delete(d)}},t=Object.values(r).filter(d=>d.prntBkmkId==="-"&&d.type==="M").map(d=>d.bkmkId),a=Object.values(r).filter(d=>d.prntBkmkId==="-"&&d.type==="F").map(d=>d.bkmkId);return Array.from(new Set([...n,...t,...a])).map(o).filter(Boolean)}function F(r,n){for(const e of Object.values(r))if(e.type==="M"&&e.menuId===n)return e.bkmkId;return null}function j(r,n,e){(!e||e==="-"?n:r[e].children||[]).forEach((o,t)=>{const a=r[o];a&&(a.sortOrdr=t)})}const H={DEFAULT_PRNT_GBCD:1},pe=r=>r&&typeof r=="object"&&typeof r.menuId=="string"&&typeof r.menuNm=="string",Y=r=>Array.isArray(r)&&r.every(pe);let B=[],q=[];const ie=r=>{if(r&&typeof r=="object"){const n=r;if(n.menus&&Y(n.menus))return n.menus;if(Y(r))return r}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},ue=(r,n)=>!!n&&r.crprCd===n.crprCd&&r.userId===n.userId&&(r.prntGbcd??H.DEFAULT_PRNT_GBCD)===(n.prntGbcd??H.DEFAULT_PRNT_GBCD),me=r=>{if(B.length===r.length&&B.every((t,a)=>t.menuId===r[a]?.menuId&&t.menuPrntId===r[a]?.menuPrntId))return q;if(!r.length)return[];const n=new Map,e=[];r.forEach(t=>t?.menuId&&n.set(t.menuId,{...t,children:[]})),r.forEach(t=>{const a=n.get(t.menuId);a&&(t.menuPrntId&&t.menuPrntId!==""&&t.menuPrntId!=="-"?n.get(t.menuPrntId)?.children?.push(a):e.push(a))});const s=t=>t.sort((a,c)=>(a?.menuNo??0)-(c?.menuNo??0)).map(a=>({...a,children:a.children&&a.children.length?s(a.children):void 0})),o=s(e);return B=[...r],q=o,o},_=b.create((r,n)=>({menuList:[],flatMenuList:[],isLoading:!1,error:null,_lastFetchParams:null,fetchMenu:async({crprCd:e,userId:s,prntGbcd:o})=>{const t={crprCd:e,userId:s,prntGbcd:o??H.DEFAULT_PRNT_GBCD};if(ue(t,n()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}r({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await I.callService(I.getServiceCode("AUTH_MENU"),t),c=ie(a),d=me(c);r({flatMenuList:c,menuList:d,isLoading:!1,error:null})}catch(a){r({isLoading:!1,error:a?.message??"메뉴 로드 실패"})}},clearMenu:()=>{r({menuList:[],flatMenuList:[],error:null,_lastFetchParams:null})},findMenuById:e=>{const{flatMenuList:s}=n();return s.find(o=>o.menuId===e)??null}})),T={MAX_TABS:15},U=b.create((r,n)=>({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:T.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},pinnedTabs:new Set,refreshTabKey:{},clearMenuViewStore:()=>{r({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:T.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},pinnedTabs:new Set,refreshTabKey:{}})},openTabFromMenu:(e,s,o)=>{const{tabs:t}=n(),a=t.find(i=>i.key===e.menuId),c=o?.skipRefreshModal??!1;if(a){if(c){n().focusTab(e.menuId),n().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&n().setProtectFlagForKey(e.menuId);return}L.Modal.confirm({title:`[${e.menuNm}] 메뉴이동 알림`,content:"이미 열린 화면입니다. 새로고침 하시겠습니까?",centered:!0,okText:"예",cancelText:"아니오",onOk:()=>{n().refreshTab(e.menuId),n().focusTab(e.menuId),n().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&n().setProtectFlagForKey(e.menuId)},onCancel:()=>{n().focusTab(e.menuId),n().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&n().setProtectFlagForKey(e.menuId)}});return}if(t.length>=T.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),L.message.warning(`최대 ${T.MAX_TABS}개의 탭만 열 수 있습니다.
|
|
2
2
|
기존 탭을 닫고 다시 시도해주세요.`);return}const d={key:e.menuId,label:e.menuNm,gubun:"M",menuItem:e,closable:!0};r({tabs:[...t,d],activeMenuId:e.menuId,activeMenuItem:e}),n().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&n().setProtectFlagForKey(e.menuId)},openTabByMenuId:(e,s,o)=>{const t=_.getState().findMenuById(e);t?n().openTabFromMenu(t,s,o):L.message.warning("메뉴 ID를 찾을 수 없습니다.")},openDetailView:(e,s,o)=>{const{tabs:t}=n();if(t.find(c=>c.key===e.viewId))n().focusTab(e.viewId);else{const c={key:e.viewId,label:e.viewLabel,gubun:"C",componentItem:{scrnPath:s,prsnInfoYn:o,prntInfo:e.prntInfo},closable:!0};r({tabs:[...t,c],activeMenuId:e.viewId,activeDetailItem:e}),n().setTabParams(e.viewId,e.viewParams||{})}},closeTab:e=>{const{tabs:s,activeMenuId:o,pinnedTabs:t}=n();if(t.has(e))return;s.find(d=>d.key===e);const a=s.filter(d=>d.key!==e);let c=o;if(o===e){const d=s.findIndex(i=>i.key===e);c=a.length?a[Math.min(d,a.length-1)]?.key??null:null}r({tabs:a}),c&&n().focusTab(c)},focusTab:e=>{const{tabs:s}=n(),o=s.find(t=>t.key===e);if(o){const t=o.gubun==="C"?{viewId:o.key,viewLabel:o.label,prntInfo:o.componentItem?.prntInfo}:null;o.menuItem?.prsnInfoYn==="Y"?(r({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),console.log("✅ 탭 포커스 (개인정보) - activeMenuItem:",o.menuItem),n().setProtectFlagForKey(e)):(r({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),n().clearProtectFlagForKey(e))}else r({activeMenuId:e,activeMenuItem:null,activeDetailItem:null}),console.warn("❌ 탭을 찾을 수 없음:",e)},closeAllTabs:()=>r({tabs:[],activeMenuId:null,activeMenuItem:null,activeDetailItem:null}),toggleSidebar:()=>r(e=>({sidebarCollapsed:!e.sidebarCollapsed})),reorderTabs:e=>r(s=>{const o=new Map(s.tabs.map(t=>[t.key,t]));return{tabs:e.map(t=>o.get(t)).filter(Boolean)}}),setProtectFlagForKey:e=>r(s=>({tabProtectFlag:{...s.tabProtectFlag,[e]:!0}})),clearProtectFlagForKey:e=>r(s=>{const o={...s.tabProtectFlag};return delete o[e],{tabProtectFlag:o}}),setTabParams:(e,s)=>r(o=>{const t=o.tabParams[e]||{},a={...s||{}};return Object.keys(t).length===Object.keys(a).length&&Object.keys(a).every(d=>t[d]===a[d])?o:{tabParams:{...o.tabParams,[e]:a}}}),setComponentLabelMap:(e,s)=>r({componentLabelMap:e}),togglePinTab:e=>r(s=>{const o=new Set(s.pinnedTabs);return o.has(e)?o.delete(e):o.add(e),{pinnedTabs:o}}),refreshTab:e=>r(s=>({refreshTabKey:{...s.refreshTabKey,[e]:Date.now()}})),closeOtherTabs:e=>{const{tabs:s,activeMenuId:o}=n();if(!s.find(d=>d.key===e))return;const a=n().pinnedTabs;s.filter(d=>d.key!==e&&!a.has(d.key)).forEach(d=>n().closeTab(d.key)),o!==e&&n().focusTab(e)},closeRightTabs:e=>{const{tabs:s}=n(),o=s.findIndex(c=>c.key===e);if(o<0)return;const t=n().pinnedTabs;s.slice(o+1).filter(c=>!t.has(c.key)).forEach(c=>n().closeTab(c.key))}})),W=b.create((r,n)=>({popups:[],activePopupId:null,isLoading:!1,error:null,zIndexSeed:1e3,openPopup:async(e,s,o)=>{r({isLoading:!0,error:null});try{let t=null;const a=await I.callService(I.getServiceCode("SRCH_POPU"),{crprCd:I.getUserInfo()?.crprCd,popuCd:e});t=a?.mstr;const c=a?.dtls||[];if(!t||!t.popuUrl){const u=`팝업 정보를 찾을 수 없습니다: ${e}`;throw console.error(u),new Error(u)}const i=(u=>`/src/pages/views/popup/${u}`)(t.popuUrl),l=n().zIndexSeed+1,h={popupId:`popup_${Date.now()}_${I.generateUID()}`,popupCode:e,popupTitle:o?.title||t.popuNm||"팝업",popupUrl:i,popupParams:s,width:t.popuWdth||800,height:t.popuHght||600,resizable:!0,draggable:!0,buttonList:c,config:o,zIndex:l},m=n().popups.find(u=>u.popupCode===e);if(m){r({activePopupId:m.popupId,popups:n().popups.map(u=>u.popupId===m.popupId?{...u,config:o}:u),isLoading:!1});return}r(u=>({popups:[...u.popups,h],activePopupId:h.popupId,isLoading:!1,zIndexSeed:l}))}catch(t){r({error:t instanceof Error?t.message:"팝업 열기 실패",isLoading:!1})}},openCorePopup:(e,s)=>{const o=`popup_${Date.now()}_${I.generateUID()}`,t=n().zIndexSeed+1,c=V.localPopupRegistry[e]?.defaultConfig||{},d={...c,...s,buttons:s?.buttons!==void 0?s.buttons:c.buttons,callback:s?.callback!==void 0?s.callback:c.callback},i=s?.defaultParams||{},l=n().popups.find(m=>m.popupCode===e&&m.isLocal);if(l){const m=n().zIndexSeed+1;r({activePopupId:l.popupId,zIndexSeed:m}),r(u=>({popups:u.popups.map(f=>f.popupId===l.popupId?{...f,config:d,zIndex:m,close:()=>{n().closePopup(l.popupId)}}:f)}));return}const h={popupId:o,popupCode:e,popupTitle:d.title||e,popupUrl:"",popupParams:i,width:d.width||1e3,height:d.height||700,resizable:d.resizable!==void 0?d.resizable:!0,draggable:d.draggable!==void 0?d.draggable:!0,buttonList:[],config:d,isLocal:!0,zIndex:t,close:()=>{n().closePopup(o)}};r(m=>({popups:[...m.popups,h],activePopupId:o,zIndexSeed:t}))},closePopup:e=>{const{popups:s,activePopupId:o}=n(),t=s.filter(c=>c.popupId!==e);let a=o;o===e&&(a=t.length>0?t[t.length-1].popupId:null),r({popups:t,activePopupId:a})},closeAllPopups:()=>{r({popups:[],activePopupId:null})},setActivePopup:e=>{const s=n().zIndexSeed+1;r(o=>({activePopupId:e,zIndexSeed:s,popups:o.popups.map(t=>t.popupId===e?{...t,zIndex:s}:t)}))},updatePopupConfig:(e,s)=>{r(o=>({popups:o.popups.map(t=>t.popupId===e?{...t,config:{...t.config,...s}}:t)}))}})),$=b.create()(v((r,n)=>({systemMap:[],fetchSystemMap:async()=>{r({systemMap:[{sysCd:"KE",appItCd:"ERPS",appCd:"SAP",systemNm:"K-ERP",appNm:"SAP"},{sysCd:"KE",appItCd:"KERP",appCd:"FI",systemNm:"K-ERP",appNm:"재무회계"},{sysCd:"KE",appItCd:"KERP",appCd:"FM",systemNm:"K-ERP",appNm:"예산관리"},{sysCd:"KE",appItCd:"KERP",appCd:"MM",systemNm:"K-ERP",appNm:"구매계약"},{sysCd:"KE",appItCd:"KERP",appCd:"SD",systemNm:"K-ERP",appNm:"영업관리"},{sysCd:"CH",appItCd:"KERP",appCd:"PMN",systemNm:"K-ERP",appNm:"파트너관리"},{sysCd:"FB",appItCd:"FBK",appCd:"FBK",systemNm:"펌뱅킹",appNm:"펌뱅킹"},{sysCd:"IA",appItCd:"IAC",appCd:"IAC",systemNm:"내부회계",appNm:"내부회계"},{sysCd:"ET",appItCd:"ETAX",appCd:"ETAX",systemNm:"전자세금계산서",appNm:"전자세금계산서"},{sysCd:"HR",appItCd:"KHR",appCd:"HR",systemNm:"K-HR",appNm:"HR 솔루션"},{sysCd:"YT",appItCd:"KHYT",appCd:"YT",systemNm:"K-HR 연말정산",appNm:"연말정산"},{sysCd:"CM",appItCd:"KCM",appCd:"CM",systemNm:"K-HR 프레임워크 공통",appNm:"프레임워크 공통"},{sysCd:"PA",appItCd:"KHPE",appCd:"PE",systemNm:"K-HR 평정",appNm:"평정"},{sysCd:"OT",appItCd:"POF",appCd:"POF",systemNm:"시간외(PC-OFF)",appNm:"시간외(PC-OFF)"},{sysCd:"DC",appItCd:"CDT",appCd:"CDT",systemNm:"전자계약",appNm:"전자계약"},{sysCd:"KS",appItCd:"KSCM",appCd:"KSCM",systemNm:"KS-공통",appNm:"KS-공통"},{sysCd:"KS",appItCd:"EAUD",appCd:"EAUD",systemNm:"K-업무지원",appNm:"e-감사"},{sysCd:"KS",appItCd:"INR",appCd:"INR",systemNm:"K-업무지원",appNm:"청렴신고"},{sysCd:"KS",appItCd:"ITSM",appCd:"ITAM",systemNm:"K-업무지원",appNm:"ITAM"},{sysCd:"KS",appItCd:"CMM",appCd:"CMM",systemNm:"K-업무지원",appNm:"차량/회의실"},{sysCd:"KS",appItCd:"OAM",appCd:"OAM",systemNm:"K-업무지원",appNm:"OA전산물품관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"GAM",systemNm:"K-업무지원",appNm:"총무관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"ACM",systemNm:"K-업무지원",appNm:"출입관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"IVM",systemNm:"K-업무지원",appNm:"비품관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"SGS",systemNm:"K-업무지원",appNm:"인장서비스"},{sysCd:"KS",appItCd:"HIS",appCd:"HIS",systemNm:"K-업무지원",appNm:"사료관리"},{sysCd:"KS",appItCd:"WFAX",appCd:"WFAX",systemNm:"K-업무지원",appNm:"웹펙스서비스"},{sysCd:"KS",appItCd:"SMS",appCd:"SMS",systemNm:"K-업무지원",appNm:"메시지서비스"},{sysCd:"KS",appItCd:"BID",appCd:"BID",systemNm:"K-업무지원",appNm:"경영공시"},{sysCd:"KS",appItCd:"PAM",appCd:"PAM",systemNm:"K-업무지원",appNm:"언론미디어"},{sysCd:"KS",appItCd:"DAC",appCd:"DAC",systemNm:"K-업무지원",appNm:"심의자문위원회"},{sysCd:"KS",appItCd:"IPR",appCd:"IPR",systemNm:"K-업무지원",appNm:"지식재산권신청"},{sysCd:"KS",appItCd:"ISB",appCd:"ISB",systemNm:"K-업무지원",appNm:"정보공유게시판"},{sysCd:"DE",appItCd:"BCOM",appCd:"BCOM",systemNm:"온통",appNm:"온통"},{sysCd:"TS",appItCd:"ITSM",appCd:"ITSM",systemNm:"ITSM",appNm:"ITSM"},{sysCd:"EP",appItCd:"EPOP",appCd:"EPOP",systemNm:"국민신문고",appNm:"국민신문고"},{sysCd:"VC",appItCd:"VOC",appCd:"VOC",systemNm:"VOC",appNm:"VOC"},{sysCd:"CC",appItCd:"CAL",appCd:"CAL",systemNm:"콜센터",appNm:"콜센터"},{sysCd:"LA",appItCd:"LEG",appCd:"LEG",systemNm:"법규포털",appNm:"법규포털"},{sysCd:"IM",appItCd:"IDXM",appCd:"IDXM",systemNm:"지수방법론",appNm:"지수방법론"},{sysCd:"PM",appItCd:"ORM",appCd:"ORM",systemNm:"운영리스크관리",appNm:"운영리스크관리"},{sysCd:"RF",appItCd:"RFID",appCd:"RFID",systemNm:"RFID(비품관리)",appNm:"RFID(비품관리)"},{sysCd:"SL",appItCd:"SGM",appCd:"SGM",systemNm:"인장관리",appNm:"인장관리"},{sysCd:"DM",appItCd:"LBS",appCd:"LBS",systemNm:"도서관리",appNm:"도서관리"},{sysCd:"HE",appItCd:"RMS",appCd:"RMS",systemNm:"원격지원",appNm:"원격지원"},{sysCd:"WF",appItCd:"WFX",appCd:"WFX",systemNm:"WebFax",appNm:"WebFax"},{sysCd:"SM",appItCd:"SMT",appCd:"SMT",systemNm:"SMS",appNm:"SMS"},{sysCd:"SO",appItCd:"SSO",appCd:"SSO",systemNm:"SSO",appNm:"SSO"},{sysCd:"SF",appItCd:"SFO",appCd:"SFO",systemNm:"생체인증(One Pass)",appNm:"생체인증 FIDO"},{sysCd:"SP",appItCd:"SPO",appCd:"SPO",systemNm:"생체인증(장정맥)",appNm:"생체인증 장정맥"},{sysCd:"AG",appItCd:"APG",appCd:"APG",systemNm:"API GW",appNm:"API Gateway"},{sysCd:"AM",appItCd:"APM",appCd:"APM",systemNm:"APM",appNm:"APM"},{sysCd:"JS",appItCd:"BXS",appCd:"BXS",systemNm:"배치스케줄러",appNm:"배치스케줄러"},{sysCd:"DT",appItCd:"PDT",appCd:"PDT",systemNm:"개인정보변환",appNm:"개인정보변환"}]})},setSystemMap:e=>{r({systemMap:e})},clearSystemMap:()=>{r({systemMap:[]})},getBySysCd:e=>n().systemMap.filter(s=>s.sysCd===e),getByAppItCd:e=>n().systemMap.filter(s=>s.appItCd===e),findByAppCd:e=>n().systemMap.find(s=>s.appCd===e),filterSystemMap:e=>{const{sysCd:s,appItCd:o,appCd:t}=e;return n().systemMap.filter(a=>(s?a.sysCd===s:!0)&&(o?a.appItCd===o:!0)&&(t?a.appCd===t:!0))}}),{name:"system-info-store"})),Ce=b.create(r=>({requestCount:0,loading:!1,showLoading:()=>r(n=>{const e=n.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>r(n=>{const e=Math.max(0,n.requestCount-1);return{requestCount:e,loading:e>0}})})),fe=b.create(r=>({requestCount:0,loading:!1,showLoading:()=>r(n=>{const e=n.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>r(n=>{const e=Math.max(0,n.requestCount-1);return{requestCount:e,loading:e>0}})}));function J(){const[r,n]=k.useState(!1),e=k.useCallback(s=>{const o=s?.getModifierState?.("CapsLock");typeof o=="boolean"&&n(o)},[]);return{capsOn:r,onKeyDown:e}}function he(r){const{loginApi:n,fetchCommonCodes:e,onAfterLogin:s,onError:o,rememberCookie:t={enabled:!0,days:30}}=r,[a,c]=k.useState(!1),{capsOn:d,onKeyDown:i}=J(),l="SCMSIGN00101",h=`${__SYS_CD__}_login_id`,m={id:t?.enabled?I.getCookie(h):void 0,pswr:void 0},u=k.useCallback(async f=>{c(!0);try{const C={crprCd:"100",id:f.id,pswr:await I.encryptSha256(f.pswr)},S=await(n??(g=>I.callService(l,g)))(C);if(S?.userInfo?.userId){if(P.getState().setLoginUser(S.userInfo,S?.hrInfo),localStorage.setItem("LOGIN_USER_ID",S.userInfo.userId),t?.enabled){const g=t.days??30;f.remember?I.setCookie(h,f.id??"",g):I.setCookie(h,"",0)}return e?await e():await D.getState().fetchCommonCodes(),s(S),{user:S.userInfo,response:S}}else throw o({user:S.userInfo,response:S}),new Error("사용자 정보가 유효하지 않습니다.")}catch(C){o(C)}finally{c(!1)}},[l,n,e,s,o,t?.enabled,t?.days]);return{loading:a,capsOn:d,prefills:m,onKeyDown:i,doLogin:u}}function Ie(r){const{loginApi:n,fetchCommonCodes:e,onAfterLogin:s,onError:o}=r,[t,a]=k.useState("LOADING"),c=k.useCallback(async d=>{a("LOADING");try{const i=new URLSearchParams;i.append("ip",I.getClientIp()||"");const l=await Q.post("/api/sso",i);if(l.data.result&&l.data.userId)L.message.success(l.data.message);else if(!l.data.result)throw console.error(l.data.code," ::: ",l.data.message),L.message.error(l.data.message),new Error(l.data.message);const h={crprCd:"100",sysCd:d.sysCd,userId:l.data.userId,id:l.data.userId,pswr:await I.encryptSha256("krx2025!@")},u=await(n??(f=>I.callService("SCMSIGN00199",f)))(h);if(u?.userInfo?.userId)return P.getState().setLoginUser(u.userInfo,u?.hrInfo),localStorage.setItem("LOGIN_USER_ID",u.userInfo.userId),e?await e():await D.getState().fetchCommonCodes(),s(u),a("SUCCESS"),{user:u.userInfo,response:u};throw new Error("INVALID_USER")}catch(i){o?.({msg:i.message}),a("FAIL")}},[n,e,s,o]);return{loginStatus:t,doSsoLogin:c}}function ye(r){return()=>{P.getState().clearLoginUser(),$.getState().clearSystemMap(),D.getState().clearCodes(),_.getState().clearMenu(),U.getState().clearMenuViewStore(),R.getState().clearFavorites(),localStorage.removeItem("LOGIN_USER_ID"),r?.()}}const ge=()=>D.getState(),Se=()=>W.getState(),be=()=>P.getState(),Ne=()=>R.getState(),Me=()=>_.getState(),ke=()=>U.getState(),ve=()=>$.getState();exports.useCapsLock=J;exports.useCode=ge;exports.useCodeStore=D;exports.useColorStore=se;exports.useFavorite=Ne;exports.useFavoriteStore=R;exports.useLoadingStore=Ce;exports.useLogin=he;exports.useLogout=ye;exports.useMenuModel=Me;exports.useMenuModelStore=_;exports.useMenuView=ke;exports.useMenuViewStore=U;exports.useOptionStore=oe;exports.usePopupLoadingStore=fe;exports.usePopupState=Se;exports.usePopupStore=W;exports.useSsoLogin=Ie;exports.useSystemCode=ve;exports.useSystemStore=$;exports.useUser=be;exports.useUserStore=P;
|
package/dist/stores/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { create as b } from "zustand";
|
|
2
2
|
import { callService as S, getServiceCode as w, getUserId as v, generateUID as G, getUserInfo as oe, getCookie as se, encryptSha256 as J, setCookie as z, getClientIp as ne } from "../utils/index.js";
|
|
3
3
|
import { message as F, Modal as re } from "antd";
|
|
4
|
-
import { l as ae } from "../chunks/layout-components-
|
|
4
|
+
import { l as ae } from "../chunks/layout-components-DnuV2Psp.js";
|
|
5
5
|
import { useState as U, useCallback as $ } from "react";
|
|
6
6
|
import de from "axios";
|
|
7
7
|
function ce(n, r) {
|
|
Binary file
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M11.9998 19.9993V20.9993C11.9998 21.3932 12.0774 21.7833 12.2282 22.1473C12.3789 22.5112 12.5999 22.8419 12.8785 23.1205C13.157 23.399 13.4877 23.62 13.8517 23.7708C14.2156 23.9215 14.6057 23.9991 14.9997 23.9991C15.3936 23.9991 15.7837 23.9215 16.1477 23.7708C16.5116 23.62 16.8423 23.399 17.1209 23.1205C17.3994 22.8419 17.6204 22.5112 17.7712 22.1473C17.9219 21.7833 17.9995 21.3932 17.9995 20.9993V19.9993M20.9994 11.9997C20.9994 14.9996 22.9993 19.9993 22.9993 19.9993H7.00006C7.00006 19.9993 8.99996 15.9995 8.99996 11.9997C8.99996 8.73187 11.7318 6 14.9997 6C18.2675 6 20.9994 8.73187 20.9994 11.9997Z" stroke="#485299" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
-
</svg>
|
|
1
|
+
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M11.9998 19.9993V20.9993C11.9998 21.3932 12.0774 21.7833 12.2282 22.1473C12.3789 22.5112 12.5999 22.8419 12.8785 23.1205C13.157 23.399 13.4877 23.62 13.8517 23.7708C14.2156 23.9215 14.6057 23.9991 14.9997 23.9991C15.3936 23.9991 15.7837 23.9215 16.1477 23.7708C16.5116 23.62 16.8423 23.399 17.1209 23.1205C17.3994 22.8419 17.6204 22.5112 17.7712 22.1473C17.9219 21.7833 17.9995 21.3932 17.9995 20.9993V19.9993M20.9994 11.9997C20.9994 14.9996 22.9993 19.9993 22.9993 19.9993H7.00006C7.00006 19.9993 8.99996 15.9995 8.99996 11.9997C8.99996 8.73187 11.7318 6 14.9997 6C18.2675 6 20.9994 8.73187 20.9994 11.9997Z" stroke="#485299" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
+
</svg>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<g clip-path="url(#clip0_93_4488)">
|
|
3
|
-
<path d="M18 7H21C22.1046 7 23 7.89543 23 9V21C23 22.1046 22.1046 23 21 23H18M11 11L7 15M7 15L11 19M7 15L19 15" stroke="#485299" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4
|
-
</g>
|
|
5
|
-
<defs>
|
|
6
|
-
<clipPath id="clip0_93_4488">
|
|
7
|
-
<rect width="30" height="30" fill="white"/>
|
|
8
|
-
</clipPath>
|
|
9
|
-
</defs>
|
|
10
|
-
</svg>
|
|
1
|
+
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g clip-path="url(#clip0_93_4488)">
|
|
3
|
+
<path d="M18 7H21C22.1046 7 23 7.89543 23 9V21C23 22.1046 22.1046 23 21 23H18M11 11L7 15M7 15L11 19M7 15L19 15" stroke="#485299" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4
|
+
</g>
|
|
5
|
+
<defs>
|
|
6
|
+
<clipPath id="clip0_93_4488">
|
|
7
|
+
<rect width="30" height="30" fill="white"/>
|
|
8
|
+
</clipPath>
|
|
9
|
+
</defs>
|
|
10
|
+
</svg>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M14 6H16C16.5523 6 17 6.44772 17 7V7.56879C17 7.99659 17.2871 8.36825 17.6822 8.53228C18.0775 8.69638 18.5377 8.63384 18.8403 8.33123L19.2426 7.92891C19.6331 7.53838 20.2663 7.53838 20.6568 7.92891L22.071 9.34312C22.4616 9.73365 22.4615 10.3668 22.071 10.7573L21.6688 11.1596C21.3661 11.4622 21.3036 11.9225 21.4677 12.3177C21.6317 12.7129 22.0034 13 22.4313 13L23 13C23.5523 13 24 13.4477 24 14V16C24 16.5523 23.5523 17 23 17H22.4312C22.0034 17 21.6318 17.2871 21.4677 17.6822C21.3036 18.0775 21.3661 18.5377 21.6688 18.8403L22.071 19.2426C22.4616 19.6331 22.4616 20.2663 22.071 20.6568L20.6568 22.071C20.2663 22.4616 19.6331 22.4616 19.2426 22.071L18.8403 21.6688C18.5377 21.3661 18.0775 21.3036 17.6822 21.4677C17.2871 21.6318 17 22.0034 17 22.4312V23C17 23.5523 16.5523 24 16 24H14C13.4477 24 13 23.5523 13 23V22.4313C13 22.0034 12.7129 21.6317 12.3177 21.4677C11.9225 21.3036 11.4622 21.3661 11.1596 21.6688L10.7573 22.071C10.3668 22.4616 9.73363 22.4616 9.34311 22.071L7.92889 20.6568C7.53837 20.2663 7.53837 19.6331 7.92889 19.2426L8.33123 18.8403C8.63384 18.5377 8.69638 18.0775 8.53228 17.6822C8.36825 17.2871 7.99659 17 7.56879 17H7C6.44772 17 6 16.5523 6 16V14C6 13.4477 6.44772 13 7 13L7.56877 13C7.99658 13 8.36825 12.7129 8.53229 12.3178C8.6964 11.9225 8.63386 11.4623 8.33123 11.1597L7.92891 10.7573C7.53838 10.3668 7.53838 9.73365 7.92891 9.34313L9.34312 7.92891C9.73365 7.53839 10.3668 7.53839 10.7573 7.92891L11.1597 8.33123C11.4623 8.63386 11.9225 8.6964 12.3178 8.53229C12.7129 8.36825 13 7.99658 13 7.56876V7C13 6.44772 13.4477 6 14 6Z" stroke="#485299" stroke-width="1.5"/>
|
|
3
|
-
<path d="M17 15C17 16.1046 16.1046 17 15 17C13.8954 17 13 16.1046 13 15C13 13.8954 13.8954 13 15 13C16.1046 13 17 13.8954 17 15Z" stroke="#485299" stroke-width="1.5"/>
|
|
4
|
-
</svg>
|
|
1
|
+
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M14 6H16C16.5523 6 17 6.44772 17 7V7.56879C17 7.99659 17.2871 8.36825 17.6822 8.53228C18.0775 8.69638 18.5377 8.63384 18.8403 8.33123L19.2426 7.92891C19.6331 7.53838 20.2663 7.53838 20.6568 7.92891L22.071 9.34312C22.4616 9.73365 22.4615 10.3668 22.071 10.7573L21.6688 11.1596C21.3661 11.4622 21.3036 11.9225 21.4677 12.3177C21.6317 12.7129 22.0034 13 22.4313 13L23 13C23.5523 13 24 13.4477 24 14V16C24 16.5523 23.5523 17 23 17H22.4312C22.0034 17 21.6318 17.2871 21.4677 17.6822C21.3036 18.0775 21.3661 18.5377 21.6688 18.8403L22.071 19.2426C22.4616 19.6331 22.4616 20.2663 22.071 20.6568L20.6568 22.071C20.2663 22.4616 19.6331 22.4616 19.2426 22.071L18.8403 21.6688C18.5377 21.3661 18.0775 21.3036 17.6822 21.4677C17.2871 21.6318 17 22.0034 17 22.4312V23C17 23.5523 16.5523 24 16 24H14C13.4477 24 13 23.5523 13 23V22.4313C13 22.0034 12.7129 21.6317 12.3177 21.4677C11.9225 21.3036 11.4622 21.3661 11.1596 21.6688L10.7573 22.071C10.3668 22.4616 9.73363 22.4616 9.34311 22.071L7.92889 20.6568C7.53837 20.2663 7.53837 19.6331 7.92889 19.2426L8.33123 18.8403C8.63384 18.5377 8.69638 18.0775 8.53228 17.6822C8.36825 17.2871 7.99659 17 7.56879 17H7C6.44772 17 6 16.5523 6 16V14C6 13.4477 6.44772 13 7 13L7.56877 13C7.99658 13 8.36825 12.7129 8.53229 12.3178C8.6964 11.9225 8.63386 11.4623 8.33123 11.1597L7.92891 10.7573C7.53838 10.3668 7.53838 9.73365 7.92891 9.34313L9.34312 7.92891C9.73365 7.53839 10.3668 7.53839 10.7573 7.92891L11.1597 8.33123C11.4623 8.63386 11.9225 8.6964 12.3178 8.53229C12.7129 8.36825 13 7.99658 13 7.56876V7C13 6.44772 13.4477 6 14 6Z" stroke="#485299" stroke-width="1.5"/>
|
|
3
|
+
<path d="M17 15C17 16.1046 16.1046 17 15 17C13.8954 17 13 16.1046 13 15C13 13.8954 13.8954 13 15 13C16.1046 13 17 13.8954 17 15Z" stroke="#485299" stroke-width="1.5"/>
|
|
4
|
+
</svg>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M6.77771 8.1809C6.37747 8.67607 5.62253 8.67607 5.22229 8.18089L2.98627 5.41454C2.4577 4.7606 2.92314 3.78592 3.76399 3.78592L8.23602 3.78592C9.07687 3.78592 9.5423 4.7606 9.01373 5.41454L6.77771 8.1809Z" fill="#B9B9B9"/>
|
|
3
|
-
</svg>
|
|
1
|
+
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M6.77771 8.1809C6.37747 8.67607 5.62253 8.67607 5.22229 8.18089L2.98627 5.41454C2.4577 4.7606 2.92314 3.78592 3.76399 3.78592L8.23602 3.78592C9.07687 3.78592 9.5423 4.7606 9.01373 5.41454L6.77771 8.1809Z" fill="#B9B9B9"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* breadcrumb */
|
|
2
|
+
.admin-breadcrumb {
|
|
3
|
+
color: #7e7e7e;
|
|
4
|
+
font-size: 14px;
|
|
5
|
+
}
|
|
6
|
+
.admin-breadcrumb ol {
|
|
7
|
+
align-items: center;
|
|
8
|
+
}
|
|
9
|
+
.admin-breadcrumb .ant-breadcrumb-separator {
|
|
10
|
+
margin-inline: 4px;
|
|
11
|
+
display: flex;
|
|
12
|
+
align-items: center;
|
|
13
|
+
}
|
|
14
|
+
.admin-breadcrumb li:last-child {
|
|
15
|
+
color: #585858;
|
|
16
|
+
font-weight: 600;
|
|
17
|
+
}
|
|
18
|
+
.admin-breadcrumb .ant-breadcrumb-link {
|
|
19
|
+
position: relative;
|
|
20
|
+
display: inline-block;
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
}
|
|
23
|
+
.admin-breadcrumb .ant-breadcrumb-link::after {
|
|
24
|
+
content: '';
|
|
25
|
+
display: block;
|
|
26
|
+
position: absolute;
|
|
27
|
+
bottom: -1px;
|
|
28
|
+
left: 0;
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: 1px;
|
|
31
|
+
background: #a5a5a5;
|
|
32
|
+
}
|
|
33
|
+
.admin-breadcrumb li:last-child .ant-breadcrumb-link::after {
|
|
34
|
+
display: none;
|
|
35
|
+
}
|
package/dist/styles/global.css
CHANGED
|
@@ -16,7 +16,9 @@ body {
|
|
|
16
16
|
height: 100vh;
|
|
17
17
|
overflow-y: hidden;
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
#root:has(.admin-layout) {
|
|
20
|
+
overflow-y: hidden;
|
|
21
|
+
}
|
|
20
22
|
|
|
21
23
|
/* 공통 유틸리티 클래스 */
|
|
22
24
|
.flex-center {
|
|
@@ -69,3 +71,9 @@ body {
|
|
|
69
71
|
::-webkit-scrollbar-thumb:horizontal:hover {
|
|
70
72
|
background: #555;
|
|
71
73
|
}
|
|
74
|
+
|
|
75
|
+
@media (max-height: 768px) {
|
|
76
|
+
#root {
|
|
77
|
+
overflow-y: auto;
|
|
78
|
+
}
|
|
79
|
+
}
|
package/dist/styles/index.css
CHANGED
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
@import './variables.css';
|
|
4
4
|
@import './global.css';
|
|
5
5
|
@import './layout.css';
|
|
6
|
+
@import './layout_02.css';
|
|
6
7
|
@import './login.css';
|
|
8
|
+
@import './login_02.css';
|
|
7
9
|
@import './components.css';
|
|
10
|
+
@import './components_02.css';
|
|
8
11
|
@import './popup.css';
|
|
9
12
|
@import './size.css';
|
|
10
13
|
@import './renderers.css';
|
package/dist/styles/layout.css
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/* 메인 레이아웃 스타일 */
|
|
2
2
|
.main-layout {
|
|
3
|
-
min-height: 100vh;
|
|
3
|
+
/* min-height: 100vh; */
|
|
4
4
|
overflow: hidden;
|
|
5
5
|
min-width: 1280px;
|
|
6
|
+
min-height: 768px;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
/* 헤더 스타일 */
|
|
@@ -91,7 +92,7 @@
|
|
|
91
92
|
|
|
92
93
|
/* 사이더 스타일 */
|
|
93
94
|
.side-wrapper {
|
|
94
|
-
height: calc(100vh - 50px);
|
|
95
|
+
/* height: calc(100vh - 50px); 헤더 높이(50px)를 제외 */
|
|
95
96
|
overflow: visible; /* 토글 버튼이 짤리지 않도록 visible로 변경 */
|
|
96
97
|
display: flex;
|
|
97
98
|
flex-direction: column;
|
|
@@ -112,7 +113,8 @@
|
|
|
112
113
|
flex: 1;
|
|
113
114
|
overflow-y: auto; /* 필요할 때만 스크롤바 표시 */
|
|
114
115
|
overflow-x: hidden;
|
|
115
|
-
max-height: calc(100vh -
|
|
116
|
+
max-height: calc(100vh - 140px); /*헤더(50px) + 로고 높이 + 마진 고려*/
|
|
117
|
+
/* max-height: calc(100vh - 50px); */
|
|
116
118
|
padding-right: 0px !important; /* 스크롤바 너비만큼 여백 확보 */
|
|
117
119
|
box-sizing: border-box; /* 패딩을 포함한 박스 모델 */
|
|
118
120
|
}
|
|
@@ -784,7 +786,6 @@
|
|
|
784
786
|
/* 반응형 디자인 */
|
|
785
787
|
@media (max-width: 768px) {
|
|
786
788
|
.side-wrapper {
|
|
787
|
-
height: 100vh;
|
|
788
789
|
z-index: 1001;
|
|
789
790
|
transition: left 0.3s ease;
|
|
790
791
|
}
|
|
@@ -811,6 +812,15 @@
|
|
|
811
812
|
}
|
|
812
813
|
}
|
|
813
814
|
|
|
815
|
+
@media (max-height: 768px) {
|
|
816
|
+
.sider-menu {
|
|
817
|
+
max-height: 100vh;
|
|
818
|
+
}
|
|
819
|
+
.content-container {
|
|
820
|
+
height: auto;
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
|
|
814
824
|
/* MenuTab 전용 스타일링 */
|
|
815
825
|
.menu-tab-wrapper {
|
|
816
826
|
background: var(--bg-primary);
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/* kiam 레이아웃 */
|
|
2
|
+
|
|
3
|
+
/* 메인 레이아웃 스타일 */
|
|
4
|
+
.admin-layout {
|
|
5
|
+
min-height: 100vh;
|
|
6
|
+
min-width: 1280px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* 컨텐츠 컨테이너 스타일 */
|
|
10
|
+
.admin-content-container {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
flex-grow: 1;
|
|
14
|
+
overflow-y: auto;
|
|
15
|
+
height: calc(100vh - 50px); /* 헤더 높이를 제외 */
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* 뷰 컨테이너 스타일 */
|
|
19
|
+
.admin-view-container {
|
|
20
|
+
height: 100%;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.admin-page-inner {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
height: 100%;
|
|
27
|
+
}
|
|
28
|
+
.page-header {
|
|
29
|
+
padding: 20px 40px;
|
|
30
|
+
border-bottom: 1px solid #ddd;
|
|
31
|
+
background: var(--bg-primary);
|
|
32
|
+
}
|
|
33
|
+
.page-main-content {
|
|
34
|
+
height: inherit;
|
|
35
|
+
flex: 1 1;
|
|
36
|
+
min-height: 0;
|
|
37
|
+
padding: 20px 30px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* bwgview 스타일 */
|
|
41
|
+
.admin-layout .bwgview-content-layout {
|
|
42
|
+
height: auto;
|
|
43
|
+
padding-bottom: 20px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* 컨텐츠 영역만 스크롤되는 레이아웃(타이틀영역 고정) */
|
|
47
|
+
.admin-layout.layout-fixed .admin-content-container {
|
|
48
|
+
overflow: hidden;
|
|
49
|
+
}
|
|
50
|
+
.admin-layout.layout-fixed .page-main-content {
|
|
51
|
+
overflow-y: auto;
|
|
52
|
+
}
|
|
53
|
+
.admin-layout.layout-fixed .bwgview-content-layout {
|
|
54
|
+
padding-bottom: 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.page-title {
|
|
58
|
+
font-size: 20px;
|
|
59
|
+
color: var(--text-high);
|
|
60
|
+
font-weight: 700;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* 헤더 스타일 */
|
|
64
|
+
.header-wrapper {
|
|
65
|
+
height: 50px !important;
|
|
66
|
+
line-height: 50px !important;
|
|
67
|
+
background: var(--header-bg);
|
|
68
|
+
padding: 0 30px 0 20px;
|
|
69
|
+
border-bottom: 1px solid var(--border-color);
|
|
70
|
+
display: flex;
|
|
71
|
+
justify-content: space-between;
|
|
72
|
+
align-items: center;
|
|
73
|
+
z-index: 1000;
|
|
74
|
+
gap: 24px;
|
|
75
|
+
color: var(--header-text);
|
|
76
|
+
}
|
|
77
|
+
.admin-layout .header-wrapper {
|
|
78
|
+
background: var(--bg-primary);
|
|
79
|
+
}
|
|
80
|
+
/* 헤더 gnb */
|
|
81
|
+
.top-menu-wrap > .ant-menu .ant-menu-title-content {
|
|
82
|
+
color: var(--text-primary);
|
|
83
|
+
font-weight: 500;
|
|
84
|
+
}
|
|
85
|
+
.top-menu-wrap > .ant-menu .ant-menu-item:hover::after,
|
|
86
|
+
.top-menu-wrap > .ant-menu .ant-menu-submenu:hover::after,
|
|
87
|
+
.top-menu-wrap > .ant-menu .ant-menu-submenu:hover .ant-menu-submenu-title,
|
|
88
|
+
.top-menu-wrap > .ant-menu .ant-menu-submenu-open::after {
|
|
89
|
+
border-bottom-color: var(--primary-color);
|
|
90
|
+
}
|
|
91
|
+
.top-menu-wrap > .ant-menu .ant-menu-item:hover .ant-menu-title-content,
|
|
92
|
+
.top-menu-wrap > .ant-menu .ant-menu-submenu:hover .ant-menu-submenu-title,
|
|
93
|
+
.top-menu-wrap > .ant-menu .ant-menu-submenu:hover .ant-menu-title-content,
|
|
94
|
+
.top-menu-wrap > .ant-menu .ant-menu-item:not(.ant-menu-item-selected):not(.ant-menu-submenu-selected):hover,
|
|
95
|
+
.top-menu-wrap > .ant-menu .ant-menu-submenu-open > .ant-menu-submenu-title,
|
|
96
|
+
.top-menu-wrap > .ant-menu .ant-menu-submenu-open > .ant-menu-submenu-title .ant-menu-title-content {
|
|
97
|
+
color: var(--primary-color);
|
|
98
|
+
font-weight: 600;
|
|
99
|
+
}
|
package/dist/styles/login.css
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
background: url('./assets/images/logos/krx-logo-full.svg') no-repeat
|
|
27
27
|
center;
|
|
28
28
|
background-size: 191px 38px;
|
|
29
|
-
margin-bottom:
|
|
29
|
+
margin-bottom: 70px;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
.alert_wrap {
|
|
@@ -63,46 +63,6 @@
|
|
|
63
63
|
-webkit-box-align: center;
|
|
64
64
|
-ms-flex-align: center;
|
|
65
65
|
align-items: center;
|
|
66
|
-
|
|
67
|
-
input {
|
|
68
|
-
display: block;
|
|
69
|
-
width: calc(100% - 100px);
|
|
70
|
-
height: 42px;
|
|
71
|
-
padding: 0 4px;
|
|
72
|
-
font-size: 16px;
|
|
73
|
-
font-weight: 600;
|
|
74
|
-
color: #4e677a;
|
|
75
|
-
border: 0;
|
|
76
|
-
border-bottom: 1px solid #ced0d6;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
&:first-child {
|
|
80
|
-
margin-bottom: 24px;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.btn-login {
|
|
85
|
-
right: 0;
|
|
86
|
-
width: 100%;
|
|
87
|
-
height: 40px;
|
|
88
|
-
margin: 0;
|
|
89
|
-
padding: 0;
|
|
90
|
-
border: none;
|
|
91
|
-
color: #fff;
|
|
92
|
-
text-decoration: none !important;
|
|
93
|
-
font-size: var(--font-size-md);
|
|
94
|
-
font-weight: 600;
|
|
95
|
-
background-color: #6449fc;
|
|
96
|
-
-webkit-transition: all 0.3s ease;
|
|
97
|
-
-moz-transition: all 0.3s ease;
|
|
98
|
-
-o-transition: all 0.3s ease;
|
|
99
|
-
transition: all 0.3s ease;
|
|
100
|
-
border-radius: 50px;
|
|
101
|
-
box-shadow: 0 0 5px rgba(97, 56, 218, 0.2);
|
|
102
|
-
&:hover,
|
|
103
|
-
&:focus {
|
|
104
|
-
background-color: #361bca;
|
|
105
|
-
}
|
|
106
66
|
}
|
|
107
67
|
}
|
|
108
68
|
}
|
|
@@ -139,14 +99,16 @@
|
|
|
139
99
|
-webkit-transition: background-color 9999s ease-out;
|
|
140
100
|
-webkit-box-shadow: 0 0 0px 1000px white inset !important;
|
|
141
101
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
102
|
.login-btn-wrap {
|
|
146
103
|
margin-bottom: 0 !important;
|
|
147
104
|
margin-top: 30px;
|
|
148
105
|
}
|
|
149
106
|
|
|
107
|
+
.login-form .ant-input-outlined:focus,
|
|
108
|
+
.login-form .ant-input-outlined:focus-within {
|
|
109
|
+
border-color: #bdb1ff;
|
|
110
|
+
box-shadow: 0 0 0 2px rgba(100, 73, 252, 0.1);
|
|
111
|
+
}
|
|
150
112
|
|
|
151
113
|
/* 로그인 페이지 반응형 */
|
|
152
114
|
@media (max-width: 480px) {
|
|
@@ -155,3 +117,4 @@
|
|
|
155
117
|
margin: 0 20px;
|
|
156
118
|
}
|
|
157
119
|
}
|
|
120
|
+
|