@bwg-ui/core 1.1.25 → 1.1.27

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 (122) hide show
  1. package/dist/chunks/common-components-CniOkOzu.js +15776 -0
  2. package/dist/chunks/common-components-DrcQahsO.cjs +183 -0
  3. package/dist/chunks/{core-Dl0PdDdT.js → core-CEDyqniq.js} +1 -2
  4. package/dist/chunks/core-lmAmbqvY.cjs +1 -0
  5. package/dist/chunks/{enc-base64-D7t4BoUA.js → enc-base64-CF2tIkYl.js} +4 -5
  6. package/dist/chunks/enc-base64-Dxq399hI.cjs +1 -0
  7. package/dist/chunks/{sha256-C2-s1oZe.js → sha256-DYurgXCU.js} +12 -13
  8. package/dist/chunks/sha256-H5WWQnKT.cjs +1 -0
  9. package/dist/components/common/BwgPagination.d.ts +1 -1
  10. package/dist/components/common/BwgPagination.d.ts.map +1 -1
  11. package/dist/components/common/index.cjs +1 -2
  12. package/dist/components/common/index.d.ts +3 -1
  13. package/dist/components/common/index.d.ts.map +1 -1
  14. package/dist/components/common/index.js +16 -17
  15. package/dist/components/core/BwgFormItem.d.ts +2 -2
  16. package/dist/components/core/BwgFormItem.d.ts.map +1 -1
  17. package/dist/components/core/BwgInput.d.ts.map +1 -1
  18. package/dist/components/core/index.cjs +1 -2
  19. package/dist/components/core/index.js +1218 -23
  20. package/dist/components/guide/index.cjs +1 -2
  21. package/dist/components/guide/index.js +3 -4
  22. package/dist/components/layout/index.cjs +35 -2
  23. package/dist/components/layout/index.js +350 -10
  24. package/dist/components/popup/MenuReport.d.ts.map +1 -1
  25. package/dist/index.cjs +1 -2
  26. package/dist/index.js +211 -222
  27. package/dist/provider/index.cjs +1 -2
  28. package/dist/provider/index.js +384 -25
  29. package/dist/stores/index.cjs +2 -2
  30. package/dist/stores/index.js +1394 -24
  31. package/dist/utils/index.cjs +1 -2
  32. package/dist/utils/index.js +1369 -200
  33. package/package.json +2 -3
  34. package/dist/chunks/AuthContext-CXng9fj0.cjs +0 -2
  35. package/dist/chunks/AuthContext-CXng9fj0.cjs.map +0 -1
  36. package/dist/chunks/AuthContext-DrEpBrpB.js +0 -57
  37. package/dist/chunks/AuthContext-DrEpBrpB.js.map +0 -1
  38. package/dist/chunks/BwgSpace-CnLM4qcg.js +0 -27
  39. package/dist/chunks/BwgSpace-CnLM4qcg.js.map +0 -1
  40. package/dist/chunks/BwgSpace-b0hmM1Ht.cjs +0 -2
  41. package/dist/chunks/BwgSpace-b0hmM1Ht.cjs.map +0 -1
  42. package/dist/chunks/BwgSwitch-DOlc57wi.cjs +0 -2
  43. package/dist/chunks/BwgSwitch-DOlc57wi.cjs.map +0 -1
  44. package/dist/chunks/BwgSwitch-D_scwi9_.js +0 -269
  45. package/dist/chunks/BwgSwitch-D_scwi9_.js.map +0 -1
  46. package/dist/chunks/BwgUploader-CkXwkcUL.cjs +0 -3
  47. package/dist/chunks/BwgUploader-CkXwkcUL.cjs.map +0 -1
  48. package/dist/chunks/BwgUploader-DBFF9BPF.js +0 -3250
  49. package/dist/chunks/BwgUploader-DBFF9BPF.js.map +0 -1
  50. package/dist/chunks/LoadingOverlay-DAZJF5wg.js +0 -19
  51. package/dist/chunks/LoadingOverlay-DAZJF5wg.js.map +0 -1
  52. package/dist/chunks/LoadingOverlay-DcmKvoZA.cjs +0 -2
  53. package/dist/chunks/LoadingOverlay-DcmKvoZA.cjs.map +0 -1
  54. package/dist/chunks/SSOHandler-BY6LXMLc.cjs +0 -237
  55. package/dist/chunks/SSOHandler-BY6LXMLc.cjs.map +0 -1
  56. package/dist/chunks/SSOHandler-CxvxEBaH.js +0 -28654
  57. package/dist/chunks/SSOHandler-CxvxEBaH.js.map +0 -1
  58. package/dist/chunks/ScreenProtectContext-3my4PHFa.js +0 -154
  59. package/dist/chunks/ScreenProtectContext-3my4PHFa.js.map +0 -1
  60. package/dist/chunks/ScreenProtectContext-CVuXrJm6.cjs +0 -2
  61. package/dist/chunks/ScreenProtectContext-CVuXrJm6.cjs.map +0 -1
  62. package/dist/chunks/SearchBoxContext-DwFDOyYG.cjs +0 -2
  63. package/dist/chunks/SearchBoxContext-DwFDOyYG.cjs.map +0 -1
  64. package/dist/chunks/SearchBoxContext-gWM7FHIw.js +0 -86
  65. package/dist/chunks/SearchBoxContext-gWM7FHIw.js.map +0 -1
  66. package/dist/chunks/ViewContainer-Bhq22_B3.cjs +0 -36
  67. package/dist/chunks/ViewContainer-Bhq22_B3.cjs.map +0 -1
  68. package/dist/chunks/ViewContainer-D9SKBnrn.js +0 -338
  69. package/dist/chunks/ViewContainer-D9SKBnrn.js.map +0 -1
  70. package/dist/chunks/apiUtils-BZ6s0_NI.cjs +0 -3
  71. package/dist/chunks/apiUtils-BZ6s0_NI.cjs.map +0 -1
  72. package/dist/chunks/apiUtils-DSwE62oG.js +0 -1450
  73. package/dist/chunks/apiUtils-DSwE62oG.js.map +0 -1
  74. package/dist/chunks/codeStore-il4-kZPe.cjs +0 -2
  75. package/dist/chunks/codeStore-il4-kZPe.cjs.map +0 -1
  76. package/dist/chunks/codeStore-vPj4Y0TK.js +0 -450
  77. package/dist/chunks/codeStore-vPj4Y0TK.js.map +0 -1
  78. package/dist/chunks/core-BHejg5iS.cjs +0 -2
  79. package/dist/chunks/core-BHejg5iS.cjs.map +0 -1
  80. package/dist/chunks/core-Dl0PdDdT.js.map +0 -1
  81. package/dist/chunks/enc-base64-BkBtNBQV.cjs +0 -2
  82. package/dist/chunks/enc-base64-BkBtNBQV.cjs.map +0 -1
  83. package/dist/chunks/enc-base64-D7t4BoUA.js.map +0 -1
  84. package/dist/chunks/favoriteStore-Bh1FuZm9.js +0 -439
  85. package/dist/chunks/favoriteStore-Bh1FuZm9.js.map +0 -1
  86. package/dist/chunks/favoriteStore-CcKg_nEH.cjs +0 -2
  87. package/dist/chunks/favoriteStore-CcKg_nEH.cjs.map +0 -1
  88. package/dist/chunks/jsx-runtime-CeSfJrVB.cjs +0 -31
  89. package/dist/chunks/jsx-runtime-CeSfJrVB.cjs.map +0 -1
  90. package/dist/chunks/jsx-runtime-Dpn_P65e.js +0 -634
  91. package/dist/chunks/jsx-runtime-Dpn_P65e.js.map +0 -1
  92. package/dist/chunks/popupStore-BRRmB4zH.js +0 -92
  93. package/dist/chunks/popupStore-BRRmB4zH.js.map +0 -1
  94. package/dist/chunks/popupStore-DUApUBF2.cjs +0 -2
  95. package/dist/chunks/popupStore-DUApUBF2.cjs.map +0 -1
  96. package/dist/chunks/realFormat-Cha7OTd9.cjs +0 -2
  97. package/dist/chunks/realFormat-Cha7OTd9.cjs.map +0 -1
  98. package/dist/chunks/realFormat-DRGLFabQ.js +0 -305
  99. package/dist/chunks/realFormat-DRGLFabQ.js.map +0 -1
  100. package/dist/chunks/sha256-C2-s1oZe.js.map +0 -1
  101. package/dist/chunks/sha256-DiIRoCQ8.cjs +0 -2
  102. package/dist/chunks/sha256-DiIRoCQ8.cjs.map +0 -1
  103. package/dist/chunks/usePopup-D2JEuDrO.cjs +0 -2
  104. package/dist/chunks/usePopup-D2JEuDrO.cjs.map +0 -1
  105. package/dist/chunks/usePopup-DarKTbRC.js +0 -109
  106. package/dist/chunks/usePopup-DarKTbRC.js.map +0 -1
  107. package/dist/components/common/index.cjs.map +0 -1
  108. package/dist/components/common/index.js.map +0 -1
  109. package/dist/components/core/index.cjs.map +0 -1
  110. package/dist/components/core/index.js.map +0 -1
  111. package/dist/components/guide/index.cjs.map +0 -1
  112. package/dist/components/guide/index.js.map +0 -1
  113. package/dist/components/layout/index.cjs.map +0 -1
  114. package/dist/components/layout/index.js.map +0 -1
  115. package/dist/index.cjs.map +0 -1
  116. package/dist/index.js.map +0 -1
  117. package/dist/provider/index.cjs.map +0 -1
  118. package/dist/provider/index.js.map +0 -1
  119. package/dist/stores/index.cjs.map +0 -1
  120. package/dist/stores/index.js.map +0 -1
  121. package/dist/utils/index.cjs.map +0 -1
  122. 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
- var Cr = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
6
- function se(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 pe = {
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 A = {};
49
- function Ne(e) {
50
- A = e, console.log("🔧 Provider 서비스코드 오버라이드 설정:", e);
51
- }
52
- function oe(e) {
53
- return A[e] && A[e].trim() !== "" ? A[e] : pe[e];
54
- }
55
- function ye() {
56
- const e = {};
57
- for (const r of Object.keys(pe))
58
- e[r] = oe(r);
59
- return e;
60
- }
61
- function Ee() {
62
- console.log("🔧 bwg-core 서비스코드 설정:"), console.log("📋 Provider 설정 > 기본값 순서로 확인");
63
- const e = ye();
64
- for (const [r, t] of Object.entries(e)) {
65
- const n = A[r] ? "Provider 설정" : "기본값";
66
- console.log(` ${r}: ${t} (${n})`);
67
- }
68
- }
69
- const _r = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
70
- __proto__: null,
71
- getAllServiceCodes: ye,
72
- getServiceCode: oe,
73
- logServiceCodeConfig: Ee,
74
- setServiceCodeOverrides: Ne
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), h = (a = t.getItem(s)) != null ? a : null;
88
- return h instanceof Promise ? h.then(i) : i(h);
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 h = /* @__PURE__ */ new Set(), d = /* @__PURE__ */ new Set();
127
- let y = a.storage;
128
- if (!y)
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 y.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 (!y) return;
156
- i = !1, h.forEach((m) => {
157
- var M;
158
- return m((M = n()) != null ? M : c);
159
- });
160
- const v = ((f = a.onRehydrateStorage) == null ? void 0 : f.call(a, (o = n()) != null ? o : c)) || void 0;
161
- return Q(y.getItem.bind(y))(a.name).then((m) => {
162
- if (m)
163
- if (typeof m.version == "number" && m.version !== a.version) {
164
- if (a.migrate) {
165
- const M = a.migrate(
166
- m.state,
167
- m.version
168
- );
169
- return M instanceof Promise ? M.then((w) => [!0, w]) : [!0, M];
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, m.state];
176
- return [!1, void 0];
177
- }).then((m) => {
178
- var M;
179
- const [w, S] = m;
180
- if (u = a.merge(
181
- S,
182
- (M = n()) != null ? M : c
183
- ), t(u, !0), w)
184
- return g();
185
- }).then(() => {
186
- v?.(u, void 0), u = n(), i = !0, d.forEach((m) => m(u));
187
- }).catch((m) => {
188
- v?.(void 0, m);
189
- });
190
- };
191
- return s.persist = {
192
- setOptions: (o) => {
193
- a = {
194
- ...a,
195
- ...o
196
- }, o.storage && (y = o.storage);
197
- },
198
- clearStorage: () => {
199
- y?.removeItem(a.name);
200
- },
201
- getOptions: () => a,
202
- rehydrate: () => l(),
203
- hasHydrated: () => i,
204
- onHydrate: (o) => (h.add(o), () => {
205
- h.delete(o);
206
- }),
207
- onFinishHydration: (o) => (d.add(o), () => {
208
- d.delete(o);
209
- })
210
- }, a.skipHydration || l(), u || c;
211
- }, ke = Ae, D = F()(
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, 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) => {
241
- const r = G();
242
- return r ? r.includes(e) : !1;
243
- }, He = (e) => {
244
- const r = G();
245
- return r ? e.some((t) => r.includes(t)) : !1;
246
- }, ze = (e) => {
247
- const r = G();
248
- return r ? e.every((t) => r.includes(t)) : !1;
249
- }, qe = () => D.getState().isLoggedIn, j = () => D.getState().user, Be = () => j() !== null, Ge = () => {
250
- const e = Me(), r = ve();
251
- return e || r || null;
252
- }, We = () => {
253
- const e = we(), r = Se();
254
- return e || (r ? String(r) : null);
255
- }, br = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
256
- __proto__: null,
257
- getCrprCd: Ye,
258
- getDepartmentInfo: We,
259
- getDisplayName: Ge,
260
- getDprtCd: Se,
261
- getDprtNm: we,
262
- getEmplNo: je,
263
- getRoleList: G,
264
- getUserDvsn: Fe,
265
- getUserId: ve,
266
- getUserInfo: j,
267
- getUserNm: Me,
268
- hasAllRoles: ze,
269
- hasAnyRole: He,
270
- hasRole: Re,
271
- hasUserInfo: Be,
272
- isLoggedIn: qe
273
- }, Symbol.toStringTag, { value: "Module" })), ee = {
274
- DEFAULT_PRNT_GBCD: 1
275
- }, Je = (e) => e && typeof e == "object" && typeof e.menuId == "string" && typeof e.menuNm == "string", le = (e) => Array.isArray(e) && e.every(Je);
276
- let Z = [], de = [];
277
- const Ke = (e) => {
278
- if (e && typeof e == "object") {
279
- const r = e;
280
- if (r.menus && le(r.menus)) return r.menus;
281
- if (le(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 de;
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, h) => (i?.menuNo ?? 0) - (h?.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], de = s, s;
300
- }, Ve = F((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 N(oe("AUTH_MENU"), a), h = Ke(i), d = Ze(h);
322
- e({
323
- flatMenuList: h,
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
- }, Te = F((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), h = s.find((d) => d.key === t.menuId);
367
- if (i)
368
- h != 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((h) => h.key === t);
430
- const a = n.filter((h) => h.key !== t);
431
- let i = s;
432
- if (s === t) {
433
- const h = n.findIndex((d) => d.key === t);
434
- i = a.length ? a[Math.min(h, 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({
464
- activeMenuId: t,
465
- activeMenuItem: null,
466
- activeDetailItem: null
467
- }), console.warn("❌ 탭을 찾을 수 없음:", t);
468
- },
469
- // 🔧 모든 탭 제거
470
- // 로그아웃이나 전체 초기화 시 사용
471
- closeAllTabs: () => e({
472
- tabs: [],
473
- activeMenuId: null,
474
- activeMenuItem: null,
475
- activeDetailItem: null
476
- }),
477
- // 🔧 사이드바 토글
478
- // 햄버거 메뉴 클릭 시 사이드바 접기/펼치기
479
- toggleSidebar: () => e((t) => ({ sidebarCollapsed: !t.sidebarCollapsed })),
480
- // useMenuViewStore.ts
481
- reorderTabs: (t) => e((n) => {
482
- const s = new Map(n.tabs.map((a) => [a.key, a]));
483
- return { tabs: t.map((a) => s.get(a)).filter(Boolean) };
484
- }),
485
- // 개인정보 포함여부에 따른 탭 잠금 Flag 설정
486
- setProtectFlagForKey: (t) => e((n) => ({
487
- tabProtectFlag: { ...n.tabProtectFlag, [t]: !0 }
488
- })),
489
- // 개인정보 포함여부에 따른 탭 잠금 해제
490
- clearProtectFlagForKey: (t) => e((n) => {
491
- const s = { ...n.tabProtectFlag };
492
- return delete s[t], { tabProtectFlag: s };
493
- }),
494
- // 탭 파라미터 설정
495
- setTabParams: (t, n) => e((s) => {
496
- const a = s.tabParams[t] || {}, i = { ...n || {} };
497
- return Object.keys(a).length === Object.keys(i).length && Object.keys(i).every((d) => a[d] === i[d]) ? s : {
498
- tabParams: { ...s.tabParams, [t]: i }
499
- };
500
- }),
501
- // 컴포넌트 라벨 맵 설정
502
- setComponentLabelMap: (t, n) => e({ componentLabelMap: t })
503
- })), te = F((e) => ({
504
- requestCount: 0,
505
- loading: !1,
506
- showLoading: () => e((r) => {
507
- const t = r.requestCount + 1;
508
- return { requestCount: t, loading: t > 0 };
509
- }),
510
- hideLoading: () => e((r) => {
511
- const t = Math.max(0, r.requestCount - 1);
512
- return { requestCount: t, loading: t > 0 };
513
- })
514
- })), re = F((e) => ({
515
- requestCount: 0,
516
- loading: !1,
517
- showLoading: () => e((r) => {
518
- const t = r.requestCount + 1;
519
- return { requestCount: t, loading: t > 0 };
520
- }),
521
- hideLoading: () => e((r) => {
522
- const t = Math.max(0, r.requestCount - 1);
523
- return { requestCount: t, loading: t > 0 };
524
- })
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__ */ se(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__ */ se(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__ */ se(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-C2-s1oZe.js").then((n) => n.s),
825
- import("./enc-base64-D7t4BoUA.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
- _r as aO,
1394
- br as aP,
1395
- se as aQ,
1396
- Ir as aR,
1397
- Cr 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
- oe 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-DSwE62oG.js.map