@bwg-ui/core 1.3.2 → 1.3.3

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.
Files changed (60) hide show
  1. package/dist/chunks/{CMSearchIntfGwP01-Bx5cpkhH.js → CMSearchIntfGwP01-Co6lrDf9.js} +9 -9
  2. package/dist/chunks/CMSearchIntfGwP01-Do_ZDjmX.cjs +1 -0
  3. package/dist/chunks/{MenuReport-DxJIaW8D.js → MenuReport-BTtoDFz-.js} +146 -141
  4. package/dist/chunks/MenuReport-Bn5NyNel.cjs +1 -0
  5. package/dist/chunks/{common-components-dzN5Nuq0.js → common-components-0IMhPxxg.js} +11521 -10978
  6. package/dist/chunks/common-components-Csd3OioX.cjs +1109 -0
  7. package/dist/chunks/core-components-CX6NGtTh.cjs +1 -0
  8. package/dist/chunks/core-components-Ckwf4Rd7.js +1969 -0
  9. package/dist/chunks/layout-components-BMLp8YAy.cjs +38 -0
  10. package/dist/chunks/{layout-components-B25FFvXj.js → layout-components-DphZY34c.js} +942 -741
  11. package/dist/components/common/index.cjs +1 -1
  12. package/dist/components/common/index.js +1 -1
  13. package/dist/components/core/BwgEmpSearch.d.ts +28 -0
  14. package/dist/components/core/BwgEmpSearch.d.ts.map +1 -0
  15. package/dist/components/core/index.cjs +1 -1
  16. package/dist/components/core/index.js +22 -1846
  17. package/dist/components/guide/index.cjs +1 -1
  18. package/dist/components/guide/index.js +13 -13
  19. package/dist/components/layout/AppWrapper.d.ts +2 -1
  20. package/dist/components/layout/AppWrapper.d.ts.map +1 -1
  21. package/dist/components/layout/BwgCoreLogin.d.ts +1 -2
  22. package/dist/components/layout/BwgCoreLogin.d.ts.map +1 -1
  23. package/dist/components/layout/BwgSessionNotice.d.ts +15 -0
  24. package/dist/components/layout/BwgSessionNotice.d.ts.map +1 -0
  25. package/dist/components/layout/BwgSsoLogin.d.ts +19 -0
  26. package/dist/components/layout/BwgSsoLogin.d.ts.map +1 -0
  27. package/dist/components/layout/custom/ConfigurableHeader.d.ts.map +1 -1
  28. package/dist/components/layout/index.cjs +1 -1
  29. package/dist/components/layout/index.d.ts +2 -0
  30. package/dist/components/layout/index.d.ts.map +1 -1
  31. package/dist/components/layout/index.js +16 -14
  32. package/dist/components/pages/board/CMAdminBoardM01.d.ts.map +1 -1
  33. package/dist/components/pages/board/CMMyBoardM01.d.ts.map +1 -1
  34. package/dist/components/popup/MenuReport.d.ts.map +1 -1
  35. package/dist/components/popup/SearchOrganizationP01.d.ts +1 -1
  36. package/dist/components/popup/SearchOrganizationP01.d.ts.map +1 -1
  37. package/dist/components/popup/index.cjs +1 -1
  38. package/dist/components/popup/index.js +1 -1
  39. package/dist/index.cjs +1 -1
  40. package/dist/index.js +160 -157
  41. package/dist/stores/index.cjs +2 -2
  42. package/dist/stores/index.d.ts +2 -1
  43. package/dist/stores/index.d.ts.map +1 -1
  44. package/dist/stores/index.js +368 -335
  45. package/dist/stores/loginStore.d.ts +55 -10
  46. package/dist/stores/loginStore.d.ts.map +1 -1
  47. package/dist/stores/userStore.d.ts +1 -2
  48. package/dist/stores/userStore.d.ts.map +1 -1
  49. package/dist/styles/assets/images/header/icon/ico-bell.svg +3 -3
  50. package/dist/styles/assets/images/header/icon/ico-logout.svg +10 -10
  51. package/dist/styles/assets/images/header/icon/ico-setting.svg +4 -4
  52. package/dist/styles/assets/images/header/icon/ico-sidebar-arrow.svg +3 -3
  53. package/dist/utils/index.cjs +1 -1
  54. package/dist/utils/index.d.ts.map +1 -1
  55. package/dist/utils/index.js +455 -454
  56. package/package.json +1 -1
  57. package/dist/chunks/CMSearchIntfGwP01-Uhl4uqiV.cjs +0 -1
  58. package/dist/chunks/MenuReport-CPwq8w-z.cjs +0 -1
  59. package/dist/chunks/common-components-Dd_AsKs7.cjs +0 -1109
  60. package/dist/chunks/layout-components-Cz7Zets7.cjs +0 -35
package/dist/index.js CHANGED
@@ -1,106 +1,108 @@
1
- import { ApiError as o, DEFAULT_FMT as a, DEFAULT_SERVICE_CODES as r, THEME_COOKIE_NAME as t, add as i, apiUtils as n, arrAverage as g, arrCount as d, arrMax as l, arrMin as u, arrReverse as C, arrSum as p, arrUnique as c, bwgUtils as S, callEndpoint as w, callService as B, callServiceByAppCd as M, clamp as m, clearAllGridLayouts as f, clearGridLayouts as v, clearSessionStorage as h, closeAllMessages as P, closeMessage as y, closeNotification as A, colorFormat as L, colorUtils as D, commonUtils as U, configureEnvUtils as E, copyToClipboard as b, createBwgGridRenderer as k, debounce as I, deleteCookie as R, destroyNotifications as F, diff as G, downloadByFileKey as V, downloadFile as O, duplicates as T, encryptSha256 as x, endOf as N, envUtils as H, fileUtils as W, format as _, generateRandomColor as J, generateRandomString as q, generateUID as K, getAllServiceCodes as j, getApiDeps as z, getClientIp as Y, getCookie as Q, getCrprCd as X, getDepartmentInfo as Z, getDeviceType as $, getDisplayName as ee, getDprtCd as se, getDprtNm as oe, getEmplNo as ae, getEnvCode as re, getFullDprtCd as te, getFullDprtNm as ie, getGridLayout as ne, getGridLayouts as ge, getHrInfo as de, getJbdtCd as le, getJbgdCd as ue, getJbkdCd as Ce, getJbpsCd as pe, getPermissionService as ce, getRoleList as Se, getServiceCode as we, getSessionStorage as Be, getTodateString as Me, getUserDvsn as me, getUserId as fe, getUserInfo as ve, getUserNm as he, getWkplCd as Pe, gridUtils as ye, hasAllRoles as Ae, hasAnyRole as Le, hasRole as De, hasUserInfo as Ue, initApiDeps as Ee, isArray as be, isBoolean as ke, isDesktop as Ie, isDev as Re, isEmpty as Fe, isEmptyArray as Ge, isFunction as Ve, isLocal as Oe, isLoggedIn as Te, isMobile as xe, isNull as Ne, isNullOrUndefined as He, isNumber as We, isObject as _e, isProd as Je, isSafeEmpty as qe, isString as Ke, isTablet as je, isUndefined as ze, isValid as Ye, isValidDate as Qe, isValidEmail as Xe, isValidUrl as Ze, isValidYear as $e, isValidYearMonth as es, logServiceCodeConfig as ss, messageUtils as os, notiBwgError as as, notiError as rs, notiInfo as ts, notiSuccess as is, notiWarning as ns, notificationService as gs, notificationUtils as ds, now as ls, openGwDraftByAprvKey as us, padLeft as Cs, padRight as ps, random as cs, realFormat as Ss, removeGridLayout as ws, removeSessionStorage as Bs, round as Ms, saveGridLayout as ms, serviceUtils as fs, setClientIp as vs, setCookie as hs, setServiceCodeOverrides as Ps, setSessionStorage as ys, showApiError as As, showDuplicateError as Ls, showError as Ds, showInfo as Us, showLoading as Es, showRequiredError as bs, showSaveError as ks, showSaveSuccess as Is, showSuccess as Rs, showWarning as Fs, startOf as Gs, submitGwApproval as Vs, throttle as Os, toCamelCase as Ts, uploadFilesViaSftp as xs, userUtils as Ns, verifyClientIp as Hs } from "./utils/index.js";
2
- import { useCapsLock as _s, useCode as Js, useCodeStore as qs, useColorStore as Ks, useFavorite as js, useFavoriteStore as zs, useLoadingStore as Ys, useLogin as Qs, useLogout as Xs, useMenuModel as Zs, useMenuModelStore as $s, useMenuView as eo, useMenuViewStore as so, useOptionStore as oo, usePopupLoadingStore as ao, usePopupState as ro, usePopupStore as to, useSystemCode as io, useSystemStore as no, useUser as go, useUserStore as lo } from "./stores/index.js";
3
- import { f as Co, p as po, q as co, j as So, I as wo, B as Bo, r as Mo, J as mo, s as fo, o as vo, h as ho, t as Po, n as yo, m as Ao, K as Lo, i as Do, b as Uo, u as Eo, l as bo, e as ko, k as Io, Y as Ro, F as Fo, Z as Go, L as Vo, T as Oo, M as To, N as xo, O as No, _ as Ho, P as Wo, R as _o, D as Jo, H as qo, U as Ko, V as jo, X as zo, d as Yo, C as Qo, G as Xo, Q as Zo, v as $o, E as ea, S as sa, w as oa, x as aa, A as ra, y as ta, z as ia, W as na } from "./chunks/common-components-dzN5Nuq0.js";
4
- import { BwgButton as da, BwgCheck as la, BwgCheckList as ua, BwgDatePicker as Ca, BwgDownload as pa, BwgForm as ca, BwgFormItem as Sa, BwgInput as wa, BwgLargeUploader as Ba, BwgMaskedDate as Ma, BwgMaskedInput as ma, BwgMaskedRange as fa, BwgMultiSelect as va, BwgNumber as ha, BwgRadio as Pa, BwgRangePicker as ya, BwgSearch as Aa, BwgSelect as La, BwgSwitch as Da, BwgTextArea as Ua, BwgUploader as Ea } from "./components/core/index.js";
5
- import { A as ka, b as Ia, B as Ra, a as Fa, d as Ga, e as Va, f as Oa, g as Ta, C as xa, h as Na, D as Ha, H as Wa, c as _a, L as Ja, P as qa, i as Ka } from "./chunks/layout-components-B25FFvXj.js";
6
- import { A as za, B as Ya, C as Qa, n as Xa, S as Za, o as $a, q as er, f as sr, b as or, j as ar, h as rr, k as tr, i as ir, g as nr, l as gr, m as dr, r as lr, d as ur, e as Cr, p as pr, u as cr } from "./chunks/provider-VCa8UGvF.js";
1
+ import { ApiError as a, DEFAULT_FMT as o, DEFAULT_SERVICE_CODES as r, THEME_COOKIE_NAME as t, add as i, apiUtils as n, arrAverage as g, arrCount as d, arrMax as l, arrMin as u, arrReverse as C, arrSum as p, arrUnique as c, bwgUtils as S, callEndpoint as w, callService as B, callServiceByAppCd as M, clamp as m, clearAllGridLayouts as f, clearGridLayouts as v, clearSessionStorage as h, closeAllMessages as P, closeMessage as y, closeNotification as L, colorFormat as A, colorUtils as D, commonUtils as U, configureEnvUtils as E, copyToClipboard as b, createBwgGridRenderer as k, debounce as I, deleteCookie as R, destroyNotifications as F, diff as G, downloadByFileKey as V, downloadFile as N, duplicates as O, encryptSha256 as T, endOf as x, envUtils as H, fileUtils as W, format as _, generateRandomColor as j, generateRandomString as q, generateUID as J, getAllServiceCodes as K, getApiDeps as z, getClientIp as Y, getCookie as Q, getCrprCd as X, getDepartmentInfo as Z, getDeviceType as $, getDisplayName as ee, getDprtCd as se, getDprtNm as ae, getEmplNo as oe, getEnvCode as re, getFullDprtCd as te, getFullDprtNm as ie, getGridLayout as ne, getGridLayouts as ge, getHrInfo as de, getJbdtCd as le, getJbgdCd as ue, getJbkdCd as Ce, getJbpsCd as pe, getPermissionService as ce, getRoleList as Se, getServiceCode as we, getSessionStorage as Be, getTodateString as Me, getUserDvsn as me, getUserId as fe, getUserInfo as ve, getUserNm as he, getWkplCd as Pe, gridUtils as ye, hasAllRoles as Le, hasAnyRole as Ae, hasRole as De, hasUserInfo as Ue, initApiDeps as Ee, isArray as be, isBoolean as ke, isDesktop as Ie, isDev as Re, isEmpty as Fe, isEmptyArray as Ge, isFunction as Ve, isLocal as Ne, isLoggedIn as Oe, isMobile as Te, isNull as xe, isNullOrUndefined as He, isNumber as We, isObject as _e, isProd as je, isSafeEmpty as qe, isString as Je, isTablet as Ke, isUndefined as ze, isValid as Ye, isValidDate as Qe, isValidEmail as Xe, isValidUrl as Ze, isValidYear as $e, isValidYearMonth as es, logServiceCodeConfig as ss, messageUtils as as, notiBwgError as os, notiError as rs, notiInfo as ts, notiSuccess as is, notiWarning as ns, notificationService as gs, notificationUtils as ds, now as ls, openGwDraftByAprvKey as us, padLeft as Cs, padRight as ps, random as cs, realFormat as Ss, removeGridLayout as ws, removeSessionStorage as Bs, round as Ms, saveGridLayout as ms, serviceUtils as fs, setClientIp as vs, setCookie as hs, setServiceCodeOverrides as Ps, setSessionStorage as ys, showApiError as Ls, showDuplicateError as As, showError as Ds, showInfo as Us, showLoading as Es, showRequiredError as bs, showSaveError as ks, showSaveSuccess as Is, showSuccess as Rs, showWarning as Fs, startOf as Gs, submitGwApproval as Vs, throttle as Ns, toCamelCase as Os, uploadFilesViaSftp as Ts, userUtils as xs, verifyClientIp as Hs } from "./utils/index.js";
2
+ import { useCapsLock as _s, useCode as js, useCodeStore as qs, useColorStore as Js, useFavorite as Ks, useFavoriteStore as zs, useLoadingStore as Ys, useLogin as Qs, useLogout as Xs, useMenuModel as Zs, useMenuModelStore as $s, useMenuView as ea, useMenuViewStore as sa, useOptionStore as aa, usePopupLoadingStore as oa, usePopupState as ra, usePopupStore as ta, useSsoLogin as ia, useSystemCode as na, useSystemStore as ga, useUser as da, useUserStore as la } from "./stores/index.js";
3
+ import { f as Ca, p as pa, q as ca, j as Sa, I as wa, B as Ba, r as Ma, J as ma, s as fa, o as va, h as ha, t as Pa, n as ya, m as La, K as Aa, i as Da, b as Ua, u as Ea, l as ba, e as ka, k as Ia, Y as Ra, F as Fa, Z as Ga, L as Va, T as Na, M as Oa, N as Ta, O as xa, _ as Ha, P as Wa, R as _a, D as ja, H as qa, U as Ja, V as Ka, X as za, d as Ya, C as Qa, G as Xa, Q as Za, v as $a, E as eo, S as so, w as ao, x as oo, A as ro, y as to, z as io, W as no } from "./chunks/common-components-0IMhPxxg.js";
4
+ import { B as lo, k as uo, l as Co, i as po, r as co, a as So, d as wo, b as Bo, o as Mo, p as mo, q as fo, t as vo, h as ho, g as Po, m as yo, j as Lo, e as Ao, c as Do, u as Uo, f as Eo, n as bo } from "./chunks/core-components-Ckwf4Rd7.js";
5
+ import { A as Io, b as Ro, B as Fo, a as Go, d as Vo, c as No, f as Oo, g as To, h as xo, i as Ho, C as Wo, j as _o, D as jo, H as qo, e as Jo, L as Ko, P as zo, k as Yo } from "./chunks/layout-components-DphZY34c.js";
6
+ import { A as Xo, B as Zo, C as $o, n as er, S as sr, o as ar, q as or, f as rr, b as tr, j as ir, h as nr, k as gr, i as dr, g as lr, l as ur, m as Cr, r as pr, d as cr, e as Sr, p as wr, u as Br } from "./chunks/provider-VCa8UGvF.js";
7
7
  export {
8
- o as ApiError,
9
- ka as AppWrapper,
10
- za as AuthProvider,
11
- Co as ButtonAccessController,
12
- da as BwgButton,
13
- po as BwgButtonGroup,
14
- la as BwgCheck,
15
- ua as BwgCheckList,
16
- co as BwgCmptArea,
17
- So as BwgCol,
18
- wo as BwgComponentGuideM01,
19
- Bo as BwgConfigProvider,
20
- Ia as BwgCoreLogin,
21
- Ca as BwgDatePicker,
22
- Mo as BwgDetail,
23
- mo as BwgDeveloperGuideM01,
24
- pa as BwgDownload,
25
- fo as BwgDrawer,
26
- vo as BwgEditor,
27
- ca as BwgForm,
28
- Sa as BwgFormItem,
29
- ho as BwgGrid,
30
- Po as BwgInfoArea,
31
- wa as BwgInput,
32
- Ba as BwgLargeUploader,
33
- Ma as BwgMaskedDate,
34
- ma as BwgMaskedInput,
35
- fa as BwgMaskedRange,
36
- va as BwgMultiSelect,
37
- ha as BwgNumber,
38
- yo as BwgPagination,
39
- Ao as BwgPopup,
40
- Ra as BwgPortal01,
41
- Fa as BwgPortal02,
42
- Pa as BwgRadio,
43
- ya as BwgRangePicker,
44
- Lo as BwgReactGuideM01,
45
- Do as BwgRow,
46
- Aa as BwgSearch,
47
- La as BwgSelect,
48
- Uo as BwgSpace,
49
- Da as BwgSwitch,
50
- Eo as BwgTable,
51
- bo as BwgTabs,
52
- Ua as BwgTextArea,
53
- ko as BwgTitleBox,
54
- Ea as BwgUploader,
55
- Io as BwgView,
56
- Ya as BwgViewProvider,
57
- Ro as CMAdminBoardM01,
58
- Fo as CMAuthMstrM01,
59
- Go as CMBoardS01,
60
- Vo as CMFileMstrM01,
61
- Oo as CMHldyCfg,
62
- To as CMMenuMstrM01,
63
- xo as CMMenuPrgrSelectModal,
64
- No as CMMenuPrntSelectModal,
65
- Ho as CMMyBoardM01,
66
- Wo as CMPopupMstrM01,
67
- _o as CMPrgrMstrM01,
68
- Jo as CMPrgrMstrP02,
69
- qo as CMRoleMstrM01,
70
- Ko as CMSystCfgM01,
71
- jo as CMSystCodeM01,
72
- zo as CMUserMstrM01,
73
- Qa as CommonCodeProvider,
74
- Ga as ConfigurableContent,
75
- Va as ConfigurableHeader,
76
- Oa as ConfigurableMenuTab,
77
- Ta as ConfigurableSidebar,
78
- Yo as ContentBox,
79
- xa as ContentContainer,
80
- Qo as ContentLayOut,
81
- Na as ContentWrapper,
82
- a as DEFAULT_FMT,
8
+ a as ApiError,
9
+ Io as AppWrapper,
10
+ Xo as AuthProvider,
11
+ Ca as ButtonAccessController,
12
+ lo as BwgButton,
13
+ pa as BwgButtonGroup,
14
+ uo as BwgCheck,
15
+ Co as BwgCheckList,
16
+ ca as BwgCmptArea,
17
+ Sa as BwgCol,
18
+ wa as BwgComponentGuideM01,
19
+ Ba as BwgConfigProvider,
20
+ Ro as BwgCoreLogin,
21
+ po as BwgDatePicker,
22
+ Ma as BwgDetail,
23
+ ma as BwgDeveloperGuideM01,
24
+ co as BwgDownload,
25
+ fa as BwgDrawer,
26
+ va as BwgEditor,
27
+ So as BwgForm,
28
+ wo as BwgFormItem,
29
+ ha as BwgGrid,
30
+ Pa as BwgInfoArea,
31
+ Bo as BwgInput,
32
+ Mo as BwgLargeUploader,
33
+ mo as BwgMaskedDate,
34
+ fo as BwgMaskedInput,
35
+ vo as BwgMaskedRange,
36
+ ho as BwgMultiSelect,
37
+ Po as BwgNumber,
38
+ ya as BwgPagination,
39
+ La as BwgPopup,
40
+ Fo as BwgPortal01,
41
+ Go as BwgPortal02,
42
+ yo as BwgRadio,
43
+ Lo as BwgRangePicker,
44
+ Aa as BwgReactGuideM01,
45
+ Da as BwgRow,
46
+ Ao as BwgSearch,
47
+ Do as BwgSelect,
48
+ Vo as BwgSessionNotice,
49
+ Ua as BwgSpace,
50
+ No as BwgSsoLogin,
51
+ Uo as BwgSwitch,
52
+ Ea as BwgTable,
53
+ ba as BwgTabs,
54
+ Eo as BwgTextArea,
55
+ ka as BwgTitleBox,
56
+ bo as BwgUploader,
57
+ Ia as BwgView,
58
+ Zo as BwgViewProvider,
59
+ Ra as CMAdminBoardM01,
60
+ Fa as CMAuthMstrM01,
61
+ Ga as CMBoardS01,
62
+ Va as CMFileMstrM01,
63
+ Na as CMHldyCfg,
64
+ Oa as CMMenuMstrM01,
65
+ Ta as CMMenuPrgrSelectModal,
66
+ xa as CMMenuPrntSelectModal,
67
+ Ha as CMMyBoardM01,
68
+ Wa as CMPopupMstrM01,
69
+ _a as CMPrgrMstrM01,
70
+ ja as CMPrgrMstrP02,
71
+ qa as CMRoleMstrM01,
72
+ Ja as CMSystCfgM01,
73
+ Ka as CMSystCodeM01,
74
+ za as CMUserMstrM01,
75
+ $o as CommonCodeProvider,
76
+ Oo as ConfigurableContent,
77
+ To as ConfigurableHeader,
78
+ xo as ConfigurableMenuTab,
79
+ Ho as ConfigurableSidebar,
80
+ Ya as ContentBox,
81
+ Wo as ContentContainer,
82
+ Qa as ContentLayOut,
83
+ _o as ContentWrapper,
84
+ o as DEFAULT_FMT,
83
85
  r as DEFAULT_SERVICE_CODES,
84
- Ha as DefaultLoginView,
85
- Xo as GlobalConfigProvider,
86
- Wa as HeaderContainer,
87
- _a as LandingContainer,
88
- Ja as LoadingContainer,
89
- qa as PopupContainer,
90
- Ka as ProtectWrapper,
91
- Zo as QuickServiceToggle,
92
- $o as SSOHandler,
93
- Xa as ScreenProtectProvider,
94
- ea as SearchAddressP01,
95
- sa as SearchBox,
96
- Za as SearchBoxProvider,
97
- oa as SearchDepartmentP01,
98
- aa as SearchDepartmentP02,
99
- ra as SearchHolidayP01,
100
- ta as SearchOrganizationP01,
101
- ia as SearchOrganizationP02,
102
- $a as ServiceCodeProvider,
103
- na as SystemCodeManage,
86
+ jo as DefaultLoginView,
87
+ Xa as GlobalConfigProvider,
88
+ qo as HeaderContainer,
89
+ Jo as LandingContainer,
90
+ Ko as LoadingContainer,
91
+ zo as PopupContainer,
92
+ Yo as ProtectWrapper,
93
+ Za as QuickServiceToggle,
94
+ $a as SSOHandler,
95
+ er as ScreenProtectProvider,
96
+ eo as SearchAddressP01,
97
+ so as SearchBox,
98
+ sr as SearchBoxProvider,
99
+ ao as SearchDepartmentP01,
100
+ oo as SearchDepartmentP02,
101
+ ro as SearchHolidayP01,
102
+ to as SearchOrganizationP01,
103
+ io as SearchOrganizationP02,
104
+ ar as ServiceCodeProvider,
105
+ no as SystemCodeManage,
104
106
  t as THEME_COOKIE_NAME,
105
107
  i as add,
106
108
  n as apiUtils,
@@ -121,8 +123,8 @@ export {
121
123
  h as clearSessionStorage,
122
124
  P as closeAllMessages,
123
125
  y as closeMessage,
124
- A as closeNotification,
125
- L as colorFormat,
126
+ L as closeNotification,
127
+ A as colorFormat,
126
128
  D as colorUtils,
127
129
  U as commonUtils,
128
130
  E as configureEnvUtils,
@@ -133,17 +135,17 @@ export {
133
135
  F as destroyNotifications,
134
136
  G as diff,
135
137
  V as downloadByFileKey,
136
- O as downloadFile,
137
- T as duplicates,
138
- x as encryptSha256,
139
- N as endOf,
138
+ N as downloadFile,
139
+ O as duplicates,
140
+ T as encryptSha256,
141
+ x as endOf,
140
142
  H as envUtils,
141
143
  W as fileUtils,
142
144
  _ as format,
143
- J as generateRandomColor,
145
+ j as generateRandomColor,
144
146
  q as generateRandomString,
145
- K as generateUID,
146
- j as getAllServiceCodes,
147
+ J as generateUID,
148
+ K as getAllServiceCodes,
147
149
  z as getApiDeps,
148
150
  Y as getClientIp,
149
151
  Q as getCookie,
@@ -152,8 +154,8 @@ export {
152
154
  $ as getDeviceType,
153
155
  ee as getDisplayName,
154
156
  se as getDprtCd,
155
- oe as getDprtNm,
156
- ae as getEmplNo,
157
+ ae as getDprtNm,
158
+ oe as getEmplNo,
157
159
  re as getEnvCode,
158
160
  te as getFullDprtCd,
159
161
  ie as getFullDprtNm,
@@ -175,8 +177,8 @@ export {
175
177
  he as getUserNm,
176
178
  Pe as getWkplCd,
177
179
  ye as gridUtils,
178
- Ae as hasAllRoles,
179
- Le as hasAnyRole,
180
+ Le as hasAllRoles,
181
+ Ae as hasAnyRole,
180
182
  De as hasRole,
181
183
  Ue as hasUserInfo,
182
184
  Ee as initApiDeps,
@@ -187,17 +189,17 @@ export {
187
189
  Fe as isEmpty,
188
190
  Ge as isEmptyArray,
189
191
  Ve as isFunction,
190
- Oe as isLocal,
191
- Te as isLoggedIn,
192
- xe as isMobile,
193
- Ne as isNull,
192
+ Ne as isLocal,
193
+ Oe as isLoggedIn,
194
+ Te as isMobile,
195
+ xe as isNull,
194
196
  He as isNullOrUndefined,
195
197
  We as isNumber,
196
198
  _e as isObject,
197
- Je as isProd,
199
+ je as isProd,
198
200
  qe as isSafeEmpty,
199
- Ke as isString,
200
- je as isTablet,
201
+ Je as isString,
202
+ Ke as isTablet,
201
203
  ze as isUndefined,
202
204
  Ye as isValid,
203
205
  Qe as isValidDate,
@@ -206,8 +208,8 @@ export {
206
208
  $e as isValidYear,
207
209
  es as isValidYearMonth,
208
210
  ss as logServiceCodeConfig,
209
- os as messageUtils,
210
- as as notiBwgError,
211
+ as as messageUtils,
212
+ os as notiBwgError,
211
213
  rs as notiError,
212
214
  ts as notiInfo,
213
215
  is as notiSuccess,
@@ -229,8 +231,8 @@ export {
229
231
  hs as setCookie,
230
232
  Ps as setServiceCodeOverrides,
231
233
  ys as setSessionStorage,
232
- As as showApiError,
233
- Ls as showDuplicateError,
234
+ Ls as showApiError,
235
+ As as showDuplicateError,
234
236
  Ds as showError,
235
237
  Us as showInfo,
236
238
  Es as showLoading,
@@ -241,45 +243,46 @@ export {
241
243
  Fs as showWarning,
242
244
  Gs as startOf,
243
245
  Vs as submitGwApproval,
244
- Os as throttle,
245
- Ts as toCamelCase,
246
- xs as uploadFilesViaSftp,
247
- er as useAllServiceCodes,
248
- sr as useAuth,
249
- or as useBwgView,
246
+ Ns as throttle,
247
+ Os as toCamelCase,
248
+ Ts as uploadFilesViaSftp,
249
+ or as useAllServiceCodes,
250
+ rr as useAuth,
251
+ tr as useBwgView,
250
252
  _s as useCapsLock,
251
- Js as useCode,
252
- ar as useCodeColor,
253
- rr as useCodeList,
254
- tr as useCodeListByOption,
255
- ir as useCodeName,
253
+ js as useCode,
254
+ ir as useCodeColor,
255
+ nr as useCodeList,
256
+ gr as useCodeListByOption,
257
+ dr as useCodeName,
256
258
  qs as useCodeStore,
257
- Ks as useColorStore,
258
- nr as useCommonCode,
259
- js as useFavorite,
259
+ Js as useColorStore,
260
+ lr as useCommonCode,
261
+ Ks as useFavorite,
260
262
  zs as useFavoriteStore,
261
- gr as useGridLookup,
263
+ ur as useGridLookup,
262
264
  Ys as useLoadingStore,
263
- dr as useLock,
264
- lr as useLogServiceCodeConfig,
265
+ Cr as useLock,
266
+ pr as useLogServiceCodeConfig,
265
267
  Qs as useLogin,
266
268
  Xs as useLogout,
267
269
  Zs as useMenuModel,
268
270
  $s as useMenuModelStore,
269
- eo as useMenuView,
270
- so as useMenuViewStore,
271
- oo as useOptionStore,
272
- ur as usePopup,
273
- ao as usePopupLoadingStore,
274
- ro as usePopupState,
275
- to as usePopupStore,
276
- Cr as useSearchBox,
277
- pr as useServiceCode,
278
- cr as useServiceCodeValue,
279
- io as useSystemCode,
280
- no as useSystemStore,
281
- go as useUser,
282
- lo as useUserStore,
283
- Ns as userUtils,
271
+ ea as useMenuView,
272
+ sa as useMenuViewStore,
273
+ aa as useOptionStore,
274
+ cr as usePopup,
275
+ oa as usePopupLoadingStore,
276
+ ra as usePopupState,
277
+ ta as usePopupStore,
278
+ Sr as useSearchBox,
279
+ wr as useServiceCode,
280
+ Br as useServiceCodeValue,
281
+ ia as useSsoLogin,
282
+ na as useSystemCode,
283
+ ga as useSystemStore,
284
+ da as useUser,
285
+ la as useUserStore,
286
+ xs as userUtils,
284
287
  Hs as verifyClientIp
285
288
  };
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const N=require("zustand"),I=require("../utils/index.cjs"),O=require("antd"),V=require("../chunks/layout-components-Cz7Zets7.cjs"),F=require("react"),Q=require("react-router-dom");function ee(n,r){let e;try{e=n()}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 H=n=>r=>{try{const e=n(r);return e instanceof Promise?e:{then(s){return H(s)(e)},catch(s){return this}}}catch(e){return{then(s){return this},catch(s){return H(s)(e)}}}},te=(n,r)=>(e,s,o)=>{let t={storage:ee(()=>localStorage),partialize:C=>C,version:0,merge:(C,S)=>({...S,...C}),...r},a=!1;const c=new Set,d=new Set;let i=t.storage;if(!i)return n((...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,S)=>(h(C,S),l());const m=n((...C)=>(e(...C),l()),s,o);o.getInitialState=()=>m;let u;const f=()=>{var C,S;if(!i)return;a=!1,c.forEach(g=>{var b;return g((b=s())!=null?b:m)});const k=((S=t.onRehydrateStorage)==null?void 0:S.call(t,(C=s())!=null?C:m))||void 0;return H(i.getItem.bind(i))(t.name).then(g=>{if(g)if(typeof g.version=="number"&&g.version!==t.version){if(t.migrate){const b=t.migrate(g.state,g.version);return b instanceof Promise?b.then(A=>[!0,A]):[!0,b]}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 b;const[A,Z]=g;if(u=t.merge(Z,(b=s())!=null?b:m),e(u,!0),A)return l()}).then(()=>{k?.(u,void 0),u=s(),a=!0,d.forEach(g=>g(u))}).catch(g=>{k?.(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},M=te,T=N.create()(M((n,r)=>({user:null,hrInfo:null,buttonAuths:{},componentSize:1,gridSize:2,spacingSize:2,enableProtectWrapper:!0,gridLayouts:{},theme:"modern",isLoggedIn:()=>!!r().user,setLoginUser:(e,s)=>{n({user:e,hrInfo:s??null}),console.log("사용자 로그인:",e,s)},clearLoginUser:()=>{n({user:null,hrInfo:null,buttonAuths:{}}),console.log("사용자 로그아웃")},updateUser:(e,s)=>{const o=r().user,t=r().hrInfo;o&&n({user:{...o,...e}}),t&&n({hrInfo:{...t,...s}})},setComponentSize:e=>{n({componentSize:e}),console.log("컴포넌트 사이즈 변경:",e)},setGridSize:e=>{n({gridSize:e}),console.log("그리드 사이즈 변경:",e)},setSpacingSize:e=>{n({spacingSize:e}),console.log("여백 사이즈 변경:",e)},setEnableProtectWrapper:e=>{n({enableProtectWrapper:e})},setTheme:e=>{n({theme:e}),console.log("테마 변경:",e)},getButtonAuth:(e,s)=>{const o=`${e}_${s}`;return r().buttonAuths[o]||null},setButtonAuth:(e,s,o)=>{const t=`${e}_${s}`;n(a=>({buttonAuths:{...a.buttonAuths,[t]:o}}))},clearButtonAuths:()=>{n({buttonAuths:{}})},getGridLayouts:e=>r().gridLayouts[e]||[],getGridLayout:(e,s,o)=>r().getGridLayouts(e).find(c=>c.menuId===s&&c.gridId===o)||null,saveGridLayout:(e,s,o,t)=>{const a={...r().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),n({gridLayouts:a}),console.log(`[UserStore] 그리드 레이아웃 저장 완료: ${e}/${s}/${o}`)},removeGridLayout:(e,s,o)=>{const t={...r().gridLayouts};t[e]&&(t[e]=t[e].filter(a=>!(a.menuId===s&&a.gridId===o)),n({gridLayouts:t}),console.log(`[UserStore] 그리드 레이아웃 삭제 완료: ${e}/${s}/${o}`))},clearGridLayouts:e=>{const s={...r().gridLayouts};delete s[e],n({gridLayouts:s}),console.log(`[UserStore] ${e}의 모든 그리드 레이아웃 삭제 완료`)},clearAllGridLayouts:()=>{n({gridLayouts:{}}),console.log("[UserStore] 전체 그리드 레이아웃 삭제 완료")}}),{name:"user-storage",partialize:n=>({user:n.user,hrInfo:n.hrInfo,componentSize:n.componentSize,gridSize:n.gridSize,spacingSize:n.spacingSize,enableProtectWrapper:n.enableProtectWrapper,gridLayouts:n.gridLayouts,theme:n.theme,isLoggedIn:n.isLoggedIn})})),K={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 n=Array.from(this.cacheHits.entries());n.sort((e,s)=>e[1]-s[1]),n.slice(0,Math.floor(n.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(n){return this.loadedGroups.has(n)},markGroupLoaded(n){this.loadedGroups.add(n)}},v=n=>{console.log("대규모 데이터 변환 시작:",n);const r={};if(n&&n.code&&Array.isArray(n.code)){const e=n.code,s=n.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;r[a]||(r[a]={});const d=(o.get(t.cmmnCd)||[]).reduce((i,l)=>(l.optnCd&&l.optnNm&&(i[l.optnCd]=l.optnNm),i),{});r[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("대규모 데이터 변환 완료:",r),r},y=N.create()(M((n,r)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchSystemCodes:async()=>{n({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=v(e),t={...r().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),n({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("시스템 공통코드 데이터 가져오기 완료")}catch(e){console.error("시스템 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"시스템 공통코드 데이터 가져오기 실패"})}},fetchBusinessCodes:async()=>{n({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=v(e),t={...r().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),n({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("업무 공통코드 데이터 가져오기 완료")}catch(e){console.error("업무 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"업무 공통코드 데이터 가져오기 실패"})}},fetchData:async()=>{n({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=v(e),t=v(s),a={...o,...t};p.clearCache();const c=new Set(Object.keys(a));c.forEach(d=>{p.markGroupLoaded(d)}),n({codeData:a,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:c}),console.log("전체 공통코드 데이터 가져오기 완료")}catch(e){console.error("전체 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"전체 공통코드 데이터 가져오기 실패"})}},loadSpecificGroup:async e=>{const{codeData:s,loadedGroups:o}=r();if(!s||o.has(e))return;const t=new Set(o).add(e);n({loadedGroups:t}),p.markGroupLoaded(e)},setData:e=>{p.clearCache();const s=new Set(Object.keys(e));s.forEach(o=>{p.markGroupLoaded(o)}),n({codeData:e,lastUpdated:new Date,loadedGroups:s})},clearData:()=>{p.clearCache(),n({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set})},getLoadedGroups:()=>Array.from(r().loadedGroups)}),{name:"large-data-storage",partialize:n=>({codeData:n.codeData,lastUpdated:n.lastUpdated,loadedGroups:Array.from(n.loadedGroups)})})),w=N.create()(M((n,r)=>({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,S=f.codeValue.substring(C);S.length>0&&l.push({...f,codeValue:S})}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>=K.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>=K.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>=K.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:n=>({})})),oe=N.create()(M((n,r)=>({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=r().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:n=>({})})),se=N.create()(M((n,r)=>({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:n=>({})})),ne=(n,r)=>({nodes:{},rootIds:[],loadedFor:void 0,loading:!1,error:void 0,treeNodes:[],isMenuBookmarked:e=>Object.values(r().nodes).some(s=>s.type==="M"&&s.menuId===e),getPrntBkmkIdByMenuId:e=>{const s=L(r().nodes,e);return s?r().nodes[s]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const s=L(r().nodes,e);if(!s)return null;const o=r().nodes[s];return o?.type==="M"?o:null},getFolderTree:e=>{const{nodes:s,rootIds:o}=r(),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=r();if(!(!s&&o.loadedFor===e&&Object.keys(o.nodes).length)){n({loading:!0,error:void 0});try{const t=await I.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],c=re(a),d=P(c.nodes,c.rootIds);n({...c,treeNodes:d,loadedFor:e,loading:!1})}catch(t){throw n({loading:!1,error:t?.message||"즐겨찾기 로드 실패"}),t}}},loadFavoritesIfNeeded:async e=>{const s=r();(s.loadedFor!==e||Object.keys(s.nodes).length===0)&&await r().loadFavorites(e)},clearFavorites:()=>{n({nodes:{},rootIds:[],treeNodes:[],loadedFor:void 0,loading:!1,error:void 0}),console.log("📚 북마크 스토어 초기화 완료")},addNode:async e=>{const s=B(r()),o=ae();n(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=P(c.nodes,c.rootIds),c});try{let t=o;const a=x(r(),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),n(d=>{const i=pe(d,o,t);return{...i,treeNodes:P(i.nodes,i.rootIds)}}),t}catch(t){throw n(s),t}},moveNode:async({bkmkId:e,newPrntBkmkId:s,sortOrdr:o,userId:t})=>{const a=r(),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,n({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 n(a),u}},removeNode:async e=>{const s=B(r());n(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=P(t.nodes,t.rootIds),t});try{await I.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw n(s),o}},editNode:async({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const c=B(r());n(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 n(c),d}},addFolder:async(e,s,o,t)=>await r().addNode({type:"F",bkmkNm:e,prntBkmkId:s,sysCd:o,userId:t}),addMenuToFolder:async(e,s)=>L(r().nodes,s.menuId)?"이미 북마크에 저장된 메뉴입니다.":await r().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=r(),t=Object.values(o.nodes).find(c=>c.type==="M"&&c.menuId===s.menuId);if(t){await r().removeNode(t.bkmkId);return}let a=z(o);a||(await r().loadFavorites(e,!0),a=z(r())),a&&await r().addNode({type:"M",prntBkmkId:a,sysCd:"KH",userId:I.getUserId(),menuId:s.menuId,menuNm:s.menuNm})},removeMenuByMenuId:async e=>{const s=r(),o=L(s.nodes,e);o&&await r().removeNode(o)},removeMenu:async e=>{await r().removeNode(e)},removeFolder:async e=>{await r().removeNode(e)},editFolder:async(e,s,o,t,a)=>{await r().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=N.create(ne);function re(n){const r={},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"){r[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 r[a.bkmkId]={...a,menuId:t.menuId??t.MENU_ID??"",menuNm:t.menuNm??t.MENU_NM}})};return s(n),Object.values(r).forEach(o=>{if(o.prntBkmkId&&o.prntBkmkId!=="-"){const t=r[o.prntBkmkId];t?.type==="F"&&t.children.push(o.bkmkId)}else o.type==="F"&&e.push(o.bkmkId)}),e.sort((o,t)=>(r[o].sortOrdr??0)-(r[t].sortOrdr??0)),Object.values(r).forEach(o=>{o.type==="F"&&o.children.sort((a,c)=>(r[a].sortOrdr??0)-(r[c].sortOrdr??0))}),{nodes:r,rootIds:e}}function B(n){return{...n,nodes:JSON.parse(JSON.stringify(n.nodes)),rootIds:n.rootIds.slice()}}function ae(){return`tmp_${Math.random().toString(36).slice(2,10)}`}function x(n,r){if(!r||r==="-")return n.rootIds.length;const e=n.nodes[r];return e?e.children.length:0}function ce(n,r,e){const s=n.nodes[r];if(s)if(e&&e!=="-"){const o=n.nodes[e];if(!o||o.type!=="F")return;s.prntBkmkId=e,o.children=[...o.children,r]}else s.prntBkmkId="-",n.rootIds=[...n.rootIds,r]}function de(n,r){const e=n.nodes[r];if(!e)return;const s=e.prntBkmkId;if(s&&s!=="-"){const o=n.nodes[s];o?.type==="F"&&(o.children=o.children.filter(t=>t!==r))}else n.rootIds=n.rootIds.filter(o=>o!==r)}function X(n,r){const e=n.nodes[r];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>X(n,a)),de(n,r);const{[r]:s,...o}=n.nodes;n.nodes=o}function pe(n,r,e){if(r===e)return n;const s=n.nodes[r];if(!s)return n;const o=JSON.parse(JSON.stringify(s));o.bkmkId=e;const t={...n.nodes,[e]:o};delete t[r];let a=n.rootIds;if(o.prntBkmkId&&o.prntBkmkId!=="-"){const c=t[o.prntBkmkId];c?.type==="F"&&(t[o.prntBkmkId]={...c,children:c.children.map(d=>d===r?e:d)})}else a=n.rootIds.map(c=>c===r?e:c);return{...n,nodes:t,rootIds:a}}function z(n){return n.rootIds.find(r=>n.nodes[r]?.type==="F")??null}function P(n,r){const e={};Object.values(n).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=n[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(n).filter(d=>d.prntBkmkId==="-"&&d.type==="M").map(d=>d.bkmkId),a=Object.values(n).filter(d=>d.prntBkmkId==="-"&&d.type==="F").map(d=>d.bkmkId);return Array.from(new Set([...r,...t,...a])).map(o).filter(Boolean)}function L(n,r){for(const e of Object.values(n))if(e.type==="M"&&e.menuId===r)return e.bkmkId;return null}function j(n,r,e){(!e||e==="-"?r:n[e].children||[]).forEach((o,t)=>{const a=n[o];a&&(a.sortOrdr=t)})}const G={DEFAULT_PRNT_GBCD:1},le=n=>n&&typeof n=="object"&&typeof n.menuId=="string"&&typeof n.menuNm=="string",Y=n=>Array.isArray(n)&&n.every(le);let E=[],q=[];const ie=n=>{if(n&&typeof n=="object"){const r=n;if(r.menus&&Y(r.menus))return r.menus;if(Y(n))return n}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},ue=(n,r)=>!!r&&n.crprCd===r.crprCd&&n.userId===r.userId&&(n.prntGbcd??G.DEFAULT_PRNT_GBCD)===(r.prntGbcd??G.DEFAULT_PRNT_GBCD),me=n=>{if(E.length===n.length&&E.every((t,a)=>t.menuId===n[a]?.menuId&&t.menuPrntId===n[a]?.menuPrntId))return q;if(!n.length)return[];const r=new Map,e=[];n.forEach(t=>t?.menuId&&r.set(t.menuId,{...t,children:[]})),n.forEach(t=>{const a=r.get(t.menuId);a&&(t.menuPrntId&&t.menuPrntId!==""&&t.menuPrntId!=="-"?r.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 E=[...n],q=o,o},_=N.create((n,r)=>({menuList:[],flatMenuList:[],isLoading:!1,error:null,_lastFetchParams:null,fetchMenu:async({crprCd:e,userId:s,prntGbcd:o})=>{const t={crprCd:e,userId:s,prntGbcd:o??G.DEFAULT_PRNT_GBCD};if(ue(t,r()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}n({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await I.callService(I.getServiceCode("AUTH_MENU"),t),c=ie(a),d=me(c);n({flatMenuList:c,menuList:d,isLoading:!1,error:null})}catch(a){n({isLoading:!1,error:a?.message??"메뉴 로드 실패"})}},clearMenu:()=>{n({menuList:[],flatMenuList:[],error:null,_lastFetchParams:null})},findMenuById:e=>{const{flatMenuList:s}=r();return s.find(o=>o.menuId===e)??null}})),D={MAX_TABS:15},$=N.create((n,r)=>({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:D.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},pinnedTabs:new Set,refreshTabKey:{},clearMenuViewStore:()=>{n({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:D.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},pinnedTabs:new Set,refreshTabKey:{}})},openTabFromMenu:(e,s,o)=>{const{tabs:t}=r(),a=t.find(i=>i.key===e.menuId),c=o?.skipRefreshModal??!1;if(a){if(c){r().focusTab(e.menuId),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId);return}O.Modal.confirm({title:`[${e.menuNm}] 메뉴이동 알림`,content:"이미 열린 화면입니다. 새로고침 하시겠습니까?",centered:!0,okText:"예",cancelText:"아니오",onOk:()=>{r().refreshTab(e.menuId),r().focusTab(e.menuId),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)},onCancel:()=>{r().focusTab(e.menuId),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)}});return}if(t.length>=D.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),O.message.warning(`최대 ${D.MAX_TABS}개의 탭만 열 수 있습니다.
2
- 기존 탭을 닫고 다시 시도해주세요.`);return}const d={key:e.menuId,label:e.menuNm,gubun:"M",menuItem:e,closable:!0};n({tabs:[...t,d],activeMenuId:e.menuId,activeMenuItem:e}),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)},openTabByMenuId:(e,s,o)=>{const t=_.getState().findMenuById(e);t?r().openTabFromMenu(t,s,o):O.message.warning("메뉴 ID를 찾을 수 없습니다.")},openDetailView:(e,s,o)=>{const{tabs:t}=r();if(t.find(c=>c.key===e.viewId))r().focusTab(e.viewId);else{const c={key:e.viewId,label:e.viewLabel,gubun:"C",componentItem:{scrnPath:s,prsnInfoYn:o,prntInfo:e.prntInfo},closable:!0};n({tabs:[...t,c],activeMenuId:e.viewId,activeDetailItem:e}),r().setTabParams(e.viewId,e.viewParams||{})}},closeTab:e=>{const{tabs:s,activeMenuId:o,pinnedTabs:t}=r();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}n({tabs:a}),c&&r().focusTab(c)},focusTab:e=>{const{tabs:s}=r(),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"?(n({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),console.log("✅ 탭 포커스 (개인정보) - activeMenuItem:",o.menuItem),r().setProtectFlagForKey(e)):(n({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),r().clearProtectFlagForKey(e))}else n({activeMenuId:e,activeMenuItem:null,activeDetailItem:null}),console.warn("❌ 탭을 찾을 수 없음:",e)},closeAllTabs:()=>n({tabs:[],activeMenuId:null,activeMenuItem:null,activeDetailItem:null}),toggleSidebar:()=>n(e=>({sidebarCollapsed:!e.sidebarCollapsed})),reorderTabs:e=>n(s=>{const o=new Map(s.tabs.map(t=>[t.key,t]));return{tabs:e.map(t=>o.get(t)).filter(Boolean)}}),setProtectFlagForKey:e=>n(s=>({tabProtectFlag:{...s.tabProtectFlag,[e]:!0}})),clearProtectFlagForKey:e=>n(s=>{const o={...s.tabProtectFlag};return delete o[e],{tabProtectFlag:o}}),setTabParams:(e,s)=>n(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)=>n({componentLabelMap:e}),togglePinTab:e=>n(s=>{const o=new Set(s.pinnedTabs);return o.has(e)?o.delete(e):o.add(e),{pinnedTabs:o}}),refreshTab:e=>n(s=>({refreshTabKey:{...s.refreshTabKey,[e]:Date.now()}})),closeOtherTabs:e=>{const{tabs:s,activeMenuId:o}=r();if(!s.find(d=>d.key===e))return;const a=r().pinnedTabs;s.filter(d=>d.key!==e&&!a.has(d.key)).forEach(d=>r().closeTab(d.key)),o!==e&&r().focusTab(e)},closeRightTabs:e=>{const{tabs:s}=r(),o=s.findIndex(c=>c.key===e);if(o<0)return;const t=r().pinnedTabs;s.slice(o+1).filter(c=>!t.has(c.key)).forEach(c=>r().closeTab(c.key))}})),W=N.create((n,r)=>({popups:[],activePopupId:null,isLoading:!1,error:null,zIndexSeed:1e3,openPopup:async(e,s,o)=>{n({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=r().zIndexSeed+1,h={popupId:`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,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=r().popups.find(u=>u.popupCode===e);if(m){n({activePopupId:m.popupId,popups:r().popups.map(u=>u.popupId===m.popupId?{...u,config:o}:u),isLoading:!1});return}n(u=>({popups:[...u.popups,h],activePopupId:h.popupId,isLoading:!1,zIndexSeed:l}))}catch(t){n({error:t instanceof Error?t.message:"팝업 열기 실패",isLoading:!1})}},openCorePopup:(e,s)=>{const o=`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,t=r().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=r().popups.find(m=>m.popupCode===e&&m.isLocal);if(l){const m=r().zIndexSeed+1;n({activePopupId:l.popupId,zIndexSeed:m}),n(u=>({popups:u.popups.map(f=>f.popupId===l.popupId?{...f,config:d,zIndex:m,close:()=>{r().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:()=>{r().closePopup(o)}};n(m=>({popups:[...m.popups,h],activePopupId:o,zIndexSeed:t}))},closePopup:e=>{const{popups:s,activePopupId:o}=r(),t=s.filter(c=>c.popupId!==e);let a=o;o===e&&(a=t.length>0?t[t.length-1].popupId:null),n({popups:t,activePopupId:a})},closeAllPopups:()=>{n({popups:[],activePopupId:null})},setActivePopup:e=>{const s=r().zIndexSeed+1;n(o=>({activePopupId:e,zIndexSeed:s,popups:o.popups.map(t=>t.popupId===e?{...t,zIndex:s}:t)}))},updatePopupConfig:(e,s)=>{n(o=>({popups:o.popups.map(t=>t.popupId===e?{...t,config:{...t.config,...s}}:t)}))}})),U=N.create()(M((n,r)=>({systemMap:[],fetchSystemMap:async()=>{n({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=>{n({systemMap:e})},clearSystemMap:()=>{n({systemMap:[]})},getBySysCd:e=>r().systemMap.filter(s=>s.sysCd===e),getByAppItCd:e=>r().systemMap.filter(s=>s.appItCd===e),findByAppCd:e=>r().systemMap.find(s=>s.appCd===e),filterSystemMap:e=>{const{sysCd:s,appItCd:o,appCd:t}=e;return r().systemMap.filter(a=>(s?a.sysCd===s:!0)&&(o?a.appItCd===o:!0)&&(t?a.appCd===t:!0))}}),{name:"system-info-store"})),Ce=N.create(n=>({requestCount:0,loading:!1,showLoading:()=>n(r=>{const e=r.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>n(r=>{const e=Math.max(0,r.requestCount-1);return{requestCount:e,loading:e>0}})})),fe=N.create(n=>({requestCount:0,loading:!1,showLoading:()=>n(r=>{const e=r.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>n(r=>{const e=Math.max(0,r.requestCount-1);return{requestCount:e,loading:e>0}})}));function J(){const[n,r]=F.useState(!1),e=F.useCallback(s=>{const o=s?.getModifierState?.("CapsLock");typeof o=="boolean"&&r(o)},[]);return{capsOn:n,onKeyDown:e}}function he(n){const{loginApi:r,fetchCommonCodes:e,onAfterLogin:s,onError:o,rememberCookie:t={enabled:!0,days:30}}=n,[a,c]=F.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=F.useCallback(async(f,C)=>{c(!0);try{const S={crprCd:"100",id:f.id,pswr:await I.encryptSha256(f.pswr)},g=await(r??(b=>I.callService(l,b)))(S);if(g?.userInfo?.userId){if(T.getState().setLoginUser(g.userInfo,g?.hrInfo),t?.enabled){const b=t.days??30;f.remember?I.setCookie(h,f.id??"",b):I.setCookie(h,"",0)}return e?await e():await w.getState().fetchCommonCodes(),s?s(g,C):(O.message.success(`${g.userInfo.userNm}님 환영합니다.`),C("/main")),{user:g.userInfo,response:g}}else throw o?.({user:g.userInfo,response:g,navigate:C}),new Error("사용자 정보가 유효하지 않습니다.")}catch(S){throw o?.(S),S}finally{c(!1)}},[l,r,e,s,o,t?.enabled,t?.days]);return{loading:a,capsOn:d,onKeyDown:i,prefills:m,doLogin:u}}function ye(){const n=Q.useNavigate();return()=>{T.getState().clearLoginUser(),U.getState().clearSystemMap(),w.getState().clearCodes(),_.getState().clearMenu(),$.getState().clearMenuViewStore(),R.getState().clearFavorites(),n("/login")}}const Ie=()=>w.getState(),ge=()=>W.getState(),Se=()=>T.getState(),be=()=>R.getState(),Ne=()=>_.getState(),Me=()=>$.getState(),ke=()=>U.getState();exports.useCapsLock=J;exports.useCode=Ie;exports.useCodeStore=w;exports.useColorStore=se;exports.useFavorite=be;exports.useFavoriteStore=R;exports.useLoadingStore=Ce;exports.useLogin=he;exports.useLogout=ye;exports.useMenuModel=Ne;exports.useMenuModelStore=_;exports.useMenuView=Me;exports.useMenuViewStore=$;exports.useOptionStore=oe;exports.usePopupLoadingStore=fe;exports.usePopupState=ge;exports.usePopupStore=W;exports.useSystemCode=ke;exports.useSystemStore=U;exports.useUser=Se;exports.useUserStore=T;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("zustand"),y=require("../utils/index.cjs"),_=require("antd"),Z=require("../chunks/layout-components-BMLp8YAy.cjs"),k=require("react"),Q=require("axios");function ee(n,r){let e;try{e=n()}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=n=>r=>{try{const e=n(r);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=(n,r)=>(e,s,o)=>{let t={storage:ee(()=>localStorage),partialize:h=>h,version:0,merge:(h,N)=>({...N,...h}),...r},a=!1;const c=new Set,d=new Set;let i=t.storage;if(!i)return n((...h)=>{console.warn(`[zustand persist middleware] Unable to update item '${t.name}', the given storage is currently unavailable.`),e(...h)},s,o);const p=()=>{const h=t.partialize({...s()});return i.setItem(t.name,{state:h,version:t.version})},f=o.setState;o.setState=(h,N)=>(f(h,N),p());const m=n((...h)=>(e(...h),p()),s,o);o.getInitialState=()=>m;let u;const C=()=>{var h,N;if(!i)return;a=!1,c.forEach(S=>{var M;return S((M=s())!=null?M:m)});const g=((N=t.onRehydrateStorage)==null?void 0:N.call(t,(h=s())!=null?h:m))||void 0;return G(i.getItem.bind(i))(t.name).then(S=>{if(S)if(typeof S.version=="number"&&S.version!==t.version){if(t.migrate){const M=t.migrate(S.state,S.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,S.state];return[!1,void 0]}).then(S=>{var M;const[A,V]=S;if(u=t.merge(V,(M=s())!=null?M:m),e(u,!0),A)return p()}).then(()=>{g?.(u,void 0),u=s(),a=!0,d.forEach(S=>S(u))}).catch(S=>{g?.(void 0,S)})};return o.persist={setOptions:h=>{t={...t,...h},h.storage&&(i=h.storage)},clearStorage:()=>{i?.removeItem(t.name)},getOptions:()=>t,rehydrate:()=>C(),hasHydrated:()=>a,onHydrate:h=>(c.add(h),()=>{c.delete(h)}),onFinishHydration:h=>(d.add(h),()=>{d.delete(h)})},t.skipHydration||C(),u||m},v=te,L=b.create()(v((n,r)=>({user:null,hrInfo:null,buttonAuths:{},componentSize:1,gridSize:2,spacingSize:2,enableProtectWrapper:!0,gridLayouts:{},theme:"modern",isLoggedIn:()=>!!r().user,setLoginUser:(e,s)=>{n({user:e,hrInfo:s??null}),console.log("사용자 로그인:",e,s)},clearLoginUser:()=>{n({user:null,hrInfo:null,buttonAuths:{}}),console.log("사용자 로그아웃")},updateUser:(e,s)=>{const o=r().user,t=r().hrInfo;o&&n({user:{...o,...e}}),t&&n({hrInfo:{...t,...s}})},setComponentSize:e=>{n({componentSize:e}),console.log("컴포넌트 사이즈 변경:",e)},setGridSize:e=>{n({gridSize:e}),console.log("그리드 사이즈 변경:",e)},setSpacingSize:e=>{n({spacingSize:e}),console.log("여백 사이즈 변경:",e)},setEnableProtectWrapper:e=>{n({enableProtectWrapper:e})},setTheme:e=>{n({theme:e}),console.log("테마 변경:",e)},getButtonAuth:(e,s)=>{const o=`${e}_${s}`;return r().buttonAuths[o]||null},setButtonAuth:(e,s,o)=>{const t=`${e}_${s}`;n(a=>({buttonAuths:{...a.buttonAuths,[t]:o}}))},clearButtonAuths:()=>{n({buttonAuths:{}})},getGridLayouts:e=>r().gridLayouts[e]||[],getGridLayout:(e,s,o)=>r().getGridLayouts(e).find(c=>c.menuId===s&&c.gridId===o)||null,saveGridLayout:(e,s,o,t)=>{const a={...r().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),n({gridLayouts:a}),console.log(`[UserStore] 그리드 레이아웃 저장 완료: ${e}/${s}/${o}`)},removeGridLayout:(e,s,o)=>{const t={...r().gridLayouts};t[e]&&(t[e]=t[e].filter(a=>!(a.menuId===s&&a.gridId===o)),n({gridLayouts:t}),console.log(`[UserStore] 그리드 레이아웃 삭제 완료: ${e}/${s}/${o}`))},clearGridLayouts:e=>{const s={...r().gridLayouts};delete s[e],n({gridLayouts:s}),console.log(`[UserStore] ${e}의 모든 그리드 레이아웃 삭제 완료`)},clearAllGridLayouts:()=>{n({gridLayouts:{}}),console.log("[UserStore] 전체 그리드 레이아웃 삭제 완료")}}),{name:"user-storage",partialize:n=>({user:n.user,hrInfo:n.hrInfo,componentSize:n.componentSize,gridSize:n.gridSize,spacingSize:n.spacingSize,enableProtectWrapper:n.enableProtectWrapper,gridLayouts:n.gridLayouts,theme:n.theme})})),E={CACHE_SIZE_LIMIT:1e3},l={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 n=Array.from(this.cacheHits.entries());n.sort((e,s)=>e[1]-s[1]),n.slice(0,Math.floor(n.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(n){return this.loadedGroups.has(n)},markGroupLoaded(n){this.loadedGroups.add(n)}},O=n=>{console.log("대규모 데이터 변환 시작:",n);const r={};if(n&&n.code&&Array.isArray(n.code)){const e=n.code,s=n.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;r[a]||(r[a]={});const d=(o.get(t.cmmnCd)||[]).reduce((i,p)=>(p.optnCd&&p.optnNm&&(i[p.optnCd]=p.optnNm),i),{});r[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("대규모 데이터 변환 완료:",r),r},I=b.create()(v((n,r)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchSystemCodes:async()=>{n({isLoading:!0,error:null});try{console.log("시스템 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await y.callService(y.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("시스템 공통코드 응답:",e),console.log("시스템 공통코드목록:",e.code),console.log("시스템 공통코드옵션목록:",e.opt);const s=O(e),t={...r().codeData||{},...s};l.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{l.markGroupLoaded(c)}),n({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("시스템 공통코드 데이터 가져오기 완료")}catch(e){console.error("시스템 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"시스템 공통코드 데이터 가져오기 실패"})}},fetchBusinessCodes:async()=>{n({isLoading:!0,error:null});try{console.log("업무 공통코드 데이터 가져오기 시작: SCMSIGN00302");const e=await y.callService("SCMSIGN00302",{sysCd:__SYS_CD__});console.log("업무 공통코드 응답:",e),console.log("업무 공통코드목록:",e.code),console.log("업무 공통코드옵션목록:",e.opt);const s=O(e),t={...r().codeData||{},...s};l.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{l.markGroupLoaded(c)}),n({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("업무 공통코드 데이터 가져오기 완료")}catch(e){console.error("업무 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"업무 공통코드 데이터 가져오기 실패"})}},fetchData:async()=>{n({isLoading:!0,error:null});try{console.log("전체 공통코드 데이터 가져오기 시작 (시스템 + 업무)");const[e,s]=await Promise.all([y.callService(y.getServiceCode("SRCH_CODE"),{crprCd:"100"}),y.callService("SCMSIGN00302",{sysCd:__SYS_CD__})]);console.log("시스템 공통코드 응답:",e),console.log("업무 공통코드 응답:",s);const o=O(e),t=O(s),a={...o,...t};l.clearCache();const c=new Set(Object.keys(a));c.forEach(d=>{l.markGroupLoaded(d)}),n({codeData:a,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:c}),console.log("전체 공통코드 데이터 가져오기 완료")}catch(e){console.error("전체 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"전체 공통코드 데이터 가져오기 실패"})}},loadSpecificGroup:async e=>{const{codeData:s,loadedGroups:o}=r();if(!s||o.has(e))return;const t=new Set(o).add(e);n({loadedGroups:t}),l.markGroupLoaded(e)},setData:e=>{l.clearCache();const s=new Set(Object.keys(e));s.forEach(o=>{l.markGroupLoaded(o)}),n({codeData:e,lastUpdated:new Date,loadedGroups:s})},clearData:()=>{l.clearCache(),n({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set})},getLoadedGroups:()=>Array.from(r().loadedGroups)}),{name:"large-data-storage",partialize:n=>({codeData:n.codeData,lastUpdated:n.lastUpdated,loadedGroups:Array.from(n.loadedGroups)})})),P=b.create()(v((n,r)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.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(l.optionCache.has(d)){const C=l.cacheHits.get(d)||0;return l.cacheHits.set(d,C+1),l.optionCache.get(d)}const i=I.getState().codeData;if(!i)return[];if(!l.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const p=[],f=i[e];f&&Object.values(f).forEach(C=>{if(!(o&&!C.enabled)&&!(t&&C.systemCodeYn!=="Y"))if(c){const h=e.length,N=C.codeValue.substring(h);N.length>0&&p.push({...C,codeValue:N})}else p.push(C)});let m;a?m=p.sort((C,h)=>C.sortOrder!==h.sortOrder?C.sortOrder-h.sortOrder:C.codeValue.localeCompare(h.codeValue)):m=p.sort((C,h)=>C.codeValue.localeCompare(h.codeValue));const u=m.map(C=>({label:C.codeNm,value:C.codeValue,tagColor:C.labelColor}));return l.optionCache.size>=E.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.optionCache.set(d,u),l.cacheHits.set(d,1),u},getCodeName:e=>{if(l.nameCache.has(e)){const o=l.cacheHits.get(`name_${e}`)||0;return l.cacheHits.set(`name_${e}`,o+1),l.nameCache.get(e)}const s=I.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 l.nameCache.set(e,t.codeNm),l.cacheHits.set(`name_${e}`,1),t.codeNm;return null},getCodeColor:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const s=I.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 l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getGridLookup:e=>{const s=`gridLookup_${e}`;if(l.optionCache.has(s)){const i=l.cacheHits.get(s)||0;return l.cacheHits.set(s,i+1),l.optionCache.get(s)}const o=I.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,p)=>i.sortOrder-p.sortOrder).forEach(i=>{a.push(i.codeNm),c.push(i.codeValue)});const d={labels:a,values:c,lookupDisplay:!0};return l.optionCache.set(s,d),l.cacheHits.set(s,1),d},getCodeByOption:(e,s,o)=>{const t=`codeByOption_${e}_${s}_${o}`;if(l.codeCache.has(t)){const p=l.cacheHits.get(t)||0;return l.cacheHits.set(t,p+1),l.codeCache.get(t)}const a=I.getState().codeData;if(!a)return[];const c=[],d=a[e];d&&Object.values(d).forEach(p=>{p.enabled&&p.options&&p.options[s]===o&&c.push({...p,codeNm:p.options[s]||p.codeNm})});const i=c.sort((p,f)=>p.codeValue.localeCompare(f.codeValue));return l.codeCache.size>=E.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(t,i),l.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(l.codeCache.has(d)){const u=l.cacheHits.get(d)||0;return l.cacheHits.set(d,u+1),l.codeCache.get(d)}const i=I.getState().codeData;if(!i)return[];if(!l.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const p=[],f=i[e];f&&Object.values(f).forEach(u=>{t&&!u.enabled||a&&u.systemCodeYn!=="Y"||u.options&&u.options[s]&&p.push({label:u.options[s],value:u.commonCode,tagColor:u.labelColor})});let m;return c?m=p.sort((u,C)=>u.value.localeCompare(C.value)):m=p.sort((u,C)=>u.value.localeCompare(C.value)),l.codeCache.size>=E.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(d,m),l.cacheHits.set(d,1),m},getAvailableGroupCodes:()=>{const e="available_group_codes";if(l.nameCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),JSON.parse(l.nameCache.get(e))}const s=I.getState().codeData;if(!s)return[];const o=Object.keys(s).sort();return l.nameCache.set(e,JSON.stringify(o)),l.cacheHits.set(e,1),o},clearCodes:()=>{I.getState().clearData()}}),{name:"code-storage",partialize:n=>({})})),oe=b.create()(v((n,r)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getOptionValue:(e,s)=>{const o=`option_${e}_${s}`;if(l.optionCache.has(o)){const c=l.cacheHits.get(o)||0;return l.cacheHits.set(o,c+1),l.optionCache.get(o)}const t=I.getState().codeData;if(!t)return null;const a=t[e];if(a&&a[s]){const c=a[s].options;return l.optionCache.set(o,c),l.cacheHits.set(o,1),c}return null},getOptionByKey:(e,s,o)=>{const t=`option_${e}_${s}_${o}`;if(l.optionCache.has(t)){const d=l.cacheHits.get(t)||0;return l.cacheHits.set(t,d+1),l.optionCache.get(t)}const a=r().getOptionValue(e,s),c=a?a[o]:null;return l.optionCache.set(t,c),l.cacheHits.set(t,1),c},clearCodes:()=>{I.getState().clearData()}}),{name:"option-storage",partialize:n=>({})})),se=b.create()(v((n,r)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getColorCode:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const s=I.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 l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(l.optionCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),l.optionCache.get(e)}const s=I.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})})}),l.optionCache.set(e,o),l.cacheHits.set(e,1),o},clearCodes:()=>{I.getState().clearData()}}),{name:"color-storage",partialize:n=>({})})),ne=(n,r)=>({nodes:{},rootIds:[],loadedFor:void 0,loading:!1,error:void 0,treeNodes:[],isMenuBookmarked:e=>Object.values(r().nodes).some(s=>s.type==="M"&&s.menuId===e),getPrntBkmkIdByMenuId:e=>{const s=w(r().nodes,e);return s?r().nodes[s]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const s=w(r().nodes,e);if(!s)return null;const o=r().nodes[s];return o?.type==="M"?o:null},getFolderTree:e=>{const{nodes:s,rootIds:o}=r(),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,p=(i.children||[]).map(m=>s[m]).filter(m=>!!m&&m.type==="F").map(m=>a(m.bkmkId)).filter(Boolean);return t(i.bkmkNm)||p.length>0?{key:i.bkmkId,title:`📁 ${i.bkmkNm}`,children:p.length?p:void 0}:null};return o.map(c=>a(c)).filter(Boolean)},loadFavorites:async(e,s=!1)=>{console.log("loadFavorites ::::: ",e,s);const o=r();if(!(!s&&o.loadedFor===e&&Object.keys(o.nodes).length)){n({loading:!0,error:void 0});try{const t=await y.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],c=re(a),d=D(c.nodes,c.rootIds);n({...c,treeNodes:d,loadedFor:e,loading:!1})}catch(t){throw n({loading:!1,error:t?.message||"즐겨찾기 로드 실패"}),t}}},loadFavoritesIfNeeded:async e=>{const s=r();(s.loadedFor!==e||Object.keys(s.nodes).length===0)&&await r().loadFavorites(e)},clearFavorites:()=>{n({nodes:{},rootIds:[],treeNodes:[],loadedFor:void 0,loading:!1,error:void 0}),console.log("📚 북마크 스토어 초기화 완료")},addNode:async e=>{const s=K(r()),o=ae();n(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=D(c.nodes,c.rootIds),c});try{let t=o;const a=x(r(),e.prntBkmkId),c=await y.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:y.getUserId()});return t=String(c?.bkmkId??c?.itemId??o),n(d=>{const i=pe(d,o,t);return{...i,treeNodes:D(i.nodes,i.rootIds)}}),t}catch(t){throw n(s),t}},moveNode:async({bkmkId:e,newPrntBkmkId:s,sortOrdr:o,userId:t})=>{const a=r(),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 p=i.prntBkmkId??"-",f=p==="-"?d:c[p].children||=[];{const u=f.indexOf(e);u>=0&&f.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,n({nodes:c,rootIds:d}),j(c,d,s),j(c,d,p);try{await y.callService("SCMBKMK00104",{bkmkId:e,prntBkmkId:s,sortOrdr:o,chngId:t})}catch(u){throw n(a),u}},removeNode:async e=>{const s=K(r());n(o=>{if(!o.nodes[e])return o;const t={...o,nodes:{...o.nodes},rootIds:o.rootIds.slice(),treeNodes:o.treeNodes};return W(t,e),t.treeNodes=D(t.nodes,t.rootIds),t});try{await y.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw n(s),o}},editNode:async({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const c=K(r());n(d=>{const i={...d,nodes:{...d.nodes}},p=i.nodes[e];return p?.type==="F"&&typeof o=="string"&&(i.nodes[e]={...p,bkmkNm:o}),i});try{await y.callService("SCMBKMK00102",{iudFlag:"U",userId:s,bkmkId:e,bkmkNm:o,prntBkmkId:t,sortOrdr:a,chngId:y.getUserId()})}catch(d){throw n(c),d}},addFolder:async(e,s,o,t)=>await r().addNode({type:"F",bkmkNm:e,prntBkmkId:s,sysCd:o,userId:t}),addMenuToFolder:async(e,s)=>w(r().nodes,s.menuId)?"이미 북마크에 저장된 메뉴입니다.":await r().addNode({type:"M",prntBkmkId:e,sysCd:"KH",userId:y.getUserId(),menuId:s.menuId,menuNm:s.menuNm}),toggleMenuFavorite:async(e,s)=>{if(!e)return;const o=r(),t=Object.values(o.nodes).find(c=>c.type==="M"&&c.menuId===s.menuId);if(t){await r().removeNode(t.bkmkId);return}let a=z(o);a||(await r().loadFavorites(e,!0),a=z(r())),a&&await r().addNode({type:"M",prntBkmkId:a,sysCd:"KH",userId:y.getUserId(),menuId:s.menuId,menuNm:s.menuNm})},removeMenuByMenuId:async e=>{const s=r(),o=w(s.nodes,e);o&&await r().removeNode(o)},removeMenu:async e=>{await r().removeNode(e)},removeFolder:async e=>{await r().removeNode(e)},editFolder:async(e,s,o,t,a)=>{await r().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 p=i,f=(p.children||[]).map(u=>c(u)).filter(Boolean);return a(p.bkmkNm)||f.length>0?{key:p.bkmkId,type:"F",title:`📁 ${p.bkmkNm}`,bkmkNm:p.bkmkNm,prntBkmkId:p.prntBkmkId,sortOrdr:p.sortOrdr,fullPath:p.fullPath,children:f.length?f:void 0}:null}else{const p=i,f=p.menuNm?`${p.menuNm} (${p.menuId})`:p.menuId;return a(f)?{key:p.bkmkId,type:"M",title:`📄 ${f}`,prntBkmkId:p.prntBkmkId,sortOrdr:p.sortOrdr,fullPath:p.fullPath,isLeaf:!0}:null}};return s.map(c).filter(Boolean)}}),H=b.create(ne);function re(n){const r={},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"){r[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 r[a.bkmkId]={...a,menuId:t.menuId??t.MENU_ID??"",menuNm:t.menuNm??t.MENU_NM}})};return s(n),Object.values(r).forEach(o=>{if(o.prntBkmkId&&o.prntBkmkId!=="-"){const t=r[o.prntBkmkId];t?.type==="F"&&t.children.push(o.bkmkId)}else o.type==="F"&&e.push(o.bkmkId)}),e.sort((o,t)=>(r[o].sortOrdr??0)-(r[t].sortOrdr??0)),Object.values(r).forEach(o=>{o.type==="F"&&o.children.sort((a,c)=>(r[a].sortOrdr??0)-(r[c].sortOrdr??0))}),{nodes:r,rootIds:e}}function K(n){return{...n,nodes:JSON.parse(JSON.stringify(n.nodes)),rootIds:n.rootIds.slice()}}function ae(){return`tmp_${Math.random().toString(36).slice(2,10)}`}function x(n,r){if(!r||r==="-")return n.rootIds.length;const e=n.nodes[r];return e?e.children.length:0}function ce(n,r,e){const s=n.nodes[r];if(s)if(e&&e!=="-"){const o=n.nodes[e];if(!o||o.type!=="F")return;s.prntBkmkId=e,o.children=[...o.children,r]}else s.prntBkmkId="-",n.rootIds=[...n.rootIds,r]}function de(n,r){const e=n.nodes[r];if(!e)return;const s=e.prntBkmkId;if(s&&s!=="-"){const o=n.nodes[s];o?.type==="F"&&(o.children=o.children.filter(t=>t!==r))}else n.rootIds=n.rootIds.filter(o=>o!==r)}function W(n,r){const e=n.nodes[r];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>W(n,a)),de(n,r);const{[r]:s,...o}=n.nodes;n.nodes=o}function pe(n,r,e){if(r===e)return n;const s=n.nodes[r];if(!s)return n;const o=JSON.parse(JSON.stringify(s));o.bkmkId=e;const t={...n.nodes,[e]:o};delete t[r];let a=n.rootIds;if(o.prntBkmkId&&o.prntBkmkId!=="-"){const c=t[o.prntBkmkId];c?.type==="F"&&(t[o.prntBkmkId]={...c,children:c.children.map(d=>d===r?e:d)})}else a=n.rootIds.map(c=>c===r?e:c);return{...n,nodes:t,rootIds:a}}function z(n){return n.rootIds.find(r=>n.nodes[r]?.type==="F")??null}function D(n,r){const e={};Object.values(n).forEach(d=>{const i=d.bkmkId,p=d.prntBkmkId;!i||!p||p==="-"||p===i||(e[p]??=[]).push(i)});const s=new Set,o=d=>{if(s.has(d))return null;const i=n[d];if(!i)return null;s.add(d);try{if(i.type==="F"){const f=i,m=e[d]??[];return{type:"F",bkmkId:d,bkmkNm:f.bkmkNm,prntBkmkId:f.prntBkmkId,children:m.map(o).filter(Boolean)}}const p=i;return{type:"M",bkmkId:d,bkmkNm:p.menuNm,menuId:p.menuId,menuNm:p.menuNm,prntBkmkId:p.prntBkmkId}}finally{s.delete(d)}},t=Object.values(n).filter(d=>d.prntBkmkId==="-"&&d.type==="M").map(d=>d.bkmkId),a=Object.values(n).filter(d=>d.prntBkmkId==="-"&&d.type==="F").map(d=>d.bkmkId);return Array.from(new Set([...r,...t,...a])).map(o).filter(Boolean)}function w(n,r){for(const e of Object.values(n))if(e.type==="M"&&e.menuId===r)return e.bkmkId;return null}function j(n,r,e){(!e||e==="-"?r:n[e].children||[]).forEach((o,t)=>{const a=n[o];a&&(a.sortOrdr=t)})}const R={DEFAULT_PRNT_GBCD:1},le=n=>n&&typeof n=="object"&&typeof n.menuId=="string"&&typeof n.menuNm=="string",Y=n=>Array.isArray(n)&&n.every(le);let B=[],q=[];const ie=n=>{if(n&&typeof n=="object"){const r=n;if(r.menus&&Y(r.menus))return r.menus;if(Y(n))return n}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},ue=(n,r)=>!!r&&n.crprCd===r.crprCd&&n.userId===r.userId&&(n.prntGbcd??R.DEFAULT_PRNT_GBCD)===(r.prntGbcd??R.DEFAULT_PRNT_GBCD),me=n=>{if(B.length===n.length&&B.every((t,a)=>t.menuId===n[a]?.menuId&&t.menuPrntId===n[a]?.menuPrntId))return q;if(!n.length)return[];const r=new Map,e=[];n.forEach(t=>t?.menuId&&r.set(t.menuId,{...t,children:[]})),n.forEach(t=>{const a=r.get(t.menuId);a&&(t.menuPrntId&&t.menuPrntId!==""&&t.menuPrntId!=="-"?r.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=[...n],q=o,o},T=b.create((n,r)=>({menuList:[],flatMenuList:[],isLoading:!1,error:null,_lastFetchParams:null,fetchMenu:async({crprCd:e,userId:s,prntGbcd:o})=>{const t={crprCd:e,userId:s,prntGbcd:o??R.DEFAULT_PRNT_GBCD};if(ue(t,r()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}n({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await y.callService(y.getServiceCode("AUTH_MENU"),t),c=ie(a),d=me(c);n({flatMenuList:c,menuList:d,isLoading:!1,error:null})}catch(a){n({isLoading:!1,error:a?.message??"메뉴 로드 실패"})}},clearMenu:()=>{n({menuList:[],flatMenuList:[],error:null,_lastFetchParams:null})},findMenuById:e=>{const{flatMenuList:s}=r();return s.find(o=>o.menuId===e)??null}})),F={MAX_TABS:15},U=b.create((n,r)=>({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:F.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},pinnedTabs:new Set,refreshTabKey:{},clearMenuViewStore:()=>{n({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:F.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},pinnedTabs:new Set,refreshTabKey:{}})},openTabFromMenu:(e,s,o)=>{const{tabs:t}=r(),a=t.find(i=>i.key===e.menuId),c=o?.skipRefreshModal??!1;if(a){if(c){r().focusTab(e.menuId),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId);return}_.Modal.confirm({title:`[${e.menuNm}] 메뉴이동 알림`,content:"이미 열린 화면입니다. 새로고침 하시겠습니까?",centered:!0,okText:"예",cancelText:"아니오",onOk:()=>{r().refreshTab(e.menuId),r().focusTab(e.menuId),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)},onCancel:()=>{r().focusTab(e.menuId),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)}});return}if(t.length>=F.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),_.message.warning(`최대 ${F.MAX_TABS}개의 탭만 열 수 있습니다.
2
+ 기존 탭을 닫고 다시 시도해주세요.`);return}const d={key:e.menuId,label:e.menuNm,gubun:"M",menuItem:e,closable:!0};n({tabs:[...t,d],activeMenuId:e.menuId,activeMenuItem:e}),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)},openTabByMenuId:(e,s,o)=>{const t=T.getState().findMenuById(e);t?r().openTabFromMenu(t,s,o):_.message.warning("메뉴 ID를 찾을 수 없습니다.")},openDetailView:(e,s,o)=>{const{tabs:t}=r();if(t.find(c=>c.key===e.viewId))r().focusTab(e.viewId);else{const c={key:e.viewId,label:e.viewLabel,gubun:"C",componentItem:{scrnPath:s,prsnInfoYn:o,prntInfo:e.prntInfo},closable:!0};n({tabs:[...t,c],activeMenuId:e.viewId,activeDetailItem:e}),r().setTabParams(e.viewId,e.viewParams||{})}},closeTab:e=>{const{tabs:s,activeMenuId:o,pinnedTabs:t}=r();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}n({tabs:a}),c&&r().focusTab(c)},focusTab:e=>{const{tabs:s}=r(),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"?(n({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),console.log("✅ 탭 포커스 (개인정보) - activeMenuItem:",o.menuItem),r().setProtectFlagForKey(e)):(n({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),r().clearProtectFlagForKey(e))}else n({activeMenuId:e,activeMenuItem:null,activeDetailItem:null}),console.warn("❌ 탭을 찾을 수 없음:",e)},closeAllTabs:()=>n({tabs:[],activeMenuId:null,activeMenuItem:null,activeDetailItem:null}),toggleSidebar:()=>n(e=>({sidebarCollapsed:!e.sidebarCollapsed})),reorderTabs:e=>n(s=>{const o=new Map(s.tabs.map(t=>[t.key,t]));return{tabs:e.map(t=>o.get(t)).filter(Boolean)}}),setProtectFlagForKey:e=>n(s=>({tabProtectFlag:{...s.tabProtectFlag,[e]:!0}})),clearProtectFlagForKey:e=>n(s=>{const o={...s.tabProtectFlag};return delete o[e],{tabProtectFlag:o}}),setTabParams:(e,s)=>n(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)=>n({componentLabelMap:e}),togglePinTab:e=>n(s=>{const o=new Set(s.pinnedTabs);return o.has(e)?o.delete(e):o.add(e),{pinnedTabs:o}}),refreshTab:e=>n(s=>({refreshTabKey:{...s.refreshTabKey,[e]:Date.now()}})),closeOtherTabs:e=>{const{tabs:s,activeMenuId:o}=r();if(!s.find(d=>d.key===e))return;const a=r().pinnedTabs;s.filter(d=>d.key!==e&&!a.has(d.key)).forEach(d=>r().closeTab(d.key)),o!==e&&r().focusTab(e)},closeRightTabs:e=>{const{tabs:s}=r(),o=s.findIndex(c=>c.key===e);if(o<0)return;const t=r().pinnedTabs;s.slice(o+1).filter(c=>!t.has(c.key)).forEach(c=>r().closeTab(c.key))}})),X=b.create((n,r)=>({popups:[],activePopupId:null,isLoading:!1,error:null,zIndexSeed:1e3,openPopup:async(e,s,o)=>{n({isLoading:!0,error:null});try{let t=null;const a=await y.callService(y.getServiceCode("SRCH_POPU"),{crprCd:y.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),p=r().zIndexSeed+1,f={popupId:`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,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:p},m=r().popups.find(u=>u.popupCode===e);if(m){n({activePopupId:m.popupId,popups:r().popups.map(u=>u.popupId===m.popupId?{...u,config:o}:u),isLoading:!1});return}n(u=>({popups:[...u.popups,f],activePopupId:f.popupId,isLoading:!1,zIndexSeed:p}))}catch(t){n({error:t instanceof Error?t.message:"팝업 열기 실패",isLoading:!1})}},openCorePopup:(e,s)=>{const o=`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,t=r().zIndexSeed+1,c=Z.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||{},p=r().popups.find(m=>m.popupCode===e&&m.isLocal);if(p){const m=r().zIndexSeed+1;n({activePopupId:p.popupId,zIndexSeed:m}),n(u=>({popups:u.popups.map(C=>C.popupId===p.popupId?{...C,config:d,zIndex:m,close:()=>{r().closePopup(p.popupId)}}:C)}));return}const f={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:()=>{r().closePopup(o)}};n(m=>({popups:[...m.popups,f],activePopupId:o,zIndexSeed:t}))},closePopup:e=>{const{popups:s,activePopupId:o}=r(),t=s.filter(c=>c.popupId!==e);let a=o;o===e&&(a=t.length>0?t[t.length-1].popupId:null),n({popups:t,activePopupId:a})},closeAllPopups:()=>{n({popups:[],activePopupId:null})},setActivePopup:e=>{const s=r().zIndexSeed+1;n(o=>({activePopupId:e,zIndexSeed:s,popups:o.popups.map(t=>t.popupId===e?{...t,zIndex:s}:t)}))},updatePopupConfig:(e,s)=>{n(o=>({popups:o.popups.map(t=>t.popupId===e?{...t,config:{...t.config,...s}}:t)}))}})),$=b.create()(v((n,r)=>({systemMap:[],fetchSystemMap:async()=>{n({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=>{n({systemMap:e})},clearSystemMap:()=>{n({systemMap:[]})},getBySysCd:e=>r().systemMap.filter(s=>s.sysCd===e),getByAppItCd:e=>r().systemMap.filter(s=>s.appItCd===e),findByAppCd:e=>r().systemMap.find(s=>s.appCd===e),filterSystemMap:e=>{const{sysCd:s,appItCd:o,appCd:t}=e;return r().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(n=>({requestCount:0,loading:!1,showLoading:()=>n(r=>{const e=r.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>n(r=>{const e=Math.max(0,r.requestCount-1);return{requestCount:e,loading:e>0}})})),fe=b.create(n=>({requestCount:0,loading:!1,showLoading:()=>n(r=>{const e=r.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>n(r=>{const e=Math.max(0,r.requestCount-1);return{requestCount:e,loading:e>0}})}));function J(){const[n,r]=k.useState(!1),e=k.useCallback(s=>{const o=s?.getModifierState?.("CapsLock");typeof o=="boolean"&&r(o)},[]);return{capsOn:n,onKeyDown:e}}function he(n){const{loginApi:r,fetchCommonCodes:e,onAfterLogin:s,onError:o,rememberCookie:t={enabled:!0,days:30}}=n,[a,c]=k.useState(!1),{capsOn:d,onKeyDown:i}=J(),p="SCMSIGN00101",f=`${__SYS_CD__}_login_id`,m={id:t?.enabled?y.getCookie(f):void 0,pswr:void 0},u=k.useCallback(async C=>{c(!0);try{const h={crprCd:"100",id:C.id,pswr:await y.encryptSha256(C.pswr)},g=await(r??(S=>y.callService(p,S)))(h);if(g?.userInfo?.userId){if(L.getState().setLoginUser(g.userInfo,g?.hrInfo),localStorage.setItem("LOGIN_USER_ID",g.userInfo.userId),t?.enabled){const S=t.days??30;C.remember?y.setCookie(f,C.id??"",S):y.setCookie(f,"",0)}return e?await e():await P.getState().fetchCommonCodes(),s(g),{user:g.userInfo,response:g}}else throw o({user:g.userInfo,response:g}),new Error("사용자 정보가 유효하지 않습니다.")}catch(h){o(h)}finally{c(!1)}},[p,r,e,s,o,t?.enabled,t?.days]);return{loading:a,capsOn:d,prefills:m,onKeyDown:i,doLogin:u}}function Ie(n){const{loginApi:r,fetchCommonCodes:e,onAfterLogin:s,onError:o}=n,[t,a]=k.useState("LOADING"),c={NO_TOKEN:"인증 정보가 없습니다.",INVALID_USER:"사용자 정보가 유효하지 않습니다.",UNKNOWN:"SSO 로그인 중 오류가 발생했습니다."},d=p=>p==="NO_TOKEN"||p==="INVALID_USER"?p:"UNKNOWN",i=k.useCallback(async p=>{a("LOADING");try{const f=await Q.post("/api/auth",{});f.data.result&&f.data.userId&&_.message.success(f.data.message);const m={crprCd:"100",id:f.data.userId,pswr:await y.encryptSha256("krx2025!@")},C=await(r??(h=>y.callService("SCMSIGN00101",h)))(m);if(C?.userInfo?.userId)return L.getState().setLoginUser(C.userInfo,C?.hrInfo),localStorage.setItem("LOGIN_USER_ID",C.userInfo.userId),e?await e():await P.getState().fetchCommonCodes(),s(C),a("SUCCESS"),{user:C.userInfo,response:C};throw new Error("INVALID_USER")}catch(f){const m=d(f?.message);o?.({code:m,msg:c[m]}),a("FAIL")}},[r,e,s,o]);return{loginStatus:t,doSsoLogin:i}}function ye(n){return()=>{L.getState().clearLoginUser(),$.getState().clearSystemMap(),P.getState().clearCodes(),T.getState().clearMenu(),U.getState().clearMenuViewStore(),H.getState().clearFavorites(),localStorage.removeItem("LOGIN_USER_ID"),n?.()}}const Se=()=>P.getState(),ge=()=>X.getState(),be=()=>L.getState(),Ne=()=>H.getState(),Me=()=>T.getState(),ke=()=>U.getState(),ve=()=>$.getState();exports.useCapsLock=J;exports.useCode=Se;exports.useCodeStore=P;exports.useColorStore=se;exports.useFavorite=Ne;exports.useFavoriteStore=H;exports.useLoadingStore=Ce;exports.useLogin=he;exports.useLogout=ye;exports.useMenuModel=Me;exports.useMenuModelStore=T;exports.useMenuView=ke;exports.useMenuViewStore=U;exports.useOptionStore=oe;exports.usePopupLoadingStore=fe;exports.usePopupState=ge;exports.usePopupStore=X;exports.useSsoLogin=Ie;exports.useSystemCode=ve;exports.useSystemStore=$;exports.useUser=be;exports.useUserStore=L;
@@ -6,7 +6,8 @@ export { useMenuViewStore } from './menuViewStore';
6
6
  export { usePopupStore } from './popupStore';
7
7
  export { useUserStore } from './userStore';
8
8
  export { useSystemStore } from './systemStore';
9
- export { useLogin, useLogout, useCapsLock } from './loginStore';
9
+ export { useLogin, useLogout, useCapsLock, useSsoLogin } from './loginStore';
10
+ export type { LoginConfig, SsoLoginConfig } from './loginStore';
10
11
  export declare const useCode: () => import('./codeStore').CodeStoreState;
11
12
  export declare const usePopupState: () => import('./popupStore').PopupStore;
12
13
  export declare const useUser: () => import('./userStore').UserStore;