@bwg-ui/core 1.3.1 → 1.3.2
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.
- package/dist/chunks/{CMSearchIntfGwP01-BWm9OqAH.js → CMSearchIntfGwP01-Bx5cpkhH.js} +1 -1
- package/dist/chunks/{CMSearchIntfGwP01-CihGc5Q1.cjs → CMSearchIntfGwP01-Uhl4uqiV.cjs} +1 -1
- package/dist/chunks/{MenuReport-khjaUz1Q.cjs → MenuReport-CPwq8w-z.cjs} +1 -1
- package/dist/chunks/{MenuReport-yYhMOHyq.js → MenuReport-DxJIaW8D.js} +1 -1
- package/dist/chunks/{common-components-DletnDTf.cjs → common-components-Dd_AsKs7.cjs} +36 -36
- package/dist/chunks/{common-components-coAoWxE9.js → common-components-dzN5Nuq0.js} +1380 -1318
- package/dist/chunks/{layout-components-C1DG2B74.js → layout-components-B25FFvXj.js} +679 -663
- package/dist/chunks/layout-components-Cz7Zets7.cjs +35 -0
- package/dist/components/common/BwgDetail.d.ts.map +1 -1
- package/dist/components/common/BwgGrid.d.ts.map +1 -1
- package/dist/components/common/index.cjs +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/guide/index.cjs +1 -1
- package/dist/components/guide/index.js +1 -1
- package/dist/components/layout/BwgPortal01.d.ts.map +1 -1
- package/dist/components/layout/custom/ConfigurableMenuTab.d.ts.map +1 -1
- package/dist/components/layout/custom/ConfigurableSidebar.d.ts.map +1 -1
- package/dist/components/layout/default/LoadingContainer.d.ts.map +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +1 -1
- package/dist/components/popup/index.cjs +1 -1
- package/dist/components/popup/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/stores/index.cjs +2 -2
- package/dist/stores/index.d.ts +6 -2
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/index.js +116 -100
- package/dist/stores/menuViewStore.d.ts +6 -2
- package/dist/stores/menuViewStore.d.ts.map +1 -1
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/layout-components-C6KeWPIu.cjs +0 -35
package/dist/stores/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { create as N } from "zustand";
|
|
2
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
|
|
4
|
-
import { l as
|
|
3
|
+
import { message as K, Modal as se } from "antd";
|
|
4
|
+
import { l as ne } from "../chunks/layout-components-B25FFvXj.js";
|
|
5
5
|
import { useState as X, useCallback as W } from "react";
|
|
6
|
-
import { useNavigate as
|
|
7
|
-
function
|
|
6
|
+
import { useNavigate as re } from "react-router-dom";
|
|
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
|
|
24
|
+
const B = (n) => (r) => {
|
|
25
25
|
try {
|
|
26
26
|
const e = n(r);
|
|
27
27
|
return e instanceof Promise ? e : {
|
|
28
28
|
then(s) {
|
|
29
|
-
return
|
|
29
|
+
return B(s)(e);
|
|
30
30
|
},
|
|
31
31
|
catch(s) {
|
|
32
32
|
return this;
|
|
@@ -38,13 +38,13 @@ const K = (n) => (r) => {
|
|
|
38
38
|
return this;
|
|
39
39
|
},
|
|
40
40
|
catch(s) {
|
|
41
|
-
return
|
|
41
|
+
return B(s)(e);
|
|
42
42
|
}
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
-
},
|
|
45
|
+
}, de = (n, r) => (e, s, o) => {
|
|
46
46
|
let t = {
|
|
47
|
-
storage:
|
|
47
|
+
storage: ae(() => localStorage),
|
|
48
48
|
partialize: (C) => C,
|
|
49
49
|
version: 0,
|
|
50
50
|
merge: (C, g) => ({
|
|
@@ -88,7 +88,7 @@ const K = (n) => (r) => {
|
|
|
88
88
|
return I((S = s()) != null ? S : m);
|
|
89
89
|
});
|
|
90
90
|
const k = ((g = t.onRehydrateStorage) == null ? void 0 : g.call(t, (C = s()) != null ? C : m)) || void 0;
|
|
91
|
-
return
|
|
91
|
+
return B(i.getItem.bind(i))(t.name).then((I) => {
|
|
92
92
|
if (I)
|
|
93
93
|
if (typeof I.version == "number" && I.version !== t.version) {
|
|
94
94
|
if (t.migrate) {
|
|
@@ -96,7 +96,7 @@ const K = (n) => (r) => {
|
|
|
96
96
|
I.state,
|
|
97
97
|
I.version
|
|
98
98
|
);
|
|
99
|
-
return S instanceof Promise ? S.then((
|
|
99
|
+
return S instanceof Promise ? S.then((T) => [!0, T]) : [!0, S];
|
|
100
100
|
}
|
|
101
101
|
console.error(
|
|
102
102
|
"State loaded from storage couldn't be migrated since no migrate function was provided"
|
|
@@ -106,11 +106,11 @@ const K = (n) => (r) => {
|
|
|
106
106
|
return [!1, void 0];
|
|
107
107
|
}).then((I) => {
|
|
108
108
|
var S;
|
|
109
|
-
const [
|
|
109
|
+
const [T, Q] = I;
|
|
110
110
|
if (u = t.merge(
|
|
111
111
|
Q,
|
|
112
112
|
(S = s()) != null ? S : m
|
|
113
|
-
), e(u, !0),
|
|
113
|
+
), e(u, !0), T)
|
|
114
114
|
return l();
|
|
115
115
|
}).then(() => {
|
|
116
116
|
k?.(u, void 0), u = s(), a = !0, c.forEach((I) => I(u));
|
|
@@ -138,7 +138,7 @@ const K = (n) => (r) => {
|
|
|
138
138
|
c.delete(C);
|
|
139
139
|
})
|
|
140
140
|
}, t.skipHydration || f(), u || m;
|
|
141
|
-
}, M =
|
|
141
|
+
}, M = de, H = N()(
|
|
142
142
|
M(
|
|
143
143
|
(n, r) => ({
|
|
144
144
|
user: null,
|
|
@@ -268,7 +268,7 @@ const K = (n) => (r) => {
|
|
|
268
268
|
// 저장할 상태만 선택
|
|
269
269
|
}
|
|
270
270
|
)
|
|
271
|
-
),
|
|
271
|
+
), w = {
|
|
272
272
|
CACHE_SIZE_LIMIT: 1e3
|
|
273
273
|
}, p = {
|
|
274
274
|
codeCache: /* @__PURE__ */ new Map(),
|
|
@@ -292,7 +292,7 @@ const K = (n) => (r) => {
|
|
|
292
292
|
markGroupLoaded(n) {
|
|
293
293
|
this.loadedGroups.add(n);
|
|
294
294
|
}
|
|
295
|
-
},
|
|
295
|
+
}, P = (n) => {
|
|
296
296
|
console.log("대규모 데이터 변환 시작:", n);
|
|
297
297
|
const r = {};
|
|
298
298
|
if (n && n.code && Array.isArray(n.code)) {
|
|
@@ -337,7 +337,7 @@ const K = (n) => (r) => {
|
|
|
337
337
|
crprCd: "100"
|
|
338
338
|
});
|
|
339
339
|
console.log("시스템 공통코드 응답:", e), console.log("시스템 공통코드목록:", e.code), console.log("시스템 공통코드옵션목록:", e.opt);
|
|
340
|
-
const s =
|
|
340
|
+
const s = P(e), t = {
|
|
341
341
|
...r().codeData || {},
|
|
342
342
|
...s
|
|
343
343
|
// 시스템 공통코드가 우선 (같은 그룹코드가 있으면 덮어씀)
|
|
@@ -369,7 +369,7 @@ const K = (n) => (r) => {
|
|
|
369
369
|
sysCd: __SYS_CD__
|
|
370
370
|
});
|
|
371
371
|
console.log("업무 공통코드 응답:", e), console.log("업무 공통코드목록:", e.code), console.log("업무 공통코드옵션목록:", e.opt);
|
|
372
|
-
const s =
|
|
372
|
+
const s = P(e), t = {
|
|
373
373
|
...r().codeData || {},
|
|
374
374
|
...s
|
|
375
375
|
// 업무 공통코드 추가 (같은 그룹코드가 있으면 덮어씀)
|
|
@@ -406,7 +406,7 @@ const K = (n) => (r) => {
|
|
|
406
406
|
})
|
|
407
407
|
]);
|
|
408
408
|
console.log("시스템 공통코드 응답:", e), console.log("업무 공통코드 응답:", s);
|
|
409
|
-
const o =
|
|
409
|
+
const o = P(e), t = P(s), a = {
|
|
410
410
|
...o,
|
|
411
411
|
...t
|
|
412
412
|
// 업무 공통코드가 같은 그룹코드를 덮어쓸 수 있음
|
|
@@ -524,7 +524,7 @@ const K = (n) => (r) => {
|
|
|
524
524
|
value: f.codeValue,
|
|
525
525
|
tagColor: f.labelColor
|
|
526
526
|
}));
|
|
527
|
-
return p.optionCache.size >=
|
|
527
|
+
return p.optionCache.size >= w.CACHE_SIZE_LIMIT && p.cleanupCache(), p.optionCache.set(c, u), p.cacheHits.set(c, 1), u;
|
|
528
528
|
},
|
|
529
529
|
// 2. 코드를 던졌을 때 코드명을 리턴 (대규모 최적화)
|
|
530
530
|
getCodeName: (e) => {
|
|
@@ -595,7 +595,7 @@ const K = (n) => (r) => {
|
|
|
595
595
|
const i = d.sort(
|
|
596
596
|
(l, h) => l.codeValue.localeCompare(h.codeValue)
|
|
597
597
|
);
|
|
598
|
-
return p.codeCache.size >=
|
|
598
|
+
return p.codeCache.size >= w.CACHE_SIZE_LIMIT && p.cleanupCache(), p.codeCache.set(t, i), p.cacheHits.set(t, 1), i;
|
|
599
599
|
},
|
|
600
600
|
// 6. 옵션코드별로 코드 목록 조회 (SimpleCodeItem 형태로 반환)
|
|
601
601
|
getCodeListByOption: (e, s, o) => {
|
|
@@ -628,7 +628,7 @@ const K = (n) => (r) => {
|
|
|
628
628
|
let m;
|
|
629
629
|
return d ? m = l.sort((u, f) => u.value.localeCompare(f.value)) : m = l.sort(
|
|
630
630
|
(u, f) => u.value.localeCompare(f.value)
|
|
631
|
-
), p.codeCache.size >=
|
|
631
|
+
), p.codeCache.size >= w.CACHE_SIZE_LIMIT && p.cleanupCache(), p.codeCache.set(c, m), p.cacheHits.set(c, 1), m;
|
|
632
632
|
},
|
|
633
633
|
// 7. 그룹코드 목록 조회
|
|
634
634
|
getAvailableGroupCodes: () => {
|
|
@@ -657,7 +657,7 @@ const K = (n) => (r) => {
|
|
|
657
657
|
})
|
|
658
658
|
}
|
|
659
659
|
)
|
|
660
|
-
),
|
|
660
|
+
), Pe = N()(
|
|
661
661
|
M(
|
|
662
662
|
(n, r) => ({
|
|
663
663
|
// 공통 데이터 스토어에서 상태 가져오기
|
|
@@ -783,7 +783,7 @@ const K = (n) => (r) => {
|
|
|
783
783
|
})
|
|
784
784
|
}
|
|
785
785
|
)
|
|
786
|
-
),
|
|
786
|
+
), ce = (n, r) => ({
|
|
787
787
|
nodes: {},
|
|
788
788
|
rootIds: [],
|
|
789
789
|
loadedFor: void 0,
|
|
@@ -824,7 +824,7 @@ const K = (n) => (r) => {
|
|
|
824
824
|
if (!(!s && o.loadedFor === e && Object.keys(o.nodes).length)) {
|
|
825
825
|
n({ loading: !0, error: void 0 });
|
|
826
826
|
try {
|
|
827
|
-
const t = await b("SCMBKMK00101", { userId: e }), a = Array.isArray(t?.sub) ? t.sub : [], d =
|
|
827
|
+
const t = await b("SCMBKMK00101", { userId: e }), a = Array.isArray(t?.sub) ? t.sub : [], d = pe(a), c = L(
|
|
828
828
|
d.nodes,
|
|
829
829
|
d.rootIds
|
|
830
830
|
);
|
|
@@ -855,7 +855,7 @@ const K = (n) => (r) => {
|
|
|
855
855
|
},
|
|
856
856
|
// ====== 공통: 생성 ======
|
|
857
857
|
addNode: async (e) => {
|
|
858
|
-
const s =
|
|
858
|
+
const s = _(r()), o = le();
|
|
859
859
|
n((t) => {
|
|
860
860
|
const a = e.sortOrdr ?? U(t, e.prntBkmkId), d = {
|
|
861
861
|
...t,
|
|
@@ -884,7 +884,7 @@ const K = (n) => (r) => {
|
|
|
884
884
|
rootIds: t.rootIds.slice(),
|
|
885
885
|
treeNodes: t.treeNodes
|
|
886
886
|
};
|
|
887
|
-
return
|
|
887
|
+
return ie(d, o, e.prntBkmkId), d.treeNodes = L(d.nodes, d.rootIds), d;
|
|
888
888
|
});
|
|
889
889
|
try {
|
|
890
890
|
let t = o;
|
|
@@ -902,10 +902,10 @@ const K = (n) => (r) => {
|
|
|
902
902
|
chngId: v()
|
|
903
903
|
});
|
|
904
904
|
return t = String(d?.bkmkId ?? d?.itemId ?? o), n((c) => {
|
|
905
|
-
const i =
|
|
905
|
+
const i = me(c, o, t);
|
|
906
906
|
return {
|
|
907
907
|
...i,
|
|
908
|
-
treeNodes:
|
|
908
|
+
treeNodes: L(i.nodes, i.rootIds)
|
|
909
909
|
};
|
|
910
910
|
}), t;
|
|
911
911
|
} catch (t) {
|
|
@@ -946,7 +946,7 @@ const K = (n) => (r) => {
|
|
|
946
946
|
},
|
|
947
947
|
// ====== 공통: 삭제 ======
|
|
948
948
|
removeNode: async (e) => {
|
|
949
|
-
const s =
|
|
949
|
+
const s = _(r());
|
|
950
950
|
n((o) => {
|
|
951
951
|
if (!o.nodes[e]) return o;
|
|
952
952
|
const t = {
|
|
@@ -955,7 +955,7 @@ const K = (n) => (r) => {
|
|
|
955
955
|
rootIds: o.rootIds.slice(),
|
|
956
956
|
treeNodes: o.treeNodes
|
|
957
957
|
};
|
|
958
|
-
return J(t, e), t.treeNodes =
|
|
958
|
+
return J(t, e), t.treeNodes = L(t.nodes, t.rootIds), t;
|
|
959
959
|
});
|
|
960
960
|
try {
|
|
961
961
|
await b("SCMBKMK00103", { bkmkId: e });
|
|
@@ -965,7 +965,7 @@ const K = (n) => (r) => {
|
|
|
965
965
|
},
|
|
966
966
|
// ====== 공통: 수정 ======
|
|
967
967
|
editNode: async ({ bkmkId: e, userId: s, bkmkNm: o, prntBkmkId: t, sortOrdr: a }) => {
|
|
968
|
-
const d =
|
|
968
|
+
const d = _(r());
|
|
969
969
|
n((c) => {
|
|
970
970
|
const i = { ...c, nodes: { ...c.nodes } }, l = i.nodes[e];
|
|
971
971
|
return l?.type === "F" && typeof o == "string" && (i.nodes[e] = {
|
|
@@ -1073,8 +1073,8 @@ const K = (n) => (r) => {
|
|
|
1073
1073
|
};
|
|
1074
1074
|
return s.map(d).filter(Boolean);
|
|
1075
1075
|
}
|
|
1076
|
-
}), q = N(
|
|
1077
|
-
function
|
|
1076
|
+
}), q = N(ce);
|
|
1077
|
+
function pe(n) {
|
|
1078
1078
|
const r = {}, e = [], s = (o) => {
|
|
1079
1079
|
o.forEach((t) => {
|
|
1080
1080
|
const a = {
|
|
@@ -1113,14 +1113,14 @@ function ce(n) {
|
|
|
1113
1113
|
);
|
|
1114
1114
|
}), { nodes: r, rootIds: e };
|
|
1115
1115
|
}
|
|
1116
|
-
function
|
|
1116
|
+
function _(n) {
|
|
1117
1117
|
return {
|
|
1118
1118
|
...n,
|
|
1119
1119
|
nodes: JSON.parse(JSON.stringify(n.nodes)),
|
|
1120
1120
|
rootIds: n.rootIds.slice()
|
|
1121
1121
|
};
|
|
1122
1122
|
}
|
|
1123
|
-
function
|
|
1123
|
+
function le() {
|
|
1124
1124
|
return `tmp_${Math.random().toString(36).slice(2, 10)}`;
|
|
1125
1125
|
}
|
|
1126
1126
|
function U(n, r) {
|
|
@@ -1128,7 +1128,7 @@ function U(n, r) {
|
|
|
1128
1128
|
const e = n.nodes[r];
|
|
1129
1129
|
return e ? e.children.length : 0;
|
|
1130
1130
|
}
|
|
1131
|
-
function
|
|
1131
|
+
function ie(n, r, e) {
|
|
1132
1132
|
const s = n.nodes[r];
|
|
1133
1133
|
if (s)
|
|
1134
1134
|
if (e && e !== "-") {
|
|
@@ -1138,7 +1138,7 @@ function le(n, r, e) {
|
|
|
1138
1138
|
} else
|
|
1139
1139
|
s.prntBkmkId = "-", n.rootIds = [...n.rootIds, r];
|
|
1140
1140
|
}
|
|
1141
|
-
function
|
|
1141
|
+
function ue(n, r) {
|
|
1142
1142
|
const e = n.nodes[r];
|
|
1143
1143
|
if (!e) return;
|
|
1144
1144
|
const s = e.prntBkmkId;
|
|
@@ -1151,11 +1151,11 @@ function ie(n, r) {
|
|
|
1151
1151
|
function J(n, r) {
|
|
1152
1152
|
const e = n.nodes[r];
|
|
1153
1153
|
if (!e) return;
|
|
1154
|
-
e.type === "F" && e.children.slice().forEach((a) => J(n, a)),
|
|
1154
|
+
e.type === "F" && e.children.slice().forEach((a) => J(n, a)), ue(n, r);
|
|
1155
1155
|
const { [r]: s, ...o } = n.nodes;
|
|
1156
1156
|
n.nodes = o;
|
|
1157
1157
|
}
|
|
1158
|
-
function
|
|
1158
|
+
function me(n, r, e) {
|
|
1159
1159
|
if (r === e) return n;
|
|
1160
1160
|
const s = n.nodes[r];
|
|
1161
1161
|
if (!s) return n;
|
|
@@ -1177,7 +1177,7 @@ function ue(n, r, e) {
|
|
|
1177
1177
|
function x(n) {
|
|
1178
1178
|
return n.rootIds.find((r) => n.nodes[r]?.type === "F") ?? null;
|
|
1179
1179
|
}
|
|
1180
|
-
function
|
|
1180
|
+
function L(n, r) {
|
|
1181
1181
|
const e = {};
|
|
1182
1182
|
Object.values(n).forEach((c) => {
|
|
1183
1183
|
const i = c.bkmkId, l = c.prntBkmkId;
|
|
@@ -1229,17 +1229,17 @@ function z(n, r, e) {
|
|
|
1229
1229
|
}
|
|
1230
1230
|
const E = {
|
|
1231
1231
|
DEFAULT_PRNT_GBCD: 1
|
|
1232
|
-
},
|
|
1233
|
-
let
|
|
1234
|
-
const
|
|
1232
|
+
}, Ce = (n) => n && typeof n == "object" && typeof n.menuId == "string" && typeof n.menuNm == "string", j = (n) => Array.isArray(n) && n.every(Ce);
|
|
1233
|
+
let A = [], Y = [];
|
|
1234
|
+
const fe = (n) => {
|
|
1235
1235
|
if (n && typeof n == "object") {
|
|
1236
1236
|
const r = n;
|
|
1237
1237
|
if (r.menus && j(r.menus)) return r.menus;
|
|
1238
1238
|
if (j(n)) return n;
|
|
1239
1239
|
}
|
|
1240
1240
|
return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."), [];
|
|
1241
|
-
},
|
|
1242
|
-
if (
|
|
1241
|
+
}, he = (n, r) => !!r && n.crprCd === r.crprCd && n.userId === r.userId && (n.prntGbcd ?? E.DEFAULT_PRNT_GBCD) === (r.prntGbcd ?? E.DEFAULT_PRNT_GBCD), ye = (n) => {
|
|
1242
|
+
if (A.length === n.length && A.every(
|
|
1243
1243
|
(t, a) => t.menuId === n[a]?.menuId && t.menuPrntId === n[a]?.menuPrntId
|
|
1244
1244
|
))
|
|
1245
1245
|
return Y;
|
|
@@ -1253,7 +1253,7 @@ const Ce = (n) => {
|
|
|
1253
1253
|
...a,
|
|
1254
1254
|
children: a.children && a.children.length ? s(a.children) : void 0
|
|
1255
1255
|
})), o = s(e);
|
|
1256
|
-
return
|
|
1256
|
+
return A = [...n], Y = o, o;
|
|
1257
1257
|
}, R = N((n, r) => ({
|
|
1258
1258
|
// 📊 초기 상태값
|
|
1259
1259
|
menuList: [],
|
|
@@ -1269,13 +1269,13 @@ const Ce = (n) => {
|
|
|
1269
1269
|
userId: s,
|
|
1270
1270
|
prntGbcd: o ?? E.DEFAULT_PRNT_GBCD
|
|
1271
1271
|
};
|
|
1272
|
-
if (
|
|
1272
|
+
if (he(t, r()._lastFetchParams)) {
|
|
1273
1273
|
console.log("✅ 중복 fetch 차단", t);
|
|
1274
1274
|
return;
|
|
1275
1275
|
}
|
|
1276
1276
|
n({ isLoading: !0, error: null, _lastFetchParams: t });
|
|
1277
1277
|
try {
|
|
1278
|
-
const a = await b(F("AUTH_MENU"), t), d =
|
|
1278
|
+
const a = await b(F("AUTH_MENU"), t), d = fe(a), c = ye(d);
|
|
1279
1279
|
n({
|
|
1280
1280
|
flatMenuList: d,
|
|
1281
1281
|
// 평면 리스트 저장
|
|
@@ -1336,40 +1336,56 @@ const Ce = (n) => {
|
|
|
1336
1336
|
},
|
|
1337
1337
|
// 🔧 탭 추가 (메뉴 아이템 객체로)
|
|
1338
1338
|
// 사이드바에서 메뉴 클릭 시 호출되는 메인 함수
|
|
1339
|
-
openTabFromMenu: (e, s) => {
|
|
1340
|
-
const { tabs:
|
|
1341
|
-
if (
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
if (o.length > O.MAX_TABS) {
|
|
1345
|
-
console.warn("❌ 최대 탭 개수를 초과했습니다."), w.warning(
|
|
1346
|
-
`최대 ${O.MAX_TABS}개의 탭만 열 수 있습니다.
|
|
1347
|
-
기존 탭을 닫고 다시 시도해주세요.`
|
|
1348
|
-
);
|
|
1339
|
+
openTabFromMenu: (e, s, o) => {
|
|
1340
|
+
const { tabs: t } = r(), a = t.find((i) => i.key === e.menuId), d = o?.skipRefreshModal ?? !1;
|
|
1341
|
+
if (a) {
|
|
1342
|
+
if (d) {
|
|
1343
|
+
r().focusTab(e.menuId), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
|
|
1349
1344
|
return;
|
|
1350
1345
|
}
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
}), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
|
|
1346
|
+
se.confirm({
|
|
1347
|
+
title: `[${e.menuNm}] 메뉴이동 알림`,
|
|
1348
|
+
content: "이미 열린 화면입니다. 새로고침 하시겠습니까?",
|
|
1349
|
+
centered: !0,
|
|
1350
|
+
okText: "예",
|
|
1351
|
+
cancelText: "아니오",
|
|
1352
|
+
onOk: () => {
|
|
1353
|
+
r().refreshTab(e.menuId), r().focusTab(e.menuId), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
|
|
1354
|
+
},
|
|
1355
|
+
onCancel: () => {
|
|
1356
|
+
r().focusTab(e.menuId), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
|
|
1357
|
+
}
|
|
1358
|
+
});
|
|
1359
|
+
return;
|
|
1366
1360
|
}
|
|
1361
|
+
if (t.length >= O.MAX_TABS) {
|
|
1362
|
+
console.warn("❌ 최대 탭 개수를 초과했습니다."), K.warning(
|
|
1363
|
+
`최대 ${O.MAX_TABS}개의 탭만 열 수 있습니다.
|
|
1364
|
+
기존 탭을 닫고 다시 시도해주세요.`
|
|
1365
|
+
);
|
|
1366
|
+
return;
|
|
1367
|
+
}
|
|
1368
|
+
const c = {
|
|
1369
|
+
key: e.menuId,
|
|
1370
|
+
label: e.menuNm,
|
|
1371
|
+
gubun: "M",
|
|
1372
|
+
menuItem: e,
|
|
1373
|
+
closable: !0
|
|
1374
|
+
};
|
|
1375
|
+
n({
|
|
1376
|
+
tabs: [...t, c],
|
|
1377
|
+
// 탭 목록에 추가
|
|
1378
|
+
activeMenuId: e.menuId,
|
|
1379
|
+
// 새 탭을 활성화
|
|
1380
|
+
activeMenuItem: e
|
|
1381
|
+
// 현재 프로그램으로 설정
|
|
1382
|
+
}), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
|
|
1367
1383
|
},
|
|
1368
1384
|
// 🔧 탭 추가 (메뉴 ID로)
|
|
1369
1385
|
// URL 파라미터로 메뉴 열기 시 사용 (예: ?menuId=CM000301)
|
|
1370
|
-
openTabByMenuId: (e, s) => {
|
|
1371
|
-
const
|
|
1372
|
-
|
|
1386
|
+
openTabByMenuId: (e, s, o) => {
|
|
1387
|
+
const t = R.getState().findMenuById(e);
|
|
1388
|
+
t ? r().openTabFromMenu(t, s, o) : K.warning("메뉴 ID를 찾을 수 없습니다.");
|
|
1373
1389
|
},
|
|
1374
1390
|
openDetailView: (e, s, o) => {
|
|
1375
1391
|
const { tabs: t } = r();
|
|
@@ -1504,7 +1520,7 @@ const Ce = (n) => {
|
|
|
1504
1520
|
const t = r().pinnedTabs;
|
|
1505
1521
|
s.slice(o + 1).filter((d) => !t.has(d.key)).forEach((d) => r().closeTab(d.key));
|
|
1506
1522
|
}
|
|
1507
|
-
})),
|
|
1523
|
+
})), Ie = N((n, r) => ({
|
|
1508
1524
|
popups: [],
|
|
1509
1525
|
activePopupId: null,
|
|
1510
1526
|
isLoading: !1,
|
|
@@ -1566,7 +1582,7 @@ const Ce = (n) => {
|
|
|
1566
1582
|
},
|
|
1567
1583
|
// 로컬 팝업 열기 (DB 조회 없이 레지스트리 매핑으로 렌더)
|
|
1568
1584
|
openCorePopup: (e, s) => {
|
|
1569
|
-
const o = `popup_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, t = r().zIndexSeed + 1, d =
|
|
1585
|
+
const o = `popup_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, t = r().zIndexSeed + 1, d = ne[e]?.defaultConfig || {}, c = {
|
|
1570
1586
|
...d,
|
|
1571
1587
|
...s,
|
|
1572
1588
|
// buttons와 callback은 완전히 덮어쓰기 (병합하지 않음)
|
|
@@ -2060,7 +2076,7 @@ const Ce = (n) => {
|
|
|
2060
2076
|
// localStorage key
|
|
2061
2077
|
}
|
|
2062
2078
|
)
|
|
2063
|
-
),
|
|
2079
|
+
), De = N((n) => ({
|
|
2064
2080
|
requestCount: 0,
|
|
2065
2081
|
loading: !1,
|
|
2066
2082
|
showLoading: () => n((r) => {
|
|
@@ -2071,7 +2087,7 @@ const Ce = (n) => {
|
|
|
2071
2087
|
const e = Math.max(0, r.requestCount - 1);
|
|
2072
2088
|
return { requestCount: e, loading: e > 0 };
|
|
2073
2089
|
})
|
|
2074
|
-
})),
|
|
2090
|
+
})), Oe = N((n) => ({
|
|
2075
2091
|
requestCount: 0,
|
|
2076
2092
|
loading: !1,
|
|
2077
2093
|
showLoading: () => n((r) => {
|
|
@@ -2083,21 +2099,21 @@ const Ce = (n) => {
|
|
|
2083
2099
|
return { requestCount: e, loading: e > 0 };
|
|
2084
2100
|
})
|
|
2085
2101
|
}));
|
|
2086
|
-
function
|
|
2102
|
+
function ge() {
|
|
2087
2103
|
const [n, r] = X(!1), e = W((s) => {
|
|
2088
2104
|
const o = s?.getModifierState?.("CapsLock");
|
|
2089
2105
|
typeof o == "boolean" && r(o);
|
|
2090
2106
|
}, []);
|
|
2091
2107
|
return { capsOn: n, onKeyDown: e };
|
|
2092
2108
|
}
|
|
2093
|
-
function
|
|
2109
|
+
function Fe(n) {
|
|
2094
2110
|
const {
|
|
2095
2111
|
loginApi: r,
|
|
2096
2112
|
fetchCommonCodes: e,
|
|
2097
2113
|
onAfterLogin: s,
|
|
2098
2114
|
onError: o,
|
|
2099
2115
|
rememberCookie: t = { enabled: !0, days: 30 }
|
|
2100
|
-
} = n, [a, d] = X(!1), { capsOn: c, onKeyDown: i } =
|
|
2116
|
+
} = n, [a, d] = X(!1), { capsOn: c, onKeyDown: i } = ge(), l = "SCMSIGN00101", h = `${__SYS_CD__}_login_id`, m = {
|
|
2101
2117
|
id: t?.enabled ? te(h) : void 0,
|
|
2102
2118
|
pswr: void 0
|
|
2103
2119
|
}, u = W(
|
|
@@ -2114,7 +2130,7 @@ function Oe(n) {
|
|
|
2114
2130
|
const S = t.days ?? 30;
|
|
2115
2131
|
f.remember ? $(h, f.id ?? "", S) : $(h, "", 0);
|
|
2116
2132
|
}
|
|
2117
|
-
return e ? await e() : await G.getState().fetchCommonCodes(), s ? s(I, C) : (
|
|
2133
|
+
return e ? await e() : await G.getState().fetchCommonCodes(), s ? s(I, C) : (K.success(`${I.userInfo.userNm}님 환영합니다.`), C("/main")), { user: I.userInfo, response: I };
|
|
2118
2134
|
} else
|
|
2119
2135
|
throw o?.({ user: I.userInfo, response: I, navigate: C }), new Error("사용자 정보가 유효하지 않습니다.");
|
|
2120
2136
|
} catch (g) {
|
|
@@ -2141,33 +2157,33 @@ function Oe(n) {
|
|
|
2141
2157
|
doLogin: u
|
|
2142
2158
|
};
|
|
2143
2159
|
}
|
|
2144
|
-
function
|
|
2145
|
-
const n =
|
|
2160
|
+
function Te() {
|
|
2161
|
+
const n = re();
|
|
2146
2162
|
return () => {
|
|
2147
2163
|
H.getState().clearLoginUser(), V.getState().clearSystemMap(), G.getState().clearCodes(), R.getState().clearMenu(), Z.getState().clearMenuViewStore(), q.getState().clearFavorites(), n("/login");
|
|
2148
2164
|
};
|
|
2149
2165
|
}
|
|
2150
|
-
const
|
|
2166
|
+
const we = () => G.getState(), _e = () => Ie.getState(), Ae = () => H.getState(), Ke = () => q.getState(), Be = () => R.getState(), Ee = () => Z.getState(), He = () => V.getState();
|
|
2151
2167
|
export {
|
|
2152
|
-
|
|
2153
|
-
|
|
2168
|
+
ge as useCapsLock,
|
|
2169
|
+
we as useCode,
|
|
2154
2170
|
G as useCodeStore,
|
|
2155
2171
|
Le as useColorStore,
|
|
2156
|
-
|
|
2172
|
+
Ke as useFavorite,
|
|
2157
2173
|
q as useFavoriteStore,
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2174
|
+
De as useLoadingStore,
|
|
2175
|
+
Fe as useLogin,
|
|
2176
|
+
Te as useLogout,
|
|
2161
2177
|
Be as useMenuModel,
|
|
2162
2178
|
R as useMenuModelStore,
|
|
2163
|
-
|
|
2179
|
+
Ee as useMenuView,
|
|
2164
2180
|
Z as useMenuViewStore,
|
|
2165
|
-
|
|
2166
|
-
|
|
2181
|
+
Pe as useOptionStore,
|
|
2182
|
+
Oe as usePopupLoadingStore,
|
|
2167
2183
|
_e as usePopupState,
|
|
2168
|
-
|
|
2169
|
-
|
|
2184
|
+
Ie as usePopupStore,
|
|
2185
|
+
He as useSystemCode,
|
|
2170
2186
|
V as useSystemStore,
|
|
2171
|
-
|
|
2187
|
+
Ae as useUser,
|
|
2172
2188
|
H as useUserStore
|
|
2173
2189
|
};
|
|
@@ -37,8 +37,12 @@ type MenuViewState = {
|
|
|
37
37
|
pinnedTabs: Set<string>;
|
|
38
38
|
refreshTabKey: Record<string, number>;
|
|
39
39
|
clearMenuViewStore: () => void;
|
|
40
|
-
openTabFromMenu: (menuItem: MenuItem, params?: Record<string, any
|
|
41
|
-
|
|
40
|
+
openTabFromMenu: (menuItem: MenuItem, params?: Record<string, any>, options?: {
|
|
41
|
+
skipRefreshModal?: boolean;
|
|
42
|
+
}) => void;
|
|
43
|
+
openTabByMenuId: (menuId: string, params?: Record<string, any>, options?: {
|
|
44
|
+
skipRefreshModal?: boolean;
|
|
45
|
+
}) => void;
|
|
42
46
|
/**
|
|
43
47
|
* 상세 탭 추가
|
|
44
48
|
* @param viewInfo 상세 컴포넌트 정보
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menuViewStore.d.ts","sourceRoot":"","sources":["../../src/stores/menuViewStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAqB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQlC,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAGD,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;QACvB,QAAQ,CAAC,EAAE;YACT,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGD,KAAK,aAAa,GAAG;IAGnB,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAExC,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEhC,gBAAgB,EAAE,QAAQ,GAAG,IAAI,CAAC;IAElC,IAAI,EAAE,OAAO,EAAE,CAAC;IAEhB,gBAAgB,EAAE,OAAO,CAAC;IAE1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAE/C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAExB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGtC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAE/B,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"menuViewStore.d.ts","sourceRoot":"","sources":["../../src/stores/menuViewStore.ts"],"names":[],"mappings":"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"}
|