@bwg-ui/core 1.1.18 → 1.1.20

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 (118) hide show
  1. package/dist/chunks/BwgCheck-BDt8r0gn.js +200 -0
  2. package/dist/chunks/BwgCheck-BDt8r0gn.js.map +1 -0
  3. package/dist/chunks/BwgCheck-Dtzr-6rg.cjs +2 -0
  4. package/dist/chunks/BwgCheck-Dtzr-6rg.cjs.map +1 -0
  5. package/dist/chunks/{BwgLargeUploader-D6plJv5D.js → BwgDownload-CF_Zo2oU.js} +809 -908
  6. package/dist/chunks/BwgDownload-CF_Zo2oU.js.map +1 -0
  7. package/dist/chunks/BwgDownload-DvCaLWCL.cjs +3 -0
  8. package/dist/chunks/BwgDownload-DvCaLWCL.cjs.map +1 -0
  9. package/dist/chunks/SSOHandler-C7echUZs.cjs +236 -0
  10. package/dist/chunks/SSOHandler-C7echUZs.cjs.map +1 -0
  11. package/dist/chunks/{SSOHandler-yNjxYbHn.js → SSOHandler-Cr04mtMm.js} +10739 -8719
  12. package/dist/chunks/SSOHandler-Cr04mtMm.js.map +1 -0
  13. package/dist/chunks/{SearchBoxContext-CO1AyqH4.js → SearchBoxContext-C2ECWG9l.js} +7 -7
  14. package/dist/chunks/{SearchBoxContext-CO1AyqH4.js.map → SearchBoxContext-C2ECWG9l.js.map} +1 -1
  15. package/dist/chunks/{SearchBoxContext-Cinu3U4b.cjs → SearchBoxContext-aMXi2JmO.cjs} +2 -2
  16. package/dist/chunks/{SearchBoxContext-Cinu3U4b.cjs.map → SearchBoxContext-aMXi2JmO.cjs.map} +1 -1
  17. package/dist/chunks/{ViewContainer-BH7t9T4d.cjs → ViewContainer-DI7hvDi-.cjs} +2 -2
  18. package/dist/chunks/{ViewContainer-BH7t9T4d.cjs.map → ViewContainer-DI7hvDi-.cjs.map} +1 -1
  19. package/dist/chunks/{ViewContainer-CMbN_tYW.js → ViewContainer-DxhY26m3.js} +2 -2
  20. package/dist/chunks/{ViewContainer-CMbN_tYW.js.map → ViewContainer-DxhY26m3.js.map} +1 -1
  21. package/dist/chunks/apiUtils-BRaXRbjE.js +1428 -0
  22. package/dist/chunks/apiUtils-BRaXRbjE.js.map +1 -0
  23. package/dist/chunks/apiUtils-DL43X2ta.cjs +3 -0
  24. package/dist/chunks/apiUtils-DL43X2ta.cjs.map +1 -0
  25. package/dist/chunks/{codeStore-DTtOQhfW.cjs → codeStore-WWRT65Zk.cjs} +2 -2
  26. package/dist/chunks/{codeStore-DTtOQhfW.cjs.map → codeStore-WWRT65Zk.cjs.map} +1 -1
  27. package/dist/chunks/{codeStore-C0f5xZ_m.js → codeStore-kuUEfWSS.js} +2 -2
  28. package/dist/chunks/{codeStore-C0f5xZ_m.js.map → codeStore-kuUEfWSS.js.map} +1 -1
  29. package/dist/chunks/core-D7JhyoYH.cjs +2 -0
  30. package/dist/chunks/core-D7JhyoYH.cjs.map +1 -0
  31. package/dist/chunks/core-DLGhqegD.js +514 -0
  32. package/dist/chunks/core-DLGhqegD.js.map +1 -0
  33. package/dist/chunks/enc-base64-96WlVdPN.js +102 -0
  34. package/dist/chunks/enc-base64-96WlVdPN.js.map +1 -0
  35. package/dist/chunks/enc-base64-b9mIy966.cjs +2 -0
  36. package/dist/chunks/enc-base64-b9mIy966.cjs.map +1 -0
  37. package/dist/chunks/favoriteStore-D40XfOmq.js +439 -0
  38. package/dist/chunks/favoriteStore-D40XfOmq.js.map +1 -0
  39. package/dist/chunks/favoriteStore-DdGoghEn.cjs +2 -0
  40. package/dist/chunks/favoriteStore-DdGoghEn.cjs.map +1 -0
  41. package/dist/chunks/{popupStore-DGMxbQ--.cjs → popupStore-DKpp0bmC.cjs} +2 -2
  42. package/dist/chunks/{popupStore-DGMxbQ--.cjs.map → popupStore-DKpp0bmC.cjs.map} +1 -1
  43. package/dist/chunks/{popupStore-D1rxKTyJ.js → popupStore-axohgTV-.js} +2 -2
  44. package/dist/chunks/{popupStore-D1rxKTyJ.js.map → popupStore-axohgTV-.js.map} +1 -1
  45. package/dist/chunks/sha256-BMg1y0Py.js +79 -0
  46. package/dist/chunks/sha256-BMg1y0Py.js.map +1 -0
  47. package/dist/chunks/sha256-BxdSMFca.cjs +2 -0
  48. package/dist/chunks/sha256-BxdSMFca.cjs.map +1 -0
  49. package/dist/chunks/{usePopup-CdpFYf3m.cjs → usePopup-DYnRe9Th.cjs} +2 -2
  50. package/dist/chunks/{usePopup-CdpFYf3m.cjs.map → usePopup-DYnRe9Th.cjs.map} +1 -1
  51. package/dist/chunks/{usePopup-C1h8V04_.js → usePopup-Dftb7Bbl.js} +3 -3
  52. package/dist/chunks/{usePopup-C1h8V04_.js.map → usePopup-Dftb7Bbl.js.map} +1 -1
  53. package/dist/components/common/BookmarkMngModal.d.ts +16 -0
  54. package/dist/components/common/BookmarkMngModal.d.ts.map +1 -0
  55. package/dist/components/common/BookmarkPopver.d.ts +7 -0
  56. package/dist/components/common/BookmarkPopver.d.ts.map +1 -0
  57. package/dist/components/common/BwgDraggable.d.ts +25 -0
  58. package/dist/components/common/BwgDraggable.d.ts.map +1 -0
  59. package/dist/components/common/BwgEditor.d.ts +4 -0
  60. package/dist/components/common/BwgEditor.d.ts.map +1 -1
  61. package/dist/components/common/BwgGrid.d.ts +15 -3
  62. package/dist/components/common/BwgGrid.d.ts.map +1 -1
  63. package/dist/components/common/BwgPagination.d.ts +13 -0
  64. package/dist/components/common/BwgPagination.d.ts.map +1 -0
  65. package/dist/components/common/BwgView.d.ts.map +1 -1
  66. package/dist/components/common/SearchBox.d.ts.map +1 -1
  67. package/dist/components/common/index.cjs +1 -1
  68. package/dist/components/common/index.js +1 -1
  69. package/dist/components/core/BwgDownload.d.ts +33 -0
  70. package/dist/components/core/BwgDownload.d.ts.map +1 -0
  71. package/dist/components/core/index.cjs +1 -1
  72. package/dist/components/core/index.d.ts +2 -0
  73. package/dist/components/core/index.d.ts.map +1 -1
  74. package/dist/components/core/index.js +21 -19
  75. package/dist/components/core/index.js.map +1 -1
  76. package/dist/components/layout/index.cjs +1 -1
  77. package/dist/components/layout/index.js +1 -1
  78. package/dist/components/popup/MenuReport.d.ts +8 -0
  79. package/dist/components/popup/MenuReport.d.ts.map +1 -0
  80. package/dist/index.cjs +1 -1
  81. package/dist/index.js +184 -181
  82. package/dist/index.js.map +1 -1
  83. package/dist/provider/index.cjs +1 -1
  84. package/dist/provider/index.js +2 -2
  85. package/dist/stores/favoriteStore.d.ts +81 -17
  86. package/dist/stores/favoriteStore.d.ts.map +1 -1
  87. package/dist/stores/index.cjs +1 -1
  88. package/dist/stores/index.d.ts +1 -1
  89. package/dist/stores/index.d.ts.map +1 -1
  90. package/dist/stores/index.js +6 -6
  91. package/dist/styles/assets/images/header/icon/ico-bell.svg +3 -3
  92. package/dist/styles/assets/images/header/icon/ico-logout.svg +10 -10
  93. package/dist/styles/assets/images/header/icon/ico-setting.svg +4 -4
  94. package/dist/styles/assets/images/header/icon/ico-sidebar-arrow.svg +3 -3
  95. package/dist/utils/apiUtils.d.ts +8 -0
  96. package/dist/utils/apiUtils.d.ts.map +1 -1
  97. package/dist/utils/commonUtils.d.ts.map +1 -1
  98. package/dist/utils/index.cjs +1 -1
  99. package/dist/utils/index.cjs.map +1 -1
  100. package/dist/utils/index.d.ts +1 -0
  101. package/dist/utils/index.d.ts.map +1 -1
  102. package/dist/utils/index.js +89 -88
  103. package/dist/utils/index.js.map +1 -1
  104. package/package.json +2 -1
  105. package/dist/chunks/BwgLargeUploader-D6plJv5D.js.map +0 -1
  106. package/dist/chunks/BwgLargeUploader-LMj6KXhK.cjs +0 -3
  107. package/dist/chunks/BwgLargeUploader-LMj6KXhK.cjs.map +0 -1
  108. package/dist/chunks/SSOHandler-DXnV_f_M.cjs +0 -236
  109. package/dist/chunks/SSOHandler-DXnV_f_M.cjs.map +0 -1
  110. package/dist/chunks/SSOHandler-yNjxYbHn.js.map +0 -1
  111. package/dist/chunks/apiUtils-BJRcT3Tm.js +0 -1315
  112. package/dist/chunks/apiUtils-BJRcT3Tm.js.map +0 -1
  113. package/dist/chunks/apiUtils-DEnQeWNI.cjs +0 -3
  114. package/dist/chunks/apiUtils-DEnQeWNI.cjs.map +0 -1
  115. package/dist/chunks/favoriteStore-Drhx0843.js +0 -111
  116. package/dist/chunks/favoriteStore-Drhx0843.js.map +0 -1
  117. package/dist/chunks/favoriteStore-Dyp89Kew.cjs +0 -2
  118. package/dist/chunks/favoriteStore-Dyp89Kew.cjs.map +0 -1
@@ -1,1315 +0,0 @@
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