@bwg-ui/core 1.3.1 → 1.3.3

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 (68) hide show
  1. package/dist/chunks/{CMSearchIntfGwP01-BWm9OqAH.js → CMSearchIntfGwP01-Co6lrDf9.js} +9 -9
  2. package/dist/chunks/CMSearchIntfGwP01-Do_ZDjmX.cjs +1 -0
  3. package/dist/chunks/{MenuReport-yYhMOHyq.js → MenuReport-BTtoDFz-.js} +146 -141
  4. package/dist/chunks/MenuReport-Bn5NyNel.cjs +1 -0
  5. package/dist/chunks/{common-components-coAoWxE9.js → common-components-0IMhPxxg.js} +11604 -10999
  6. package/dist/chunks/common-components-Csd3OioX.cjs +1109 -0
  7. package/dist/chunks/core-components-CX6NGtTh.cjs +1 -0
  8. package/dist/chunks/core-components-Ckwf4Rd7.js +1969 -0
  9. package/dist/chunks/layout-components-BMLp8YAy.cjs +38 -0
  10. package/dist/chunks/{layout-components-C1DG2B74.js → layout-components-DphZY34c.js} +954 -737
  11. package/dist/components/common/BwgDetail.d.ts.map +1 -1
  12. package/dist/components/common/BwgGrid.d.ts.map +1 -1
  13. package/dist/components/common/index.cjs +1 -1
  14. package/dist/components/common/index.js +1 -1
  15. package/dist/components/core/BwgEmpSearch.d.ts +28 -0
  16. package/dist/components/core/BwgEmpSearch.d.ts.map +1 -0
  17. package/dist/components/core/index.cjs +1 -1
  18. package/dist/components/core/index.js +22 -1846
  19. package/dist/components/guide/index.cjs +1 -1
  20. package/dist/components/guide/index.js +13 -13
  21. package/dist/components/layout/AppWrapper.d.ts +2 -1
  22. package/dist/components/layout/AppWrapper.d.ts.map +1 -1
  23. package/dist/components/layout/BwgCoreLogin.d.ts +1 -2
  24. package/dist/components/layout/BwgCoreLogin.d.ts.map +1 -1
  25. package/dist/components/layout/BwgPortal01.d.ts.map +1 -1
  26. package/dist/components/layout/BwgSessionNotice.d.ts +15 -0
  27. package/dist/components/layout/BwgSessionNotice.d.ts.map +1 -0
  28. package/dist/components/layout/BwgSsoLogin.d.ts +19 -0
  29. package/dist/components/layout/BwgSsoLogin.d.ts.map +1 -0
  30. package/dist/components/layout/custom/ConfigurableHeader.d.ts.map +1 -1
  31. package/dist/components/layout/custom/ConfigurableMenuTab.d.ts.map +1 -1
  32. package/dist/components/layout/custom/ConfigurableSidebar.d.ts.map +1 -1
  33. package/dist/components/layout/default/LoadingContainer.d.ts.map +1 -1
  34. package/dist/components/layout/index.cjs +1 -1
  35. package/dist/components/layout/index.d.ts +2 -0
  36. package/dist/components/layout/index.d.ts.map +1 -1
  37. package/dist/components/layout/index.js +16 -14
  38. package/dist/components/pages/board/CMAdminBoardM01.d.ts.map +1 -1
  39. package/dist/components/pages/board/CMMyBoardM01.d.ts.map +1 -1
  40. package/dist/components/popup/MenuReport.d.ts.map +1 -1
  41. package/dist/components/popup/SearchOrganizationP01.d.ts +1 -1
  42. package/dist/components/popup/SearchOrganizationP01.d.ts.map +1 -1
  43. package/dist/components/popup/index.cjs +1 -1
  44. package/dist/components/popup/index.js +1 -1
  45. package/dist/index.cjs +1 -1
  46. package/dist/index.js +160 -157
  47. package/dist/stores/index.cjs +2 -2
  48. package/dist/stores/index.d.ts +8 -3
  49. package/dist/stores/index.d.ts.map +1 -1
  50. package/dist/stores/index.js +416 -367
  51. package/dist/stores/loginStore.d.ts +55 -10
  52. package/dist/stores/loginStore.d.ts.map +1 -1
  53. package/dist/stores/menuViewStore.d.ts +6 -2
  54. package/dist/stores/menuViewStore.d.ts.map +1 -1
  55. package/dist/stores/userStore.d.ts +1 -2
  56. package/dist/stores/userStore.d.ts.map +1 -1
  57. package/dist/styles/assets/images/header/icon/ico-bell.svg +3 -3
  58. package/dist/styles/assets/images/header/icon/ico-logout.svg +10 -10
  59. package/dist/styles/assets/images/header/icon/ico-setting.svg +4 -4
  60. package/dist/styles/assets/images/header/icon/ico-sidebar-arrow.svg +3 -3
  61. package/dist/utils/index.cjs +1 -1
  62. package/dist/utils/index.d.ts.map +1 -1
  63. package/dist/utils/index.js +455 -454
  64. package/package.json +1 -1
  65. package/dist/chunks/CMSearchIntfGwP01-CihGc5Q1.cjs +0 -1
  66. package/dist/chunks/MenuReport-khjaUz1Q.cjs +0 -1
  67. package/dist/chunks/common-components-DletnDTf.cjs +0 -1109
  68. package/dist/chunks/layout-components-C6KeWPIu.cjs +0 -35
@@ -1,10 +1,10 @@
1
- import { create as N } from "zustand";
2
- import { callService as b, getServiceCode as F, getUserId as v, getUserInfo as ee, getCookie as te, encryptSha256 as oe, setCookie as $ } from "../utils/index.js";
3
- import { message as w } from "antd";
4
- import { l as se } from "../chunks/layout-components-C1DG2B74.js";
5
- import { useState as X, useCallback as W } from "react";
6
- import { useNavigate as ne } from "react-router-dom";
7
- function re(n, r) {
1
+ import { create as b } from "zustand";
2
+ import { callService as S, getServiceCode as _, getUserId as v, getUserInfo as te, getCookie as oe, encryptSha256 as X, setCookie as x } from "../utils/index.js";
3
+ import { message as B, Modal as se } from "antd";
4
+ import { l as ne } from "../chunks/layout-components-DphZY34c.js";
5
+ import { useState as H, useCallback as U } from "react";
6
+ import re from "axios";
7
+ function ae(n, r) {
8
8
  let e;
9
9
  try {
10
10
  e = n();
@@ -21,12 +21,12 @@ function re(n, r) {
21
21
  removeItem: (o) => e.removeItem(o)
22
22
  };
23
23
  }
24
- const K = (n) => (r) => {
24
+ const G = (n) => (r) => {
25
25
  try {
26
26
  const e = n(r);
27
27
  return e instanceof Promise ? e : {
28
28
  then(s) {
29
- return K(s)(e);
29
+ return G(s)(e);
30
30
  },
31
31
  catch(s) {
32
32
  return this;
@@ -38,18 +38,18 @@ const K = (n) => (r) => {
38
38
  return this;
39
39
  },
40
40
  catch(s) {
41
- return K(s)(e);
41
+ return G(s)(e);
42
42
  }
43
43
  };
44
44
  }
45
- }, ae = (n, r) => (e, s, o) => {
45
+ }, de = (n, r) => (e, s, o) => {
46
46
  let t = {
47
- storage: re(() => localStorage),
48
- partialize: (C) => C,
47
+ storage: ae(() => localStorage),
48
+ partialize: (h) => h,
49
49
  version: 0,
50
- merge: (C, g) => ({
51
- ...g,
52
- ...C
50
+ merge: (h, N) => ({
51
+ ...N,
52
+ ...h
53
53
  }),
54
54
  ...r
55
55
  }, a = !1;
@@ -57,89 +57,89 @@ const K = (n) => (r) => {
57
57
  let i = t.storage;
58
58
  if (!i)
59
59
  return n(
60
- (...C) => {
60
+ (...h) => {
61
61
  console.warn(
62
62
  `[zustand persist middleware] Unable to update item '${t.name}', the given storage is currently unavailable.`
63
- ), e(...C);
63
+ ), e(...h);
64
64
  },
65
65
  s,
66
66
  o
67
67
  );
68
- const l = () => {
69
- const C = t.partialize({ ...s() });
68
+ const p = () => {
69
+ const h = t.partialize({ ...s() });
70
70
  return i.setItem(t.name, {
71
- state: C,
71
+ state: h,
72
72
  version: t.version
73
73
  });
74
- }, h = o.setState;
75
- o.setState = (C, g) => (h(C, g), l());
74
+ }, f = o.setState;
75
+ o.setState = (h, N) => (f(h, N), p());
76
76
  const m = n(
77
- (...C) => (e(...C), l()),
77
+ (...h) => (e(...h), p()),
78
78
  s,
79
79
  o
80
80
  );
81
81
  o.getInitialState = () => m;
82
82
  let u;
83
- const f = () => {
84
- var C, g;
83
+ const C = () => {
84
+ var h, N;
85
85
  if (!i) return;
86
- a = !1, d.forEach((I) => {
87
- var S;
88
- return I((S = s()) != null ? S : m);
86
+ a = !1, d.forEach((y) => {
87
+ var M;
88
+ return y((M = s()) != null ? M : m);
89
89
  });
90
- const k = ((g = t.onRehydrateStorage) == null ? void 0 : g.call(t, (C = s()) != null ? C : m)) || void 0;
91
- return K(i.getItem.bind(i))(t.name).then((I) => {
92
- if (I)
93
- if (typeof I.version == "number" && I.version !== t.version) {
90
+ const g = ((N = t.onRehydrateStorage) == null ? void 0 : N.call(t, (h = s()) != null ? h : m)) || void 0;
91
+ return G(i.getItem.bind(i))(t.name).then((y) => {
92
+ if (y)
93
+ if (typeof y.version == "number" && y.version !== t.version) {
94
94
  if (t.migrate) {
95
- const S = t.migrate(
96
- I.state,
97
- I.version
95
+ const M = t.migrate(
96
+ y.state,
97
+ y.version
98
98
  );
99
- return S instanceof Promise ? S.then((_) => [!0, _]) : [!0, S];
99
+ return M instanceof Promise ? M.then((T) => [!0, T]) : [!0, M];
100
100
  }
101
101
  console.error(
102
102
  "State loaded from storage couldn't be migrated since no migrate function was provided"
103
103
  );
104
104
  } else
105
- return [!1, I.state];
105
+ return [!1, y.state];
106
106
  return [!1, void 0];
107
- }).then((I) => {
108
- var S;
109
- const [_, Q] = I;
107
+ }).then((y) => {
108
+ var M;
109
+ const [T, ee] = y;
110
110
  if (u = t.merge(
111
- Q,
112
- (S = s()) != null ? S : m
113
- ), e(u, !0), _)
114
- return l();
111
+ ee,
112
+ (M = s()) != null ? M : m
113
+ ), e(u, !0), T)
114
+ return p();
115
115
  }).then(() => {
116
- k?.(u, void 0), u = s(), a = !0, c.forEach((I) => I(u));
117
- }).catch((I) => {
118
- k?.(void 0, I);
116
+ g?.(u, void 0), u = s(), a = !0, c.forEach((y) => y(u));
117
+ }).catch((y) => {
118
+ g?.(void 0, y);
119
119
  });
120
120
  };
121
121
  return o.persist = {
122
- setOptions: (C) => {
122
+ setOptions: (h) => {
123
123
  t = {
124
124
  ...t,
125
- ...C
126
- }, C.storage && (i = C.storage);
125
+ ...h
126
+ }, h.storage && (i = h.storage);
127
127
  },
128
128
  clearStorage: () => {
129
129
  i?.removeItem(t.name);
130
130
  },
131
131
  getOptions: () => t,
132
- rehydrate: () => f(),
132
+ rehydrate: () => C(),
133
133
  hasHydrated: () => a,
134
- onHydrate: (C) => (d.add(C), () => {
135
- d.delete(C);
134
+ onHydrate: (h) => (d.add(h), () => {
135
+ d.delete(h);
136
136
  }),
137
- onFinishHydration: (C) => (c.add(C), () => {
138
- c.delete(C);
137
+ onFinishHydration: (h) => (c.add(h), () => {
138
+ c.delete(h);
139
139
  })
140
- }, t.skipHydration || f(), u || m;
141
- }, M = ae, H = N()(
142
- M(
140
+ }, t.skipHydration || C(), u || m;
141
+ }, k = de, w = b()(
142
+ k(
143
143
  (n, r) => ({
144
144
  user: null,
145
145
  hrInfo: null,
@@ -260,17 +260,16 @@ const K = (n) => (r) => {
260
260
  enableProtectWrapper: n.enableProtectWrapper,
261
261
  gridLayouts: n.gridLayouts,
262
262
  // 그리드 레이아웃 정보 저장
263
- theme: n.theme,
263
+ theme: n.theme
264
264
  // 테마 정보 저장
265
- isLoggedIn: n.isLoggedIn
266
265
  // buttonAuthCache는 세션 동안만 유지 (localStorage에 저장 안 함)
267
266
  })
268
267
  // 저장할 상태만 선택
269
268
  }
270
269
  )
271
- ), T = {
270
+ ), A = {
272
271
  CACHE_SIZE_LIMIT: 1e3
273
- }, p = {
272
+ }, l = {
274
273
  codeCache: /* @__PURE__ */ new Map(),
275
274
  nameCache: /* @__PURE__ */ new Map(),
276
275
  optionCache: /* @__PURE__ */ new Map(),
@@ -303,7 +302,7 @@ const K = (n) => (r) => {
303
302
  if (t && t.cmmnCdGrp && t.cmmnCd && t.enblYn === "Y") {
304
303
  const a = t.cmmnCdGrp;
305
304
  r[a] || (r[a] = {});
306
- const c = (o.get(t.cmmnCd) || []).reduce((i, l) => (l.optnCd && l.optnNm && (i[l.optnCd] = l.optnNm), i), {});
305
+ const c = (o.get(t.cmmnCd) || []).reduce((i, p) => (p.optnCd && p.optnNm && (i[p.optnCd] = p.optnNm), i), {});
307
306
  r[a][t.cmmnCd] = {
308
307
  codeValue: t.cmmnCd,
309
308
  codeNm: t.cmmnCdNm,
@@ -320,8 +319,8 @@ const K = (n) => (r) => {
320
319
  });
321
320
  }
322
321
  return console.log("대규모 데이터 변환 완료:", r), r;
323
- }, y = N()(
324
- M(
322
+ }, I = b()(
323
+ k(
325
324
  (n, r) => ({
326
325
  codeData: null,
327
326
  isLoading: !1,
@@ -333,7 +332,7 @@ const K = (n) => (r) => {
333
332
  n({ isLoading: !0, error: null });
334
333
  try {
335
334
  console.log("시스템 공통코드 데이터 가져오기 시작: SCMSIGN00301");
336
- const e = await b(F("SRCH_CODE"), {
335
+ const e = await S(_("SRCH_CODE"), {
337
336
  crprCd: "100"
338
337
  });
339
338
  console.log("시스템 공통코드 응답:", e), console.log("시스템 공통코드목록:", e.code), console.log("시스템 공통코드옵션목록:", e.opt);
@@ -342,10 +341,10 @@ const K = (n) => (r) => {
342
341
  ...s
343
342
  // 시스템 공통코드가 우선 (같은 그룹코드가 있으면 덮어씀)
344
343
  };
345
- p.clearCache();
344
+ l.clearCache();
346
345
  const a = new Set(Object.keys(t));
347
346
  a.forEach((d) => {
348
- p.markGroupLoaded(d);
347
+ l.markGroupLoaded(d);
349
348
  }), n({
350
349
  codeData: t,
351
350
  isLoading: !1,
@@ -365,7 +364,7 @@ const K = (n) => (r) => {
365
364
  n({ isLoading: !0, error: null });
366
365
  try {
367
366
  console.log("업무 공통코드 데이터 가져오기 시작: SCMSIGN00302");
368
- const e = await b("SCMSIGN00302", {
367
+ const e = await S("SCMSIGN00302", {
369
368
  sysCd: __SYS_CD__
370
369
  });
371
370
  console.log("업무 공통코드 응답:", e), console.log("업무 공통코드목록:", e.code), console.log("업무 공통코드옵션목록:", e.opt);
@@ -374,10 +373,10 @@ const K = (n) => (r) => {
374
373
  ...s
375
374
  // 업무 공통코드 추가 (같은 그룹코드가 있으면 덮어씀)
376
375
  };
377
- p.clearCache();
376
+ l.clearCache();
378
377
  const a = new Set(Object.keys(t));
379
378
  a.forEach((d) => {
380
- p.markGroupLoaded(d);
379
+ l.markGroupLoaded(d);
381
380
  }), n({
382
381
  codeData: t,
383
382
  isLoading: !1,
@@ -398,10 +397,10 @@ const K = (n) => (r) => {
398
397
  try {
399
398
  console.log("전체 공통코드 데이터 가져오기 시작 (시스템 + 업무)");
400
399
  const [e, s] = await Promise.all([
401
- b(F("SRCH_CODE"), {
400
+ S(_("SRCH_CODE"), {
402
401
  crprCd: "100"
403
402
  }),
404
- b("SCMSIGN00302", {
403
+ S("SCMSIGN00302", {
405
404
  sysCd: __SYS_CD__
406
405
  })
407
406
  ]);
@@ -411,10 +410,10 @@ const K = (n) => (r) => {
411
410
  ...t
412
411
  // 업무 공통코드가 같은 그룹코드를 덮어쓸 수 있음
413
412
  };
414
- p.clearCache();
413
+ l.clearCache();
415
414
  const d = new Set(Object.keys(a));
416
415
  d.forEach((c) => {
417
- p.markGroupLoaded(c);
416
+ l.markGroupLoaded(c);
418
417
  }), n({
419
418
  codeData: a,
420
419
  isLoading: !1,
@@ -433,13 +432,13 @@ const K = (n) => (r) => {
433
432
  const { codeData: s, loadedGroups: o } = r();
434
433
  if (!s || o.has(e)) return;
435
434
  const t = new Set(o).add(e);
436
- n({ loadedGroups: t }), p.markGroupLoaded(e);
435
+ n({ loadedGroups: t }), l.markGroupLoaded(e);
437
436
  },
438
437
  setData: (e) => {
439
- p.clearCache();
438
+ l.clearCache();
440
439
  const s = new Set(Object.keys(e));
441
440
  s.forEach((o) => {
442
- p.markGroupLoaded(o);
441
+ l.markGroupLoaded(o);
443
442
  }), n({
444
443
  codeData: e,
445
444
  lastUpdated: /* @__PURE__ */ new Date(),
@@ -447,7 +446,7 @@ const K = (n) => (r) => {
447
446
  });
448
447
  },
449
448
  clearData: () => {
450
- p.clearCache(), n({
449
+ l.clearCache(), n({
451
450
  codeData: null,
452
451
  isLoading: !1,
453
452
  error: null,
@@ -466,25 +465,25 @@ const K = (n) => (r) => {
466
465
  })
467
466
  }
468
467
  )
469
- ), G = N()(
470
- M(
468
+ ), F = b()(
469
+ k(
471
470
  (n, r) => ({
472
471
  // 공통 데이터 스토어에서 상태 가져오기
473
472
  get codeData() {
474
- return y.getState().codeData;
473
+ return I.getState().codeData;
475
474
  },
476
475
  get isLoading() {
477
- return y.getState().isLoading;
476
+ return I.getState().isLoading;
478
477
  },
479
478
  get error() {
480
- return y.getState().error;
479
+ return I.getState().error;
481
480
  },
482
481
  get lastUpdated() {
483
- return y.getState().lastUpdated;
482
+ return I.getState().lastUpdated;
484
483
  },
485
484
  // 공통코드 가져오기 (중앙 스토어 사용)
486
485
  fetchCommonCodes: async () => {
487
- await y.getState().fetchData();
486
+ await I.getState().fetchData();
488
487
  },
489
488
  // 1. 통합된 코드 목록 조회 (그룹코드 필수, 옵션으로 필터링)
490
489
  getCodeList: (e, s) => {
@@ -494,108 +493,108 @@ const K = (n) => (r) => {
494
493
  sortByOrder: a = !1,
495
494
  excludeParentCode: d = !1
496
495
  } = s || {}, c = `simpleCodeList_${e}_${o}_${t}_${a}_${d}`;
497
- if (p.optionCache.has(c)) {
498
- const f = p.cacheHits.get(c) || 0;
499
- return p.cacheHits.set(c, f + 1), p.optionCache.get(c);
496
+ if (l.optionCache.has(c)) {
497
+ const C = l.cacheHits.get(c) || 0;
498
+ return l.cacheHits.set(c, C + 1), l.optionCache.get(c);
500
499
  }
501
- const i = y.getState().codeData;
500
+ const i = I.getState().codeData;
502
501
  if (!i) return [];
503
- if (!p.isGroupLoaded(e) && !i[e])
502
+ if (!l.isGroupLoaded(e) && !i[e])
504
503
  return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`), [];
505
- const l = [], h = i[e];
506
- h && Object.values(h).forEach((f) => {
507
- if (!(o && !f.enabled) && !(t && f.systemCodeYn !== "Y"))
504
+ const p = [], f = i[e];
505
+ f && Object.values(f).forEach((C) => {
506
+ if (!(o && !C.enabled) && !(t && C.systemCodeYn !== "Y"))
508
507
  if (d) {
509
- const C = e.length, g = f.codeValue.substring(C);
510
- g.length > 0 && l.push({
511
- ...f,
512
- codeValue: g
508
+ const h = e.length, N = C.codeValue.substring(h);
509
+ N.length > 0 && p.push({
510
+ ...C,
511
+ codeValue: N
513
512
  // 자식코드만 사용
514
513
  });
515
514
  } else
516
- l.push(f);
515
+ p.push(C);
517
516
  });
518
517
  let m;
519
- a ? m = l.sort((f, C) => f.sortOrder !== C.sortOrder ? f.sortOrder - C.sortOrder : f.codeValue.localeCompare(C.codeValue)) : m = l.sort(
520
- (f, C) => f.codeValue.localeCompare(C.codeValue)
518
+ a ? m = p.sort((C, h) => C.sortOrder !== h.sortOrder ? C.sortOrder - h.sortOrder : C.codeValue.localeCompare(h.codeValue)) : m = p.sort(
519
+ (C, h) => C.codeValue.localeCompare(h.codeValue)
521
520
  );
522
- const u = m.map((f) => ({
523
- label: f.codeNm,
524
- value: f.codeValue,
525
- tagColor: f.labelColor
521
+ const u = m.map((C) => ({
522
+ label: C.codeNm,
523
+ value: C.codeValue,
524
+ tagColor: C.labelColor
526
525
  }));
527
- return p.optionCache.size >= T.CACHE_SIZE_LIMIT && p.cleanupCache(), p.optionCache.set(c, u), p.cacheHits.set(c, 1), u;
526
+ return l.optionCache.size >= A.CACHE_SIZE_LIMIT && l.cleanupCache(), l.optionCache.set(c, u), l.cacheHits.set(c, 1), u;
528
527
  },
529
528
  // 2. 코드를 던졌을 때 코드명을 리턴 (대규모 최적화)
530
529
  getCodeName: (e) => {
531
- if (p.nameCache.has(e)) {
532
- const o = p.cacheHits.get(`name_${e}`) || 0;
533
- return p.cacheHits.set(`name_${e}`, o + 1), p.nameCache.get(e);
530
+ if (l.nameCache.has(e)) {
531
+ const o = l.cacheHits.get(`name_${e}`) || 0;
532
+ return l.cacheHits.set(`name_${e}`, o + 1), l.nameCache.get(e);
534
533
  }
535
- const s = y.getState().codeData;
534
+ const s = I.getState().codeData;
536
535
  if (!s) return null;
537
536
  for (const o of Object.values(s))
538
537
  for (const t of Object.values(o))
539
538
  if (t.codeValue === e)
540
- return p.nameCache.set(e, t.codeNm), p.cacheHits.set(`name_${e}`, 1), t.codeNm;
539
+ return l.nameCache.set(e, t.codeNm), l.cacheHits.set(`name_${e}`, 1), t.codeNm;
541
540
  return null;
542
541
  },
543
542
  // 3. 코드를 던졌을 때 라벨 컬러를 리턴 (대규모 최적화)
544
543
  getCodeColor: (e) => {
545
- if (p.colorCache.has(e)) {
546
- const o = p.cacheHits.get(`color_${e}`) || 0;
547
- return p.cacheHits.set(`color_${e}`, o + 1), p.colorCache.get(e);
544
+ if (l.colorCache.has(e)) {
545
+ const o = l.cacheHits.get(`color_${e}`) || 0;
546
+ return l.cacheHits.set(`color_${e}`, o + 1), l.colorCache.get(e);
548
547
  }
549
- const s = y.getState().codeData;
548
+ const s = I.getState().codeData;
550
549
  if (!s) return null;
551
550
  for (const o of Object.values(s))
552
551
  for (const t of Object.values(o))
553
552
  if (t.codeValue === e)
554
- return p.colorCache.set(
553
+ return l.colorCache.set(
555
554
  e,
556
555
  t.labelColor || ""
557
- ), p.cacheHits.set(`color_${e}`, 1), t.labelColor;
556
+ ), l.cacheHits.set(`color_${e}`, 1), t.labelColor;
558
557
  return null;
559
558
  },
560
559
  // 4. 그리드 lookup용 데이터 반환 (labels, values 배열, lookupDisplay 포함)
561
560
  getGridLookup: (e) => {
562
561
  const s = `gridLookup_${e}`;
563
- if (p.optionCache.has(s)) {
564
- const i = p.cacheHits.get(s) || 0;
565
- return p.cacheHits.set(s, i + 1), p.optionCache.get(s);
562
+ if (l.optionCache.has(s)) {
563
+ const i = l.cacheHits.get(s) || 0;
564
+ return l.cacheHits.set(s, i + 1), l.optionCache.get(s);
566
565
  }
567
- const o = y.getState().codeData;
566
+ const o = I.getState().codeData;
568
567
  if (!o) return { labels: [], values: [], lookupDisplay: !0 };
569
568
  const t = o[e];
570
569
  if (!t) return { labels: [], values: [], lookupDisplay: !0 };
571
570
  const a = [], d = [];
572
- Object.values(t).filter((i) => i.enabled).sort((i, l) => i.sortOrder - l.sortOrder).forEach((i) => {
571
+ Object.values(t).filter((i) => i.enabled).sort((i, p) => i.sortOrder - p.sortOrder).forEach((i) => {
573
572
  a.push(i.codeNm), d.push(i.codeValue);
574
573
  });
575
574
  const c = { labels: a, values: d, lookupDisplay: !0 };
576
- return p.optionCache.set(s, c), p.cacheHits.set(s, 1), c;
575
+ return l.optionCache.set(s, c), l.cacheHits.set(s, 1), c;
577
576
  },
578
577
  // 3. 옵션값으로 코드를 조회하는 새로운 메서드
579
578
  getCodeByOption: (e, s, o) => {
580
579
  const t = `codeByOption_${e}_${s}_${o}`;
581
- if (p.codeCache.has(t)) {
582
- const l = p.cacheHits.get(t) || 0;
583
- return p.cacheHits.set(t, l + 1), p.codeCache.get(t);
580
+ if (l.codeCache.has(t)) {
581
+ const p = l.cacheHits.get(t) || 0;
582
+ return l.cacheHits.set(t, p + 1), l.codeCache.get(t);
584
583
  }
585
- const a = y.getState().codeData;
584
+ const a = I.getState().codeData;
586
585
  if (!a) return [];
587
586
  const d = [], c = a[e];
588
- c && Object.values(c).forEach((l) => {
589
- l.enabled && l.options && l.options[s] === o && d.push({
590
- ...l,
591
- codeNm: l.options[s] || l.codeNm
587
+ c && Object.values(c).forEach((p) => {
588
+ p.enabled && p.options && p.options[s] === o && d.push({
589
+ ...p,
590
+ codeNm: p.options[s] || p.codeNm
592
591
  // 옵션값을 코드명으로 사용
593
592
  });
594
593
  });
595
594
  const i = d.sort(
596
- (l, h) => l.codeValue.localeCompare(h.codeValue)
595
+ (p, f) => p.codeValue.localeCompare(f.codeValue)
597
596
  );
598
- return p.codeCache.size >= T.CACHE_SIZE_LIMIT && p.cleanupCache(), p.codeCache.set(t, i), p.cacheHits.set(t, 1), i;
597
+ return l.codeCache.size >= A.CACHE_SIZE_LIMIT && l.cleanupCache(), l.codeCache.set(t, i), l.cacheHits.set(t, 1), i;
599
598
  },
600
599
  // 6. 옵션코드별로 코드 목록 조회 (SimpleCodeItem 형태로 반환)
601
600
  getCodeListByOption: (e, s, o) => {
@@ -604,19 +603,19 @@ const K = (n) => (r) => {
604
603
  systemCodeOnly: a = !1,
605
604
  sortByOrder: d = !1
606
605
  } = o || {}, c = `codeListByOption_${e}_${s}_${t}_${a}_${d}`;
607
- if (p.codeCache.has(c)) {
608
- const u = p.cacheHits.get(c) || 0;
609
- return p.cacheHits.set(c, u + 1), p.codeCache.get(
606
+ if (l.codeCache.has(c)) {
607
+ const u = l.cacheHits.get(c) || 0;
608
+ return l.cacheHits.set(c, u + 1), l.codeCache.get(
610
609
  c
611
610
  );
612
611
  }
613
- const i = y.getState().codeData;
612
+ const i = I.getState().codeData;
614
613
  if (!i) return [];
615
- if (!p.isGroupLoaded(e) && !i[e])
614
+ if (!l.isGroupLoaded(e) && !i[e])
616
615
  return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`), [];
617
- const l = [], h = i[e];
618
- h && Object.values(h).forEach((u) => {
619
- t && !u.enabled || a && u.systemCodeYn !== "Y" || u.options && u.options[s] && l.push({
616
+ const p = [], f = i[e];
617
+ f && Object.values(f).forEach((u) => {
618
+ t && !u.enabled || a && u.systemCodeYn !== "Y" || u.options && u.options[s] && p.push({
620
619
  label: u.options[s],
621
620
  // optnNm 값
622
621
  value: u.commonCode,
@@ -626,28 +625,28 @@ const K = (n) => (r) => {
626
625
  });
627
626
  });
628
627
  let m;
629
- return d ? m = l.sort((u, f) => u.value.localeCompare(f.value)) : m = l.sort(
630
- (u, f) => u.value.localeCompare(f.value)
631
- ), p.codeCache.size >= T.CACHE_SIZE_LIMIT && p.cleanupCache(), p.codeCache.set(c, m), p.cacheHits.set(c, 1), m;
628
+ return d ? m = p.sort((u, C) => u.value.localeCompare(C.value)) : m = p.sort(
629
+ (u, C) => u.value.localeCompare(C.value)
630
+ ), l.codeCache.size >= A.CACHE_SIZE_LIMIT && l.cleanupCache(), l.codeCache.set(c, m), l.cacheHits.set(c, 1), m;
632
631
  },
633
632
  // 7. 그룹코드 목록 조회
634
633
  getAvailableGroupCodes: () => {
635
634
  const e = "available_group_codes";
636
- if (p.nameCache.has(e)) {
637
- const t = p.cacheHits.get(e) || 0;
638
- return p.cacheHits.set(e, t + 1), JSON.parse(p.nameCache.get(e));
635
+ if (l.nameCache.has(e)) {
636
+ const t = l.cacheHits.get(e) || 0;
637
+ return l.cacheHits.set(e, t + 1), JSON.parse(l.nameCache.get(e));
639
638
  }
640
- const s = y.getState().codeData;
639
+ const s = I.getState().codeData;
641
640
  if (!s) return [];
642
641
  const o = Object.keys(s).sort();
643
- return p.nameCache.set(
642
+ return l.nameCache.set(
644
643
  e,
645
644
  JSON.stringify(o)
646
- ), p.cacheHits.set(e, 1), o;
645
+ ), l.cacheHits.set(e, 1), o;
647
646
  },
648
647
  // 공통코드 초기화
649
648
  clearCodes: () => {
650
- y.getState().clearData();
649
+ I.getState().clearData();
651
650
  }
652
651
  }),
653
652
  {
@@ -657,55 +656,55 @@ const K = (n) => (r) => {
657
656
  })
658
657
  }
659
658
  )
660
- ), ve = N()(
661
- M(
659
+ ), Le = b()(
660
+ k(
662
661
  (n, r) => ({
663
662
  // 공통 데이터 스토어에서 상태 가져오기
664
663
  get codeData() {
665
- return y.getState().codeData;
664
+ return I.getState().codeData;
666
665
  },
667
666
  get isLoading() {
668
- return y.getState().isLoading;
667
+ return I.getState().isLoading;
669
668
  },
670
669
  get error() {
671
- return y.getState().error;
670
+ return I.getState().error;
672
671
  },
673
672
  get lastUpdated() {
674
- return y.getState().lastUpdated;
673
+ return I.getState().lastUpdated;
675
674
  },
676
675
  // 공통코드 가져오기 (중앙 스토어 사용)
677
676
  fetchCommonCodes: async () => {
678
- await y.getState().fetchData();
677
+ await I.getState().fetchData();
679
678
  },
680
679
  // 그룹코드와 옵션코드를 던졌을 때 상세코드의 옵션값을 리턴 (대규모 최적화)
681
680
  getOptionValue: (e, s) => {
682
681
  const o = `option_${e}_${s}`;
683
- if (p.optionCache.has(o)) {
684
- const d = p.cacheHits.get(o) || 0;
685
- return p.cacheHits.set(o, d + 1), p.optionCache.get(o);
682
+ if (l.optionCache.has(o)) {
683
+ const d = l.cacheHits.get(o) || 0;
684
+ return l.cacheHits.set(o, d + 1), l.optionCache.get(o);
686
685
  }
687
- const t = y.getState().codeData;
686
+ const t = I.getState().codeData;
688
687
  if (!t) return null;
689
688
  const a = t[e];
690
689
  if (a && a[s]) {
691
690
  const d = a[s].options;
692
- return p.optionCache.set(o, d), p.cacheHits.set(o, 1), d;
691
+ return l.optionCache.set(o, d), l.cacheHits.set(o, 1), d;
693
692
  }
694
693
  return null;
695
694
  },
696
695
  // 특정 옵션 키의 값 가져오기 (대규모 최적화)
697
696
  getOptionByKey: (e, s, o) => {
698
697
  const t = `option_${e}_${s}_${o}`;
699
- if (p.optionCache.has(t)) {
700
- const c = p.cacheHits.get(t) || 0;
701
- return p.cacheHits.set(t, c + 1), p.optionCache.get(t);
698
+ if (l.optionCache.has(t)) {
699
+ const c = l.cacheHits.get(t) || 0;
700
+ return l.cacheHits.set(t, c + 1), l.optionCache.get(t);
702
701
  }
703
702
  const a = r().getOptionValue(e, s), d = a ? a[o] : null;
704
- return p.optionCache.set(t, d), p.cacheHits.set(t, 1), d;
703
+ return l.optionCache.set(t, d), l.cacheHits.set(t, 1), d;
705
704
  },
706
705
  // 공통코드 초기화
707
706
  clearCodes: () => {
708
- y.getState().clearData();
707
+ I.getState().clearData();
709
708
  }
710
709
  }),
711
710
  {
@@ -715,51 +714,51 @@ const K = (n) => (r) => {
715
714
  })
716
715
  }
717
716
  )
718
- ), Le = N()(
719
- M(
717
+ ), Pe = b()(
718
+ k(
720
719
  (n, r) => ({
721
720
  // 공통 데이터 스토어에서 상태 가져오기
722
721
  get codeData() {
723
- return y.getState().codeData;
722
+ return I.getState().codeData;
724
723
  },
725
724
  get isLoading() {
726
- return y.getState().isLoading;
725
+ return I.getState().isLoading;
727
726
  },
728
727
  get error() {
729
- return y.getState().error;
728
+ return I.getState().error;
730
729
  },
731
730
  get lastUpdated() {
732
- return y.getState().lastUpdated;
731
+ return I.getState().lastUpdated;
733
732
  },
734
733
  // 공통코드 가져오기 (중앙 스토어 사용)
735
734
  fetchCommonCodes: async () => {
736
- await y.getState().fetchData();
735
+ await I.getState().fetchData();
737
736
  },
738
737
  // 코드를 던졌을 때 컬러코드를 리턴 (대규모 최적화)
739
738
  getColorCode: (e) => {
740
- if (p.colorCache.has(e)) {
741
- const o = p.cacheHits.get(`color_${e}`) || 0;
742
- return p.cacheHits.set(`color_${e}`, o + 1), p.colorCache.get(e);
739
+ if (l.colorCache.has(e)) {
740
+ const o = l.cacheHits.get(`color_${e}`) || 0;
741
+ return l.cacheHits.set(`color_${e}`, o + 1), l.colorCache.get(e);
743
742
  }
744
- const s = y.getState().codeData;
743
+ const s = I.getState().codeData;
745
744
  if (!s) return null;
746
745
  for (const o of Object.values(s))
747
746
  for (const t of Object.values(o))
748
747
  if (t.codeValue === e)
749
- return p.colorCache.set(
748
+ return l.colorCache.set(
750
749
  e,
751
750
  t.labelColor || ""
752
- ), p.cacheHits.set(`color_${e}`, 1), t.labelColor;
751
+ ), l.cacheHits.set(`color_${e}`, 1), t.labelColor;
753
752
  return null;
754
753
  },
755
754
  // 코드/컬러 매핑 배열 가져오기 (대규모 최적화)
756
755
  getColorMapping: () => {
757
756
  const e = "color_mapping";
758
- if (p.optionCache.has(e)) {
759
- const t = p.cacheHits.get(e) || 0;
760
- return p.cacheHits.set(e, t + 1), p.optionCache.get(e);
757
+ if (l.optionCache.has(e)) {
758
+ const t = l.cacheHits.get(e) || 0;
759
+ return l.cacheHits.set(e, t + 1), l.optionCache.get(e);
761
760
  }
762
- const s = y.getState().codeData;
761
+ const s = I.getState().codeData;
763
762
  if (!s) return [];
764
763
  const o = [];
765
764
  return Object.values(s).forEach((t) => {
@@ -769,11 +768,11 @@ const K = (n) => (r) => {
769
768
  color: a.labelColor
770
769
  });
771
770
  });
772
- }), p.optionCache.set(e, o), p.cacheHits.set(e, 1), o;
771
+ }), l.optionCache.set(e, o), l.cacheHits.set(e, 1), o;
773
772
  },
774
773
  // 공통코드 초기화
775
774
  clearCodes: () => {
776
- y.getState().clearData();
775
+ I.getState().clearData();
777
776
  }
778
777
  }),
779
778
  {
@@ -783,7 +782,7 @@ const K = (n) => (r) => {
783
782
  })
784
783
  }
785
784
  )
786
- ), de = (n, r) => ({
785
+ ), ce = (n, r) => ({
787
786
  nodes: {},
788
787
  rootIds: [],
789
788
  loadedFor: void 0,
@@ -795,11 +794,11 @@ const K = (n) => (r) => {
795
794
  (s) => s.type === "M" && s.menuId === e
796
795
  ),
797
796
  getPrntBkmkIdByMenuId: (e) => {
798
- const s = D(r().nodes, e);
797
+ const s = O(r().nodes, e);
799
798
  return s ? r().nodes[s]?.prntBkmkId ?? "-" : "-";
800
799
  },
801
800
  getNodeByMenuId: (e) => {
802
- const s = D(r().nodes, e);
801
+ const s = O(r().nodes, e);
803
802
  if (!s) return null;
804
803
  const o = r().nodes[s];
805
804
  return o?.type === "M" ? o : null;
@@ -808,11 +807,11 @@ const K = (n) => (r) => {
808
807
  const { nodes: s, rootIds: o } = r(), t = (d) => e ? d.toLowerCase().includes(e.toLowerCase()) : !0, a = (d) => {
809
808
  const c = s[d];
810
809
  if (!c || c.type !== "F") return null;
811
- const i = c, l = (i.children || []).map((m) => s[m]).filter((m) => !!m && m.type === "F").map((m) => a(m.bkmkId)).filter(Boolean);
812
- return t(i.bkmkNm) || l.length > 0 ? {
810
+ const i = c, p = (i.children || []).map((m) => s[m]).filter((m) => !!m && m.type === "F").map((m) => a(m.bkmkId)).filter(Boolean);
811
+ return t(i.bkmkNm) || p.length > 0 ? {
813
812
  key: i.bkmkId,
814
813
  title: `📁 ${i.bkmkNm}`,
815
- children: l.length ? l : void 0
814
+ children: p.length ? p : void 0
816
815
  } : null;
817
816
  };
818
817
  return o.map((d) => a(d)).filter(Boolean);
@@ -824,7 +823,7 @@ const K = (n) => (r) => {
824
823
  if (!(!s && o.loadedFor === e && Object.keys(o.nodes).length)) {
825
824
  n({ loading: !0, error: void 0 });
826
825
  try {
827
- const t = await b("SCMBKMK00101", { userId: e }), a = Array.isArray(t?.sub) ? t.sub : [], d = ce(a), c = P(
826
+ const t = await S("SCMBKMK00101", { userId: e }), a = Array.isArray(t?.sub) ? t.sub : [], d = pe(a), c = P(
828
827
  d.nodes,
829
828
  d.rootIds
830
829
  );
@@ -855,9 +854,9 @@ const K = (n) => (r) => {
855
854
  },
856
855
  // ====== 공통: 생성 ======
857
856
  addNode: async (e) => {
858
- const s = A(r()), o = pe();
857
+ const s = E(r()), o = le();
859
858
  n((t) => {
860
- const a = e.sortOrdr ?? U(t, e.prntBkmkId), d = {
859
+ const a = e.sortOrdr ?? z(t, e.prntBkmkId), d = {
861
860
  ...t,
862
861
  nodes: {
863
862
  ...t.nodes,
@@ -884,11 +883,11 @@ const K = (n) => (r) => {
884
883
  rootIds: t.rootIds.slice(),
885
884
  treeNodes: t.treeNodes
886
885
  };
887
- return le(d, o, e.prntBkmkId), d.treeNodes = P(d.nodes, d.rootIds), d;
886
+ return ie(d, o, e.prntBkmkId), d.treeNodes = P(d.nodes, d.rootIds), d;
888
887
  });
889
888
  try {
890
889
  let t = o;
891
- const a = U(r(), e.prntBkmkId), d = await b("SCMBKMK00102", {
890
+ const a = z(r(), e.prntBkmkId), d = await S("SCMBKMK00102", {
892
891
  iudFlag: "I",
893
892
  type: e.type,
894
893
  sysCd: e.sysCd,
@@ -902,7 +901,7 @@ const K = (n) => (r) => {
902
901
  chngId: v()
903
902
  });
904
903
  return t = String(d?.bkmkId ?? d?.itemId ?? o), n((c) => {
905
- const i = ue(c, o, t);
904
+ const i = me(c, o, t);
906
905
  return {
907
906
  ...i,
908
907
  treeNodes: P(i.nodes, i.rootIds)
@@ -921,19 +920,19 @@ const K = (n) => (r) => {
921
920
  if (!u || u.type !== "F")
922
921
  throw new Error("부모는 폴더만 가능합니다.");
923
922
  }
924
- const l = i.prntBkmkId ?? "-", h = l === "-" ? c : d[l].children ||= [];
923
+ const p = i.prntBkmkId ?? "-", f = p === "-" ? c : d[p].children ||= [];
925
924
  {
926
- const u = h.indexOf(e);
927
- u >= 0 && h.splice(u, 1);
925
+ const u = f.indexOf(e);
926
+ u >= 0 && f.splice(u, 1);
928
927
  }
929
928
  const m = s === "-" ? c : d[s].children ||= [];
930
929
  m.splice(
931
930
  Math.max(0, Math.min(o, m.length)),
932
931
  0,
933
932
  e
934
- ), i.prntBkmkId = s, n({ nodes: d, rootIds: c }), z(d, c, s), z(d, c, l);
933
+ ), i.prntBkmkId = s, n({ nodes: d, rootIds: c }), Y(d, c, s), Y(d, c, p);
935
934
  try {
936
- await b("SCMBKMK00104", {
935
+ await S("SCMBKMK00104", {
937
936
  // 백엔드 명칭 호환
938
937
  bkmkId: e,
939
938
  prntBkmkId: s,
@@ -946,7 +945,7 @@ const K = (n) => (r) => {
946
945
  },
947
946
  // ====== 공통: 삭제 ======
948
947
  removeNode: async (e) => {
949
- const s = A(r());
948
+ const s = E(r());
950
949
  n((o) => {
951
950
  if (!o.nodes[e]) return o;
952
951
  const t = {
@@ -955,26 +954,26 @@ const K = (n) => (r) => {
955
954
  rootIds: o.rootIds.slice(),
956
955
  treeNodes: o.treeNodes
957
956
  };
958
- return J(t, e), t.treeNodes = P(t.nodes, t.rootIds), t;
957
+ return Z(t, e), t.treeNodes = P(t.nodes, t.rootIds), t;
959
958
  });
960
959
  try {
961
- await b("SCMBKMK00103", { bkmkId: e });
960
+ await S("SCMBKMK00103", { bkmkId: e });
962
961
  } catch (o) {
963
962
  throw n(s), o;
964
963
  }
965
964
  },
966
965
  // ====== 공통: 수정 ======
967
966
  editNode: async ({ bkmkId: e, userId: s, bkmkNm: o, prntBkmkId: t, sortOrdr: a }) => {
968
- const d = A(r());
967
+ const d = E(r());
969
968
  n((c) => {
970
- const i = { ...c, nodes: { ...c.nodes } }, l = i.nodes[e];
971
- return l?.type === "F" && typeof o == "string" && (i.nodes[e] = {
972
- ...l,
969
+ const i = { ...c, nodes: { ...c.nodes } }, p = i.nodes[e];
970
+ return p?.type === "F" && typeof o == "string" && (i.nodes[e] = {
971
+ ...p,
973
972
  bkmkNm: o
974
973
  }), i;
975
974
  });
976
975
  try {
977
- await b("SCMBKMK00102", {
976
+ await S("SCMBKMK00102", {
978
977
  iudFlag: "U",
979
978
  userId: s,
980
979
  bkmkId: e,
@@ -995,7 +994,7 @@ const K = (n) => (r) => {
995
994
  sysCd: o,
996
995
  userId: t
997
996
  }),
998
- addMenuToFolder: async (e, s) => D(r().nodes, s.menuId) ? "이미 북마크에 저장된 메뉴입니다." : await r().addNode({
997
+ addMenuToFolder: async (e, s) => O(r().nodes, s.menuId) ? "이미 북마크에 저장된 메뉴입니다." : await r().addNode({
999
998
  type: "M",
1000
999
  prntBkmkId: e,
1001
1000
  sysCd: "KH",
@@ -1012,8 +1011,8 @@ const K = (n) => (r) => {
1012
1011
  await r().removeNode(t.bkmkId);
1013
1012
  return;
1014
1013
  }
1015
- let a = x(o);
1016
- a || (await r().loadFavorites(e, !0), a = x(r())), a && await r().addNode({
1014
+ let a = j(o);
1015
+ a || (await r().loadFavorites(e, !0), a = j(r())), a && await r().addNode({
1017
1016
  type: "M",
1018
1017
  prntBkmkId: a,
1019
1018
  sysCd: "KH",
@@ -1023,7 +1022,7 @@ const K = (n) => (r) => {
1023
1022
  });
1024
1023
  },
1025
1024
  removeMenuByMenuId: async (e) => {
1026
- const s = r(), o = D(s.nodes, e);
1025
+ const s = r(), o = O(s.nodes, e);
1027
1026
  o && await r().removeNode(o);
1028
1027
  },
1029
1028
  removeMenu: async (e) => {
@@ -1047,34 +1046,34 @@ const K = (n) => (r) => {
1047
1046
  const i = e[c];
1048
1047
  if (!i || t && i.type !== "F") return null;
1049
1048
  if (i.type === "F") {
1050
- const l = i, h = (l.children || []).map((u) => d(u)).filter(Boolean);
1051
- return a(l.bkmkNm) || h.length > 0 ? {
1052
- key: l.bkmkId,
1049
+ const p = i, f = (p.children || []).map((u) => d(u)).filter(Boolean);
1050
+ return a(p.bkmkNm) || f.length > 0 ? {
1051
+ key: p.bkmkId,
1053
1052
  type: "F",
1054
- title: `📁 ${l.bkmkNm}`,
1055
- bkmkNm: l.bkmkNm,
1056
- prntBkmkId: l.prntBkmkId,
1057
- sortOrdr: l.sortOrdr,
1058
- fullPath: l.fullPath,
1059
- children: h.length ? h : void 0
1053
+ title: `📁 ${p.bkmkNm}`,
1054
+ bkmkNm: p.bkmkNm,
1055
+ prntBkmkId: p.prntBkmkId,
1056
+ sortOrdr: p.sortOrdr,
1057
+ fullPath: p.fullPath,
1058
+ children: f.length ? f : void 0
1060
1059
  } : null;
1061
1060
  } else {
1062
- const l = i, h = l.menuNm ? `${l.menuNm} (${l.menuId})` : l.menuId;
1063
- return a(h) ? {
1064
- key: l.bkmkId,
1061
+ const p = i, f = p.menuNm ? `${p.menuNm} (${p.menuId})` : p.menuId;
1062
+ return a(f) ? {
1063
+ key: p.bkmkId,
1065
1064
  type: "M",
1066
- title: `📄 ${h}`,
1067
- prntBkmkId: l.prntBkmkId,
1068
- sortOrdr: l.sortOrdr,
1069
- fullPath: l.fullPath,
1065
+ title: `📄 ${f}`,
1066
+ prntBkmkId: p.prntBkmkId,
1067
+ sortOrdr: p.sortOrdr,
1068
+ fullPath: p.fullPath,
1070
1069
  isLeaf: !0
1071
1070
  } : null;
1072
1071
  }
1073
1072
  };
1074
1073
  return s.map(d).filter(Boolean);
1075
1074
  }
1076
- }), q = N(de);
1077
- function ce(n) {
1075
+ }), J = b(ce);
1076
+ function pe(n) {
1078
1077
  const r = {}, e = [], s = (o) => {
1079
1078
  o.forEach((t) => {
1080
1079
  const a = {
@@ -1113,22 +1112,22 @@ function ce(n) {
1113
1112
  );
1114
1113
  }), { nodes: r, rootIds: e };
1115
1114
  }
1116
- function A(n) {
1115
+ function E(n) {
1117
1116
  return {
1118
1117
  ...n,
1119
1118
  nodes: JSON.parse(JSON.stringify(n.nodes)),
1120
1119
  rootIds: n.rootIds.slice()
1121
1120
  };
1122
1121
  }
1123
- function pe() {
1122
+ function le() {
1124
1123
  return `tmp_${Math.random().toString(36).slice(2, 10)}`;
1125
1124
  }
1126
- function U(n, r) {
1125
+ function z(n, r) {
1127
1126
  if (!r || r === "-") return n.rootIds.length;
1128
1127
  const e = n.nodes[r];
1129
1128
  return e ? e.children.length : 0;
1130
1129
  }
1131
- function le(n, r, e) {
1130
+ function ie(n, r, e) {
1132
1131
  const s = n.nodes[r];
1133
1132
  if (s)
1134
1133
  if (e && e !== "-") {
@@ -1138,7 +1137,7 @@ function le(n, r, e) {
1138
1137
  } else
1139
1138
  s.prntBkmkId = "-", n.rootIds = [...n.rootIds, r];
1140
1139
  }
1141
- function ie(n, r) {
1140
+ function ue(n, r) {
1142
1141
  const e = n.nodes[r];
1143
1142
  if (!e) return;
1144
1143
  const s = e.prntBkmkId;
@@ -1148,14 +1147,14 @@ function ie(n, r) {
1148
1147
  } else
1149
1148
  n.rootIds = n.rootIds.filter((o) => o !== r);
1150
1149
  }
1151
- function J(n, r) {
1150
+ function Z(n, r) {
1152
1151
  const e = n.nodes[r];
1153
1152
  if (!e) return;
1154
- e.type === "F" && e.children.slice().forEach((a) => J(n, a)), ie(n, r);
1153
+ e.type === "F" && e.children.slice().forEach((a) => Z(n, a)), ue(n, r);
1155
1154
  const { [r]: s, ...o } = n.nodes;
1156
1155
  n.nodes = o;
1157
1156
  }
1158
- function ue(n, r, e) {
1157
+ function me(n, r, e) {
1159
1158
  if (r === e) return n;
1160
1159
  const s = n.nodes[r];
1161
1160
  if (!s) return n;
@@ -1174,14 +1173,14 @@ function ue(n, r, e) {
1174
1173
  a = n.rootIds.map((d) => d === r ? e : d);
1175
1174
  return { ...n, nodes: t, rootIds: a };
1176
1175
  }
1177
- function x(n) {
1176
+ function j(n) {
1178
1177
  return n.rootIds.find((r) => n.nodes[r]?.type === "F") ?? null;
1179
1178
  }
1180
1179
  function P(n, r) {
1181
1180
  const e = {};
1182
1181
  Object.values(n).forEach((c) => {
1183
- const i = c.bkmkId, l = c.prntBkmkId;
1184
- !i || !l || l === "-" || l === i || (e[l] ??= []).push(i);
1182
+ const i = c.bkmkId, p = c.prntBkmkId;
1183
+ !i || !p || p === "-" || p === i || (e[p] ??= []).push(i);
1185
1184
  });
1186
1185
  const s = /* @__PURE__ */ new Set(), o = (c) => {
1187
1186
  if (s.has(c)) return null;
@@ -1190,23 +1189,23 @@ function P(n, r) {
1190
1189
  s.add(c);
1191
1190
  try {
1192
1191
  if (i.type === "F") {
1193
- const h = i, m = e[c] ?? [];
1192
+ const f = i, m = e[c] ?? [];
1194
1193
  return {
1195
1194
  type: "F",
1196
1195
  bkmkId: c,
1197
- bkmkNm: h.bkmkNm,
1198
- prntBkmkId: h.prntBkmkId,
1196
+ bkmkNm: f.bkmkNm,
1197
+ prntBkmkId: f.prntBkmkId,
1199
1198
  children: m.map(o).filter(Boolean)
1200
1199
  };
1201
1200
  }
1202
- const l = i;
1201
+ const p = i;
1203
1202
  return {
1204
1203
  type: "M",
1205
1204
  bkmkId: c,
1206
- bkmkNm: l.menuNm,
1207
- menuId: l.menuId,
1208
- menuNm: l.menuNm,
1209
- prntBkmkId: l.prntBkmkId
1205
+ bkmkNm: p.menuNm,
1206
+ menuId: p.menuId,
1207
+ menuNm: p.menuNm,
1208
+ prntBkmkId: p.prntBkmkId
1210
1209
  };
1211
1210
  } finally {
1212
1211
  s.delete(c);
@@ -1216,33 +1215,33 @@ function P(n, r) {
1216
1215
  /* @__PURE__ */ new Set([...r, ...t, ...a])
1217
1216
  ).map(o).filter(Boolean);
1218
1217
  }
1219
- function D(n, r) {
1218
+ function O(n, r) {
1220
1219
  for (const e of Object.values(n))
1221
1220
  if (e.type === "M" && e.menuId === r) return e.bkmkId;
1222
1221
  return null;
1223
1222
  }
1224
- function z(n, r, e) {
1223
+ function Y(n, r, e) {
1225
1224
  (!e || e === "-" ? r : n[e].children || []).forEach((o, t) => {
1226
1225
  const a = n[o];
1227
1226
  a && (a.sortOrdr = t);
1228
1227
  });
1229
1228
  }
1230
- const E = {
1229
+ const R = {
1231
1230
  DEFAULT_PRNT_GBCD: 1
1232
- }, me = (n) => n && typeof n == "object" && typeof n.menuId == "string" && typeof n.menuNm == "string", j = (n) => Array.isArray(n) && n.every(me);
1233
- let B = [], Y = [];
1234
- const Ce = (n) => {
1231
+ }, Ce = (n) => n && typeof n == "object" && typeof n.menuId == "string" && typeof n.menuNm == "string", W = (n) => Array.isArray(n) && n.every(Ce);
1232
+ let K = [], q = [];
1233
+ const fe = (n) => {
1235
1234
  if (n && typeof n == "object") {
1236
1235
  const r = n;
1237
- if (r.menus && j(r.menus)) return r.menus;
1238
- if (j(n)) return n;
1236
+ if (r.menus && W(r.menus)) return r.menus;
1237
+ if (W(n)) return n;
1239
1238
  }
1240
1239
  return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."), [];
1241
- }, fe = (n, r) => !!r && n.crprCd === r.crprCd && n.userId === r.userId && (n.prntGbcd ?? E.DEFAULT_PRNT_GBCD) === (r.prntGbcd ?? E.DEFAULT_PRNT_GBCD), he = (n) => {
1242
- if (B.length === n.length && B.every(
1240
+ }, he = (n, r) => !!r && n.crprCd === r.crprCd && n.userId === r.userId && (n.prntGbcd ?? R.DEFAULT_PRNT_GBCD) === (r.prntGbcd ?? R.DEFAULT_PRNT_GBCD), Ie = (n) => {
1241
+ if (K.length === n.length && K.every(
1243
1242
  (t, a) => t.menuId === n[a]?.menuId && t.menuPrntId === n[a]?.menuPrntId
1244
1243
  ))
1245
- return Y;
1244
+ return q;
1246
1245
  if (!n.length) return [];
1247
1246
  const r = /* @__PURE__ */ new Map(), e = [];
1248
1247
  n.forEach((t) => t?.menuId && r.set(t.menuId, { ...t, children: [] })), n.forEach((t) => {
@@ -1253,8 +1252,8 @@ const Ce = (n) => {
1253
1252
  ...a,
1254
1253
  children: a.children && a.children.length ? s(a.children) : void 0
1255
1254
  })), o = s(e);
1256
- return B = [...n], Y = o, o;
1257
- }, R = N((n, r) => ({
1255
+ return K = [...n], q = o, o;
1256
+ }, $ = b((n, r) => ({
1258
1257
  // 📊 초기 상태값
1259
1258
  menuList: [],
1260
1259
  flatMenuList: [],
@@ -1267,15 +1266,15 @@ const Ce = (n) => {
1267
1266
  const t = {
1268
1267
  crprCd: e,
1269
1268
  userId: s,
1270
- prntGbcd: o ?? E.DEFAULT_PRNT_GBCD
1269
+ prntGbcd: o ?? R.DEFAULT_PRNT_GBCD
1271
1270
  };
1272
- if (fe(t, r()._lastFetchParams)) {
1271
+ if (he(t, r()._lastFetchParams)) {
1273
1272
  console.log("✅ 중복 fetch 차단", t);
1274
1273
  return;
1275
1274
  }
1276
1275
  n({ isLoading: !0, error: null, _lastFetchParams: t });
1277
1276
  try {
1278
- const a = await b(F("AUTH_MENU"), t), d = Ce(a), c = he(d);
1277
+ const a = await S(_("AUTH_MENU"), t), d = fe(a), c = Ie(d);
1279
1278
  n({
1280
1279
  flatMenuList: d,
1281
1280
  // 평면 리스트 저장
@@ -1304,16 +1303,16 @@ const Ce = (n) => {
1304
1303
  const { flatMenuList: s } = r();
1305
1304
  return s.find((o) => o.menuId === e) ?? null;
1306
1305
  }
1307
- })), O = {
1306
+ })), D = {
1308
1307
  MAX_TABS: 15
1309
- }, Z = N((n, r) => ({
1308
+ }, V = b((n, r) => ({
1310
1309
  // 📊 초기 상태값
1311
1310
  activeMenuId: null,
1312
1311
  activeMenuItem: null,
1313
1312
  activeDetailItem: null,
1314
1313
  tabs: [],
1315
1314
  sidebarCollapsed: !1,
1316
- maxTabs: O.MAX_TABS,
1315
+ maxTabs: D.MAX_TABS,
1317
1316
  tabProtectFlag: {},
1318
1317
  tabParams: {},
1319
1318
  componentLabelMap: {},
@@ -1326,7 +1325,7 @@ const Ce = (n) => {
1326
1325
  activeDetailItem: null,
1327
1326
  tabs: [],
1328
1327
  sidebarCollapsed: !1,
1329
- maxTabs: O.MAX_TABS,
1328
+ maxTabs: D.MAX_TABS,
1330
1329
  tabProtectFlag: {},
1331
1330
  tabParams: {},
1332
1331
  componentLabelMap: {},
@@ -1336,40 +1335,56 @@ const Ce = (n) => {
1336
1335
  },
1337
1336
  // 🔧 탭 추가 (메뉴 아이템 객체로)
1338
1337
  // 사이드바에서 메뉴 클릭 시 호출되는 메인 함수
1339
- openTabFromMenu: (e, s) => {
1340
- const { tabs: o } = r(), t = o.find((d) => d.key === e.menuId), a = o.find((d) => d.key === e.menuId);
1341
- if (t)
1342
- a != null ? (n({ activeMenuId: e.menuId, activeMenuItem: e }), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId)) : w.warning("유효하지 않은 메뉴정보입니다.");
1343
- else {
1344
- if (o.length > O.MAX_TABS) {
1345
- console.warn("❌ 최대 탭 개수를 초과했습니다."), w.warning(
1346
- `최대 ${O.MAX_TABS}개의 탭만 열 수 있습니다.
1347
- 기존 탭을 닫고 다시 시도해주세요.`
1348
- );
1338
+ openTabFromMenu: (e, s, o) => {
1339
+ const { tabs: t } = r(), a = t.find((i) => i.key === e.menuId), d = o?.skipRefreshModal ?? !1;
1340
+ if (a) {
1341
+ if (d) {
1342
+ r().focusTab(e.menuId), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1349
1343
  return;
1350
1344
  }
1351
- const d = {
1352
- key: e.menuId,
1353
- label: e.menuNm,
1354
- gubun: "M",
1355
- menuItem: e,
1356
- closable: !0
1357
- };
1358
- n({
1359
- tabs: [...o, d],
1360
- // 목록에 추가
1361
- activeMenuId: e.menuId,
1362
- // 새 탭을 활성화
1363
- activeMenuItem: e
1364
- // 현재 프로그램으로 설정
1365
- }), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1345
+ se.confirm({
1346
+ title: `[${e.menuNm}] 메뉴이동 알림`,
1347
+ content: "이미 열린 화면입니다. 새로고침 하시겠습니까?",
1348
+ centered: !0,
1349
+ okText: "예",
1350
+ cancelText: "아니오",
1351
+ onOk: () => {
1352
+ r().refreshTab(e.menuId), r().focusTab(e.menuId), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1353
+ },
1354
+ onCancel: () => {
1355
+ r().focusTab(e.menuId), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1356
+ }
1357
+ });
1358
+ return;
1359
+ }
1360
+ if (t.length >= D.MAX_TABS) {
1361
+ console.warn("❌ 최대 탭 개수를 초과했습니다."), B.warning(
1362
+ `최대 ${D.MAX_TABS}개의 탭만 열 수 있습니다.
1363
+ 기존 탭을 닫고 다시 시도해주세요.`
1364
+ );
1365
+ return;
1366
1366
  }
1367
+ const c = {
1368
+ key: e.menuId,
1369
+ label: e.menuNm,
1370
+ gubun: "M",
1371
+ menuItem: e,
1372
+ closable: !0
1373
+ };
1374
+ n({
1375
+ tabs: [...t, c],
1376
+ // 탭 목록에 추가
1377
+ activeMenuId: e.menuId,
1378
+ // 새 탭을 활성화
1379
+ activeMenuItem: e
1380
+ // 현재 프로그램으로 설정
1381
+ }), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1367
1382
  },
1368
1383
  // 🔧 탭 추가 (메뉴 ID로)
1369
1384
  // URL 파라미터로 메뉴 열기 시 사용 (예: ?menuId=CM000301)
1370
- openTabByMenuId: (e, s) => {
1371
- const o = R.getState().findMenuById(e);
1372
- o ? r().openTabFromMenu(o, s) : w.warning("메뉴 ID를 찾을 수 없습니다.");
1385
+ openTabByMenuId: (e, s, o) => {
1386
+ const t = $.getState().findMenuById(e);
1387
+ t ? r().openTabFromMenu(t, s, o) : B.warning("메뉴 ID를 찾을 수 없습니다.");
1373
1388
  },
1374
1389
  openDetailView: (e, s, o) => {
1375
1390
  const { tabs: t } = r();
@@ -1504,7 +1519,7 @@ const Ce = (n) => {
1504
1519
  const t = r().pinnedTabs;
1505
1520
  s.slice(o + 1).filter((d) => !t.has(d.key)).forEach((d) => r().closeTab(d.key));
1506
1521
  }
1507
- })), ye = N((n, r) => ({
1522
+ })), ye = b((n, r) => ({
1508
1523
  popups: [],
1509
1524
  activePopupId: null,
1510
1525
  isLoading: !1,
@@ -1515,8 +1530,8 @@ const Ce = (n) => {
1515
1530
  n({ isLoading: !0, error: null });
1516
1531
  try {
1517
1532
  let t = null;
1518
- const a = await b(F("SRCH_POPU"), {
1519
- crprCd: ee()?.crprCd,
1533
+ const a = await S(_("SRCH_POPU"), {
1534
+ crprCd: te()?.crprCd,
1520
1535
  popuCd: e
1521
1536
  });
1522
1537
  t = a?.mstr;
@@ -1525,7 +1540,7 @@ const Ce = (n) => {
1525
1540
  const u = `팝업 정보를 찾을 수 없습니다: ${e}`;
1526
1541
  throw console.error(u), new Error(u);
1527
1542
  }
1528
- const i = ((u) => `/src/pages/views/popup/${u}`)(t.popuUrl), l = r().zIndexSeed + 1, h = {
1543
+ const i = ((u) => `/src/pages/views/popup/${u}`)(t.popuUrl), p = r().zIndexSeed + 1, f = {
1529
1544
  popupId: `popup_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
1530
1545
  popupCode: e,
1531
1546
  //config.title을 통해 팝업 제목 변경 가능
@@ -1539,7 +1554,7 @@ const Ce = (n) => {
1539
1554
  buttonList: d,
1540
1555
  // 버튼 목록 추가
1541
1556
  config: o,
1542
- zIndex: l
1557
+ zIndex: p
1543
1558
  }, m = r().popups.find((u) => u.popupCode === e);
1544
1559
  if (m) {
1545
1560
  n({
@@ -1552,10 +1567,10 @@ const Ce = (n) => {
1552
1567
  return;
1553
1568
  }
1554
1569
  n((u) => ({
1555
- popups: [...u.popups, h],
1556
- activePopupId: h.popupId,
1570
+ popups: [...u.popups, f],
1571
+ activePopupId: f.popupId,
1557
1572
  isLoading: !1,
1558
- zIndexSeed: l
1573
+ zIndexSeed: p
1559
1574
  }));
1560
1575
  } catch (t) {
1561
1576
  n({
@@ -1566,32 +1581,32 @@ const Ce = (n) => {
1566
1581
  },
1567
1582
  // 로컬 팝업 열기 (DB 조회 없이 레지스트리 매핑으로 렌더)
1568
1583
  openCorePopup: (e, s) => {
1569
- const o = `popup_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, t = r().zIndexSeed + 1, d = se[e]?.defaultConfig || {}, c = {
1584
+ const o = `popup_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, t = r().zIndexSeed + 1, d = ne[e]?.defaultConfig || {}, c = {
1570
1585
  ...d,
1571
1586
  ...s,
1572
1587
  // buttons와 callback은 완전히 덮어쓰기 (병합하지 않음)
1573
1588
  buttons: s?.buttons !== void 0 ? s.buttons : d.buttons,
1574
1589
  callback: s?.callback !== void 0 ? s.callback : d.callback
1575
- }, i = s?.defaultParams || {}, l = r().popups.find(
1590
+ }, i = s?.defaultParams || {}, p = r().popups.find(
1576
1591
  (m) => m.popupCode === e && m.isLocal
1577
1592
  );
1578
- if (l) {
1593
+ if (p) {
1579
1594
  const m = r().zIndexSeed + 1;
1580
- n({ activePopupId: l.popupId, zIndexSeed: m }), n((u) => ({
1595
+ n({ activePopupId: p.popupId, zIndexSeed: m }), n((u) => ({
1581
1596
  popups: u.popups.map(
1582
- (f) => f.popupId === l.popupId ? {
1583
- ...f,
1597
+ (C) => C.popupId === p.popupId ? {
1598
+ ...C,
1584
1599
  config: c,
1585
1600
  zIndex: m,
1586
1601
  close: () => {
1587
- r().closePopup(l.popupId);
1602
+ r().closePopup(p.popupId);
1588
1603
  }
1589
- } : f
1604
+ } : C
1590
1605
  )
1591
1606
  }));
1592
1607
  return;
1593
1608
  }
1594
- const h = {
1609
+ const f = {
1595
1610
  popupId: o,
1596
1611
  popupCode: e,
1597
1612
  popupTitle: c.title || e,
@@ -1611,7 +1626,7 @@ const Ce = (n) => {
1611
1626
  }
1612
1627
  };
1613
1628
  n((m) => ({
1614
- popups: [...m.popups, h],
1629
+ popups: [...m.popups, f],
1615
1630
  activePopupId: o,
1616
1631
  zIndexSeed: t
1617
1632
  }));
@@ -1651,8 +1666,8 @@ const Ce = (n) => {
1651
1666
  )
1652
1667
  }));
1653
1668
  }
1654
- })), V = N()(
1655
- M(
1669
+ })), Q = b()(
1670
+ k(
1656
1671
  (n, r) => ({
1657
1672
  systemMap: [],
1658
1673
  fetchSystemMap: async () => {
@@ -2060,7 +2075,7 @@ const Ce = (n) => {
2060
2075
  // localStorage key
2061
2076
  }
2062
2077
  )
2063
- ), Pe = N((n) => ({
2078
+ ), Oe = b((n) => ({
2064
2079
  requestCount: 0,
2065
2080
  loading: !1,
2066
2081
  showLoading: () => n((r) => {
@@ -2071,7 +2086,7 @@ const Ce = (n) => {
2071
2086
  const e = Math.max(0, r.requestCount - 1);
2072
2087
  return { requestCount: e, loading: e > 0 };
2073
2088
  })
2074
- })), De = N((n) => ({
2089
+ })), De = b((n) => ({
2075
2090
  requestCount: 0,
2076
2091
  loading: !1,
2077
2092
  showLoading: () => n((r) => {
@@ -2083,48 +2098,48 @@ const Ce = (n) => {
2083
2098
  return { requestCount: e, loading: e > 0 };
2084
2099
  })
2085
2100
  }));
2086
- function Ie() {
2087
- const [n, r] = X(!1), e = W((s) => {
2101
+ function ge() {
2102
+ const [n, r] = H(!1), e = U((s) => {
2088
2103
  const o = s?.getModifierState?.("CapsLock");
2089
2104
  typeof o == "boolean" && r(o);
2090
2105
  }, []);
2091
2106
  return { capsOn: n, onKeyDown: e };
2092
2107
  }
2093
- function Oe(n) {
2108
+ function _e(n) {
2094
2109
  const {
2095
2110
  loginApi: r,
2096
2111
  fetchCommonCodes: e,
2097
2112
  onAfterLogin: s,
2098
2113
  onError: o,
2099
2114
  rememberCookie: t = { enabled: !0, days: 30 }
2100
- } = n, [a, d] = X(!1), { capsOn: c, onKeyDown: i } = Ie(), l = "SCMSIGN00101", h = `${__SYS_CD__}_login_id`, m = {
2101
- id: t?.enabled ? te(h) : void 0,
2115
+ } = n, [a, d] = H(!1), { capsOn: c, onKeyDown: i } = ge(), p = "SCMSIGN00101", f = `${__SYS_CD__}_login_id`, m = {
2116
+ id: t?.enabled ? oe(f) : void 0,
2102
2117
  pswr: void 0
2103
- }, u = W(
2104
- async (f, C) => {
2118
+ }, u = U(
2119
+ async (C) => {
2105
2120
  d(!0);
2106
2121
  try {
2107
- const g = {
2122
+ const h = {
2108
2123
  crprCd: "100",
2109
- id: f.id,
2110
- pswr: await oe(f.pswr)
2111
- }, I = await (r ?? ((S) => b(l, S)))(g);
2112
- if (I?.userInfo?.userId) {
2113
- if (H.getState().setLoginUser(I.userInfo, I?.hrInfo), t?.enabled) {
2114
- const S = t.days ?? 30;
2115
- f.remember ? $(h, f.id ?? "", S) : $(h, "", 0);
2124
+ id: C.id,
2125
+ pswr: await X(C.pswr)
2126
+ }, g = await (r ?? ((y) => S(p, y)))(h);
2127
+ if (g?.userInfo?.userId) {
2128
+ if (w.getState().setLoginUser(g.userInfo, g?.hrInfo), localStorage.setItem("LOGIN_USER_ID", g.userInfo.userId), t?.enabled) {
2129
+ const y = t.days ?? 30;
2130
+ C.remember ? x(f, C.id ?? "", y) : x(f, "", 0);
2116
2131
  }
2117
- return e ? await e() : await G.getState().fetchCommonCodes(), s ? s(I, C) : (w.success(`${I.userInfo.userNm}님 환영합니다.`), C("/main")), { user: I.userInfo, response: I };
2132
+ return e ? await e() : await F.getState().fetchCommonCodes(), s(g), { user: g.userInfo, response: g };
2118
2133
  } else
2119
- throw o?.({ user: I.userInfo, response: I, navigate: C }), new Error("사용자 정보가 유효하지 않습니다.");
2120
- } catch (g) {
2121
- throw o?.(g), g;
2134
+ throw o({ user: g.userInfo, response: g }), new Error("사용자 정보가 유효하지 않습니다.");
2135
+ } catch (h) {
2136
+ o(h);
2122
2137
  } finally {
2123
2138
  d(!1);
2124
2139
  }
2125
2140
  },
2126
2141
  [
2127
- l,
2142
+ p,
2128
2143
  r,
2129
2144
  e,
2130
2145
  s,
@@ -2136,38 +2151,72 @@ function Oe(n) {
2136
2151
  return {
2137
2152
  loading: a,
2138
2153
  capsOn: c,
2139
- onKeyDown: i,
2140
2154
  prefills: m,
2155
+ onKeyDown: i,
2141
2156
  doLogin: u
2142
2157
  };
2143
2158
  }
2144
- function we() {
2145
- const n = ne();
2159
+ function we(n) {
2160
+ const { loginApi: r, fetchCommonCodes: e, onAfterLogin: s, onError: o } = n, [t, a] = H("LOADING"), d = {
2161
+ NO_TOKEN: "인증 정보가 없습니다.",
2162
+ INVALID_USER: "사용자 정보가 유효하지 않습니다.",
2163
+ UNKNOWN: "SSO 로그인 중 오류가 발생했습니다."
2164
+ }, c = (p) => p === "NO_TOKEN" || p === "INVALID_USER" ? p : "UNKNOWN", i = U(
2165
+ async (p) => {
2166
+ a("LOADING");
2167
+ try {
2168
+ const f = await re.post("/api/auth", {});
2169
+ f.data.result && f.data.userId && B.success(f.data.message);
2170
+ const m = {
2171
+ crprCd: "100",
2172
+ id: f.data.userId,
2173
+ pswr: await X("krx2025!@")
2174
+ }, C = await (r ?? ((h) => S("SCMSIGN00101", h)))(m);
2175
+ if (C?.userInfo?.userId)
2176
+ return w.getState().setLoginUser(C.userInfo, C?.hrInfo), localStorage.setItem("LOGIN_USER_ID", C.userInfo.userId), e ? await e() : await F.getState().fetchCommonCodes(), s(C), a("SUCCESS"), { user: C.userInfo, response: C };
2177
+ throw new Error("INVALID_USER");
2178
+ } catch (f) {
2179
+ const m = c(f?.message);
2180
+ o?.({
2181
+ code: m,
2182
+ msg: d[m]
2183
+ }), a("FAIL");
2184
+ }
2185
+ },
2186
+ [r, e, s, o]
2187
+ );
2188
+ return {
2189
+ loginStatus: t,
2190
+ doSsoLogin: i
2191
+ };
2192
+ }
2193
+ function Fe(n) {
2146
2194
  return () => {
2147
- H.getState().clearLoginUser(), V.getState().clearSystemMap(), G.getState().clearCodes(), R.getState().clearMenu(), Z.getState().clearMenuViewStore(), q.getState().clearFavorites(), n("/login");
2195
+ w.getState().clearLoginUser(), Q.getState().clearSystemMap(), F.getState().clearCodes(), $.getState().clearMenu(), V.getState().clearMenuViewStore(), J.getState().clearFavorites(), localStorage.removeItem("LOGIN_USER_ID"), n?.();
2148
2196
  };
2149
2197
  }
2150
- const Fe = () => G.getState(), _e = () => ye.getState(), Te = () => H.getState(), Ae = () => q.getState(), Be = () => R.getState(), Ke = () => Z.getState(), Ee = () => V.getState();
2198
+ const Te = () => F.getState(), Ae = () => ye.getState(), Ee = () => w.getState(), Ke = () => J.getState(), Be = () => $.getState(), Ge = () => V.getState(), Re = () => Q.getState();
2151
2199
  export {
2152
- Ie as useCapsLock,
2153
- Fe as useCode,
2154
- G as useCodeStore,
2155
- Le as useColorStore,
2156
- Ae as useFavorite,
2157
- q as useFavoriteStore,
2158
- Pe as useLoadingStore,
2159
- Oe as useLogin,
2160
- we as useLogout,
2200
+ ge as useCapsLock,
2201
+ Te as useCode,
2202
+ F as useCodeStore,
2203
+ Pe as useColorStore,
2204
+ Ke as useFavorite,
2205
+ J as useFavoriteStore,
2206
+ Oe as useLoadingStore,
2207
+ _e as useLogin,
2208
+ Fe as useLogout,
2161
2209
  Be as useMenuModel,
2162
- R as useMenuModelStore,
2163
- Ke as useMenuView,
2164
- Z as useMenuViewStore,
2165
- ve as useOptionStore,
2210
+ $ as useMenuModelStore,
2211
+ Ge as useMenuView,
2212
+ V as useMenuViewStore,
2213
+ Le as useOptionStore,
2166
2214
  De as usePopupLoadingStore,
2167
- _e as usePopupState,
2215
+ Ae as usePopupState,
2168
2216
  ye as usePopupStore,
2169
- Ee as useSystemCode,
2170
- V as useSystemStore,
2171
- Te as useUser,
2172
- H as useUserStore
2217
+ we as useSsoLogin,
2218
+ Re as useSystemCode,
2219
+ Q as useSystemStore,
2220
+ Ee as useUser,
2221
+ w as useUserStore
2173
2222
  };