@bwg-ui/core 1.3.1 → 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.
- package/dist/chunks/{CMSearchIntfGwP01-BWm9OqAH.js → CMSearchIntfGwP01-Co6lrDf9.js} +9 -9
- package/dist/chunks/CMSearchIntfGwP01-Do_ZDjmX.cjs +1 -0
- package/dist/chunks/{MenuReport-yYhMOHyq.js → MenuReport-BTtoDFz-.js} +146 -141
- package/dist/chunks/MenuReport-Bn5NyNel.cjs +1 -0
- package/dist/chunks/{common-components-coAoWxE9.js → common-components-0IMhPxxg.js} +11604 -10999
- package/dist/chunks/common-components-Csd3OioX.cjs +1109 -0
- package/dist/chunks/core-components-CX6NGtTh.cjs +1 -0
- package/dist/chunks/core-components-Ckwf4Rd7.js +1969 -0
- package/dist/chunks/layout-components-BMLp8YAy.cjs +38 -0
- package/dist/chunks/{layout-components-C1DG2B74.js → layout-components-DphZY34c.js} +954 -737
- package/dist/components/common/BwgDetail.d.ts.map +1 -1
- package/dist/components/common/BwgGrid.d.ts.map +1 -1
- package/dist/components/common/index.cjs +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/core/BwgEmpSearch.d.ts +28 -0
- package/dist/components/core/BwgEmpSearch.d.ts.map +1 -0
- package/dist/components/core/index.cjs +1 -1
- package/dist/components/core/index.js +22 -1846
- package/dist/components/guide/index.cjs +1 -1
- package/dist/components/guide/index.js +13 -13
- package/dist/components/layout/AppWrapper.d.ts +2 -1
- package/dist/components/layout/AppWrapper.d.ts.map +1 -1
- package/dist/components/layout/BwgCoreLogin.d.ts +1 -2
- package/dist/components/layout/BwgCoreLogin.d.ts.map +1 -1
- package/dist/components/layout/BwgPortal01.d.ts.map +1 -1
- package/dist/components/layout/BwgSessionNotice.d.ts +15 -0
- package/dist/components/layout/BwgSessionNotice.d.ts.map +1 -0
- package/dist/components/layout/BwgSsoLogin.d.ts +19 -0
- package/dist/components/layout/BwgSsoLogin.d.ts.map +1 -0
- package/dist/components/layout/custom/ConfigurableHeader.d.ts.map +1 -1
- package/dist/components/layout/custom/ConfigurableMenuTab.d.ts.map +1 -1
- package/dist/components/layout/custom/ConfigurableSidebar.d.ts.map +1 -1
- package/dist/components/layout/default/LoadingContainer.d.ts.map +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +16 -14
- package/dist/components/pages/board/CMAdminBoardM01.d.ts.map +1 -1
- package/dist/components/pages/board/CMMyBoardM01.d.ts.map +1 -1
- package/dist/components/popup/MenuReport.d.ts.map +1 -1
- package/dist/components/popup/SearchOrganizationP01.d.ts +1 -1
- package/dist/components/popup/SearchOrganizationP01.d.ts.map +1 -1
- package/dist/components/popup/index.cjs +1 -1
- package/dist/components/popup/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +160 -157
- package/dist/stores/index.cjs +2 -2
- package/dist/stores/index.d.ts +8 -3
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/index.js +416 -367
- package/dist/stores/loginStore.d.ts +55 -10
- package/dist/stores/loginStore.d.ts.map +1 -1
- package/dist/stores/menuViewStore.d.ts +6 -2
- package/dist/stores/menuViewStore.d.ts.map +1 -1
- package/dist/stores/userStore.d.ts +1 -2
- package/dist/stores/userStore.d.ts.map +1 -1
- package/dist/styles/assets/images/header/icon/ico-bell.svg +3 -3
- package/dist/styles/assets/images/header/icon/ico-logout.svg +10 -10
- package/dist/styles/assets/images/header/icon/ico-setting.svg +4 -4
- package/dist/styles/assets/images/header/icon/ico-sidebar-arrow.svg +3 -3
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +455 -454
- package/package.json +1 -1
- package/dist/chunks/CMSearchIntfGwP01-CihGc5Q1.cjs +0 -1
- package/dist/chunks/MenuReport-khjaUz1Q.cjs +0 -1
- package/dist/chunks/common-components-DletnDTf.cjs +0 -1109
- package/dist/chunks/layout-components-C6KeWPIu.cjs +0 -35
package/dist/index.js
CHANGED
|
@@ -1,106 +1,108 @@
|
|
|
1
|
-
import { ApiError as
|
|
2
|
-
import { useCapsLock as _s, useCode as
|
|
3
|
-
import { f as
|
|
4
|
-
import {
|
|
5
|
-
import { A as
|
|
6
|
-
import { A as
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
$
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
125
|
-
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
145
|
+
j as generateRandomColor,
|
|
144
146
|
q as generateRandomString,
|
|
145
|
-
|
|
146
|
-
|
|
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
|
-
|
|
156
|
-
|
|
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
|
-
|
|
179
|
-
|
|
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
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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
|
-
|
|
199
|
+
je as isProd,
|
|
198
200
|
qe as isSafeEmpty,
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
210
|
-
|
|
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
|
-
|
|
233
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
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
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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
|
-
|
|
258
|
-
|
|
259
|
-
|
|
259
|
+
Js as useColorStore,
|
|
260
|
+
lr as useCommonCode,
|
|
261
|
+
Ks as useFavorite,
|
|
260
262
|
zs as useFavoriteStore,
|
|
261
|
-
|
|
263
|
+
ur as useGridLookup,
|
|
262
264
|
Ys as useLoadingStore,
|
|
263
|
-
|
|
264
|
-
|
|
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
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
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
|
};
|
package/dist/stores/index.cjs
CHANGED
|
@@ -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-C6KeWPIu.cjs"),w=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})},f=o.setState;o.setState=(C,S)=>(f(C,S),l());const m=n((...C)=>(e(...C),l()),s,o);o.getInitialState=()=>m;let u;const h=()=>{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:()=>h(),hasHydrated:()=>a,onHydrate:C=>(c.add(C),()=>{c.delete(C)}),onFinishHydration:C=>(d.add(C),()=>{d.delete(C)})},t.skipHydration||h(),u||m},M=te,F=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})})),B={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)})})),_=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 h=p.cacheHits.get(d)||0;return p.cacheHits.set(d,h+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=[],f=i[e];f&&Object.values(f).forEach(h=>{if(!(o&&!h.enabled)&&!(t&&h.systemCodeYn!=="Y"))if(c){const C=e.length,S=h.codeValue.substring(C);S.length>0&&l.push({...h,codeValue:S})}else l.push(h)});let m;a?m=l.sort((h,C)=>h.sortOrder!==C.sortOrder?h.sortOrder-C.sortOrder:h.codeValue.localeCompare(C.codeValue)):m=l.sort((h,C)=>h.codeValue.localeCompare(C.codeValue));const u=m.map(h=>({label:h.codeNm,value:h.codeValue,tagColor:h.labelColor}));return p.optionCache.size>=B.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,f)=>l.codeValue.localeCompare(f.codeValue));return p.codeCache.size>=B.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=[],f=i[e];f&&Object.values(f).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,h)=>u.value.localeCompare(h.value)):m=l.sort((u,h)=>u.value.localeCompare(h.value)),p.codeCache.size>=B.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=P(r().nodes,e);return s?r().nodes[s]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const s=P(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=L(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=L(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:L(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??"-",f=l==="-"?d:c[l].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,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=K(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=L(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=K(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)=>P(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=P(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,f=(l.children||[]).map(u=>c(u)).filter(Boolean);return a(l.bkmkNm)||f.length>0?{key:l.bkmkId,type:"F",title:`📁 ${l.bkmkNm}`,bkmkNm:l.bkmkNm,prntBkmkId:l.prntBkmkId,sortOrdr:l.sortOrdr,fullPath:l.fullPath,children:f.length?f:void 0}:null}else{const l=i,f=l.menuNm?`${l.menuNm} (${l.menuId})`:l.menuId;return a(f)?{key:l.bkmkId,type:"M",title:`📄 ${f}`,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 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 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 L(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 f=i,m=e[d]??[];return{type:"F",bkmkId:d,bkmkNm:f.bkmkNm,prntBkmkId:f.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 P(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},T=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)=>{const{tabs:o}=r(),t=o.find(c=>c.key===e.menuId),a=o.find(c=>c.key===e.menuId);if(t)a!=null?(n({activeMenuId:e.menuId,activeMenuItem:e}),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)):O.message.warning("유효하지 않은 메뉴정보입니다.");else{if(o.length>D.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),O.message.warning(`최대 ${D.MAX_TABS}개의 탭만 열 수 있습니다.
|
|
2
|
-
기존 탭을 닫고 다시 시도해주세요.`);return}const c={key:e.menuId,label:e.menuNm,gubun:"M",menuItem:e,closable:!0};n({tabs:[...o,c],activeMenuId:e.menuId,activeMenuItem:e}),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)}},openTabByMenuId:(e,s)=>{const o=T.getState().findMenuById(e);o?r().openTabFromMenu(o,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))}})),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,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: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,f],activePopupId:f.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(h=>h.popupId===l.popupId?{...h,config:d,zIndex:m,close:()=>{r().closePopup(l.popupId)}}:h)}));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)}))}})),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}})})),he=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]=w.useState(!1),e=w.useCallback(s=>{const o=s?.getModifierState?.("CapsLock");typeof o=="boolean"&&r(o)},[]);return{capsOn:n,onKeyDown:e}}function fe(n){const{loginApi:r,fetchCommonCodes:e,onAfterLogin:s,onError:o,rememberCookie:t={enabled:!0,days:30}}=n,[a,c]=w.useState(!1),{capsOn:d,onKeyDown:i}=J(),l="SCMSIGN00101",f=`${__SYS_CD__}_login_id`,m={id:t?.enabled?I.getCookie(f):void 0,pswr:void 0},u=w.useCallback(async(h,C)=>{c(!0);try{const S={crprCd:"100",id:h.id,pswr:await I.encryptSha256(h.pswr)},g=await(r??(b=>I.callService(l,b)))(S);if(g?.userInfo?.userId){if(F.getState().setLoginUser(g.userInfo,g?.hrInfo),t?.enabled){const b=t.days??30;h.remember?I.setCookie(f,h.id??"",b):I.setCookie(f,"",0)}return e?await e():await _.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()=>{F.getState().clearLoginUser(),U.getState().clearSystemMap(),_.getState().clearCodes(),T.getState().clearMenu(),$.getState().clearMenuViewStore(),R.getState().clearFavorites(),n("/login")}}const Ie=()=>_.getState(),ge=()=>W.getState(),Se=()=>F.getState(),be=()=>R.getState(),Ne=()=>T.getState(),Me=()=>$.getState(),ke=()=>U.getState();exports.useCapsLock=J;exports.useCode=Ie;exports.useCodeStore=_;exports.useColorStore=se;exports.useFavorite=be;exports.useFavoriteStore=R;exports.useLoadingStore=Ce;exports.useLogin=fe;exports.useLogout=ye;exports.useMenuModel=Ne;exports.useMenuModelStore=T;exports.useMenuView=Me;exports.useMenuViewStore=$;exports.useOptionStore=oe;exports.usePopupLoadingStore=he;exports.usePopupState=ge;exports.usePopupStore=W;exports.useSystemCode=ke;exports.useSystemStore=U;exports.useUser=Se;exports.useUserStore=F;
|
|
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;
|