@bwg-ui/core 1.1.26 → 1.1.28

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