@bwg-ui/core 1.1.20 → 1.1.21

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