@bwg-ui/core 1.1.16 → 1.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/chunks/{BwgLargeUploader-Nx2-wiD8.js → BwgLargeUploader-D6plJv5D.js} +130 -131
  2. package/dist/chunks/BwgLargeUploader-D6plJv5D.js.map +1 -0
  3. package/dist/chunks/BwgLargeUploader-LMj6KXhK.cjs +3 -0
  4. package/dist/chunks/BwgLargeUploader-LMj6KXhK.cjs.map +1 -0
  5. package/dist/chunks/{SSOHandler-DZeC8Xgh.cjs → SSOHandler-DXnV_f_M.cjs} +43 -43
  6. package/dist/chunks/SSOHandler-DXnV_f_M.cjs.map +1 -0
  7. package/dist/chunks/{SSOHandler-DrKRTb6h.js → SSOHandler-yNjxYbHn.js} +263 -263
  8. package/dist/chunks/SSOHandler-yNjxYbHn.js.map +1 -0
  9. package/dist/chunks/{SearchBoxContext-BxtHF9BO.js → SearchBoxContext-CO1AyqH4.js} +7 -7
  10. package/dist/chunks/{SearchBoxContext-BxtHF9BO.js.map → SearchBoxContext-CO1AyqH4.js.map} +1 -1
  11. package/dist/chunks/{SearchBoxContext-Cpr9xa1S.cjs → SearchBoxContext-Cinu3U4b.cjs} +2 -2
  12. package/dist/chunks/{SearchBoxContext-Cpr9xa1S.cjs.map → SearchBoxContext-Cinu3U4b.cjs.map} +1 -1
  13. package/dist/chunks/{ViewContainer-BJQtASUE.cjs → ViewContainer-BH7t9T4d.cjs} +3 -3
  14. package/dist/chunks/{ViewContainer-BJQtASUE.cjs.map → ViewContainer-BH7t9T4d.cjs.map} +1 -1
  15. package/dist/chunks/{ViewContainer-D6ne-F5v.js → ViewContainer-CMbN_tYW.js} +121 -81
  16. package/dist/chunks/{ViewContainer-D6ne-F5v.js.map → ViewContainer-CMbN_tYW.js.map} +1 -1
  17. package/dist/chunks/apiUtils-BJRcT3Tm.js +1315 -0
  18. package/dist/chunks/apiUtils-BJRcT3Tm.js.map +1 -0
  19. package/dist/chunks/apiUtils-DEnQeWNI.cjs +3 -0
  20. package/dist/chunks/apiUtils-DEnQeWNI.cjs.map +1 -0
  21. package/dist/chunks/{codeStore-BzT5wSd9.js → codeStore-C0f5xZ_m.js} +2 -2
  22. package/dist/chunks/{codeStore-BzT5wSd9.js.map → codeStore-C0f5xZ_m.js.map} +1 -1
  23. package/dist/chunks/{codeStore-BGLhSpAM.cjs → codeStore-DTtOQhfW.cjs} +2 -2
  24. package/dist/chunks/{codeStore-BGLhSpAM.cjs.map → codeStore-DTtOQhfW.cjs.map} +1 -1
  25. package/dist/chunks/{favoriteStore-C9utQ6sm.js → favoriteStore-Drhx0843.js} +5 -6
  26. package/dist/chunks/favoriteStore-Drhx0843.js.map +1 -0
  27. package/dist/chunks/favoriteStore-Dyp89Kew.cjs +2 -0
  28. package/dist/chunks/favoriteStore-Dyp89Kew.cjs.map +1 -0
  29. package/dist/chunks/popupStore-D1rxKTyJ.js +92 -0
  30. package/dist/chunks/popupStore-D1rxKTyJ.js.map +1 -0
  31. package/dist/chunks/popupStore-DGMxbQ--.cjs +2 -0
  32. package/dist/chunks/popupStore-DGMxbQ--.cjs.map +1 -0
  33. package/dist/chunks/usePopup-C1h8V04_.js +109 -0
  34. package/dist/chunks/usePopup-C1h8V04_.js.map +1 -0
  35. package/dist/chunks/usePopup-CdpFYf3m.cjs +2 -0
  36. package/dist/chunks/usePopup-CdpFYf3m.cjs.map +1 -0
  37. package/dist/components/common/BwgButtonGroup.d.ts.map +1 -1
  38. package/dist/components/common/BwgGrid.d.ts +5 -1
  39. package/dist/components/common/BwgGrid.d.ts.map +1 -1
  40. package/dist/components/common/index.cjs +1 -1
  41. package/dist/components/common/index.js +1 -1
  42. package/dist/components/core/BwgDatePicker.d.ts +2 -2
  43. package/dist/components/core/BwgDatePicker.d.ts.map +1 -1
  44. package/dist/components/core/BwgLargeUploader.d.ts.map +1 -1
  45. package/dist/components/core/BwgMaskedInput.d.ts +1 -1
  46. package/dist/components/core/BwgMaskedInput.d.ts.map +1 -1
  47. package/dist/components/core/BwgMaskedPicker.d.ts +1 -1
  48. package/dist/components/core/BwgMaskedPicker.d.ts.map +1 -1
  49. package/dist/components/core/BwgNumber.d.ts +0 -1
  50. package/dist/components/core/BwgNumber.d.ts.map +1 -1
  51. package/dist/components/core/BwgRangePicker.d.ts +2 -2
  52. package/dist/components/core/BwgRangePicker.d.ts.map +1 -1
  53. package/dist/components/core/BwgUploader.d.ts.map +1 -1
  54. package/dist/components/core/index.cjs +1 -1
  55. package/dist/components/core/index.js +1 -1
  56. package/dist/components/layout/ViewContainer.d.ts.map +1 -1
  57. package/dist/components/layout/index.cjs +1 -1
  58. package/dist/components/layout/index.js +1 -1
  59. package/dist/index.cjs +1 -1
  60. package/dist/index.js +217 -314
  61. package/dist/index.js.map +1 -1
  62. package/dist/provider/contexts/index.d.ts +0 -1
  63. package/dist/provider/contexts/index.d.ts.map +1 -1
  64. package/dist/provider/index.cjs +1 -1
  65. package/dist/provider/index.js +24 -31
  66. package/dist/stores/favoriteStore.d.ts.map +1 -1
  67. package/dist/stores/index.cjs +1 -1
  68. package/dist/stores/index.js +7 -7
  69. package/dist/utils/commonUtils.d.ts +236 -37
  70. package/dist/utils/commonUtils.d.ts.map +1 -1
  71. package/dist/utils/{FileUtils.d.ts → fileUtils.d.ts} +9 -1
  72. package/dist/utils/fileUtils.d.ts.map +1 -0
  73. package/dist/utils/index.cjs +1 -1
  74. package/dist/utils/index.cjs.map +1 -1
  75. package/dist/utils/index.d.ts +381 -15
  76. package/dist/utils/index.d.ts.map +1 -1
  77. package/dist/utils/index.js +215 -210
  78. package/dist/utils/index.js.map +1 -1
  79. package/dist/utils/notificationUtils.d.ts +5 -5
  80. package/dist/utils/notificationUtils.d.ts.map +1 -1
  81. package/package.json +2 -1
  82. package/dist/chunks/BwgLargeUploader-CgrJUwFW.cjs +0 -3
  83. package/dist/chunks/BwgLargeUploader-CgrJUwFW.cjs.map +0 -1
  84. package/dist/chunks/BwgLargeUploader-Nx2-wiD8.js.map +0 -1
  85. package/dist/chunks/FileUtils-Bbz3AvQn.js +0 -141
  86. package/dist/chunks/FileUtils-Bbz3AvQn.js.map +0 -1
  87. package/dist/chunks/FileUtils-D73GVmB8.cjs +0 -2
  88. package/dist/chunks/FileUtils-D73GVmB8.cjs.map +0 -1
  89. package/dist/chunks/SSOHandler-DZeC8Xgh.cjs.map +0 -1
  90. package/dist/chunks/SSOHandler-DrKRTb6h.js.map +0 -1
  91. package/dist/chunks/_commonjsHelpers-DKOUU3wS.cjs +0 -2
  92. package/dist/chunks/_commonjsHelpers-DKOUU3wS.cjs.map +0 -1
  93. package/dist/chunks/_commonjsHelpers-DaMA6jEr.js +0 -9
  94. package/dist/chunks/_commonjsHelpers-DaMA6jEr.js.map +0 -1
  95. package/dist/chunks/apiUtils-C45AWfu-.js +0 -957
  96. package/dist/chunks/apiUtils-C45AWfu-.js.map +0 -1
  97. package/dist/chunks/apiUtils-Cbg6NQLv.cjs +0 -4
  98. package/dist/chunks/apiUtils-Cbg6NQLv.cjs.map +0 -1
  99. package/dist/chunks/commonUtils-BH6QwGUb.cjs +0 -2
  100. package/dist/chunks/commonUtils-BH6QwGUb.cjs.map +0 -1
  101. package/dist/chunks/commonUtils-Bb16Yqjk.js +0 -629
  102. package/dist/chunks/commonUtils-Bb16Yqjk.js.map +0 -1
  103. package/dist/chunks/envUtils-C9Gf5aek.js +0 -30
  104. package/dist/chunks/envUtils-C9Gf5aek.js.map +0 -1
  105. package/dist/chunks/envUtils-CduTHoHu.cjs +0 -2
  106. package/dist/chunks/envUtils-CduTHoHu.cjs.map +0 -1
  107. package/dist/chunks/favoriteStore-3YceyayF.cjs +0 -2
  108. package/dist/chunks/favoriteStore-3YceyayF.cjs.map +0 -1
  109. package/dist/chunks/favoriteStore-C9utQ6sm.js.map +0 -1
  110. package/dist/chunks/popupStore-DmFbkkjd.js +0 -98
  111. package/dist/chunks/popupStore-DmFbkkjd.js.map +0 -1
  112. package/dist/chunks/popupStore-DnWLaQ70.cjs +0 -2
  113. package/dist/chunks/popupStore-DnWLaQ70.cjs.map +0 -1
  114. package/dist/chunks/usePopup-C8FrbrDD.cjs +0 -2
  115. package/dist/chunks/usePopup-C8FrbrDD.cjs.map +0 -1
  116. package/dist/chunks/usePopup-pfh-ajfP.js +0 -241
  117. package/dist/chunks/usePopup-pfh-ajfP.js.map +0 -1
  118. package/dist/provider/contexts/UtilsContext.d.ts +0 -195
  119. package/dist/provider/contexts/UtilsContext.d.ts.map +0 -1
  120. package/dist/utils/FileUtils.d.ts.map +0 -1
  121. package/dist/utils/arrayUtils.d.ts +0 -35
  122. package/dist/utils/arrayUtils.d.ts.map +0 -1
  123. package/dist/utils/cookieUtils.d.ts +0 -5
  124. package/dist/utils/cookieUtils.d.ts.map +0 -1
  125. package/dist/utils/dateUtils.d.ts +0 -27
  126. package/dist/utils/dateUtils.d.ts.map +0 -1
  127. package/dist/utils/imageUtils.d.ts +0 -32
  128. package/dist/utils/imageUtils.d.ts.map +0 -1
  129. package/dist/utils/objectUtils.d.ts +0 -28
  130. package/dist/utils/objectUtils.d.ts.map +0 -1
  131. package/dist/utils/stringUtils.d.ts +0 -143
  132. package/dist/utils/stringUtils.d.ts.map +0 -1
@@ -0,0 +1,1315 @@
1
+ import te from "axios";
2
+ import U from "dayjs";
3
+ import { message as K, notification as O } from "antd";
4
+ import { create as z } from "zustand";
5
+ var Ir = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
6
+ function re(e) {
7
+ return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
8
+ }
9
+ const de = {
10
+ // 권한 관련
11
+ AUTH_BTNS: "SCMSIGN00202",
12
+ // 버튼 권한 조회
13
+ AUTH_MENU: "SCMSIGN00201",
14
+ // 메뉴 권한 조회
15
+ SRCH_CODE: "SCMSIGN00301",
16
+ // 코드 조회
17
+ // 팝업 관련
18
+ SRCH_POPU: "SCMPOPU00101",
19
+ // 팝업 조회
20
+ // 즐겨찾기 관련
21
+ AUTH_BMRK: "SCMBMRK00101"
22
+ // 즐겨찾기 관리
23
+ };
24
+ let A = {};
25
+ function $e(e) {
26
+ A = e, console.log("🔧 Provider 서비스코드 오버라이드 설정:", e);
27
+ }
28
+ function ne(e) {
29
+ return A[e] && A[e].trim() !== "" ? A[e] : de[e];
30
+ }
31
+ function fe() {
32
+ const e = {};
33
+ for (const r of Object.keys(de))
34
+ e[r] = ne(r);
35
+ return e;
36
+ }
37
+ function Oe() {
38
+ console.log("🔧 bwg-core 서비스코드 설정:"), console.log("📋 Provider 설정 > 기본값 순서로 확인");
39
+ const e = fe();
40
+ for (const [r, t] of Object.entries(e)) {
41
+ const n = A[r] ? "Provider 설정" : "기본값";
42
+ console.log(` ${r}: ${t} (${n})`);
43
+ }
44
+ }
45
+ const br = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
46
+ __proto__: null,
47
+ getAllServiceCodes: fe,
48
+ getServiceCode: ne,
49
+ logServiceCodeConfig: Oe,
50
+ setServiceCodeOverrides: $e
51
+ }, Symbol.toStringTag, { value: "Module" }));
52
+ import.meta.env.DEV;
53
+ function Ue(e, r) {
54
+ let t;
55
+ try {
56
+ t = e();
57
+ } catch {
58
+ return;
59
+ }
60
+ return {
61
+ getItem: (a) => {
62
+ var o;
63
+ const i = (u) => u === null ? null : JSON.parse(u, void 0), m = (o = t.getItem(a)) != null ? o : null;
64
+ return m instanceof Promise ? m.then(i) : i(m);
65
+ },
66
+ setItem: (a, o) => t.setItem(a, JSON.stringify(o, void 0)),
67
+ removeItem: (a) => t.removeItem(a)
68
+ };
69
+ }
70
+ const Z = (e) => (r) => {
71
+ try {
72
+ const t = e(r);
73
+ return t instanceof Promise ? t : {
74
+ then(n) {
75
+ return Z(n)(t);
76
+ },
77
+ catch(n) {
78
+ return this;
79
+ }
80
+ };
81
+ } catch (t) {
82
+ return {
83
+ then(n) {
84
+ return this;
85
+ },
86
+ catch(n) {
87
+ return Z(n)(t);
88
+ }
89
+ };
90
+ }
91
+ }, Le = (e, r) => (t, n, a) => {
92
+ let o = {
93
+ storage: Ue(() => localStorage),
94
+ partialize: (s) => s,
95
+ version: 0,
96
+ merge: (s, d) => ({
97
+ ...d,
98
+ ...s
99
+ }),
100
+ ...r
101
+ }, i = !1;
102
+ const m = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Set();
103
+ let p = o.storage;
104
+ if (!p)
105
+ return e(
106
+ (...s) => {
107
+ console.warn(
108
+ `[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`
109
+ ), t(...s);
110
+ },
111
+ n,
112
+ a
113
+ );
114
+ const g = () => {
115
+ const s = o.partialize({ ...n() });
116
+ return p.setItem(o.name, {
117
+ state: s,
118
+ version: o.version
119
+ });
120
+ }, S = a.setState;
121
+ a.setState = (s, d) => (S(s, d), g());
122
+ const c = e(
123
+ (...s) => (t(...s), g()),
124
+ n,
125
+ a
126
+ );
127
+ a.getInitialState = () => c;
128
+ let f;
129
+ const l = () => {
130
+ var s, d;
131
+ if (!p) return;
132
+ i = !1, m.forEach((h) => {
133
+ var v;
134
+ return h((v = n()) != null ? v : c);
135
+ });
136
+ const y = ((d = o.onRehydrateStorage) == null ? void 0 : d.call(o, (s = n()) != null ? s : c)) || void 0;
137
+ return Z(p.getItem.bind(p))(o.name).then((h) => {
138
+ if (h)
139
+ if (typeof h.version == "number" && h.version !== o.version) {
140
+ if (o.migrate) {
141
+ const v = o.migrate(
142
+ h.state,
143
+ h.version
144
+ );
145
+ return v instanceof Promise ? v.then((T) => [!0, T]) : [!0, v];
146
+ }
147
+ console.error(
148
+ "State loaded from storage couldn't be migrated since no migrate function was provided"
149
+ );
150
+ } else
151
+ return [!1, h.state];
152
+ return [!1, void 0];
153
+ }).then((h) => {
154
+ var v;
155
+ const [T, M] = h;
156
+ if (f = o.merge(
157
+ M,
158
+ (v = n()) != null ? v : c
159
+ ), t(f, !0), T)
160
+ return g();
161
+ }).then(() => {
162
+ y?.(f, void 0), f = n(), i = !0, u.forEach((h) => h(f));
163
+ }).catch((h) => {
164
+ y?.(void 0, h);
165
+ });
166
+ };
167
+ return a.persist = {
168
+ setOptions: (s) => {
169
+ o = {
170
+ ...o,
171
+ ...s
172
+ }, s.storage && (p = s.storage);
173
+ },
174
+ clearStorage: () => {
175
+ p?.removeItem(o.name);
176
+ },
177
+ getOptions: () => o,
178
+ rehydrate: () => l(),
179
+ hasHydrated: () => i,
180
+ onHydrate: (s) => (m.add(s), () => {
181
+ m.delete(s);
182
+ }),
183
+ onFinishHydration: (s) => (u.add(s), () => {
184
+ u.delete(s);
185
+ })
186
+ }, o.skipHydration || l(), f || c;
187
+ }, Pe = Le, C = z()(
188
+ Pe(
189
+ (e, r) => ({
190
+ user: null,
191
+ isLoggedIn: !1,
192
+ // 로그인
193
+ login: (t) => {
194
+ e({ user: t, isLoggedIn: !0 }), console.log("사용자 로그인:", t);
195
+ },
196
+ // 로그아웃
197
+ logout: () => {
198
+ e({ user: null, isLoggedIn: !1 }), console.log("사용자 로그아웃");
199
+ },
200
+ // 사용자 정보 업데이트
201
+ updateUser: (t) => {
202
+ const n = r().user;
203
+ n && e({ user: { ...n, ...t } });
204
+ }
205
+ }),
206
+ {
207
+ name: "user-storage",
208
+ // 로컬 스토리지 키
209
+ partialize: (e) => ({
210
+ user: e.user,
211
+ isLoggedIn: e.isLoggedIn
212
+ })
213
+ // 저장할 상태만 선택
214
+ }
215
+ )
216
+ ), Ee = () => C.getState().user?.crprCd || null, me = () => C.getState().user?.userId || null, he = () => C.getState().user?.userNm || null, Ae = () => C.getState().user?.userDvsn || null, ke = () => C.getState().user?.emplNo || null, ge = () => C.getState().user?.dprtCd || null, pe = () => C.getState().user?.dprtNm || null, B = () => C.getState().user?.roleList || null, Ye = (e) => {
217
+ const r = B();
218
+ return r ? r.includes(e) : !1;
219
+ }, Fe = (e) => {
220
+ const r = B();
221
+ return r ? e.some((t) => r.includes(t)) : !1;
222
+ }, Re = (e) => {
223
+ const r = B();
224
+ return r ? e.every((t) => r.includes(t)) : !1;
225
+ }, je = () => C.getState().isLoggedIn, se = () => C.getState().user, He = () => se() !== null, ze = () => {
226
+ const e = he(), r = me();
227
+ return e || r || null;
228
+ }, Be = () => {
229
+ const e = pe(), r = ge();
230
+ return e || (r ? String(r) : null);
231
+ }, wr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
232
+ __proto__: null,
233
+ getCrprCd: Ee,
234
+ getDepartmentInfo: Be,
235
+ getDisplayName: ze,
236
+ getDprtCd: ge,
237
+ getDprtNm: pe,
238
+ getEmplNo: ke,
239
+ getRoleList: B,
240
+ getUserDvsn: Ae,
241
+ getUserId: me,
242
+ getUserInfo: se,
243
+ getUserNm: he,
244
+ hasAllRoles: Re,
245
+ hasAnyRole: Fe,
246
+ hasRole: Ye,
247
+ hasUserInfo: He,
248
+ isLoggedIn: je
249
+ }, Symbol.toStringTag, { value: "Module" })), k = (() => {
250
+ try {
251
+ if (import.meta.env.DEV)
252
+ return !0;
253
+ } catch {
254
+ }
255
+ return !1;
256
+ })();
257
+ let ve = [], ye = [];
258
+ function qe(e) {
259
+ e.devHosts && (ve = e.devHosts), e.prodHosts && (ye = e.prodHosts);
260
+ }
261
+ function Me() {
262
+ if (typeof window < "u" && window.location)
263
+ return window.location.hostname;
264
+ }
265
+ const Se = (() => {
266
+ const e = Me();
267
+ return !!(e && ve.includes(e));
268
+ })(), Te = (() => {
269
+ const e = Me();
270
+ return !!(e && ye.includes(e));
271
+ })();
272
+ function We() {
273
+ return k ? "X" : Se ? "D" : Te ? "P" : "X";
274
+ }
275
+ const _r = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
276
+ __proto__: null,
277
+ configureEnvUtils: qe,
278
+ getEnvCode: We,
279
+ isDev: Se,
280
+ isLocal: k,
281
+ isProd: Te
282
+ }, Symbol.toStringTag, { value: "Module" })), V = {
283
+ DEFAULT_PRNT_GBCD: 1
284
+ }, Ge = (e) => e && typeof e == "object" && typeof e.menuId == "string" && typeof e.menuNm == "string" && typeof e.crprCd == "string", oe = (e) => Array.isArray(e) && e.every(Ge);
285
+ let J = [], ae = [];
286
+ const Ke = (e) => {
287
+ if (e && typeof e == "object") {
288
+ const r = e;
289
+ if (r.menus && oe(r.menus)) return r.menus;
290
+ if (oe(e)) return e;
291
+ }
292
+ return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."), [];
293
+ }, Je = (e, r) => !!r && e.crprCd === r.crprCd && e.userId === r.userId && (e.prntGbcd ?? V.DEFAULT_PRNT_GBCD) === (r.prntGbcd ?? V.DEFAULT_PRNT_GBCD), Xe = (e) => {
294
+ if (J.length === e.length && J.every(
295
+ (o, i) => o.menuId === e[i]?.menuId && o.menuPrntId === e[i]?.menuPrntId
296
+ ))
297
+ return ae;
298
+ if (!e.length) return [];
299
+ const r = /* @__PURE__ */ new Map(), t = [];
300
+ e.forEach((o) => o?.menuId && r.set(o.menuId, { ...o, children: [] })), e.forEach((o) => {
301
+ const i = r.get(o.menuId);
302
+ i && (o.menuPrntId && o.menuPrntId !== "" && o.menuPrntId !== "-" ? r.get(o.menuPrntId)?.children?.push(i) : t.push(i));
303
+ });
304
+ const n = (o) => o.sort((i, m) => (i?.menuNo ?? 0) - (m?.menuNo ?? 0)).map((i) => ({
305
+ ...i,
306
+ children: i.children && i.children.length ? n(i.children) : void 0
307
+ })), a = n(t);
308
+ return J = [...e], ae = a, a;
309
+ }, Ze = z((e, r) => ({
310
+ // 📊 초기 상태값
311
+ menuList: [],
312
+ flatMenuList: [],
313
+ isLoading: !1,
314
+ error: null,
315
+ _lastFetchParams: null,
316
+ // 🔧 메뉴 모델 조회
317
+ // 서버에서 사용자별 메뉴 권한 데이터를 가져와서 트리/플랫 구조로 저장
318
+ fetchMenu: async ({ crprCd: t, userId: n, prntGbcd: a }) => {
319
+ const o = {
320
+ crprCd: t,
321
+ userId: n,
322
+ prntGbcd: a ?? V.DEFAULT_PRNT_GBCD
323
+ };
324
+ if (Je(o, r()._lastFetchParams)) {
325
+ console.log("✅ 중복 fetch 차단", o);
326
+ return;
327
+ }
328
+ e({ isLoading: !0, error: null, _lastFetchParams: o });
329
+ try {
330
+ const i = await L(ne("AUTH_MENU"), o), m = Ke(i), u = Xe(m);
331
+ e({
332
+ flatMenuList: m,
333
+ // 평면 리스트 저장
334
+ menuList: u,
335
+ // 트리 구조 저장
336
+ isLoading: !1,
337
+ error: null
338
+ });
339
+ } catch (i) {
340
+ e({ isLoading: !1, error: i?.message ?? "메뉴 로드 실패" });
341
+ }
342
+ },
343
+ // 🔧 메뉴 모델 초기화
344
+ // 로그아웃 시나 사용자 변경 시 메뉴 모델 클리어
345
+ clearMenu: () => {
346
+ e({
347
+ menuList: [],
348
+ flatMenuList: [],
349
+ error: null,
350
+ _lastFetchParams: null
351
+ });
352
+ },
353
+ // 🔧 메뉴 ID로 메뉴 아이템 찾기
354
+ // URL 파라미터나 프로그래밍 방식으로 특정 메뉴를 찾을 때 사용
355
+ findMenuById: (t) => {
356
+ const { flatMenuList: n } = r();
357
+ return n.find((a) => a.menuId === t) ?? null;
358
+ }
359
+ })), X = {
360
+ MAX_TABS: 15
361
+ }, Ve = z((e, r) => ({
362
+ // 📊 초기 상태값
363
+ activeMenuId: null,
364
+ activeMenuItem: null,
365
+ activeDetailItem: null,
366
+ tabs: [],
367
+ sidebarCollapsed: !1,
368
+ maxTabs: X.MAX_TABS,
369
+ tabProtectFlag: {},
370
+ tabParams: {},
371
+ componentLabelMap: {},
372
+ // 🔧 탭 추가 (메뉴 아이템 객체로)
373
+ // 사이드바에서 메뉴 클릭 시 호출되는 메인 함수
374
+ openTabFromMenu: (t, n) => {
375
+ const { tabs: a, activeMenuId: o } = r(), i = a.find((u) => u.key === t.menuId), m = a.find((u) => u.key === t.menuId);
376
+ if (i)
377
+ m != null ? (e({ activeMenuId: t.menuId, activeMenuItem: t }), r().setTabParams(t.menuId, n || {}), t?.prsnInfoYn === "Y" && r().setProtectFlagForKey(t.menuId)) : K.warning("유효하지 않은 메뉴정보입니다.");
378
+ else {
379
+ if (a.length > X.MAX_TABS) {
380
+ console.warn("❌ 최대 탭 개수를 초과했습니다."), K.warning(
381
+ `최대 ${X.MAX_TABS}개의 탭만 열 수 있습니다.
382
+ 기존 탭을 닫고 다시 시도해주세요.`
383
+ );
384
+ return;
385
+ }
386
+ const u = {
387
+ key: t.menuId,
388
+ label: t.menuNm,
389
+ gubun: "M",
390
+ menuItem: t,
391
+ closable: !0
392
+ };
393
+ e({
394
+ tabs: [...a, u],
395
+ // 탭 목록에 추가
396
+ activeMenuId: t.menuId,
397
+ // 새 탭을 활성화
398
+ activeMenuItem: t
399
+ // 현재 프로그램으로 설정
400
+ }), r().setTabParams(t.menuId, n || {}), t?.prsnInfoYn === "Y" && r().setProtectFlagForKey(t.menuId);
401
+ }
402
+ },
403
+ // 🔧 탭 추가 (메뉴 ID로)
404
+ // URL 파라미터로 메뉴 열기 시 사용 (예: ?menuId=CM000301)
405
+ openTabByMenuId: (t, n) => {
406
+ const a = Ze.getState().findMenuById(t);
407
+ a ? r().openTabFromMenu(a, n) : K.warning("메뉴 ID를 찾을 수 없습니다.");
408
+ },
409
+ openDetailView: (t, n, a) => {
410
+ const { tabs: o, activeMenuId: i } = r();
411
+ if (o.find((u) => u.key === t.viewId))
412
+ r().focusTab(t.viewId);
413
+ else {
414
+ const u = {
415
+ key: t.viewId,
416
+ label: t.viewLabel,
417
+ gubun: "C",
418
+ componentItem: {
419
+ scrnPath: n,
420
+ prsnInfoYn: a,
421
+ prntInfo: t.prntInfo
422
+ },
423
+ closable: !0
424
+ };
425
+ e({
426
+ tabs: [...o, u],
427
+ // 탭 목록에 추가
428
+ activeMenuId: t.viewId,
429
+ // 새 탭을 활성화
430
+ activeDetailItem: t
431
+ }), r().setTabParams(t.viewId, t.viewParams || {});
432
+ }
433
+ },
434
+ // 🔧 탭 제거
435
+ // X 버튼 클릭 시 탭을 닫고 관련 상태도 정리
436
+ closeTab: (t) => {
437
+ const { tabs: n, activeMenuId: a } = r();
438
+ n.find((m) => m.key === t);
439
+ const o = n.filter((m) => m.key !== t);
440
+ let i = a;
441
+ if (a === t) {
442
+ const m = n.findIndex((u) => u.key === t);
443
+ i = o.length ? o[Math.min(m, o.length - 1)]?.key ?? null : null;
444
+ }
445
+ e({
446
+ tabs: o
447
+ }), i && r().focusTab(i);
448
+ },
449
+ // 🔧 활성 탭 변경
450
+ // 탭 헤더 클릭 시 해당 탭으로 전환
451
+ focusTab: (t) => {
452
+ const { tabs: n } = r(), a = n.find((o) => o.key === t);
453
+ if (a) {
454
+ const o = a.gubun === "C" ? {
455
+ viewId: a.key,
456
+ viewLabel: a.label,
457
+ prntInfo: a.componentItem?.prntInfo
458
+ } : null;
459
+ a.menuItem?.prsnInfoYn === "Y" ? (e({
460
+ activeMenuId: t,
461
+ activeMenuItem: a.menuItem,
462
+ activeDetailItem: o
463
+ }), console.log(
464
+ "✅ 탭 포커스 (개인정보) - activeMenuItem:",
465
+ a.menuItem
466
+ ), r().setProtectFlagForKey(t)) : (e({
467
+ activeMenuId: t,
468
+ activeMenuItem: a.menuItem,
469
+ activeDetailItem: o
470
+ }), r().clearProtectFlagForKey(t));
471
+ } else
472
+ e({ activeMenuId: t, activeMenuItem: null, activeDetailItem: null }), console.warn("❌ 탭을 찾을 수 없음:", t);
473
+ },
474
+ // 🔧 모든 탭 제거
475
+ // 로그아웃이나 전체 초기화 시 사용
476
+ closeAllTabs: () => e({ tabs: [], activeMenuId: null, activeMenuItem: null, activeDetailItem: null }),
477
+ // 🔧 사이드바 토글
478
+ // 햄버거 메뉴 클릭 시 사이드바 접기/펼치기
479
+ toggleSidebar: () => e((t) => ({ sidebarCollapsed: !t.sidebarCollapsed })),
480
+ // useMenuViewStore.ts
481
+ reorderTabs: (t) => e((n) => {
482
+ const a = new Map(n.tabs.map((o) => [o.key, o]));
483
+ return { tabs: t.map((o) => a.get(o)).filter(Boolean) };
484
+ }),
485
+ // 개인정보 포함여부에 따른 탭 잠금 Flag 설정
486
+ setProtectFlagForKey: (t) => e((n) => ({
487
+ tabProtectFlag: { ...n.tabProtectFlag, [t]: !0 }
488
+ })),
489
+ // 개인정보 포함여부에 따른 탭 잠금 해제
490
+ clearProtectFlagForKey: (t) => e((n) => {
491
+ const a = { ...n.tabProtectFlag };
492
+ return delete a[t], { tabProtectFlag: a };
493
+ }),
494
+ // 탭 파라미터 설정
495
+ setTabParams: (t, n) => e((a) => {
496
+ const o = a.tabParams[t] || {}, i = { ...n || {} };
497
+ return Object.keys(o).length === Object.keys(i).length && Object.keys(i).every((u) => o[u] === i[u]) ? a : {
498
+ tabParams: { ...a.tabParams, [t]: i }
499
+ };
500
+ }),
501
+ // 컴포넌트 라벨 맵 설정
502
+ setComponentLabelMap: (t, n) => e({ componentLabelMap: t })
503
+ })), Q = z((e) => ({
504
+ requestCount: 0,
505
+ loading: !1,
506
+ showLoading: () => e((r) => {
507
+ const t = r.requestCount + 1;
508
+ return { requestCount: t, loading: t > 0 };
509
+ }),
510
+ hideLoading: () => e((r) => {
511
+ const t = Math.max(0, r.requestCount - 1);
512
+ return { requestCount: t, loading: t > 0 };
513
+ })
514
+ }));
515
+ var Y = { exports: {} }, Qe = Y.exports, ie;
516
+ function et() {
517
+ return ie || (ie = 1, (function(e, r) {
518
+ (function(t, n) {
519
+ e.exports = n(U);
520
+ })(Qe, (function(t) {
521
+ function n(i) {
522
+ return i && typeof i == "object" && "default" in i ? i : { default: i };
523
+ }
524
+ var a = n(t), o = { name: "ko", weekdays: "일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"), weekdaysShort: "일_월_화_수_목_금_토".split("_"), weekdaysMin: "일_월_화_수_목_금_토".split("_"), months: "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), monthsShort: "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), ordinal: function(i) {
525
+ return i + "일";
526
+ }, formats: { LT: "A h:mm", LTS: "A h:mm:ss", L: "YYYY.MM.DD.", LL: "YYYY년 MMMM D일", LLL: "YYYY년 MMMM D일 A h:mm", LLLL: "YYYY년 MMMM D일 dddd A h:mm", l: "YYYY.MM.DD.", ll: "YYYY년 MMMM D일", lll: "YYYY년 MMMM D일 A h:mm", llll: "YYYY년 MMMM D일 dddd A h:mm" }, meridiem: function(i) {
527
+ return i < 12 ? "오전" : "오후";
528
+ }, relativeTime: { future: "%s 후", past: "%s 전", s: "몇 초", m: "1분", mm: "%d분", h: "한 시간", hh: "%d시간", d: "하루", dd: "%d일", M: "한 달", MM: "%d달", y: "일 년", yy: "%d년" } };
529
+ return a.default.locale(o, null, !0), o;
530
+ }));
531
+ })(Y)), Y.exports;
532
+ }
533
+ et();
534
+ var F = { exports: {} }, tt = F.exports, ue;
535
+ function rt() {
536
+ return ue || (ue = 1, (function(e, r) {
537
+ (function(t, n) {
538
+ e.exports = n();
539
+ })(tt, (function() {
540
+ return function(t, n, a) {
541
+ t = t || {};
542
+ var o = n.prototype, i = { future: "in %s", past: "%s ago", s: "a few seconds", m: "a minute", mm: "%d minutes", h: "an hour", hh: "%d hours", d: "a day", dd: "%d days", M: "a month", MM: "%d months", y: "a year", yy: "%d years" };
543
+ function m(p, g, S, c) {
544
+ return o.fromToBase(p, g, S, c);
545
+ }
546
+ a.en.relativeTime = i, o.fromToBase = function(p, g, S, c, f) {
547
+ for (var l, s, d, y = S.$locale().relativeTime || i, h = t.thresholds || [{ l: "s", r: 44, d: "second" }, { l: "m", r: 89 }, { l: "mm", r: 44, d: "minute" }, { l: "h", r: 89 }, { l: "hh", r: 21, d: "hour" }, { l: "d", r: 35 }, { l: "dd", r: 25, d: "day" }, { l: "M", r: 45 }, { l: "MM", r: 10, d: "month" }, { l: "y", r: 17 }, { l: "yy", d: "year" }], v = h.length, T = 0; T < v; T += 1) {
548
+ var M = h[T];
549
+ M.d && (l = c ? a(p).diff(S, M.d, !0) : S.diff(p, M.d, !0));
550
+ var I = (t.rounding || Math.round)(Math.abs(l));
551
+ if (d = l > 0, I <= M.r || !M.r) {
552
+ I <= 1 && T > 0 && (M = h[T - 1]);
553
+ var b = y[M.l];
554
+ f && (I = f("" + I)), s = typeof b == "string" ? b.replace("%d", I) : b(I, g, M.l, d);
555
+ break;
556
+ }
557
+ }
558
+ if (g) return s;
559
+ var w = d ? y.future : y.past;
560
+ return typeof w == "function" ? w(s) : w.replace("%s", s);
561
+ }, o.to = function(p, g) {
562
+ return m(p, g, this, !0);
563
+ }, o.from = function(p, g) {
564
+ return m(p, g, this);
565
+ };
566
+ var u = function(p) {
567
+ return p.$u ? a.utc() : a();
568
+ };
569
+ o.toNow = function(p) {
570
+ return this.to(u(this), p);
571
+ }, o.fromNow = function(p) {
572
+ return this.from(u(this), p);
573
+ };
574
+ };
575
+ }));
576
+ })(F)), F.exports;
577
+ }
578
+ var nt = rt();
579
+ const st = /* @__PURE__ */ re(nt);
580
+ var R = { exports: {} }, ot = R.exports, ce;
581
+ function at() {
582
+ return ce || (ce = 1, (function(e, r) {
583
+ (function(t, n) {
584
+ e.exports = n();
585
+ })(ot, (function() {
586
+ var t = { year: 0, month: 1, day: 2, hour: 3, minute: 4, second: 5 }, n = {};
587
+ return function(a, o, i) {
588
+ var m, u = function(c, f, l) {
589
+ l === void 0 && (l = {});
590
+ var s = new Date(c), d = (function(y, h) {
591
+ h === void 0 && (h = {});
592
+ var v = h.timeZoneName || "short", T = y + "|" + v, M = n[T];
593
+ return M || (M = new Intl.DateTimeFormat("en-US", { hour12: !1, timeZone: y, year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit", timeZoneName: v }), n[T] = M), M;
594
+ })(f, l);
595
+ return d.formatToParts(s);
596
+ }, p = function(c, f) {
597
+ for (var l = u(c, f), s = [], d = 0; d < l.length; d += 1) {
598
+ var y = l[d], h = y.type, v = y.value, T = t[h];
599
+ T >= 0 && (s[T] = parseInt(v, 10));
600
+ }
601
+ var M = s[3], I = M === 24 ? 0 : M, b = s[0] + "-" + s[1] + "-" + s[2] + " " + I + ":" + s[4] + ":" + s[5] + ":000", w = +c;
602
+ return (i.utc(b).valueOf() - (w -= w % 1e3)) / 6e4;
603
+ }, g = o.prototype;
604
+ g.tz = function(c, f) {
605
+ c === void 0 && (c = m);
606
+ var l, s = this.utcOffset(), d = this.toDate(), y = d.toLocaleString("en-US", { timeZone: c }), h = Math.round((d - new Date(y)) / 1e3 / 60), v = 15 * -Math.round(d.getTimezoneOffset() / 15) - h;
607
+ if (!Number(v)) l = this.utcOffset(0, f);
608
+ else if (l = i(y, { locale: this.$L }).$set("millisecond", this.$ms).utcOffset(v, !0), f) {
609
+ var T = l.utcOffset();
610
+ l = l.add(s - T, "minute");
611
+ }
612
+ return l.$x.$timezone = c, l;
613
+ }, g.offsetName = function(c) {
614
+ var f = this.$x.$timezone || i.tz.guess(), l = u(this.valueOf(), f, { timeZoneName: c }).find((function(s) {
615
+ return s.type.toLowerCase() === "timezonename";
616
+ }));
617
+ return l && l.value;
618
+ };
619
+ var S = g.startOf;
620
+ g.startOf = function(c, f) {
621
+ if (!this.$x || !this.$x.$timezone) return S.call(this, c, f);
622
+ var l = i(this.format("YYYY-MM-DD HH:mm:ss:SSS"), { locale: this.$L });
623
+ return S.call(l, c, f).tz(this.$x.$timezone, !0);
624
+ }, i.tz = function(c, f, l) {
625
+ var s = l && f, d = l || f || m, y = p(+i(), d);
626
+ if (typeof c != "string") return i(c).tz(d);
627
+ var h = (function(I, b, w) {
628
+ var D = I - 60 * b * 1e3, P = p(D, w);
629
+ if (b === P) return [D, b];
630
+ var G = p(D -= 60 * (P - b) * 1e3, w);
631
+ return P === G ? [D, P] : [I - 60 * Math.min(P, G) * 1e3, Math.max(P, G)];
632
+ })(i.utc(c, s).valueOf(), y, d), v = h[0], T = h[1], M = i(v).utcOffset(T);
633
+ return M.$x.$timezone = d, M;
634
+ }, i.tz.guess = function() {
635
+ return Intl.DateTimeFormat().resolvedOptions().timeZone;
636
+ }, i.tz.setDefault = function(c) {
637
+ m = c;
638
+ };
639
+ };
640
+ }));
641
+ })(R)), R.exports;
642
+ }
643
+ var it = at();
644
+ const ut = /* @__PURE__ */ re(it);
645
+ var j = { exports: {} }, ct = j.exports, le;
646
+ function lt() {
647
+ return le || (le = 1, (function(e, r) {
648
+ (function(t, n) {
649
+ e.exports = n();
650
+ })(ct, (function() {
651
+ var t = "minute", n = /[+-]\d\d(?::?\d\d)?/g, a = /([+-]|\d\d)/g;
652
+ return function(o, i, m) {
653
+ var u = i.prototype;
654
+ m.utc = function(s) {
655
+ var d = { date: s, utc: !0, args: arguments };
656
+ return new i(d);
657
+ }, u.utc = function(s) {
658
+ var d = m(this.toDate(), { locale: this.$L, utc: !0 });
659
+ return s ? d.add(this.utcOffset(), t) : d;
660
+ }, u.local = function() {
661
+ return m(this.toDate(), { locale: this.$L, utc: !1 });
662
+ };
663
+ var p = u.parse;
664
+ u.parse = function(s) {
665
+ s.utc && (this.$u = !0), this.$utils().u(s.$offset) || (this.$offset = s.$offset), p.call(this, s);
666
+ };
667
+ var g = u.init;
668
+ u.init = function() {
669
+ if (this.$u) {
670
+ var s = this.$d;
671
+ this.$y = s.getUTCFullYear(), this.$M = s.getUTCMonth(), this.$D = s.getUTCDate(), this.$W = s.getUTCDay(), this.$H = s.getUTCHours(), this.$m = s.getUTCMinutes(), this.$s = s.getUTCSeconds(), this.$ms = s.getUTCMilliseconds();
672
+ } else g.call(this);
673
+ };
674
+ var S = u.utcOffset;
675
+ u.utcOffset = function(s, d) {
676
+ var y = this.$utils().u;
677
+ if (y(s)) return this.$u ? 0 : y(this.$offset) ? S.call(this) : this.$offset;
678
+ if (typeof s == "string" && (s = (function(M) {
679
+ M === void 0 && (M = "");
680
+ var I = M.match(n);
681
+ if (!I) return null;
682
+ var b = ("" + I[0]).match(a) || ["-", 0, 0], w = b[0], D = 60 * +b[1] + +b[2];
683
+ return D === 0 ? 0 : w === "+" ? D : -D;
684
+ })(s), s === null)) return this;
685
+ var h = Math.abs(s) <= 16 ? 60 * s : s;
686
+ if (h === 0) return this.utc(d);
687
+ var v = this.clone();
688
+ if (d) return v.$offset = h, v.$u = !1, v;
689
+ var T = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset();
690
+ return (v = this.local().add(h + T, t)).$offset = h, v.$x.$localOffset = T, v;
691
+ };
692
+ var c = u.format;
693
+ u.format = function(s) {
694
+ var d = s || (this.$u ? "YYYY-MM-DDTHH:mm:ss[Z]" : "");
695
+ return c.call(this, d);
696
+ }, u.valueOf = function() {
697
+ var s = this.$utils().u(this.$offset) ? 0 : this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset());
698
+ return this.$d.valueOf() - 6e4 * s;
699
+ }, u.isUTC = function() {
700
+ return !!this.$u;
701
+ }, u.toISOString = function() {
702
+ return this.toDate().toISOString();
703
+ }, u.toString = function() {
704
+ return this.toDate().toUTCString();
705
+ };
706
+ var f = u.toDate;
707
+ u.toDate = function(s) {
708
+ return s === "s" && this.$offset ? m(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate() : f.call(this);
709
+ };
710
+ var l = u.diff;
711
+ u.diff = function(s, d, y) {
712
+ if (s && this.$u === s.$u) return l.call(this, s, d, y);
713
+ var h = this.local(), v = m(s).local();
714
+ return l.call(h, v, d, y);
715
+ };
716
+ };
717
+ }));
718
+ })(j)), j.exports;
719
+ }
720
+ var dt = lt();
721
+ const ft = /* @__PURE__ */ re(dt), mt = "ui_theme", ht = (e) => typeof e == "string", gt = (e) => typeof e == "number" && !isNaN(e), pt = (e) => typeof e == "boolean", vt = (e) => typeof e == "function", yt = (e) => e !== null && typeof e == "object", Mt = (e) => Array.isArray(e), St = (e) => e === null, Tt = (e) => e === void 0, It = (e) => e == null, bt = (e, r) => {
722
+ let t = 0;
723
+ return (...n) => {
724
+ const a = Date.now();
725
+ a - t >= r && (t = a, e(...n));
726
+ };
727
+ }, wt = (e, r) => {
728
+ let t;
729
+ return (...n) => {
730
+ clearTimeout(t), t = setTimeout(() => e(...n), r);
731
+ };
732
+ }, _t = async (e) => {
733
+ try {
734
+ return await navigator.clipboard.writeText(e), !0;
735
+ } catch (r) {
736
+ return console.error("Error copying to clipboard:", r), !1;
737
+ }
738
+ }, q = () => {
739
+ const e = window.innerWidth;
740
+ return e < 768 ? "mobile" : e < 1024 ? "tablet" : "desktop";
741
+ }, Ct = () => q() === "mobile", xt = () => q() === "tablet", Dt = () => q() === "desktop", Nt = () => "#" + Math.floor(Math.random() * 16777215).toString(16), W = (e) => !e || e.length === 0, $t = (e) => [...new Set(e)], Ot = (e) => {
742
+ if (!W(e))
743
+ return Math.max(...e);
744
+ }, Ut = (e) => {
745
+ if (!W(e))
746
+ return Math.min(...e);
747
+ }, Lt = (e) => {
748
+ if (!W(e))
749
+ return e.reduce((r, t) => r + t, 0) / e.length;
750
+ }, Pt = (e) => e.reduce((r, t) => r + t, 0), Et = (e, r) => e.filter(r).length, At = (e) => [...e].reverse(), kt = (e) => {
751
+ const r = /* @__PURE__ */ new Set(), t = /* @__PURE__ */ new Set();
752
+ return e.forEach((n) => {
753
+ r.has(n) ? t.add(n) : r.add(n);
754
+ }), Array.from(t);
755
+ }, Yt = (e, r) => Math.random() * (r - e) + e, Ft = (e, r, t) => Math.min(Math.max(e, r), t), Rt = (e, r = 0) => Math.round(e * Math.pow(10, r)) / Math.pow(10, r), jt = (e, r) => {
756
+ try {
757
+ sessionStorage.setItem(e, JSON.stringify(r));
758
+ } catch (t) {
759
+ console.error("Error saving to sessionStorage:", t);
760
+ }
761
+ }, Ht = (e, r) => {
762
+ try {
763
+ const t = sessionStorage.getItem(e);
764
+ return t ? JSON.parse(t) : r || null;
765
+ } catch (t) {
766
+ return console.error("Error reading from sessionStorage:", t), r || null;
767
+ }
768
+ }, zt = (e) => {
769
+ try {
770
+ sessionStorage.removeItem(e);
771
+ } catch (r) {
772
+ console.error("Error removing from sessionStorage:", r);
773
+ }
774
+ }, Bt = () => {
775
+ try {
776
+ sessionStorage.clear();
777
+ } catch (e) {
778
+ console.error("Error clearing sessionStorage:", e);
779
+ }
780
+ }, qt = (e, r, t = 30) => {
781
+ const n = /* @__PURE__ */ new Date();
782
+ n.setTime(n.getTime() + t * 24 * 60 * 60 * 1e3), document.cookie = `${e}=${r};expires=${n.toUTCString()};path=/`;
783
+ }, Wt = (e) => {
784
+ const r = e + "=", t = document.cookie.split(";");
785
+ for (let n = 0; n < t.length; n++) {
786
+ let a = t[n];
787
+ for (; a.charAt(0) === " "; ) a = a.substring(1, a.length);
788
+ if (a.indexOf(r) === 0) return a.substring(r.length, a.length);
789
+ }
790
+ return null;
791
+ }, Gt = (e) => {
792
+ document.cookie = `${e}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/`;
793
+ }, Ie = (e) => typeof e != "string" ? !e : e.trim().length === 0, Kt = (e, r) => Ie(e) ? r : e || "", Jt = (e) => e.replace(/-([a-z])/g, (r) => r[1].toUpperCase()), Xt = (e) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e), Zt = (e) => {
794
+ try {
795
+ return new URL(e), !0;
796
+ } catch {
797
+ return !1;
798
+ }
799
+ }, Vt = (e, r, t = " ") => e.padStart(r, t), Qt = (e, r, t = " ") => e.padEnd(r, t), be = (e, r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") => {
800
+ let t = "";
801
+ for (let n = 0; n < e; n++)
802
+ t += r.charAt(Math.floor(Math.random() * r.length));
803
+ return t;
804
+ }, er = () => "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(e) {
805
+ const r = Math.random() * 16 | 0;
806
+ return (e === "x" ? r : r & 3 | 8).toString(16);
807
+ }), we = (e = 32) => {
808
+ const t = er().replace(/-/g, "");
809
+ return e >= 32 ? t + be(e - 32, "0123456789abcdef") : t.substring(0, e);
810
+ };
811
+ async function tr(e) {
812
+ const r = new TextEncoder().encode(e), t = await crypto.subtle.digest("SHA-256", r);
813
+ let n = "";
814
+ for (const a of new Uint8Array(t)) n += String.fromCharCode(a);
815
+ return btoa(n);
816
+ }
817
+ U.extend(st);
818
+ U.extend(ft);
819
+ U.extend(ut);
820
+ U.locale("ko");
821
+ const rr = () => U(), nr = (e = "YYYY-MM-DD") => U().format(e), Cr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
822
+ __proto__: null,
823
+ THEME_COOKIE_NAME: mt,
824
+ arrAverage: Lt,
825
+ arrCount: Et,
826
+ arrMax: Ot,
827
+ arrMin: Ut,
828
+ arrReverse: At,
829
+ arrSum: Pt,
830
+ arrUnique: $t,
831
+ clamp: Ft,
832
+ clearSessionStorage: Bt,
833
+ copyToClipboard: _t,
834
+ debounce: wt,
835
+ deleteCookie: Gt,
836
+ duplicates: kt,
837
+ encryptSha256: tr,
838
+ generateRandomColor: Nt,
839
+ generateRandomString: be,
840
+ generateUID: we,
841
+ getCookie: Wt,
842
+ getCurrentDate: rr,
843
+ getCurrentDateString: nr,
844
+ getDeviceType: q,
845
+ getSessionStorage: Ht,
846
+ isArray: Mt,
847
+ isBoolean: pt,
848
+ isDesktop: Dt,
849
+ isEmpty: Ie,
850
+ isEmptyArray: W,
851
+ isFunction: vt,
852
+ isMobile: Ct,
853
+ isNull: St,
854
+ isNullOrUndefined: It,
855
+ isNumber: gt,
856
+ isObject: yt,
857
+ isSafeEmpty: Kt,
858
+ isString: ht,
859
+ isTablet: xt,
860
+ isUndefined: Tt,
861
+ isValidEmail: Xt,
862
+ isValidUrl: Zt,
863
+ padLeft: Vt,
864
+ padRight: Qt,
865
+ random: Yt,
866
+ removeSessionStorage: zt,
867
+ round: Rt,
868
+ setCookie: qt,
869
+ setSessionStorage: jt,
870
+ throttle: bt,
871
+ toCamelCase: Jt
872
+ }, Symbol.toStringTag, { value: "Module" })), _ = {
873
+ duration: 4.5,
874
+ // 4.5초
875
+ placement: "topRight"
876
+ };
877
+ class E {
878
+ constructor() {
879
+ }
880
+ static getInstance() {
881
+ return E.instance || (E.instance = new E()), E.instance;
882
+ }
883
+ /**
884
+ * BwgError 전용 에러 알림
885
+ * @param props - 에러 메시지 설정
886
+ */
887
+ showBwgError(r) {
888
+ const {
889
+ message: t,
890
+ description: n,
891
+ duration: a = _.duration,
892
+ placement: o = _.placement
893
+ } = r;
894
+ O.error({
895
+ message: `${t}`,
896
+ description: n || "오류가 발생했습니다. 다시 시도해주세요.",
897
+ duration: a,
898
+ placement: o,
899
+ style: {
900
+ borderLeft: "4px solid #ff4d4f",
901
+ backgroundColor: "#fff2f0"
902
+ }
903
+ });
904
+ }
905
+ /**
906
+ * 성공 알림
907
+ */
908
+ showSuccess(r, t, n) {
909
+ O.success({
910
+ message: `${r}`,
911
+ description: t,
912
+ duration: n || _.duration,
913
+ placement: _.placement
914
+ });
915
+ }
916
+ /**
917
+ * 정보 알림
918
+ */
919
+ showInfo(r, t, n) {
920
+ O.info({
921
+ message: `${r}`,
922
+ description: t,
923
+ duration: n || _.duration,
924
+ placement: _.placement
925
+ });
926
+ }
927
+ /**
928
+ * 경고 알림
929
+ */
930
+ showWarning(r, t, n) {
931
+ O.warning({
932
+ message: `${r}`,
933
+ description: t,
934
+ duration: n || _.duration,
935
+ placement: _.placement
936
+ });
937
+ }
938
+ /**
939
+ * 일반 에러 알림
940
+ */
941
+ showError(r, t, n) {
942
+ O.error({
943
+ message: `${r}`,
944
+ description: t,
945
+ duration: n || _.duration,
946
+ placement: _.placement
947
+ });
948
+ }
949
+ /**
950
+ * 모든 알림 닫기
951
+ */
952
+ destroy() {
953
+ O.destroy();
954
+ }
955
+ /**
956
+ * 특정 키의 알림 닫기
957
+ */
958
+ close(r) {
959
+ O.destroy();
960
+ }
961
+ }
962
+ const $ = E.getInstance(), _e = (e) => {
963
+ $.showBwgError(e);
964
+ }, sr = (e, r, t) => {
965
+ $.showSuccess(e, r, t);
966
+ }, Ce = (e, r, t) => {
967
+ $.showInfo(e, r, t);
968
+ }, xe = (e, r, t) => {
969
+ $.showWarning(e, r, t);
970
+ }, or = (e, r, t) => {
971
+ $.showError(e, r, t);
972
+ }, ar = () => {
973
+ $.destroy();
974
+ }, ir = (e) => {
975
+ $.close(e);
976
+ }, xr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
977
+ __proto__: null,
978
+ closeNotification: ir,
979
+ destroyNotifications: ar,
980
+ notiBwgError: _e,
981
+ notiError: or,
982
+ notiInfo: Ce,
983
+ notiSuccess: sr,
984
+ notiWarning: xe,
985
+ notificationService: $
986
+ }, Symbol.toStringTag, { value: "Module" }));
987
+ let N = null;
988
+ const De = async (e) => {
989
+ if (N === null)
990
+ if (e === void 0)
991
+ try {
992
+ let t = (await te.get("/api/ip")).data.trim();
993
+ t = t.replace(/\s+/g, ""), N = t;
994
+ } catch (r) {
995
+ console.warn("IP 가져오기 실패:", r), N = "unknown";
996
+ }
997
+ else
998
+ N = e;
999
+ }, ur = () => N, cr = async () => (console.log("IP 검증 비활성화됨 (성능 최적화)"), N || "unknown");
1000
+ class x extends Error {
1001
+ constructor(r, t, n, a, o) {
1002
+ super(r), this.name = "ApiError", this.detailMsg = t, this.response = n, this.msgCd = a, this.errorType = o, Error.captureStackTrace && Error.captureStackTrace(this, x);
1003
+ }
1004
+ }
1005
+ const ee = {
1006
+ method: "POST",
1007
+ timeout: 3e4,
1008
+ // 30초
1009
+ withCredentials: !0,
1010
+ // 쿠키 포함
1011
+ showLoading: !0,
1012
+ showError: !0,
1013
+ retryCount: 0,
1014
+ retryDelay: 1e3
1015
+ }, H = te.create({
1016
+ timeout: ee.timeout,
1017
+ withCredentials: ee.withCredentials,
1018
+ headers: {
1019
+ "Content-Type": "application/json; charset=utf-8",
1020
+ Accept: "application/json; charset=utf-8"
1021
+ }
1022
+ });
1023
+ H.interceptors.request.use(
1024
+ (e) => {
1025
+ e.showLoading && Q.getState().showLoading();
1026
+ let r = "UNKNOWN", t = "UNKNOWN";
1027
+ (/* @__PURE__ */ new Date()).getTime();
1028
+ try {
1029
+ e.data && e.data.header ? (r = e.data.header.trxCd || "UNKNOWN", t = e.data.header.guid || "UNKNOWN") : e.params && e.params.header && (r = e.params.header.trxCd || "UNKNOWN", t = e.params.header.guid || "UNKNOWN");
1030
+ } catch (a) {
1031
+ console.warn("trxCd/guid 추출 실패:", a);
1032
+ }
1033
+ e.trxCd = r, e.guid = t, e.requestStartTime = Date.now(), console.log(`🚀 API 요청 시작 [거래코드: ${r} / GUID: ${t}]`);
1034
+ const n = localStorage.getItem("accessToken");
1035
+ return n && (e.headers.Authorization = `Bearer ${n}`), e.headers["Content-Type"] = "application/json; charset=UTF-8", e.headers.Accept = "application/json; charset=UTF-8", e;
1036
+ },
1037
+ (e) => (console.error("❌ 요청 인터셉터 에러:", e), Promise.reject(e))
1038
+ );
1039
+ H.interceptors.response.use(
1040
+ (e) => {
1041
+ e.config.showLoading && Q.getState().hideLoading();
1042
+ let r = "UNKNOWN", t = "UNKNOWN";
1043
+ const n = (/* @__PURE__ */ new Date()).getTime();
1044
+ try {
1045
+ e.config.trxCd && (r = e.config.trxCd), e.config.guid ? t = e.config.guid : e.data && e.data.header && e.data.header.trxCd ? (r = e.data.header.trxCd, t = e.data.header.guid || "UNKNOWN") : e.config.data && e.config.data.header ? (r = e.config.data.header.trxCd || "UNKNOWN", t = e.config.data.header.guid || "UNKNOWN") : e.config.params && e.config.params.header && (r = e.config.params.header.trxCd || "UNKNOWN", t = e.config.params.header.guid || "UNKNOWN");
1046
+ } catch (o) {
1047
+ console.warn("trxCd/guid 추출 실패:", o);
1048
+ }
1049
+ let a = 0;
1050
+ return e.config.requestStartTime && (a = n - e.config.requestStartTime), console.log(
1051
+ `✅ API 응답 성공 [거래코드: ${r} / GUID : ${t}] - (소요시간: ${a}ms)`
1052
+ ), e;
1053
+ },
1054
+ async (e) => {
1055
+ if (e.config && e.config.showLoading && Q.getState().hideLoading(), console.error("❌ API 응답 에러:", e), k && console.error("🚨 Error Details:", {
1056
+ message: e.message,
1057
+ status: e.response?.status,
1058
+ statusText: e.response?.statusText,
1059
+ data: e.response?.data,
1060
+ config: {
1061
+ url: e.config?.url,
1062
+ method: e.config?.method,
1063
+ baseURL: e.config?.baseURL
1064
+ }
1065
+ }), e.response?.status === 401) {
1066
+ const r = localStorage.getItem("refreshToken");
1067
+ if (r)
1068
+ try {
1069
+ const t = await te.post("/auth/refresh", {
1070
+ refreshToken: r
1071
+ });
1072
+ if (t.data.accessToken) {
1073
+ localStorage.setItem(
1074
+ "accessToken",
1075
+ t.data.accessToken
1076
+ );
1077
+ const n = e.config;
1078
+ if (n)
1079
+ return n.headers.Authorization = `Bearer ${t.data.accessToken}`, H(n);
1080
+ }
1081
+ } catch {
1082
+ localStorage.removeItem("accessToken"), localStorage.removeItem("refreshToken"), window.location.href = "/login";
1083
+ }
1084
+ }
1085
+ return Promise.reject(e);
1086
+ }
1087
+ );
1088
+ const Ne = () => we(), L = async (e, r, t) => {
1089
+ try {
1090
+ const n = {
1091
+ ...ee,
1092
+ ...t
1093
+ }, { activeMenuId: a } = Ve.getState();
1094
+ if (N === null) {
1095
+ const S = Date.now();
1096
+ await De();
1097
+ const c = Date.now();
1098
+ console.log(`[INFO] IP 조회 소요시간: ${c - S}ms`);
1099
+ }
1100
+ const o = {
1101
+ method: n.method,
1102
+ url: "/api/service",
1103
+ timeout: n.timeout,
1104
+ withCredentials: n.withCredentials,
1105
+ showLoading: n.showLoading
1106
+ };
1107
+ n.headers && (o.headers = n.headers);
1108
+ const i = N || "unknown", m = __APP_CD__, u = __SYS_CD__, p = {
1109
+ header: {
1110
+ trxCd: e,
1111
+ guid: Ne(),
1112
+ userInfo: se(),
1113
+ clientIp: i,
1114
+ // 클라이언트 IP 추가 (서버에서 재확인 권장)
1115
+ domainId: "DEFAULT",
1116
+ appCd: m,
1117
+ sysCd: u,
1118
+ screenId: a
1119
+ },
1120
+ // data: bxmEncrypt(JSON.stringify(data)),
1121
+ data: r
1122
+ };
1123
+ k && console.log("__BWG_LOCAL__ 테스트 입니다. ", k), n.method === "GET" ? o.params = p || n.params : (o.data = p || n.data, n.params && (o.params = n.params));
1124
+ let g;
1125
+ for (let S = 0; S <= (n.retryCount || 0); S++)
1126
+ try {
1127
+ const c = await H(o);
1128
+ if (c.data.header?.resCd == 0) {
1129
+ for (const f in c.data)
1130
+ if (f !== "header")
1131
+ return c.data[f];
1132
+ return {};
1133
+ } else {
1134
+ const f = c.data.header, l = f?.msgs?.basicMsg || "요청 처리 중 오류가 발생했습니다.", s = f?.msgs?.detailMsgs || l, d = f?.msgCd, y = f?.msgs?.type;
1135
+ throw new x(l, s, c, d, y);
1136
+ }
1137
+ } catch (c) {
1138
+ if (c.isAxiosError && c.response) {
1139
+ const f = c, l = f.response, s = l.data, d = s?.header?.msgs?.basicMsg || f.message || // 실패 시 Axios 에러 메시지 사용
1140
+ "서버에서 오류가 발생했습니다.", y = s?.header?.msgs?.detailMsgs || // 상세 메시지로 응답 본문 제공 (문자열이 아니면 JSON으로 변환)
1141
+ (typeof l.data == "string" ? l.data : JSON.stringify(l.data)) || d, h = s?.header?.msgCd, v = s?.header?.msgs?.type;
1142
+ g = new x(
1143
+ d,
1144
+ y,
1145
+ l,
1146
+ h,
1147
+ v
1148
+ );
1149
+ } else
1150
+ g = c;
1151
+ if (c.isAxiosError && lr(c) && S < (n.retryCount || 0)) {
1152
+ await dr(n.retryDelay || 1e3);
1153
+ continue;
1154
+ }
1155
+ break;
1156
+ }
1157
+ if (g) {
1158
+ if (n.showError) {
1159
+ const S = g instanceof x ? g.message : "요청 처리 중 오류가 발생했습니다.", c = g instanceof x ? g.msgCd : "요청 처리 중 오류가 발생했습니다.", f = g instanceof x ? g.detailMsg : g.message, l = g instanceof x ? g.errorType : "";
1160
+ c?.startsWith("BXM") ? _e({
1161
+ message: S,
1162
+ description: f,
1163
+ duration: 5
1164
+ }) : l == "I" ? Ce(S, f, 5) : xe(S, f, 5);
1165
+ }
1166
+ throw g;
1167
+ }
1168
+ throw new Error("알 수 없는 API 오류가 발생했습니다.");
1169
+ } catch (n) {
1170
+ throw console.error("callService 최종 에러:", n), n;
1171
+ }
1172
+ }, lr = (e) => !e.response || e.response.status >= 500 && e.response.status < 600, dr = (e) => new Promise((r) => setTimeout(r, e)), fr = (e, r, t) => L(e, r, { ...t, method: "GET" }), mr = (e, r, t) => L(e, r, { ...t, method: "POST" }), hr = (e, r, t) => L(e, r, { ...t, method: "PUT" }), gr = (e, r, t) => L(e, r, { ...t, method: "DELETE" }), pr = (e, r, t) => L(e, r, { ...t, method: "PATCH" }), vr = async (e, r, t) => {
1173
+ try {
1174
+ const n = await fetch("/api/permissions", {
1175
+ method: "POST",
1176
+ headers: {
1177
+ "Content-Type": "application/json"
1178
+ },
1179
+ body: JSON.stringify({
1180
+ userId: e,
1181
+ menuId: r,
1182
+ popupId: t
1183
+ })
1184
+ });
1185
+ if (!n.ok)
1186
+ throw new Error(`권한 확인 실패: ${n.status}`);
1187
+ return await n.json();
1188
+ } catch (n) {
1189
+ throw console.error("권한 확인 서비스 오류:", n), n;
1190
+ }
1191
+ }, Dr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1192
+ __proto__: null,
1193
+ ApiError: x,
1194
+ apiDelete: gr,
1195
+ apiGet: fr,
1196
+ apiPatch: pr,
1197
+ apiPost: mr,
1198
+ apiPut: hr,
1199
+ callService: L,
1200
+ getClientIp: ur,
1201
+ getGuid: Ne,
1202
+ getPermissionService: vr,
1203
+ setClientIp: De,
1204
+ verifyClientIp: cr
1205
+ }, Symbol.toStringTag, { value: "Module" }));
1206
+ export {
1207
+ Zt as $,
1208
+ x as A,
1209
+ Dt as B,
1210
+ Nt as C,
1211
+ W as D,
1212
+ $t as E,
1213
+ Ot as F,
1214
+ Ut as G,
1215
+ Lt as H,
1216
+ Pt as I,
1217
+ Et as J,
1218
+ At as K,
1219
+ kt as L,
1220
+ Yt as M,
1221
+ Ft as N,
1222
+ Rt as O,
1223
+ jt as P,
1224
+ Ht as Q,
1225
+ zt as R,
1226
+ Bt as S,
1227
+ mt as T,
1228
+ qt as U,
1229
+ Wt as V,
1230
+ Gt as W,
1231
+ Ie as X,
1232
+ Kt as Y,
1233
+ Jt as Z,
1234
+ Xt as _,
1235
+ Ne as a,
1236
+ Vt as a0,
1237
+ Qt as a1,
1238
+ be as a2,
1239
+ we as a3,
1240
+ tr as a4,
1241
+ rr as a5,
1242
+ nr as a6,
1243
+ k as a7,
1244
+ qe as a8,
1245
+ Se as a9,
1246
+ se as aA,
1247
+ He as aB,
1248
+ ze as aC,
1249
+ Be as aD,
1250
+ Q as aE,
1251
+ Ze as aF,
1252
+ Ve as aG,
1253
+ C as aH,
1254
+ Pe as aI,
1255
+ Dr as aJ,
1256
+ Cr as aK,
1257
+ _r as aL,
1258
+ xr as aM,
1259
+ br as aN,
1260
+ wr as aO,
1261
+ re as aP,
1262
+ Ir as aQ,
1263
+ Te as aa,
1264
+ We as ab,
1265
+ $ as ac,
1266
+ _e as ad,
1267
+ sr as ae,
1268
+ Ce as af,
1269
+ xe as ag,
1270
+ or as ah,
1271
+ ar as ai,
1272
+ ir as aj,
1273
+ $e as ak,
1274
+ ne as al,
1275
+ fe as am,
1276
+ Oe as an,
1277
+ Ee as ao,
1278
+ me as ap,
1279
+ he as aq,
1280
+ Ae as ar,
1281
+ ke as as,
1282
+ ge as at,
1283
+ pe as au,
1284
+ B as av,
1285
+ Ye as aw,
1286
+ Fe as ax,
1287
+ Re as ay,
1288
+ je as az,
1289
+ fr as b,
1290
+ L as c,
1291
+ mr as d,
1292
+ hr as e,
1293
+ gr as f,
1294
+ ur as g,
1295
+ pr as h,
1296
+ vr as i,
1297
+ ht as j,
1298
+ gt as k,
1299
+ pt as l,
1300
+ vt as m,
1301
+ yt as n,
1302
+ Mt as o,
1303
+ St as p,
1304
+ Tt as q,
1305
+ It as r,
1306
+ De as s,
1307
+ bt as t,
1308
+ wt as u,
1309
+ cr as v,
1310
+ _t as w,
1311
+ q as x,
1312
+ Ct as y,
1313
+ xt as z
1314
+ };
1315
+ //# sourceMappingURL=apiUtils-BJRcT3Tm.js.map