@bwg-ui/core 1.2.35 → 1.3.0

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 (78) hide show
  1. package/dist/chunks/{CMSearchIntfGwP01-CMSQULsU.cjs → CMSearchIntfGwP01-D7XtXMLy.cjs} +1 -1
  2. package/dist/chunks/{CMSearchIntfGwP01-Duabg_5A.js → CMSearchIntfGwP01-_h2B12Ig.js} +28 -28
  3. package/dist/chunks/{MenuReport-B4EU1A6l.js → MenuReport-Bw3AvR6b.js} +10 -10
  4. package/dist/chunks/MenuReport-DuWbbKBC.cjs +1 -0
  5. package/dist/chunks/common-components-BOJo6FH_.cjs +1109 -0
  6. package/dist/chunks/{common-components-DIpOkbb5.js → common-components-BjfrRYiU.js} +13530 -12812
  7. package/dist/chunks/{layout-components-D2Fla5uu.js → layout-components-DNhUIx4u.js} +603 -559
  8. package/dist/chunks/layout-components-Ddn-4n36.cjs +35 -0
  9. package/dist/chunks/provider-DrboIg2C.cjs +1 -0
  10. package/dist/chunks/provider-VCa8UGvF.js +446 -0
  11. package/dist/components/common/BwgGrid.d.ts +17 -16
  12. package/dist/components/common/BwgGrid.d.ts.map +1 -1
  13. package/dist/components/common/BwgPagination.d.ts.map +1 -1
  14. package/dist/components/common/BwgView.d.ts +3 -3
  15. package/dist/components/common/BwgView.d.ts.map +1 -1
  16. package/dist/components/common/index.cjs +1 -1
  17. package/dist/components/common/index.d.ts +4 -3
  18. package/dist/components/common/index.d.ts.map +1 -1
  19. package/dist/components/common/index.js +5 -5
  20. package/dist/components/common/type.d.ts +7 -0
  21. package/dist/components/common/type.d.ts.map +1 -1
  22. package/dist/components/core/BwgMaskedDate.d.ts +13 -0
  23. package/dist/components/core/BwgMaskedDate.d.ts.map +1 -0
  24. package/dist/components/core/{BwgMaskedPicker.d.ts → BwgMaskedRange.d.ts} +6 -4
  25. package/dist/components/core/BwgMaskedRange.d.ts.map +1 -0
  26. package/dist/components/core/index.cjs +1 -1
  27. package/dist/components/core/index.d.ts +4 -2
  28. package/dist/components/core/index.d.ts.map +1 -1
  29. package/dist/components/core/index.js +1219 -781
  30. package/dist/components/guide/index.cjs +1 -1
  31. package/dist/components/guide/index.js +2 -2
  32. package/dist/components/layout/BwgPortal01.d.ts.map +1 -1
  33. package/dist/components/layout/custom/ConfigurableHeader.d.ts.map +1 -1
  34. package/dist/components/layout/extension/ContentWrapper.d.ts.map +1 -1
  35. package/dist/components/layout/index.cjs +1 -1
  36. package/dist/components/layout/index.js +1 -1
  37. package/dist/components/pages/syst/CMHldyCfg.d.ts.map +1 -1
  38. package/dist/components/popup/MenuReport.d.ts.map +1 -1
  39. package/dist/components/popup/SearchAddressP01.d.ts +30 -0
  40. package/dist/components/popup/SearchAddressP01.d.ts.map +1 -0
  41. package/dist/components/popup/SearchHolidayP01.d.ts +2 -2
  42. package/dist/components/popup/SearchHolidayP01.d.ts.map +1 -1
  43. package/dist/components/popup/config/localPopupRegistry.d.ts.map +1 -1
  44. package/dist/components/popup/index.cjs +1 -1
  45. package/dist/components/popup/index.d.ts +2 -0
  46. package/dist/components/popup/index.d.ts.map +1 -1
  47. package/dist/components/popup/index.js +6 -5
  48. package/dist/index.cjs +1 -1
  49. package/dist/index.js +270 -259
  50. package/dist/provider/contexts/BwgViewContext.d.ts +19 -0
  51. package/dist/provider/contexts/BwgViewContext.d.ts.map +1 -0
  52. package/dist/provider/contexts/index.d.ts +1 -0
  53. package/dist/provider/contexts/index.d.ts.map +1 -1
  54. package/dist/provider/hooks/index.d.ts +1 -0
  55. package/dist/provider/hooks/index.d.ts.map +1 -1
  56. package/dist/provider/hooks/useSizeConfig.d.ts +19 -0
  57. package/dist/provider/hooks/useSizeConfig.d.ts.map +1 -0
  58. package/dist/provider/index.cjs +1 -1
  59. package/dist/provider/index.js +22 -381
  60. package/dist/stores/index.cjs +2 -2
  61. package/dist/stores/index.js +18 -11
  62. package/dist/stores/userStore.d.ts +4 -0
  63. package/dist/stores/userStore.d.ts.map +1 -1
  64. package/dist/styles/components.css +90 -60
  65. package/dist/utils/{FileUtils.d.ts → fileUtils.d.ts} +1 -1
  66. package/dist/utils/fileUtils.d.ts.map +1 -0
  67. package/dist/utils/gridUtils.d.ts +45 -0
  68. package/dist/utils/gridUtils.d.ts.map +1 -0
  69. package/dist/utils/index.cjs +1 -1
  70. package/dist/utils/index.d.ts +12 -2
  71. package/dist/utils/index.d.ts.map +1 -1
  72. package/dist/utils/index.js +1112 -1005
  73. package/package.json +1 -1
  74. package/dist/chunks/MenuReport-5e2dMr_C.cjs +0 -1
  75. package/dist/chunks/common-components-D3-r7D-8.cjs +0 -1109
  76. package/dist/chunks/layout-components-pfHVy2at.cjs +0 -35
  77. package/dist/components/core/BwgMaskedPicker.d.ts.map +0 -1
  78. package/dist/utils/FileUtils.d.ts.map +0 -1
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),O=require("../stores/index.cjs"),l=require("react/jsx-runtime"),V=require("antd"),y=require("../utils/index.cjs"),F=r.createContext(null),_=({children:e,serviceCodes:t={}})=>{y.setServiceCodeOverrides(t),r.useLayoutEffect(()=>{y.setServiceCodeOverrides(t)},[t]);const i={serviceCodes:t,getServiceCode:n=>t[n]&&t[n].trim()!==""?t[n]:y.DEFAULT_SERVICE_CODES[n]};return l.jsx(F.Provider,{value:i,children:e})},P=()=>{const e=r.useContext(F);if(!e)throw new Error("useServiceCode must be used within a ServiceCodeProvider");return e},U=e=>{const{getServiceCode:t}=P();return t(e)},q=()=>{const{getServiceCode:e}=P(),t={};for(const o of Object.keys(y.DEFAULT_SERVICE_CODES))t[o]=e(o);return t},G=()=>{const{getServiceCode:e}=P();console.log("🔧 bwg-core 서비스코드 설정:"),console.log("📋 Provider 설정 > 기본값 순서로 확인");for(const t of Object.keys(y.DEFAULT_SERVICE_CODES)){const o=e(t);console.log(` ${t}: ${o}`)}},A=r.createContext(null),M=({children:e})=>{const t=r.useRef(null),C={searchBoxRef:t,getFormData:()=>t.current?.getFormData()||{},setFormData:a=>{t.current?.setFormData(a)},resetForm:()=>{t.current?.resetForm()},validateForm:async()=>await t.current?.validateForm()||{success:!1,error:null}};return l.jsx(A.Provider,{value:C,children:e})},W=()=>{const e=r.useContext(A);if(!e)throw new Error("useSearchBox must be used within a SearchBoxProvider");return e},$=()=>{const{popups:e,activePopupId:t,setActivePopup:o,closePopup:i,openPopup:n,openCorePopup:u}=O.usePopupStore(),C=r.useCallback(async(h,v,s)=>{try{await n(h,v,s)}catch(c){throw console.error("팝업 열기 실패:",c),c}},[n]),a=r.useCallback((h,v)=>{try{u(h,v)}catch(s){throw console.error("로컬 팝업 열기 실패:",s),s}},[u]);return{popups:e,activePopupId:t,setActivePopup:o,closePopup:i,showPopup:C,openCorePopup:a,isPopup:e.length>0}},I=r.createContext(null),z=()=>{const e=r.useContext(I);if(!e)throw new Error("useAuth must be used within AuthProvider");return e},J=({children:e})=>{const[t,o]=r.useState(!1),[i,n]=r.useState(!1),u=async s=>{const c=(await s.text()).trim().toLowerCase();try{const d=JSON.parse(c);if(typeof d=="object"&&d&&(d.ok===!0||d.success===!0))return!0}catch{}return!!["true","ok","1","y"].includes(c)},C=async s=>{n(!0);try{const c=await fetch("/serviceEndpoint/sso_check.jsp",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"token="+encodeURIComponent(s)}),d=c.ok&&await u(c);return o(d),d}catch{return!1}finally{n(!1)}},a=async s=>{n(!0);try{const c=await fetch("/serviceEndpoint/sso_reauth.jsp",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"pin="+encodeURIComponent(s)});return c.ok&&await u(c)?(o(!0),!0):!1}catch{return!1}finally{n(!1)}},h=()=>{o(!1)},v=r.useMemo(()=>({authed:t,busy:i,verifyWithToken:C,reauthWithPin:a,logout:h}),[t,i]);return l.jsx(I.Provider,{value:v,children:e})},B=r.createContext(void 0),H=({children:e})=>{const{codeData:t,isLoading:o,error:i,lastUpdated:n,getCodeList:u,getCodeListByOption:C,getCodeName:a,getCodeColor:h,getCodeByOption:v,getAvailableGroupCodes:s,getGridLookup:c,fetchCommonCodes:d}=O.useCodeStore(),L={codeData:t,isLoading:o,error:i,lastUpdated:n,getCodeList:u,getCodeListByOption:C,getCodeName:a,getCodeColor:h,getCodeByOption:v,getAvailableGroupCodes:s,getGridLookup:c,refreshCodes:d};return l.jsx(B.Provider,{value:L,children:e})},f=()=>{const e=r.useContext(B);if(e===void 0)throw new Error("useCommonCode must be used within a CommonCodeProvider");return e},Q=()=>{const{getCodeList:e,isLoading:t,error:o}=f();return{getCodeList:e,isLoading:t,error:o}},X=()=>{const{getCodeName:e,isLoading:t,error:o}=f();return{getCodeName:e,isLoading:t,error:o}},Y=()=>{const{getCodeColor:e,isLoading:t,error:o}=f();return{getCodeColor:e,isLoading:t,error:o}},Z=()=>{const{getCodeListByOption:e,isLoading:t,error:o}=f();return{getCodeListByOption:e,isLoading:t,error:o}},K=()=>{const{getGridLookup:e,isLoading:t,error:o}=f();return{getGridLookup:e,isLoading:t,error:o}},D=r.createContext(null),ee=()=>{const e=r.useContext(D);if(!e)throw new Error("useLock must be used within ScreenProtectProvider");return e},te=({children:e,idleMs:t=1e4,onUnlock:o,persistLocked:i=!0,storageKey:n="inactivityLocked",eventTarget:u,overlayScope:C="global",overlayId:a="lock-overlay-root",overlayPosition:h="fixed"})=>{const v=i&&typeof window<"u"&&window.localStorage.getItem(n)==="1",[s,c]=r.useState(v),[d,L]=r.useState(t),k=Number.isFinite(d)&&d>0,w=r.useRef(null),T=()=>{try{i&&window.localStorage.setItem(n,"1")}catch{}c(!0)},b=async m=>{if(!(o&&!await o(m))){try{i&&window.localStorage.removeItem(n)}catch{}c(!1),k&&E()}},N=()=>{try{i&&window.localStorage.setItem(n,"1")}catch{}c(!0)},E=()=>{k&&(w.current&&window.clearTimeout(w.current),w.current=window.setTimeout(()=>{N()},d))};r.useEffect(()=>{if(!k)return;const m=()=>{s||E()},x={passive:!0},g=["pointermove","pointerdown","keydown","wheel","touchstart"],S=u??window;return g.forEach(p=>S.addEventListener(p,m,x)),E(),()=>{w.current&&window.clearTimeout(w.current),g.forEach(p=>S.removeEventListener(p,m))}},[d,s,u,k]),r.useEffect(()=>{if(!s)return;const m=p=>{const j=document.getElementById(a);j&&j.contains(p.target)||(p.stopPropagation(),p.preventDefault())},x={capture:!0},g=["pointerdown","pointerup","pointermove","click","wheel","keydown","keyup","touchstart","touchmove"],S=C==="scoped"?u??window:window;return g.forEach(p=>S.addEventListener(p,m,x)),()=>g.forEach(p=>S.removeEventListener(p,m,x))},[s,C,a,u]);const R=r.useMemo(()=>({locked:s,lock:T,unlock:b,setIdleMs:L}),[s]);return l.jsxs(D.Provider,{value:R,children:[l.jsx("div",{style:{width:"100%",height:"100%"},...s?{inert:""}:{},...s?{"aria-hidden":!0}:{},children:e}),s&&l.jsx(oe,{onUnlock:b,overlayId:a,overlayPosition:h})]})},oe=({onUnlock:e,overlayId:t="lock-overlay-root",overlayPosition:o="fixed"})=>{const[i]=r.useState(4),[n,u]=r.useState("");return l.jsx("div",{id:t,"aria-modal":"true",role:"dialog","aria-label":"Locked screen",style:{position:o,inset:0,background:"rgba(12, 14, 18, 0.85)",backdropFilter:"blur(4px)",display:"grid",placeItems:"center",zIndex:9999},children:l.jsxs("div",{className:"lockscreen-form",style:{width:420,maxWidth:"92vw"},children:[l.jsx("div",{className:"lock-icon-wrap",children:l.jsx("span",{className:"lock-icon-box"})}),l.jsx("h2",{children:"잠금됨"}),l.jsx("p",{children:"PIN 번호를 입력하세요"}),l.jsx("div",{className:"lock-ipt-wrap",style:{display:"flex",justifyContent:"center"},children:l.jsx(V.Input.OTP,{mask:"*",autoFocus:!0,length:i,value:n,onChange:C=>{const a=(C??"").replace(/\D/g,"").slice(0,i);u(a),a.length===i&&e(a)}})})]})})};exports.AuthProvider=J;exports.CommonCodeProvider=H;exports.ScreenProtectProvider=te;exports.SearchBoxProvider=M;exports.ServiceCodeProvider=_;exports.useAllServiceCodes=q;exports.useAuth=z;exports.useCodeColor=Y;exports.useCodeList=Q;exports.useCodeListByOption=Z;exports.useCodeName=X;exports.useCommonCode=f;exports.useGridLookup=K;exports.useLock=ee;exports.useLogServiceCodeConfig=G;exports.usePopup=$;exports.useSearchBox=W;exports.useServiceCode=P;exports.useServiceCodeValue=U;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/provider-DrboIg2C.cjs");exports.AuthProvider=e.AuthProvider;exports.BwgViewProvider=e.BwgViewProvider;exports.CommonCodeProvider=e.CommonCodeProvider;exports.ScreenProtectProvider=e.ScreenProtectProvider;exports.SearchBoxProvider=e.SearchBoxProvider;exports.ServiceCodeProvider=e.ServiceCodeProvider;exports.useAllServiceCodes=e.useAllServiceCodes;exports.useAuth=e.useAuth;exports.useBwgView=e.useBwgView;exports.useCodeColor=e.useCodeColor;exports.useCodeList=e.useCodeList;exports.useCodeListByOption=e.useCodeListByOption;exports.useCodeName=e.useCodeName;exports.useCommonCode=e.useCommonCode;exports.useGridLookup=e.useGridLookup;exports.useLock=e.useLock;exports.useLogServiceCodeConfig=e.useLogServiceCodeConfig;exports.usePopup=e.usePopup;exports.useSearchBox=e.useSearchBox;exports.useServiceCode=e.useServiceCode;exports.useServiceCodeValue=e.useServiceCodeValue;
@@ -1,383 +1,24 @@
1
- import { useLayoutEffect as z, createContext as k, useContext as x, useRef as N, useCallback as B, useState as w, useMemo as j, useEffect as A } from "react";
2
- import { usePopupStore as J, useCodeStore as q } from "../stores/index.js";
3
- import { jsx as d, jsxs as T } from "react/jsx-runtime";
4
- import { Input as H } from "antd";
5
- import { setServiceCodeOverrides as D, DEFAULT_SERVICE_CODES as E } from "../utils/index.js";
6
- const V = k(null), te = ({
7
- children: e,
8
- serviceCodes: t = {}
9
- }) => {
10
- D(t), z(() => {
11
- D(t);
12
- }, [t]);
13
- const c = {
14
- serviceCodes: t,
15
- getServiceCode: (r) => t[r] && t[r].trim() !== "" ? t[r] : E[r]
16
- };
17
- return /* @__PURE__ */ d(V.Provider, { value: c, children: e });
18
- }, F = () => {
19
- const e = x(V);
20
- if (!e)
21
- throw new Error("useServiceCode must be used within a ServiceCodeProvider");
22
- return e;
23
- }, oe = (e) => {
24
- const { getServiceCode: t } = F();
25
- return t(e);
26
- }, re = () => {
27
- const { getServiceCode: e } = F(), t = {};
28
- for (const o of Object.keys(E))
29
- t[o] = e(o);
30
- return t;
31
- }, ne = () => {
32
- const { getServiceCode: e } = F();
33
- console.log("🔧 bwg-core 서비스코드 설정:"), console.log("📋 Provider 설정 > 기본값 순서로 확인");
34
- for (const t of Object.keys(E)) {
35
- const o = e(t);
36
- console.log(` ${t}: ${o}`);
37
- }
38
- }, R = k(null), se = ({ children: e }) => {
39
- const t = N(null), l = {
40
- searchBoxRef: t,
41
- getFormData: () => t.current?.getFormData() || {},
42
- setFormData: (u) => {
43
- t.current?.setFormData(u);
44
- },
45
- resetForm: () => {
46
- t.current?.resetForm();
47
- },
48
- validateForm: async () => await t.current?.validateForm() || {
49
- success: !1,
50
- error: null
51
- }
52
- };
53
- return /* @__PURE__ */ d(R.Provider, { value: l, children: e });
54
- }, ce = () => {
55
- const e = x(R);
56
- if (!e)
57
- throw new Error("useSearchBox must be used within a SearchBoxProvider");
58
- return e;
59
- }, ie = () => {
60
- const {
61
- popups: e,
62
- activePopupId: t,
63
- setActivePopup: o,
64
- closePopup: c,
65
- openPopup: r,
66
- openCorePopup: i
67
- } = J(), l = B(
68
- async (m, f, n) => {
69
- try {
70
- await r(m, f, n);
71
- } catch (s) {
72
- throw console.error("팝업 열기 실패:", s), s;
73
- }
74
- },
75
- [r]
76
- ), u = B(
77
- (m, f) => {
78
- try {
79
- i(m, f);
80
- } catch (n) {
81
- throw console.error("로컬 팝업 열기 실패:", n), n;
82
- }
83
- },
84
- [i]
85
- );
86
- return {
87
- popups: e,
88
- activePopupId: t,
89
- setActivePopup: o,
90
- closePopup: c,
91
- showPopup: l,
92
- openCorePopup: u,
93
- isPopup: e.length > 0
94
- };
95
- }, G = k(null), ue = () => {
96
- const e = x(G);
97
- if (!e) throw new Error("useAuth must be used within AuthProvider");
98
- return e;
99
- }, ae = ({ children: e }) => {
100
- const [t, o] = w(!1), [c, r] = w(!1), i = async (n) => {
101
- const s = (await n.text()).trim().toLowerCase();
102
- try {
103
- const a = JSON.parse(s);
104
- if (typeof a == "object" && a && (a.ok === !0 || a.success === !0))
105
- return !0;
106
- } catch {
107
- }
108
- return !!["true", "ok", "1", "y"].includes(s);
109
- }, l = async (n) => {
110
- r(!0);
111
- try {
112
- const s = await fetch("/serviceEndpoint/sso_check.jsp", {
113
- method: "POST",
114
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
115
- body: "token=" + encodeURIComponent(n)
116
- }), a = s.ok && await i(s);
117
- return o(a), a;
118
- } catch {
119
- return !1;
120
- } finally {
121
- r(!1);
122
- }
123
- }, u = async (n) => {
124
- r(!0);
125
- try {
126
- const s = await fetch("/serviceEndpoint/sso_reauth.jsp", {
127
- method: "POST",
128
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
129
- body: "pin=" + encodeURIComponent(n)
130
- });
131
- return s.ok && await i(s) ? (o(!0), !0) : !1;
132
- } catch {
133
- return !1;
134
- } finally {
135
- r(!1);
136
- }
137
- }, m = () => {
138
- o(!1);
139
- }, f = j(
140
- () => ({ authed: t, busy: c, verifyWithToken: l, reauthWithPin: u, logout: m }),
141
- [t, c]
142
- );
143
- return /* @__PURE__ */ d(G.Provider, { value: f, children: e });
144
- }, U = k(
145
- void 0
146
- ), de = ({
147
- children: e
148
- }) => {
149
- const {
150
- codeData: t,
151
- isLoading: o,
152
- error: c,
153
- lastUpdated: r,
154
- getCodeList: i,
155
- getCodeListByOption: l,
156
- getCodeName: u,
157
- getCodeColor: m,
158
- getCodeByOption: f,
159
- getAvailableGroupCodes: n,
160
- getGridLookup: s,
161
- fetchCommonCodes: a
162
- } = q(), L = {
163
- codeData: t,
164
- isLoading: o,
165
- error: c,
166
- lastUpdated: r,
167
- getCodeList: i,
168
- getCodeListByOption: l,
169
- getCodeName: u,
170
- getCodeColor: m,
171
- getCodeByOption: f,
172
- getAvailableGroupCodes: n,
173
- getGridLookup: s,
174
- refreshCodes: a
175
- };
176
- return /* @__PURE__ */ d(U.Provider, { value: L, children: e });
177
- }, P = () => {
178
- const e = x(U);
179
- if (e === void 0)
180
- throw new Error("useCommonCode must be used within a CommonCodeProvider");
181
- return e;
182
- }, le = () => {
183
- const { getCodeList: e, isLoading: t, error: o } = P();
184
- return {
185
- getCodeList: e,
186
- isLoading: t,
187
- error: o
188
- };
189
- }, pe = () => {
190
- const { getCodeName: e, isLoading: t, error: o } = P();
191
- return {
192
- getCodeName: e,
193
- isLoading: t,
194
- error: o
195
- };
196
- }, me = () => {
197
- const { getCodeColor: e, isLoading: t, error: o } = P();
198
- return {
199
- getCodeColor: e,
200
- isLoading: t,
201
- error: o
202
- };
203
- }, fe = () => {
204
- const { getCodeListByOption: e, isLoading: t, error: o } = P();
205
- return {
206
- getCodeListByOption: e,
207
- isLoading: t,
208
- error: o
209
- };
210
- }, he = () => {
211
- const { getGridLookup: e, isLoading: t, error: o } = P();
212
- return {
213
- getGridLookup: e,
214
- isLoading: t,
215
- error: o
216
- };
217
- }, _ = k(null), we = () => {
218
- const e = x(_);
219
- if (!e)
220
- throw new Error("useLock must be used within ScreenProtectProvider");
221
- return e;
222
- }, ve = ({
223
- children: e,
224
- idleMs: t = 1e4,
225
- onUnlock: o,
226
- persistLocked: c = !0,
227
- storageKey: r = "inactivityLocked",
228
- eventTarget: i,
229
- overlayScope: l = "global",
230
- overlayId: u = "lock-overlay-root",
231
- overlayPosition: m = "fixed"
232
- }) => {
233
- const f = c && typeof window < "u" && window.localStorage.getItem(r) === "1", [n, s] = w(f), [a, L] = w(t), S = Number.isFinite(a) && a > 0, v = N(null), W = () => {
234
- try {
235
- c && window.localStorage.setItem(r, "1");
236
- } catch {
237
- }
238
- s(!0);
239
- }, I = async (h) => {
240
- if (!(o && !await o(h))) {
241
- try {
242
- c && window.localStorage.removeItem(r);
243
- } catch {
244
- }
245
- s(!1), S && b();
246
- }
247
- }, M = () => {
248
- try {
249
- c && window.localStorage.setItem(r, "1");
250
- } catch {
251
- }
252
- s(!0);
253
- }, b = () => {
254
- S && (v.current && window.clearTimeout(v.current), v.current = window.setTimeout(() => {
255
- M();
256
- }, a));
257
- };
258
- A(() => {
259
- if (!S) return;
260
- const h = () => {
261
- n || b();
262
- }, C = { passive: !0 }, g = [
263
- "pointermove",
264
- "pointerdown",
265
- "keydown",
266
- "wheel",
267
- "touchstart"
268
- ], y = i ?? window;
269
- return g.forEach((p) => y.addEventListener(p, h, C)), b(), () => {
270
- v.current && window.clearTimeout(v.current), g.forEach((p) => y.removeEventListener(p, h));
271
- };
272
- }, [a, n, i, S]), A(() => {
273
- if (!n) return;
274
- const h = (p) => {
275
- const O = document.getElementById(u);
276
- O && O.contains(p.target) || (p.stopPropagation(), p.preventDefault());
277
- }, C = { capture: !0 }, g = [
278
- "pointerdown",
279
- "pointerup",
280
- "pointermove",
281
- "click",
282
- "wheel",
283
- "keydown",
284
- "keyup",
285
- "touchstart",
286
- "touchmove"
287
- ], y = l === "scoped" ? i ?? window : window;
288
- return g.forEach((p) => y.addEventListener(p, h, C)), () => g.forEach((p) => y.removeEventListener(p, h, C));
289
- }, [n, l, u, i]);
290
- const $ = j(
291
- () => ({ locked: n, lock: W, unlock: I, setIdleMs: L }),
292
- [n]
293
- );
294
- return /* @__PURE__ */ T(_.Provider, { value: $, children: [
295
- /* @__PURE__ */ d(
296
- "div",
297
- {
298
- style: { width: "100%", height: "100%" },
299
- ...n ? { inert: "" } : {},
300
- ...n ? { "aria-hidden": !0 } : {},
301
- children: e
302
- }
303
- ),
304
- n && /* @__PURE__ */ d(
305
- Q,
306
- {
307
- onUnlock: I,
308
- overlayId: u,
309
- overlayPosition: m
310
- }
311
- )
312
- ] });
313
- }, Q = ({
314
- onUnlock: e,
315
- overlayId: t = "lock-overlay-root",
316
- overlayPosition: o = "fixed"
317
- }) => {
318
- const [c] = w(4), [r, i] = w("");
319
- return /* @__PURE__ */ d(
320
- "div",
321
- {
322
- id: t,
323
- "aria-modal": "true",
324
- role: "dialog",
325
- "aria-label": "Locked screen",
326
- style: {
327
- position: o,
328
- inset: 0,
329
- background: "rgba(12, 14, 18, 0.85)",
330
- backdropFilter: "blur(4px)",
331
- display: "grid",
332
- placeItems: "center",
333
- zIndex: 9999
334
- },
335
- children: /* @__PURE__ */ T("div", { className: "lockscreen-form", style: { width: 420, maxWidth: "92vw" }, children: [
336
- /* @__PURE__ */ d("div", { className: "lock-icon-wrap", children: /* @__PURE__ */ d("span", { className: "lock-icon-box" }) }),
337
- /* @__PURE__ */ d("h2", { children: "잠금됨" }),
338
- /* @__PURE__ */ d("p", { children: "PIN 번호를 입력하세요" }),
339
- /* @__PURE__ */ d(
340
- "div",
341
- {
342
- className: "lock-ipt-wrap",
343
- style: { display: "flex", justifyContent: "center" },
344
- children: /* @__PURE__ */ d(
345
- H.OTP,
346
- {
347
- mask: "*",
348
- autoFocus: !0,
349
- length: c,
350
- value: r,
351
- onChange: (l) => {
352
- const u = (l ?? "").replace(/\D/g, "").slice(0, c);
353
- i(u), u.length === c && e(u);
354
- }
355
- }
356
- )
357
- }
358
- )
359
- ] })
360
- }
361
- );
362
- };
1
+ import { A as o, B as r, C as a, n as u, S as d, o as i, q as C, f as v, b as c, j as S, h as t, k as P, i as m, g as n, l as p, m as B, r as g, d as h, e as l, p as L, u as w } from "../chunks/provider-VCa8UGvF.js";
363
2
  export {
364
- ae as AuthProvider,
365
- de as CommonCodeProvider,
366
- ve as ScreenProtectProvider,
367
- se as SearchBoxProvider,
368
- te as ServiceCodeProvider,
369
- re as useAllServiceCodes,
370
- ue as useAuth,
371
- me as useCodeColor,
372
- le as useCodeList,
373
- fe as useCodeListByOption,
374
- pe as useCodeName,
375
- P as useCommonCode,
376
- he as useGridLookup,
377
- we as useLock,
378
- ne as useLogServiceCodeConfig,
379
- ie as usePopup,
380
- ce as useSearchBox,
381
- F as useServiceCode,
382
- oe as useServiceCodeValue
3
+ o as AuthProvider,
4
+ r as BwgViewProvider,
5
+ a as CommonCodeProvider,
6
+ u as ScreenProtectProvider,
7
+ d as SearchBoxProvider,
8
+ i as ServiceCodeProvider,
9
+ C as useAllServiceCodes,
10
+ v as useAuth,
11
+ c as useBwgView,
12
+ S as useCodeColor,
13
+ t as useCodeList,
14
+ P as useCodeListByOption,
15
+ m as useCodeName,
16
+ n as useCommonCode,
17
+ p as useGridLookup,
18
+ B as useLock,
19
+ g as useLogServiceCodeConfig,
20
+ h as usePopup,
21
+ l as useSearchBox,
22
+ L as useServiceCode,
23
+ w as useServiceCodeValue
383
24
  };
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("zustand"),y=require("../utils/index.cjs"),L=require("antd"),V=require("../chunks/layout-components-pfHVy2at.cjs"),F=require("react"),Q=require("react-router-dom");function ee(n,r){let e;try{e=n()}catch{return}return{getItem:o=>{var t;const a=d=>d===null?null:JSON.parse(d,void 0),c=(t=e.getItem(o))!=null?t:null;return c instanceof Promise?c.then(a):a(c)},setItem:(o,t)=>e.setItem(o,JSON.stringify(t,void 0)),removeItem:o=>e.removeItem(o)}}const H=n=>r=>{try{const e=n(r);return e instanceof Promise?e:{then(s){return H(s)(e)},catch(s){return this}}}catch(e){return{then(s){return this},catch(s){return H(s)(e)}}}},te=(n,r)=>(e,s,o)=>{let t={storage:ee(()=>localStorage),partialize:C=>C,version:0,merge:(C,S)=>({...S,...C}),...r},a=!1;const c=new Set,d=new Set;let i=t.storage;if(!i)return n((...C)=>{console.warn(`[zustand persist middleware] Unable to update item '${t.name}', the given storage is currently unavailable.`),e(...C)},s,o);const l=()=>{const C=t.partialize({...s()});return i.setItem(t.name,{state:C,version:t.version})},f=o.setState;o.setState=(C,S)=>(f(C,S),l());const m=n((...C)=>(e(...C),l()),s,o);o.getInitialState=()=>m;let u;const h=()=>{var C,S;if(!i)return;a=!1,c.forEach(g=>{var N;return g((N=s())!=null?N:m)});const k=((S=t.onRehydrateStorage)==null?void 0:S.call(t,(C=s())!=null?C:m))||void 0;return H(i.getItem.bind(i))(t.name).then(g=>{if(g)if(typeof g.version=="number"&&g.version!==t.version){if(t.migrate){const N=t.migrate(g.state,g.version);return N instanceof Promise?N.then(K=>[!0,K]):[!0,N]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,g.state];return[!1,void 0]}).then(g=>{var N;const[K,Z]=g;if(u=t.merge(Z,(N=s())!=null?N:m),e(u,!0),K)return l()}).then(()=>{k?.(u,void 0),u=s(),a=!0,d.forEach(g=>g(u))}).catch(g=>{k?.(void 0,g)})};return o.persist={setOptions:C=>{t={...t,...C},C.storage&&(i=C.storage)},clearStorage:()=>{i?.removeItem(t.name)},getOptions:()=>t,rehydrate:()=>h(),hasHydrated:()=>a,onHydrate:C=>(c.add(C),()=>{c.delete(C)}),onFinishHydration:C=>(d.add(C),()=>{d.delete(C)})},t.skipHydration||h(),u||m},M=te,w=b.create()(M((n,r)=>({user:null,hrInfo:null,buttonAuths:{},componentSize:1,gridSize:2,spacingSize:2,isLoggedIn:()=>!!r().user,setLoginUser:(e,s)=>{n({user:e,hrInfo:s??null}),console.log("사용자 로그인:",e,s)},clearLoginUser:()=>{n({user:null,hrInfo:null,buttonAuths:{}}),console.log("사용자 로그아웃")},updateUser:(e,s)=>{const o=r().user,t=r().hrInfo;o&&n({user:{...o,...e}}),t&&n({hrInfo:{...t,...s}})},setComponentSize:e=>{n({componentSize:e}),console.log("컴포넌트 사이즈 변경:",e)},setGridSize:e=>{n({gridSize:e}),console.log("그리드 사이즈 변경:",e)},setSpacingSize:e=>{n({spacingSize:e}),console.log("여백 사이즈 변경:",e)},getButtonAuth:(e,s)=>{const o=`${e}_${s}`;return r().buttonAuths[o]||null},setButtonAuth:(e,s,o)=>{const t=`${e}_${s}`;n(a=>({buttonAuths:{...a.buttonAuths,[t]:o}}))},clearButtonAuths:()=>{n({buttonAuths:{}})}}),{name:"user-storage",partialize:n=>({user:n.user,hrInfo:n.hrInfo,componentSize:n.componentSize,gridSize:n.gridSize,spacingSize:n.spacingSize,isLoggedIn:n.isLoggedIn})})),B={CACHE_SIZE_LIMIT:1e3},p={codeCache:new Map,nameCache:new Map,optionCache:new Map,colorCache:new Map,loadedGroups:new Set,cacheHits:new Map,clearCache(){this.codeCache.clear(),this.nameCache.clear(),this.optionCache.clear(),this.colorCache.clear(),this.loadedGroups.clear(),this.cacheHits.clear()},cleanupCache(){const n=Array.from(this.cacheHits.entries());n.sort((e,s)=>e[1]-s[1]),n.slice(0,Math.floor(n.length*.3)).forEach(([e])=>{this.codeCache.delete(e),this.nameCache.delete(e),this.optionCache.delete(e),this.colorCache.delete(e),this.cacheHits.delete(e)})},isGroupLoaded(n){return this.loadedGroups.has(n)},markGroupLoaded(n){this.loadedGroups.add(n)}},v=n=>{console.log("대규모 데이터 변환 시작:",n);const r={};if(n&&n.code&&Array.isArray(n.code)){const e=n.code,s=n.opt||[],o=new Map;s.forEach(t=>{t.cmmnCd&&t.enblYn==="Y"&&(o.has(t.cmmnCd)||o.set(t.cmmnCd,[]),o.get(t.cmmnCd).push(t))}),e.forEach(t=>{if(t&&t.cmmnCdGrp&&t.cmmnCd&&t.enblYn==="Y"){const a=t.cmmnCdGrp;r[a]||(r[a]={});const d=(o.get(t.cmmnCd)||[]).reduce((i,l)=>(l.optnCd&&l.optnNm&&(i[l.optnCd]=l.optnNm),i),{});r[a][t.cmmnCd]={codeValue:t.cmmnCd,codeNm:t.cmmnCdNm,groupCode:t.cmmnCdGrp,commonCode:t.cmmnCd,labelColor:t.cmmnCdClr,systemCodeYn:t.syscdYn,sortOrder:parseInt(t.sortOrd)||1,enabled:t.enblYn==="Y",options:Object.keys(d).length>0?d:null,originalData:t}}})}return console.log("대규모 데이터 변환 완료:",r),r},I=b.create()(M((n,r)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchSystemCodes:async()=>{n({isLoading:!0,error:null});try{console.log("시스템 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await y.callService(y.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("시스템 공통코드 응답:",e),console.log("시스템 공통코드목록:",e.code),console.log("시스템 공통코드옵션목록:",e.opt);const s=v(e),t={...r().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),n({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("시스템 공통코드 데이터 가져오기 완료")}catch(e){console.error("시스템 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"시스템 공통코드 데이터 가져오기 실패"})}},fetchBusinessCodes:async()=>{n({isLoading:!0,error:null});try{console.log("업무 공통코드 데이터 가져오기 시작: SCMSIGN00302");const e=await y.callService("SCMSIGN00302",{sysCd:__SYS_CD__});console.log("업무 공통코드 응답:",e),console.log("업무 공통코드목록:",e.code),console.log("업무 공통코드옵션목록:",e.opt);const s=v(e),t={...r().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),n({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("업무 공통코드 데이터 가져오기 완료")}catch(e){console.error("업무 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"업무 공통코드 데이터 가져오기 실패"})}},fetchData:async()=>{n({isLoading:!0,error:null});try{console.log("전체 공통코드 데이터 가져오기 시작 (시스템 + 업무)");const[e,s]=await Promise.all([y.callService(y.getServiceCode("SRCH_CODE"),{crprCd:"100"}),y.callService("SCMSIGN00302",{sysCd:__SYS_CD__})]);console.log("시스템 공통코드 응답:",e),console.log("업무 공통코드 응답:",s);const o=v(e),t=v(s),a={...o,...t};p.clearCache();const c=new Set(Object.keys(a));c.forEach(d=>{p.markGroupLoaded(d)}),n({codeData:a,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:c}),console.log("전체 공통코드 데이터 가져오기 완료")}catch(e){console.error("전체 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"전체 공통코드 데이터 가져오기 실패"})}},loadSpecificGroup:async e=>{const{codeData:s,loadedGroups:o}=r();if(!s||o.has(e))return;const t=new Set(o).add(e);n({loadedGroups:t}),p.markGroupLoaded(e)},setData:e=>{p.clearCache();const s=new Set(Object.keys(e));s.forEach(o=>{p.markGroupLoaded(o)}),n({codeData:e,lastUpdated:new Date,loadedGroups:s})},clearData:()=>{p.clearCache(),n({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set})},getLoadedGroups:()=>Array.from(r().loadedGroups)}),{name:"large-data-storage",partialize:n=>({codeData:n.codeData,lastUpdated:n.lastUpdated,loadedGroups:Array.from(n.loadedGroups)})})),_=b.create()(M((n,r)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getCodeList:(e,s)=>{const{enabledOnly:o=!0,systemCodeOnly:t=!1,sortByOrder:a=!1,excludeParentCode:c=!1}=s||{},d=`simpleCodeList_${e}_${o}_${t}_${a}_${c}`;if(p.optionCache.has(d)){const h=p.cacheHits.get(d)||0;return p.cacheHits.set(d,h+1),p.optionCache.get(d)}const i=I.getState().codeData;if(!i)return[];if(!p.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],f=i[e];f&&Object.values(f).forEach(h=>{if(!(o&&!h.enabled)&&!(t&&h.systemCodeYn!=="Y"))if(c){const C=e.length,S=h.codeValue.substring(C);S.length>0&&l.push({...h,codeValue:S})}else l.push(h)});let m;a?m=l.sort((h,C)=>h.sortOrder!==C.sortOrder?h.sortOrder-C.sortOrder:h.codeValue.localeCompare(C.codeValue)):m=l.sort((h,C)=>h.codeValue.localeCompare(C.codeValue));const u=m.map(h=>({label:h.codeNm,value:h.codeValue,tagColor:h.labelColor}));return p.optionCache.size>=B.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.optionCache.set(d,u),p.cacheHits.set(d,1),u},getCodeName:e=>{if(p.nameCache.has(e)){const o=p.cacheHits.get(`name_${e}`)||0;return p.cacheHits.set(`name_${e}`,o+1),p.nameCache.get(e)}const s=I.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.nameCache.set(e,t.codeNm),p.cacheHits.set(`name_${e}`,1),t.codeNm;return null},getCodeColor:e=>{if(p.colorCache.has(e)){const o=p.cacheHits.get(`color_${e}`)||0;return p.cacheHits.set(`color_${e}`,o+1),p.colorCache.get(e)}const s=I.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.colorCache.set(e,t.labelColor||""),p.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getGridLookup:e=>{const s=`gridLookup_${e}`;if(p.optionCache.has(s)){const i=p.cacheHits.get(s)||0;return p.cacheHits.set(s,i+1),p.optionCache.get(s)}const o=I.getState().codeData;if(!o)return{labels:[],values:[],lookupDisplay:!0};const t=o[e];if(!t)return{labels:[],values:[],lookupDisplay:!0};const a=[],c=[];Object.values(t).filter(i=>i.enabled).sort((i,l)=>i.sortOrder-l.sortOrder).forEach(i=>{a.push(i.codeNm),c.push(i.codeValue)});const d={labels:a,values:c,lookupDisplay:!0};return p.optionCache.set(s,d),p.cacheHits.set(s,1),d},getCodeByOption:(e,s,o)=>{const t=`codeByOption_${e}_${s}_${o}`;if(p.codeCache.has(t)){const l=p.cacheHits.get(t)||0;return p.cacheHits.set(t,l+1),p.codeCache.get(t)}const a=I.getState().codeData;if(!a)return[];const c=[],d=a[e];d&&Object.values(d).forEach(l=>{l.enabled&&l.options&&l.options[s]===o&&c.push({...l,codeNm:l.options[s]||l.codeNm})});const i=c.sort((l,f)=>l.codeValue.localeCompare(f.codeValue));return p.codeCache.size>=B.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.codeCache.set(t,i),p.cacheHits.set(t,1),i},getCodeListByOption:(e,s,o)=>{const{enabledOnly:t=!0,systemCodeOnly:a=!1,sortByOrder:c=!1}=o||{},d=`codeListByOption_${e}_${s}_${t}_${a}_${c}`;if(p.codeCache.has(d)){const u=p.cacheHits.get(d)||0;return p.cacheHits.set(d,u+1),p.codeCache.get(d)}const i=I.getState().codeData;if(!i)return[];if(!p.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],f=i[e];f&&Object.values(f).forEach(u=>{t&&!u.enabled||a&&u.systemCodeYn!=="Y"||u.options&&u.options[s]&&l.push({label:u.options[s],value:u.commonCode,tagColor:u.labelColor})});let m;return c?m=l.sort((u,h)=>u.value.localeCompare(h.value)):m=l.sort((u,h)=>u.value.localeCompare(h.value)),p.codeCache.size>=B.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.codeCache.set(d,m),p.cacheHits.set(d,1),m},getAvailableGroupCodes:()=>{const e="available_group_codes";if(p.nameCache.has(e)){const t=p.cacheHits.get(e)||0;return p.cacheHits.set(e,t+1),JSON.parse(p.nameCache.get(e))}const s=I.getState().codeData;if(!s)return[];const o=Object.keys(s).sort();return p.nameCache.set(e,JSON.stringify(o)),p.cacheHits.set(e,1),o},clearCodes:()=>{I.getState().clearData()}}),{name:"code-storage",partialize:n=>({})})),oe=b.create()(M((n,r)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getOptionValue:(e,s)=>{const o=`option_${e}_${s}`;if(p.optionCache.has(o)){const c=p.cacheHits.get(o)||0;return p.cacheHits.set(o,c+1),p.optionCache.get(o)}const t=I.getState().codeData;if(!t)return null;const a=t[e];if(a&&a[s]){const c=a[s].options;return p.optionCache.set(o,c),p.cacheHits.set(o,1),c}return null},getOptionByKey:(e,s,o)=>{const t=`option_${e}_${s}_${o}`;if(p.optionCache.has(t)){const d=p.cacheHits.get(t)||0;return p.cacheHits.set(t,d+1),p.optionCache.get(t)}const a=r().getOptionValue(e,s),c=a?a[o]:null;return p.optionCache.set(t,c),p.cacheHits.set(t,1),c},clearCodes:()=>{I.getState().clearData()}}),{name:"option-storage",partialize:n=>({})})),se=b.create()(M((n,r)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getColorCode:e=>{if(p.colorCache.has(e)){const o=p.cacheHits.get(`color_${e}`)||0;return p.cacheHits.set(`color_${e}`,o+1),p.colorCache.get(e)}const s=I.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.colorCache.set(e,t.labelColor||""),p.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(p.optionCache.has(e)){const t=p.cacheHits.get(e)||0;return p.cacheHits.set(e,t+1),p.optionCache.get(e)}const s=I.getState().codeData;if(!s)return[];const o=[];return Object.values(s).forEach(t=>{Object.values(t).forEach(a=>{a.labelColor&&o.push({code:a.codeValue,color:a.labelColor})})}),p.optionCache.set(e,o),p.cacheHits.set(e,1),o},clearCodes:()=>{I.getState().clearData()}}),{name:"color-storage",partialize:n=>({})})),ne=(n,r)=>({nodes:{},rootIds:[],loadedFor:void 0,loading:!1,error:void 0,treeNodes:[],isMenuBookmarked:e=>Object.values(r().nodes).some(s=>s.type==="M"&&s.menuId===e),getPrntBkmkIdByMenuId:e=>{const s=D(r().nodes,e);return s?r().nodes[s]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const s=D(r().nodes,e);if(!s)return null;const o=r().nodes[s];return o?.type==="M"?o:null},getFolderTree:e=>{const{nodes:s,rootIds:o}=r(),t=c=>e?c.toLowerCase().includes(e.toLowerCase()):!0,a=c=>{const d=s[c];if(!d||d.type!=="F")return null;const i=d,l=(i.children||[]).map(m=>s[m]).filter(m=>!!m&&m.type==="F").map(m=>a(m.bkmkId)).filter(Boolean);return t(i.bkmkNm)||l.length>0?{key:i.bkmkId,title:`📁 ${i.bkmkNm}`,children:l.length?l:void 0}:null};return o.map(c=>a(c)).filter(Boolean)},loadFavorites:async(e,s=!1)=>{console.log("loadFavorites ::::: ",e,s);const o=r();if(!(!s&&o.loadedFor===e&&Object.keys(o.nodes).length)){n({loading:!0,error:void 0});try{const t=await y.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],c=re(a),d=P(c.nodes,c.rootIds);n({...c,treeNodes:d,loadedFor:e,loading:!1})}catch(t){throw n({loading:!1,error:t?.message||"즐겨찾기 로드 실패"}),t}}},loadFavoritesIfNeeded:async e=>{const s=r();(s.loadedFor!==e||Object.keys(s.nodes).length===0)&&await r().loadFavorites(e)},clearFavorites:()=>{n({nodes:{},rootIds:[],treeNodes:[],loadedFor:void 0,loading:!1,error:void 0}),console.log("📚 북마크 스토어 초기화 완료")},addNode:async e=>{const s=E(r()),o=ae();n(t=>{const a=e.sortOrdr??z(t,e.prntBkmkId),c={...t,nodes:{...t.nodes,[o]:e.type==="F"?{bkmkId:o,type:"F",prntBkmkId:e.prntBkmkId||"-",sortOrdr:a,bkmkNm:e.bkmkNm??"새 폴더",children:[],sysCd:e.sysCd,userId:e.userId}:{bkmkId:o,type:"M",prntBkmkId:e.prntBkmkId,sortOrdr:a,menuId:e.menuId??"",menuNm:e.menuNm,sysCd:e.sysCd,userId:e.userId}},rootIds:t.rootIds.slice(),treeNodes:t.treeNodes};return ce(c,o,e.prntBkmkId),c.treeNodes=P(c.nodes,c.rootIds),c});try{let t=o;const a=z(r(),e.prntBkmkId),c=await y.callService("SCMBKMK00102",{iudFlag:"I",type:e.type,sysCd:e.sysCd,userId:e.userId,bkmkId:o,bkmkNm:e.bkmkNm,prntBkmkId:e.prntBkmkId,menuId:e.menuId,sortOrdr:a,chngId:y.getUserId()});return t=String(c?.bkmkId??c?.itemId??o),n(d=>{const i=pe(d,o,t);return{...i,treeNodes:P(i.nodes,i.rootIds)}}),t}catch(t){throw n(s),t}},moveNode:async({bkmkId:e,newPrntBkmkId:s,sortOrdr:o,userId:t})=>{const a=r(),c=structuredClone(a.nodes),d=[...a.rootIds],i=c[e];if(!i)return;if(s!=="-"){const u=c[s];if(!u||u.type!=="F")throw new Error("부모는 폴더만 가능합니다.")}const l=i.prntBkmkId??"-",f=l==="-"?d:c[l].children||=[];{const u=f.indexOf(e);u>=0&&f.splice(u,1)}const m=s==="-"?d:c[s].children||=[];m.splice(Math.max(0,Math.min(o,m.length)),0,e),i.prntBkmkId=s,n({nodes:c,rootIds:d}),j(c,d,s),j(c,d,l);try{await y.callService("SCMBKMK00104",{bkmkId:e,prntBkmkId:s,sortOrdr:o,chngId:t})}catch(u){throw n(a),u}},removeNode:async e=>{const s=E(r());n(o=>{if(!o.nodes[e])return o;const t={...o,nodes:{...o.nodes},rootIds:o.rootIds.slice(),treeNodes:o.treeNodes};return X(t,e),t.treeNodes=P(t.nodes,t.rootIds),t});try{await y.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw n(s),o}},editNode:async({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const c=E(r());n(d=>{const i={...d,nodes:{...d.nodes}},l=i.nodes[e];return l?.type==="F"&&typeof o=="string"&&(i.nodes[e]={...l,bkmkNm:o}),i});try{await y.callService("SCMBKMK00102",{iudFlag:"U",userId:s,bkmkId:e,bkmkNm:o,prntBkmkId:t,sortOrdr:a,chngId:y.getUserId()})}catch(d){throw n(c),d}},addFolder:async(e,s,o,t)=>await r().addNode({type:"F",bkmkNm:e,prntBkmkId:s,sysCd:o,userId:t}),addMenuToFolder:async(e,s)=>D(r().nodes,s.menuId)?"이미 북마크에 저장된 메뉴입니다.":await r().addNode({type:"M",prntBkmkId:e,sysCd:"KH",userId:y.getUserId(),menuId:s.menuId,menuNm:s.menuNm}),toggleMenuFavorite:async(e,s)=>{if(!e)return;const o=r(),t=Object.values(o.nodes).find(c=>c.type==="M"&&c.menuId===s.menuId);if(t){await r().removeNode(t.bkmkId);return}let a=x(o);a||(await r().loadFavorites(e,!0),a=x(r())),a&&await r().addNode({type:"M",prntBkmkId:a,sysCd:"KH",userId:y.getUserId(),menuId:s.menuId,menuNm:s.menuNm})},removeMenuByMenuId:async e=>{const s=r(),o=D(s.nodes,e);o&&await r().removeNode(o)},removeMenu:async e=>{await r().removeNode(e)},removeFolder:async e=>{await r().removeNode(e)},editFolder:async(e,s,o,t,a)=>{await r().editNode({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})},convertToAntTreeData:(e,s,o,t=!1)=>{const a=d=>o?d.toLowerCase().includes(o.toLowerCase()):!0,c=d=>{const i=e[d];if(!i||t&&i.type!=="F")return null;if(i.type==="F"){const l=i,f=(l.children||[]).map(u=>c(u)).filter(Boolean);return a(l.bkmkNm)||f.length>0?{key:l.bkmkId,type:"F",title:`📁 ${l.bkmkNm}`,bkmkNm:l.bkmkNm,prntBkmkId:l.prntBkmkId,sortOrdr:l.sortOrdr,fullPath:l.fullPath,children:f.length?f:void 0}:null}else{const l=i,f=l.menuNm?`${l.menuNm} (${l.menuId})`:l.menuId;return a(f)?{key:l.bkmkId,type:"M",title:`📄 ${f}`,prntBkmkId:l.prntBkmkId,sortOrdr:l.sortOrdr,fullPath:l.fullPath,isLeaf:!0}:null}};return s.map(c).filter(Boolean)}}),R=b.create(ne);function re(n){const r={},e=[],s=o=>{o.forEach(t=>{const a={type:t.type,bkmkId:t.bkmkId??t.BKMK_ID??t.id,prntBkmkId:t.prntBkmkId??t.PRNT_BKMK_ID??"-",sortOrdr:Number(t.sortOrdr??t.SORT_ORDR??0),sysCd:t.sysCd??t.SYS_CD,userId:t.userId??t.USER_ID,fullPath:t.fullPath??t.FULL_PATH};if(t.type==="F"){r[a.bkmkId]={...a,bkmkNm:t.bkmkNm??t.BKMK_NM??t.name??a.bkmkId,children:[]};const c=Array.isArray(t.children)?t.children:[];s(c)}else r[a.bkmkId]={...a,menuId:t.menuId??t.MENU_ID??"",menuNm:t.menuNm??t.MENU_NM}})};return s(n),Object.values(r).forEach(o=>{if(o.prntBkmkId&&o.prntBkmkId!=="-"){const t=r[o.prntBkmkId];t?.type==="F"&&t.children.push(o.bkmkId)}else o.type==="F"&&e.push(o.bkmkId)}),e.sort((o,t)=>(r[o].sortOrdr??0)-(r[t].sortOrdr??0)),Object.values(r).forEach(o=>{o.type==="F"&&o.children.sort((a,c)=>(r[a].sortOrdr??0)-(r[c].sortOrdr??0))}),{nodes:r,rootIds:e}}function E(n){return{...n,nodes:JSON.parse(JSON.stringify(n.nodes)),rootIds:n.rootIds.slice()}}function ae(){return`tmp_${Math.random().toString(36).slice(2,10)}`}function z(n,r){if(!r||r==="-")return n.rootIds.length;const e=n.nodes[r];return e?e.children.length:0}function ce(n,r,e){const s=n.nodes[r];if(s)if(e&&e!=="-"){const o=n.nodes[e];if(!o||o.type!=="F")return;s.prntBkmkId=e,o.children=[...o.children,r]}else s.prntBkmkId="-",n.rootIds=[...n.rootIds,r]}function de(n,r){const e=n.nodes[r];if(!e)return;const s=e.prntBkmkId;if(s&&s!=="-"){const o=n.nodes[s];o?.type==="F"&&(o.children=o.children.filter(t=>t!==r))}else n.rootIds=n.rootIds.filter(o=>o!==r)}function X(n,r){const e=n.nodes[r];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>X(n,a)),de(n,r);const{[r]:s,...o}=n.nodes;n.nodes=o}function pe(n,r,e){if(r===e)return n;const s=n.nodes[r];if(!s)return n;const o=JSON.parse(JSON.stringify(s));o.bkmkId=e;const t={...n.nodes,[e]:o};delete t[r];let a=n.rootIds;if(o.prntBkmkId&&o.prntBkmkId!=="-"){const c=t[o.prntBkmkId];c?.type==="F"&&(t[o.prntBkmkId]={...c,children:c.children.map(d=>d===r?e:d)})}else a=n.rootIds.map(c=>c===r?e:c);return{...n,nodes:t,rootIds:a}}function x(n){return n.rootIds.find(r=>n.nodes[r]?.type==="F")??null}function P(n,r){const e={};Object.values(n).forEach(d=>{const i=d.bkmkId,l=d.prntBkmkId;!i||!l||l==="-"||l===i||(e[l]??=[]).push(i)});const s=new Set,o=d=>{if(s.has(d))return null;const i=n[d];if(!i)return null;s.add(d);try{if(i.type==="F"){const f=i,m=e[d]??[];return{type:"F",bkmkId:d,bkmkNm:f.bkmkNm,prntBkmkId:f.prntBkmkId,children:m.map(o).filter(Boolean)}}const l=i;return{type:"M",bkmkId:d,bkmkNm:l.menuNm,menuId:l.menuId,menuNm:l.menuNm,prntBkmkId:l.prntBkmkId}}finally{s.delete(d)}},t=Object.values(n).filter(d=>d.prntBkmkId==="-"&&d.type==="M").map(d=>d.bkmkId),a=Object.values(n).filter(d=>d.prntBkmkId==="-"&&d.type==="F").map(d=>d.bkmkId);return Array.from(new Set([...r,...t,...a])).map(o).filter(Boolean)}function D(n,r){for(const e of Object.values(n))if(e.type==="M"&&e.menuId===r)return e.bkmkId;return null}function j(n,r,e){(!e||e==="-"?r:n[e].children||[]).forEach((o,t)=>{const a=n[o];a&&(a.sortOrdr=t)})}const G={DEFAULT_PRNT_GBCD:1},le=n=>n&&typeof n=="object"&&typeof n.menuId=="string"&&typeof n.menuNm=="string",Y=n=>Array.isArray(n)&&n.every(le);let T=[],q=[];const ie=n=>{if(n&&typeof n=="object"){const r=n;if(r.menus&&Y(r.menus))return r.menus;if(Y(n))return n}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},ue=(n,r)=>!!r&&n.crprCd===r.crprCd&&n.userId===r.userId&&(n.prntGbcd??G.DEFAULT_PRNT_GBCD)===(r.prntGbcd??G.DEFAULT_PRNT_GBCD),me=n=>{if(T.length===n.length&&T.every((t,a)=>t.menuId===n[a]?.menuId&&t.menuPrntId===n[a]?.menuPrntId))return q;if(!n.length)return[];const r=new Map,e=[];n.forEach(t=>t?.menuId&&r.set(t.menuId,{...t,children:[]})),n.forEach(t=>{const a=r.get(t.menuId);a&&(t.menuPrntId&&t.menuPrntId!==""&&t.menuPrntId!=="-"?r.get(t.menuPrntId)?.children?.push(a):e.push(a))});const s=t=>t.sort((a,c)=>(a?.menuNo??0)-(c?.menuNo??0)).map(a=>({...a,children:a.children&&a.children.length?s(a.children):void 0})),o=s(e);return T=[...n],q=o,o},A=b.create((n,r)=>({menuList:[],flatMenuList:[],isLoading:!1,error:null,_lastFetchParams:null,fetchMenu:async({crprCd:e,userId:s,prntGbcd:o})=>{const t={crprCd:e,userId:s,prntGbcd:o??G.DEFAULT_PRNT_GBCD};if(ue(t,r()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}n({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await y.callService(y.getServiceCode("AUTH_MENU"),t),c=ie(a),d=me(c);n({flatMenuList:c,menuList:d,isLoading:!1,error:null})}catch(a){n({isLoading:!1,error:a?.message??"메뉴 로드 실패"})}},clearMenu:()=>{n({menuList:[],flatMenuList:[],error:null,_lastFetchParams:null})},findMenuById:e=>{const{flatMenuList:s}=r();return s.find(o=>o.menuId===e)??null}})),O={MAX_TABS:15},U=b.create((n,r)=>({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:O.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},clearMenuViewStore:()=>{n({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:O.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{}})},openTabFromMenu:(e,s)=>{const{tabs:o}=r(),t=o.find(c=>c.key===e.menuId),a=o.find(c=>c.key===e.menuId);if(t)a!=null?(n({activeMenuId:e.menuId,activeMenuItem:e}),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)):L.message.warning("유효하지 않은 메뉴정보입니다.");else{if(o.length>O.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),L.message.warning(`최대 ${O.MAX_TABS}개의 탭만 열 수 있습니다.
2
- 기존 탭을 닫고 다시 시도해주세요.`);return}const c={key:e.menuId,label:e.menuNm,gubun:"M",menuItem:e,closable:!0};n({tabs:[...o,c],activeMenuId:e.menuId,activeMenuItem:e}),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)}},openTabByMenuId:(e,s)=>{const o=A.getState().findMenuById(e);o?r().openTabFromMenu(o,s):L.message.warning("메뉴 ID를 찾을 수 없습니다.")},openDetailView:(e,s,o)=>{const{tabs:t}=r();if(t.find(c=>c.key===e.viewId))r().focusTab(e.viewId);else{const c={key:e.viewId,label:e.viewLabel,gubun:"C",componentItem:{scrnPath:s,prsnInfoYn:o,prntInfo:e.prntInfo},closable:!0};n({tabs:[...t,c],activeMenuId:e.viewId,activeDetailItem:e}),r().setTabParams(e.viewId,e.viewParams||{})}},closeTab:e=>{const{tabs:s,activeMenuId:o}=r();s.find(c=>c.key===e);const t=s.filter(c=>c.key!==e);let a=o;if(o===e){const c=s.findIndex(d=>d.key===e);a=t.length?t[Math.min(c,t.length-1)]?.key??null:null}n({tabs:t}),a&&r().focusTab(a)},focusTab:e=>{const{tabs:s}=r(),o=s.find(t=>t.key===e);if(o){const t=o.gubun==="C"?{viewId:o.key,viewLabel:o.label,prntInfo:o.componentItem?.prntInfo}:null;o.menuItem?.prsnInfoYn==="Y"?(n({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),console.log("✅ 탭 포커스 (개인정보) - activeMenuItem:",o.menuItem),r().setProtectFlagForKey(e)):(n({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),r().clearProtectFlagForKey(e))}else n({activeMenuId:e,activeMenuItem:null,activeDetailItem:null}),console.warn("❌ 탭을 찾을 수 없음:",e)},closeAllTabs:()=>n({tabs:[],activeMenuId:null,activeMenuItem:null,activeDetailItem:null}),toggleSidebar:()=>n(e=>({sidebarCollapsed:!e.sidebarCollapsed})),reorderTabs:e=>n(s=>{const o=new Map(s.tabs.map(t=>[t.key,t]));return{tabs:e.map(t=>o.get(t)).filter(Boolean)}}),setProtectFlagForKey:e=>n(s=>({tabProtectFlag:{...s.tabProtectFlag,[e]:!0}})),clearProtectFlagForKey:e=>n(s=>{const o={...s.tabProtectFlag};return delete o[e],{tabProtectFlag:o}}),setTabParams:(e,s)=>n(o=>{const t=o.tabParams[e]||{},a={...s||{}};return Object.keys(t).length===Object.keys(a).length&&Object.keys(a).every(d=>t[d]===a[d])?o:{tabParams:{...o.tabParams,[e]:a}}}),setComponentLabelMap:(e,s)=>n({componentLabelMap:e})})),J=b.create((n,r)=>({popups:[],activePopupId:null,isLoading:!1,error:null,zIndexSeed:1e3,openPopup:async(e,s,o)=>{n({isLoading:!0,error:null});try{let t=null;const a=await y.callService(y.getServiceCode("SRCH_POPU"),{crprCd:y.getUserInfo()?.crprCd,popuCd:e});t=a?.mstr;const c=a?.dtls||[];if(!t||!t.popuUrl){const u=`팝업 정보를 찾을 수 없습니다: ${e}`;throw console.error(u),new Error(u)}const i=(u=>`/src/pages/views/popup/${u}`)(t.popuUrl),l=r().zIndexSeed+1,f={popupId:`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,popupCode:e,popupTitle:o?.title||t.popuNm||"팝업",popupUrl:i,popupParams:s,width:t.popuWdth||800,height:t.popuHght||600,resizable:!0,draggable:!0,buttonList:c,config:o,zIndex:l},m=r().popups.find(u=>u.popupCode===e);if(m){n({activePopupId:m.popupId,popups:r().popups.map(u=>u.popupId===m.popupId?{...u,config:o}:u),isLoading:!1});return}n(u=>({popups:[...u.popups,f],activePopupId:f.popupId,isLoading:!1,zIndexSeed:l}))}catch(t){n({error:t instanceof Error?t.message:"팝업 열기 실패",isLoading:!1})}},openCorePopup:(e,s)=>{const o=`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,t=r().zIndexSeed+1,c=V.localPopupRegistry[e]?.defaultConfig||{},d={...c,...s,buttons:s?.buttons!==void 0?s.buttons:c.buttons,callback:s?.callback!==void 0?s.callback:c.callback},i=s?.defaultParams||{},l=r().popups.find(m=>m.popupCode===e&&m.isLocal);if(l){const m=r().zIndexSeed+1;n({activePopupId:l.popupId,zIndexSeed:m}),n(u=>({popups:u.popups.map(h=>h.popupId===l.popupId?{...h,config:d,zIndex:m,close:()=>{r().closePopup(l.popupId)}}:h)}));return}const f={popupId:o,popupCode:e,popupTitle:d.title||e,popupUrl:"",popupParams:i,width:d.width||1e3,height:d.height||700,resizable:d.resizable!==void 0?d.resizable:!0,draggable:d.draggable!==void 0?d.draggable:!0,buttonList:[],config:d,isLocal:!0,zIndex:t,close:()=>{r().closePopup(o)}};n(m=>({popups:[...m.popups,f],activePopupId:o,zIndexSeed:t}))},closePopup:e=>{const{popups:s,activePopupId:o}=r(),t=s.filter(c=>c.popupId!==e);let a=o;o===e&&(a=t.length>0?t[t.length-1].popupId:null),n({popups:t,activePopupId:a})},closeAllPopups:()=>{n({popups:[],activePopupId:null})},setActivePopup:e=>{const s=r().zIndexSeed+1;n(o=>({activePopupId:e,zIndexSeed:s,popups:o.popups.map(t=>t.popupId===e?{...t,zIndex:s}:t)}))},updatePopupConfig:(e,s)=>{n(o=>({popups:o.popups.map(t=>t.popupId===e?{...t,config:{...t.config,...s}}:t)}))}})),$=b.create()(M((n,r)=>({systemMap:[],fetchSystemMap:async()=>{n({systemMap:[{sysCd:"KE",appItCd:"ERPS",appCd:"SAP",systemNm:"K-ERP",appNm:"SAP"},{sysCd:"KE",appItCd:"KERP",appCd:"FI",systemNm:"K-ERP",appNm:"재무회계"},{sysCd:"KE",appItCd:"KERP",appCd:"FM",systemNm:"K-ERP",appNm:"예산관리"},{sysCd:"KE",appItCd:"KERP",appCd:"MM",systemNm:"K-ERP",appNm:"구매계약"},{sysCd:"KE",appItCd:"KERP",appCd:"SD",systemNm:"K-ERP",appNm:"영업관리"},{sysCd:"CH",appItCd:"KERP",appCd:"PMN",systemNm:"K-ERP",appNm:"파트너관리"},{sysCd:"FB",appItCd:"FBK",appCd:"FBK",systemNm:"펌뱅킹",appNm:"펌뱅킹"},{sysCd:"IA",appItCd:"IAC",appCd:"IAC",systemNm:"내부회계",appNm:"내부회계"},{sysCd:"ET",appItCd:"ETAX",appCd:"ETAX",systemNm:"전자세금계산서",appNm:"전자세금계산서"},{sysCd:"HR",appItCd:"KHR",appCd:"HR",systemNm:"K-HR",appNm:"HR 솔루션"},{sysCd:"YT",appItCd:"KHYT",appCd:"YT",systemNm:"K-HR 연말정산",appNm:"연말정산"},{sysCd:"CM",appItCd:"KCM",appCd:"CM",systemNm:"K-HR 프레임워크 공통",appNm:"프레임워크 공통"},{sysCd:"PA",appItCd:"KHPE",appCd:"PE",systemNm:"K-HR 평정",appNm:"평정"},{sysCd:"OT",appItCd:"POF",appCd:"POF",systemNm:"시간외(PC-OFF)",appNm:"시간외(PC-OFF)"},{sysCd:"DC",appItCd:"CDT",appCd:"CDT",systemNm:"전자계약",appNm:"전자계약"},{sysCd:"KS",appItCd:"KSCM",appCd:"KSCM",systemNm:"KS-공통",appNm:"KS-공통"},{sysCd:"KS",appItCd:"EAUD",appCd:"EAUD",systemNm:"K-업무지원",appNm:"e-감사"},{sysCd:"KS",appItCd:"INR",appCd:"INR",systemNm:"K-업무지원",appNm:"청렴신고"},{sysCd:"KS",appItCd:"ITSM",appCd:"ITAM",systemNm:"K-업무지원",appNm:"ITAM"},{sysCd:"KS",appItCd:"CMM",appCd:"CMM",systemNm:"K-업무지원",appNm:"차량/회의실"},{sysCd:"KS",appItCd:"OAM",appCd:"OAM",systemNm:"K-업무지원",appNm:"OA전산물품관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"GAM",systemNm:"K-업무지원",appNm:"총무관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"ACM",systemNm:"K-업무지원",appNm:"출입관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"IVM",systemNm:"K-업무지원",appNm:"비품관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"SGS",systemNm:"K-업무지원",appNm:"인장서비스"},{sysCd:"KS",appItCd:"HIS",appCd:"HIS",systemNm:"K-업무지원",appNm:"사료관리"},{sysCd:"KS",appItCd:"WFAX",appCd:"WFAX",systemNm:"K-업무지원",appNm:"웹펙스서비스"},{sysCd:"KS",appItCd:"SMS",appCd:"SMS",systemNm:"K-업무지원",appNm:"메시지서비스"},{sysCd:"KS",appItCd:"BID",appCd:"BID",systemNm:"K-업무지원",appNm:"경영공시"},{sysCd:"KS",appItCd:"PAM",appCd:"PAM",systemNm:"K-업무지원",appNm:"언론미디어"},{sysCd:"KS",appItCd:"DAC",appCd:"DAC",systemNm:"K-업무지원",appNm:"심의자문위원회"},{sysCd:"KS",appItCd:"IPR",appCd:"IPR",systemNm:"K-업무지원",appNm:"지식재산권신청"},{sysCd:"KS",appItCd:"ISB",appCd:"ISB",systemNm:"K-업무지원",appNm:"정보공유게시판"},{sysCd:"DE",appItCd:"BCOM",appCd:"BCOM",systemNm:"온통",appNm:"온통"},{sysCd:"TS",appItCd:"ITSM",appCd:"ITSM",systemNm:"ITSM",appNm:"ITSM"},{sysCd:"EP",appItCd:"EPOP",appCd:"EPOP",systemNm:"국민신문고",appNm:"국민신문고"},{sysCd:"VC",appItCd:"VOC",appCd:"VOC",systemNm:"VOC",appNm:"VOC"},{sysCd:"CC",appItCd:"CAL",appCd:"CAL",systemNm:"콜센터",appNm:"콜센터"},{sysCd:"LA",appItCd:"LEG",appCd:"LEG",systemNm:"법규포털",appNm:"법규포털"},{sysCd:"IM",appItCd:"IDXM",appCd:"IDXM",systemNm:"지수방법론",appNm:"지수방법론"},{sysCd:"PM",appItCd:"ORM",appCd:"ORM",systemNm:"운영리스크관리",appNm:"운영리스크관리"},{sysCd:"RF",appItCd:"RFID",appCd:"RFID",systemNm:"RFID(비품관리)",appNm:"RFID(비품관리)"},{sysCd:"SL",appItCd:"SGM",appCd:"SGM",systemNm:"인장관리",appNm:"인장관리"},{sysCd:"DM",appItCd:"LBS",appCd:"LBS",systemNm:"도서관리",appNm:"도서관리"},{sysCd:"HE",appItCd:"RMS",appCd:"RMS",systemNm:"원격지원",appNm:"원격지원"},{sysCd:"WF",appItCd:"WFX",appCd:"WFX",systemNm:"WebFax",appNm:"WebFax"},{sysCd:"SM",appItCd:"SMT",appCd:"SMT",systemNm:"SMS",appNm:"SMS"},{sysCd:"SO",appItCd:"SSO",appCd:"SSO",systemNm:"SSO",appNm:"SSO"},{sysCd:"SF",appItCd:"SFO",appCd:"SFO",systemNm:"생체인증(One Pass)",appNm:"생체인증 FIDO"},{sysCd:"SP",appItCd:"SPO",appCd:"SPO",systemNm:"생체인증(장정맥)",appNm:"생체인증 장정맥"},{sysCd:"AG",appItCd:"APG",appCd:"APG",systemNm:"API GW",appNm:"API Gateway"},{sysCd:"AM",appItCd:"APM",appCd:"APM",systemNm:"APM",appNm:"APM"},{sysCd:"JS",appItCd:"BXS",appCd:"BXS",systemNm:"배치스케줄러",appNm:"배치스케줄러"},{sysCd:"DT",appItCd:"PDT",appCd:"PDT",systemNm:"개인정보변환",appNm:"개인정보변환"}]})},setSystemMap:e=>{n({systemMap:e})},clearSystemMap:()=>{n({systemMap:[]})},getBySysCd:e=>r().systemMap.filter(s=>s.sysCd===e),getByAppItCd:e=>r().systemMap.filter(s=>s.appItCd===e),findByAppCd:e=>r().systemMap.find(s=>s.appCd===e),filterSystemMap:e=>{const{sysCd:s,appItCd:o,appCd:t}=e;return r().systemMap.filter(a=>(s?a.sysCd===s:!0)&&(o?a.appItCd===o:!0)&&(t?a.appCd===t:!0))}}),{name:"system-info-store"})),Ce=b.create(n=>({requestCount:0,loading:!1,showLoading:()=>n(r=>{const e=r.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>n(r=>{const e=Math.max(0,r.requestCount-1);return{requestCount:e,loading:e>0}})})),he=b.create(n=>({requestCount:0,loading:!1,showLoading:()=>n(r=>{const e=r.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>n(r=>{const e=Math.max(0,r.requestCount-1);return{requestCount:e,loading:e>0}})}));function W(){const[n,r]=F.useState(!1),e=F.useCallback(s=>{const o=s?.getModifierState?.("CapsLock");typeof o=="boolean"&&r(o)},[]);return{capsOn:n,onKeyDown:e}}function fe(n){const{loginApi:r,fetchCommonCodes:e,onAfterLogin:s,onError:o,rememberCookie:t={enabled:!0,days:30}}=n,[a,c]=F.useState(!1),{capsOn:d,onKeyDown:i}=W(),l="SCMSIGN00101",f=`${__SYS_CD__}_login_id`,m={id:t?.enabled?y.getCookie(f):void 0,pswr:void 0},u=F.useCallback(async(h,C)=>{c(!0);try{const S={crprCd:"100",id:h.id,pswr:await y.encryptSha256(h.pswr)},g=await(r??(N=>y.callService(l,N)))(S);if(g?.userInfo?.userId){if(w.getState().setLoginUser(g.userInfo,g?.hrInfo),t?.enabled){const N=t.days??30;h.remember?y.setCookie(f,h.id??"",N):y.setCookie(f,"",0)}return e?await e():await _.getState().fetchCommonCodes(),s?s(g,C):(L.message.success(`${g.userInfo.userNm}님 환영합니다.`),C("/main")),{user:g.userInfo,response:g}}else throw o?.({user:g.userInfo,response:g,navigate:C}),new Error("사용자 정보가 유효하지 않습니다.")}catch(S){throw o?.(S),S}finally{c(!1)}},[l,r,e,s,o,t?.enabled,t?.days]);return{loading:a,capsOn:d,onKeyDown:i,prefills:m,doLogin:u}}function Ie(){const n=Q.useNavigate();return()=>{w.getState().clearLoginUser(),$.getState().clearSystemMap(),_.getState().clearCodes(),A.getState().clearMenu(),U.getState().clearMenuViewStore(),R.getState().clearFavorites(),n("/login")}}const ye=()=>_.getState(),ge=()=>J.getState(),Se=()=>w.getState(),Ne=()=>R.getState(),be=()=>A.getState(),Me=()=>U.getState(),ke=()=>$.getState();exports.useCapsLock=W;exports.useCode=ye;exports.useCodeStore=_;exports.useColorStore=se;exports.useFavorite=Ne;exports.useFavoriteStore=R;exports.useLoadingStore=Ce;exports.useLogin=fe;exports.useLogout=Ie;exports.useMenuModel=be;exports.useMenuModelStore=A;exports.useMenuView=Me;exports.useMenuViewStore=U;exports.useOptionStore=oe;exports.usePopupLoadingStore=he;exports.usePopupState=ge;exports.usePopupStore=J;exports.useSystemCode=ke;exports.useSystemStore=$;exports.useUser=Se;exports.useUserStore=w;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("zustand"),y=require("../utils/index.cjs"),L=require("antd"),V=require("../chunks/layout-components-Ddn-4n36.cjs"),F=require("react"),Q=require("react-router-dom");function ee(n,r){let e;try{e=n()}catch{return}return{getItem:o=>{var t;const a=d=>d===null?null:JSON.parse(d,void 0),c=(t=e.getItem(o))!=null?t:null;return c instanceof Promise?c.then(a):a(c)},setItem:(o,t)=>e.setItem(o,JSON.stringify(t,void 0)),removeItem:o=>e.removeItem(o)}}const H=n=>r=>{try{const e=n(r);return e instanceof Promise?e:{then(s){return H(s)(e)},catch(s){return this}}}catch(e){return{then(s){return this},catch(s){return H(s)(e)}}}},te=(n,r)=>(e,s,o)=>{let t={storage:ee(()=>localStorage),partialize:C=>C,version:0,merge:(C,S)=>({...S,...C}),...r},a=!1;const c=new Set,d=new Set;let i=t.storage;if(!i)return n((...C)=>{console.warn(`[zustand persist middleware] Unable to update item '${t.name}', the given storage is currently unavailable.`),e(...C)},s,o);const l=()=>{const C=t.partialize({...s()});return i.setItem(t.name,{state:C,version:t.version})},f=o.setState;o.setState=(C,S)=>(f(C,S),l());const m=n((...C)=>(e(...C),l()),s,o);o.getInitialState=()=>m;let u;const h=()=>{var C,S;if(!i)return;a=!1,c.forEach(g=>{var N;return g((N=s())!=null?N:m)});const k=((S=t.onRehydrateStorage)==null?void 0:S.call(t,(C=s())!=null?C:m))||void 0;return H(i.getItem.bind(i))(t.name).then(g=>{if(g)if(typeof g.version=="number"&&g.version!==t.version){if(t.migrate){const N=t.migrate(g.state,g.version);return N instanceof Promise?N.then(K=>[!0,K]):[!0,N]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,g.state];return[!1,void 0]}).then(g=>{var N;const[K,Z]=g;if(u=t.merge(Z,(N=s())!=null?N:m),e(u,!0),K)return l()}).then(()=>{k?.(u,void 0),u=s(),a=!0,d.forEach(g=>g(u))}).catch(g=>{k?.(void 0,g)})};return o.persist={setOptions:C=>{t={...t,...C},C.storage&&(i=C.storage)},clearStorage:()=>{i?.removeItem(t.name)},getOptions:()=>t,rehydrate:()=>h(),hasHydrated:()=>a,onHydrate:C=>(c.add(C),()=>{c.delete(C)}),onFinishHydration:C=>(d.add(C),()=>{d.delete(C)})},t.skipHydration||h(),u||m},M=te,w=b.create()(M((n,r)=>({user:null,hrInfo:null,buttonAuths:{},componentSize:1,gridSize:2,spacingSize:2,enableProtectWrapper:!0,isLoggedIn:()=>!!r().user,setLoginUser:(e,s)=>{n({user:e,hrInfo:s??null}),console.log("사용자 로그인:",e,s)},clearLoginUser:()=>{n({user:null,hrInfo:null,buttonAuths:{}}),console.log("사용자 로그아웃")},updateUser:(e,s)=>{const o=r().user,t=r().hrInfo;o&&n({user:{...o,...e}}),t&&n({hrInfo:{...t,...s}})},setComponentSize:e=>{n({componentSize:e}),console.log("컴포넌트 사이즈 변경:",e)},setGridSize:e=>{n({gridSize:e}),console.log("그리드 사이즈 변경:",e)},setSpacingSize:e=>{n({spacingSize:e}),console.log("여백 사이즈 변경:",e)},setEnableProtectWrapper:e=>{n({enableProtectWrapper:e})},getButtonAuth:(e,s)=>{const o=`${e}_${s}`;return r().buttonAuths[o]||null},setButtonAuth:(e,s,o)=>{const t=`${e}_${s}`;n(a=>({buttonAuths:{...a.buttonAuths,[t]:o}}))},clearButtonAuths:()=>{n({buttonAuths:{}})}}),{name:"user-storage",partialize:n=>({user:n.user,hrInfo:n.hrInfo,componentSize:n.componentSize,gridSize:n.gridSize,spacingSize:n.spacingSize,enableProtectWrapper:n.enableProtectWrapper,isLoggedIn:n.isLoggedIn})})),B={CACHE_SIZE_LIMIT:1e3},p={codeCache:new Map,nameCache:new Map,optionCache:new Map,colorCache:new Map,loadedGroups:new Set,cacheHits:new Map,clearCache(){this.codeCache.clear(),this.nameCache.clear(),this.optionCache.clear(),this.colorCache.clear(),this.loadedGroups.clear(),this.cacheHits.clear()},cleanupCache(){const n=Array.from(this.cacheHits.entries());n.sort((e,s)=>e[1]-s[1]),n.slice(0,Math.floor(n.length*.3)).forEach(([e])=>{this.codeCache.delete(e),this.nameCache.delete(e),this.optionCache.delete(e),this.colorCache.delete(e),this.cacheHits.delete(e)})},isGroupLoaded(n){return this.loadedGroups.has(n)},markGroupLoaded(n){this.loadedGroups.add(n)}},v=n=>{console.log("대규모 데이터 변환 시작:",n);const r={};if(n&&n.code&&Array.isArray(n.code)){const e=n.code,s=n.opt||[],o=new Map;s.forEach(t=>{t.cmmnCd&&t.enblYn==="Y"&&(o.has(t.cmmnCd)||o.set(t.cmmnCd,[]),o.get(t.cmmnCd).push(t))}),e.forEach(t=>{if(t&&t.cmmnCdGrp&&t.cmmnCd&&t.enblYn==="Y"){const a=t.cmmnCdGrp;r[a]||(r[a]={});const d=(o.get(t.cmmnCd)||[]).reduce((i,l)=>(l.optnCd&&l.optnNm&&(i[l.optnCd]=l.optnNm),i),{});r[a][t.cmmnCd]={codeValue:t.cmmnCd,codeNm:t.cmmnCdNm,groupCode:t.cmmnCdGrp,commonCode:t.cmmnCd,labelColor:t.cmmnCdClr,systemCodeYn:t.syscdYn,sortOrder:parseInt(t.sortOrd)||1,enabled:t.enblYn==="Y",options:Object.keys(d).length>0?d:null,originalData:t}}})}return console.log("대규모 데이터 변환 완료:",r),r},I=b.create()(M((n,r)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchSystemCodes:async()=>{n({isLoading:!0,error:null});try{console.log("시스템 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await y.callService(y.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("시스템 공통코드 응답:",e),console.log("시스템 공통코드목록:",e.code),console.log("시스템 공통코드옵션목록:",e.opt);const s=v(e),t={...r().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),n({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("시스템 공통코드 데이터 가져오기 완료")}catch(e){console.error("시스템 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"시스템 공통코드 데이터 가져오기 실패"})}},fetchBusinessCodes:async()=>{n({isLoading:!0,error:null});try{console.log("업무 공통코드 데이터 가져오기 시작: SCMSIGN00302");const e=await y.callService("SCMSIGN00302",{sysCd:__SYS_CD__});console.log("업무 공통코드 응답:",e),console.log("업무 공통코드목록:",e.code),console.log("업무 공통코드옵션목록:",e.opt);const s=v(e),t={...r().codeData||{},...s};p.clearCache();const a=new Set(Object.keys(t));a.forEach(c=>{p.markGroupLoaded(c)}),n({codeData:t,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:a}),console.log("업무 공통코드 데이터 가져오기 완료")}catch(e){console.error("업무 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"업무 공통코드 데이터 가져오기 실패"})}},fetchData:async()=>{n({isLoading:!0,error:null});try{console.log("전체 공통코드 데이터 가져오기 시작 (시스템 + 업무)");const[e,s]=await Promise.all([y.callService(y.getServiceCode("SRCH_CODE"),{crprCd:"100"}),y.callService("SCMSIGN00302",{sysCd:__SYS_CD__})]);console.log("시스템 공통코드 응답:",e),console.log("업무 공통코드 응답:",s);const o=v(e),t=v(s),a={...o,...t};p.clearCache();const c=new Set(Object.keys(a));c.forEach(d=>{p.markGroupLoaded(d)}),n({codeData:a,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:c}),console.log("전체 공통코드 데이터 가져오기 완료")}catch(e){console.error("전체 공통코드 데이터 가져오기 실패:",e),n({isLoading:!1,error:e instanceof Error?e.message:"전체 공통코드 데이터 가져오기 실패"})}},loadSpecificGroup:async e=>{const{codeData:s,loadedGroups:o}=r();if(!s||o.has(e))return;const t=new Set(o).add(e);n({loadedGroups:t}),p.markGroupLoaded(e)},setData:e=>{p.clearCache();const s=new Set(Object.keys(e));s.forEach(o=>{p.markGroupLoaded(o)}),n({codeData:e,lastUpdated:new Date,loadedGroups:s})},clearData:()=>{p.clearCache(),n({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set})},getLoadedGroups:()=>Array.from(r().loadedGroups)}),{name:"large-data-storage",partialize:n=>({codeData:n.codeData,lastUpdated:n.lastUpdated,loadedGroups:Array.from(n.loadedGroups)})})),_=b.create()(M((n,r)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getCodeList:(e,s)=>{const{enabledOnly:o=!0,systemCodeOnly:t=!1,sortByOrder:a=!1,excludeParentCode:c=!1}=s||{},d=`simpleCodeList_${e}_${o}_${t}_${a}_${c}`;if(p.optionCache.has(d)){const h=p.cacheHits.get(d)||0;return p.cacheHits.set(d,h+1),p.optionCache.get(d)}const i=I.getState().codeData;if(!i)return[];if(!p.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],f=i[e];f&&Object.values(f).forEach(h=>{if(!(o&&!h.enabled)&&!(t&&h.systemCodeYn!=="Y"))if(c){const C=e.length,S=h.codeValue.substring(C);S.length>0&&l.push({...h,codeValue:S})}else l.push(h)});let m;a?m=l.sort((h,C)=>h.sortOrder!==C.sortOrder?h.sortOrder-C.sortOrder:h.codeValue.localeCompare(C.codeValue)):m=l.sort((h,C)=>h.codeValue.localeCompare(C.codeValue));const u=m.map(h=>({label:h.codeNm,value:h.codeValue,tagColor:h.labelColor}));return p.optionCache.size>=B.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.optionCache.set(d,u),p.cacheHits.set(d,1),u},getCodeName:e=>{if(p.nameCache.has(e)){const o=p.cacheHits.get(`name_${e}`)||0;return p.cacheHits.set(`name_${e}`,o+1),p.nameCache.get(e)}const s=I.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.nameCache.set(e,t.codeNm),p.cacheHits.set(`name_${e}`,1),t.codeNm;return null},getCodeColor:e=>{if(p.colorCache.has(e)){const o=p.cacheHits.get(`color_${e}`)||0;return p.cacheHits.set(`color_${e}`,o+1),p.colorCache.get(e)}const s=I.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.colorCache.set(e,t.labelColor||""),p.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getGridLookup:e=>{const s=`gridLookup_${e}`;if(p.optionCache.has(s)){const i=p.cacheHits.get(s)||0;return p.cacheHits.set(s,i+1),p.optionCache.get(s)}const o=I.getState().codeData;if(!o)return{labels:[],values:[],lookupDisplay:!0};const t=o[e];if(!t)return{labels:[],values:[],lookupDisplay:!0};const a=[],c=[];Object.values(t).filter(i=>i.enabled).sort((i,l)=>i.sortOrder-l.sortOrder).forEach(i=>{a.push(i.codeNm),c.push(i.codeValue)});const d={labels:a,values:c,lookupDisplay:!0};return p.optionCache.set(s,d),p.cacheHits.set(s,1),d},getCodeByOption:(e,s,o)=>{const t=`codeByOption_${e}_${s}_${o}`;if(p.codeCache.has(t)){const l=p.cacheHits.get(t)||0;return p.cacheHits.set(t,l+1),p.codeCache.get(t)}const a=I.getState().codeData;if(!a)return[];const c=[],d=a[e];d&&Object.values(d).forEach(l=>{l.enabled&&l.options&&l.options[s]===o&&c.push({...l,codeNm:l.options[s]||l.codeNm})});const i=c.sort((l,f)=>l.codeValue.localeCompare(f.codeValue));return p.codeCache.size>=B.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.codeCache.set(t,i),p.cacheHits.set(t,1),i},getCodeListByOption:(e,s,o)=>{const{enabledOnly:t=!0,systemCodeOnly:a=!1,sortByOrder:c=!1}=o||{},d=`codeListByOption_${e}_${s}_${t}_${a}_${c}`;if(p.codeCache.has(d)){const u=p.cacheHits.get(d)||0;return p.cacheHits.set(d,u+1),p.codeCache.get(d)}const i=I.getState().codeData;if(!i)return[];if(!p.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],f=i[e];f&&Object.values(f).forEach(u=>{t&&!u.enabled||a&&u.systemCodeYn!=="Y"||u.options&&u.options[s]&&l.push({label:u.options[s],value:u.commonCode,tagColor:u.labelColor})});let m;return c?m=l.sort((u,h)=>u.value.localeCompare(h.value)):m=l.sort((u,h)=>u.value.localeCompare(h.value)),p.codeCache.size>=B.CACHE_SIZE_LIMIT&&p.cleanupCache(),p.codeCache.set(d,m),p.cacheHits.set(d,1),m},getAvailableGroupCodes:()=>{const e="available_group_codes";if(p.nameCache.has(e)){const t=p.cacheHits.get(e)||0;return p.cacheHits.set(e,t+1),JSON.parse(p.nameCache.get(e))}const s=I.getState().codeData;if(!s)return[];const o=Object.keys(s).sort();return p.nameCache.set(e,JSON.stringify(o)),p.cacheHits.set(e,1),o},clearCodes:()=>{I.getState().clearData()}}),{name:"code-storage",partialize:n=>({})})),oe=b.create()(M((n,r)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getOptionValue:(e,s)=>{const o=`option_${e}_${s}`;if(p.optionCache.has(o)){const c=p.cacheHits.get(o)||0;return p.cacheHits.set(o,c+1),p.optionCache.get(o)}const t=I.getState().codeData;if(!t)return null;const a=t[e];if(a&&a[s]){const c=a[s].options;return p.optionCache.set(o,c),p.cacheHits.set(o,1),c}return null},getOptionByKey:(e,s,o)=>{const t=`option_${e}_${s}_${o}`;if(p.optionCache.has(t)){const d=p.cacheHits.get(t)||0;return p.cacheHits.set(t,d+1),p.optionCache.get(t)}const a=r().getOptionValue(e,s),c=a?a[o]:null;return p.optionCache.set(t,c),p.cacheHits.set(t,1),c},clearCodes:()=>{I.getState().clearData()}}),{name:"option-storage",partialize:n=>({})})),se=b.create()(M((n,r)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getColorCode:e=>{if(p.colorCache.has(e)){const o=p.cacheHits.get(`color_${e}`)||0;return p.cacheHits.set(`color_${e}`,o+1),p.colorCache.get(e)}const s=I.getState().codeData;if(!s)return null;for(const o of Object.values(s))for(const t of Object.values(o))if(t.codeValue===e)return p.colorCache.set(e,t.labelColor||""),p.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(p.optionCache.has(e)){const t=p.cacheHits.get(e)||0;return p.cacheHits.set(e,t+1),p.optionCache.get(e)}const s=I.getState().codeData;if(!s)return[];const o=[];return Object.values(s).forEach(t=>{Object.values(t).forEach(a=>{a.labelColor&&o.push({code:a.codeValue,color:a.labelColor})})}),p.optionCache.set(e,o),p.cacheHits.set(e,1),o},clearCodes:()=>{I.getState().clearData()}}),{name:"color-storage",partialize:n=>({})})),ne=(n,r)=>({nodes:{},rootIds:[],loadedFor:void 0,loading:!1,error:void 0,treeNodes:[],isMenuBookmarked:e=>Object.values(r().nodes).some(s=>s.type==="M"&&s.menuId===e),getPrntBkmkIdByMenuId:e=>{const s=D(r().nodes,e);return s?r().nodes[s]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const s=D(r().nodes,e);if(!s)return null;const o=r().nodes[s];return o?.type==="M"?o:null},getFolderTree:e=>{const{nodes:s,rootIds:o}=r(),t=c=>e?c.toLowerCase().includes(e.toLowerCase()):!0,a=c=>{const d=s[c];if(!d||d.type!=="F")return null;const i=d,l=(i.children||[]).map(m=>s[m]).filter(m=>!!m&&m.type==="F").map(m=>a(m.bkmkId)).filter(Boolean);return t(i.bkmkNm)||l.length>0?{key:i.bkmkId,title:`📁 ${i.bkmkNm}`,children:l.length?l:void 0}:null};return o.map(c=>a(c)).filter(Boolean)},loadFavorites:async(e,s=!1)=>{console.log("loadFavorites ::::: ",e,s);const o=r();if(!(!s&&o.loadedFor===e&&Object.keys(o.nodes).length)){n({loading:!0,error:void 0});try{const t=await y.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],c=re(a),d=P(c.nodes,c.rootIds);n({...c,treeNodes:d,loadedFor:e,loading:!1})}catch(t){throw n({loading:!1,error:t?.message||"즐겨찾기 로드 실패"}),t}}},loadFavoritesIfNeeded:async e=>{const s=r();(s.loadedFor!==e||Object.keys(s.nodes).length===0)&&await r().loadFavorites(e)},clearFavorites:()=>{n({nodes:{},rootIds:[],treeNodes:[],loadedFor:void 0,loading:!1,error:void 0}),console.log("📚 북마크 스토어 초기화 완료")},addNode:async e=>{const s=E(r()),o=ae();n(t=>{const a=e.sortOrdr??z(t,e.prntBkmkId),c={...t,nodes:{...t.nodes,[o]:e.type==="F"?{bkmkId:o,type:"F",prntBkmkId:e.prntBkmkId||"-",sortOrdr:a,bkmkNm:e.bkmkNm??"새 폴더",children:[],sysCd:e.sysCd,userId:e.userId}:{bkmkId:o,type:"M",prntBkmkId:e.prntBkmkId,sortOrdr:a,menuId:e.menuId??"",menuNm:e.menuNm,sysCd:e.sysCd,userId:e.userId}},rootIds:t.rootIds.slice(),treeNodes:t.treeNodes};return ce(c,o,e.prntBkmkId),c.treeNodes=P(c.nodes,c.rootIds),c});try{let t=o;const a=z(r(),e.prntBkmkId),c=await y.callService("SCMBKMK00102",{iudFlag:"I",type:e.type,sysCd:e.sysCd,userId:e.userId,bkmkId:o,bkmkNm:e.bkmkNm,prntBkmkId:e.prntBkmkId,menuId:e.menuId,sortOrdr:a,chngId:y.getUserId()});return t=String(c?.bkmkId??c?.itemId??o),n(d=>{const i=pe(d,o,t);return{...i,treeNodes:P(i.nodes,i.rootIds)}}),t}catch(t){throw n(s),t}},moveNode:async({bkmkId:e,newPrntBkmkId:s,sortOrdr:o,userId:t})=>{const a=r(),c=structuredClone(a.nodes),d=[...a.rootIds],i=c[e];if(!i)return;if(s!=="-"){const u=c[s];if(!u||u.type!=="F")throw new Error("부모는 폴더만 가능합니다.")}const l=i.prntBkmkId??"-",f=l==="-"?d:c[l].children||=[];{const u=f.indexOf(e);u>=0&&f.splice(u,1)}const m=s==="-"?d:c[s].children||=[];m.splice(Math.max(0,Math.min(o,m.length)),0,e),i.prntBkmkId=s,n({nodes:c,rootIds:d}),j(c,d,s),j(c,d,l);try{await y.callService("SCMBKMK00104",{bkmkId:e,prntBkmkId:s,sortOrdr:o,chngId:t})}catch(u){throw n(a),u}},removeNode:async e=>{const s=E(r());n(o=>{if(!o.nodes[e])return o;const t={...o,nodes:{...o.nodes},rootIds:o.rootIds.slice(),treeNodes:o.treeNodes};return X(t,e),t.treeNodes=P(t.nodes,t.rootIds),t});try{await y.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw n(s),o}},editNode:async({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const c=E(r());n(d=>{const i={...d,nodes:{...d.nodes}},l=i.nodes[e];return l?.type==="F"&&typeof o=="string"&&(i.nodes[e]={...l,bkmkNm:o}),i});try{await y.callService("SCMBKMK00102",{iudFlag:"U",userId:s,bkmkId:e,bkmkNm:o,prntBkmkId:t,sortOrdr:a,chngId:y.getUserId()})}catch(d){throw n(c),d}},addFolder:async(e,s,o,t)=>await r().addNode({type:"F",bkmkNm:e,prntBkmkId:s,sysCd:o,userId:t}),addMenuToFolder:async(e,s)=>D(r().nodes,s.menuId)?"이미 북마크에 저장된 메뉴입니다.":await r().addNode({type:"M",prntBkmkId:e,sysCd:"KH",userId:y.getUserId(),menuId:s.menuId,menuNm:s.menuNm}),toggleMenuFavorite:async(e,s)=>{if(!e)return;const o=r(),t=Object.values(o.nodes).find(c=>c.type==="M"&&c.menuId===s.menuId);if(t){await r().removeNode(t.bkmkId);return}let a=x(o);a||(await r().loadFavorites(e,!0),a=x(r())),a&&await r().addNode({type:"M",prntBkmkId:a,sysCd:"KH",userId:y.getUserId(),menuId:s.menuId,menuNm:s.menuNm})},removeMenuByMenuId:async e=>{const s=r(),o=D(s.nodes,e);o&&await r().removeNode(o)},removeMenu:async e=>{await r().removeNode(e)},removeFolder:async e=>{await r().removeNode(e)},editFolder:async(e,s,o,t,a)=>{await r().editNode({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})},convertToAntTreeData:(e,s,o,t=!1)=>{const a=d=>o?d.toLowerCase().includes(o.toLowerCase()):!0,c=d=>{const i=e[d];if(!i||t&&i.type!=="F")return null;if(i.type==="F"){const l=i,f=(l.children||[]).map(u=>c(u)).filter(Boolean);return a(l.bkmkNm)||f.length>0?{key:l.bkmkId,type:"F",title:`📁 ${l.bkmkNm}`,bkmkNm:l.bkmkNm,prntBkmkId:l.prntBkmkId,sortOrdr:l.sortOrdr,fullPath:l.fullPath,children:f.length?f:void 0}:null}else{const l=i,f=l.menuNm?`${l.menuNm} (${l.menuId})`:l.menuId;return a(f)?{key:l.bkmkId,type:"M",title:`📄 ${f}`,prntBkmkId:l.prntBkmkId,sortOrdr:l.sortOrdr,fullPath:l.fullPath,isLeaf:!0}:null}};return s.map(c).filter(Boolean)}}),R=b.create(ne);function re(n){const r={},e=[],s=o=>{o.forEach(t=>{const a={type:t.type,bkmkId:t.bkmkId??t.BKMK_ID??t.id,prntBkmkId:t.prntBkmkId??t.PRNT_BKMK_ID??"-",sortOrdr:Number(t.sortOrdr??t.SORT_ORDR??0),sysCd:t.sysCd??t.SYS_CD,userId:t.userId??t.USER_ID,fullPath:t.fullPath??t.FULL_PATH};if(t.type==="F"){r[a.bkmkId]={...a,bkmkNm:t.bkmkNm??t.BKMK_NM??t.name??a.bkmkId,children:[]};const c=Array.isArray(t.children)?t.children:[];s(c)}else r[a.bkmkId]={...a,menuId:t.menuId??t.MENU_ID??"",menuNm:t.menuNm??t.MENU_NM}})};return s(n),Object.values(r).forEach(o=>{if(o.prntBkmkId&&o.prntBkmkId!=="-"){const t=r[o.prntBkmkId];t?.type==="F"&&t.children.push(o.bkmkId)}else o.type==="F"&&e.push(o.bkmkId)}),e.sort((o,t)=>(r[o].sortOrdr??0)-(r[t].sortOrdr??0)),Object.values(r).forEach(o=>{o.type==="F"&&o.children.sort((a,c)=>(r[a].sortOrdr??0)-(r[c].sortOrdr??0))}),{nodes:r,rootIds:e}}function E(n){return{...n,nodes:JSON.parse(JSON.stringify(n.nodes)),rootIds:n.rootIds.slice()}}function ae(){return`tmp_${Math.random().toString(36).slice(2,10)}`}function z(n,r){if(!r||r==="-")return n.rootIds.length;const e=n.nodes[r];return e?e.children.length:0}function ce(n,r,e){const s=n.nodes[r];if(s)if(e&&e!=="-"){const o=n.nodes[e];if(!o||o.type!=="F")return;s.prntBkmkId=e,o.children=[...o.children,r]}else s.prntBkmkId="-",n.rootIds=[...n.rootIds,r]}function de(n,r){const e=n.nodes[r];if(!e)return;const s=e.prntBkmkId;if(s&&s!=="-"){const o=n.nodes[s];o?.type==="F"&&(o.children=o.children.filter(t=>t!==r))}else n.rootIds=n.rootIds.filter(o=>o!==r)}function X(n,r){const e=n.nodes[r];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>X(n,a)),de(n,r);const{[r]:s,...o}=n.nodes;n.nodes=o}function pe(n,r,e){if(r===e)return n;const s=n.nodes[r];if(!s)return n;const o=JSON.parse(JSON.stringify(s));o.bkmkId=e;const t={...n.nodes,[e]:o};delete t[r];let a=n.rootIds;if(o.prntBkmkId&&o.prntBkmkId!=="-"){const c=t[o.prntBkmkId];c?.type==="F"&&(t[o.prntBkmkId]={...c,children:c.children.map(d=>d===r?e:d)})}else a=n.rootIds.map(c=>c===r?e:c);return{...n,nodes:t,rootIds:a}}function x(n){return n.rootIds.find(r=>n.nodes[r]?.type==="F")??null}function P(n,r){const e={};Object.values(n).forEach(d=>{const i=d.bkmkId,l=d.prntBkmkId;!i||!l||l==="-"||l===i||(e[l]??=[]).push(i)});const s=new Set,o=d=>{if(s.has(d))return null;const i=n[d];if(!i)return null;s.add(d);try{if(i.type==="F"){const f=i,m=e[d]??[];return{type:"F",bkmkId:d,bkmkNm:f.bkmkNm,prntBkmkId:f.prntBkmkId,children:m.map(o).filter(Boolean)}}const l=i;return{type:"M",bkmkId:d,bkmkNm:l.menuNm,menuId:l.menuId,menuNm:l.menuNm,prntBkmkId:l.prntBkmkId}}finally{s.delete(d)}},t=Object.values(n).filter(d=>d.prntBkmkId==="-"&&d.type==="M").map(d=>d.bkmkId),a=Object.values(n).filter(d=>d.prntBkmkId==="-"&&d.type==="F").map(d=>d.bkmkId);return Array.from(new Set([...r,...t,...a])).map(o).filter(Boolean)}function D(n,r){for(const e of Object.values(n))if(e.type==="M"&&e.menuId===r)return e.bkmkId;return null}function j(n,r,e){(!e||e==="-"?r:n[e].children||[]).forEach((o,t)=>{const a=n[o];a&&(a.sortOrdr=t)})}const G={DEFAULT_PRNT_GBCD:1},le=n=>n&&typeof n=="object"&&typeof n.menuId=="string"&&typeof n.menuNm=="string",Y=n=>Array.isArray(n)&&n.every(le);let T=[],q=[];const ie=n=>{if(n&&typeof n=="object"){const r=n;if(r.menus&&Y(r.menus))return r.menus;if(Y(n))return n}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},ue=(n,r)=>!!r&&n.crprCd===r.crprCd&&n.userId===r.userId&&(n.prntGbcd??G.DEFAULT_PRNT_GBCD)===(r.prntGbcd??G.DEFAULT_PRNT_GBCD),me=n=>{if(T.length===n.length&&T.every((t,a)=>t.menuId===n[a]?.menuId&&t.menuPrntId===n[a]?.menuPrntId))return q;if(!n.length)return[];const r=new Map,e=[];n.forEach(t=>t?.menuId&&r.set(t.menuId,{...t,children:[]})),n.forEach(t=>{const a=r.get(t.menuId);a&&(t.menuPrntId&&t.menuPrntId!==""&&t.menuPrntId!=="-"?r.get(t.menuPrntId)?.children?.push(a):e.push(a))});const s=t=>t.sort((a,c)=>(a?.menuNo??0)-(c?.menuNo??0)).map(a=>({...a,children:a.children&&a.children.length?s(a.children):void 0})),o=s(e);return T=[...n],q=o,o},A=b.create((n,r)=>({menuList:[],flatMenuList:[],isLoading:!1,error:null,_lastFetchParams:null,fetchMenu:async({crprCd:e,userId:s,prntGbcd:o})=>{const t={crprCd:e,userId:s,prntGbcd:o??G.DEFAULT_PRNT_GBCD};if(ue(t,r()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}n({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await y.callService(y.getServiceCode("AUTH_MENU"),t),c=ie(a),d=me(c);n({flatMenuList:c,menuList:d,isLoading:!1,error:null})}catch(a){n({isLoading:!1,error:a?.message??"메뉴 로드 실패"})}},clearMenu:()=>{n({menuList:[],flatMenuList:[],error:null,_lastFetchParams:null})},findMenuById:e=>{const{flatMenuList:s}=r();return s.find(o=>o.menuId===e)??null}})),O={MAX_TABS:15},U=b.create((n,r)=>({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:O.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},clearMenuViewStore:()=>{n({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:O.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{}})},openTabFromMenu:(e,s)=>{const{tabs:o}=r(),t=o.find(c=>c.key===e.menuId),a=o.find(c=>c.key===e.menuId);if(t)a!=null?(n({activeMenuId:e.menuId,activeMenuItem:e}),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)):L.message.warning("유효하지 않은 메뉴정보입니다.");else{if(o.length>O.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),L.message.warning(`최대 ${O.MAX_TABS}개의 탭만 열 수 있습니다.
2
+ 기존 탭을 닫고 다시 시도해주세요.`);return}const c={key:e.menuId,label:e.menuNm,gubun:"M",menuItem:e,closable:!0};n({tabs:[...o,c],activeMenuId:e.menuId,activeMenuItem:e}),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)}},openTabByMenuId:(e,s)=>{const o=A.getState().findMenuById(e);o?r().openTabFromMenu(o,s):L.message.warning("메뉴 ID를 찾을 수 없습니다.")},openDetailView:(e,s,o)=>{const{tabs:t}=r();if(t.find(c=>c.key===e.viewId))r().focusTab(e.viewId);else{const c={key:e.viewId,label:e.viewLabel,gubun:"C",componentItem:{scrnPath:s,prsnInfoYn:o,prntInfo:e.prntInfo},closable:!0};n({tabs:[...t,c],activeMenuId:e.viewId,activeDetailItem:e}),r().setTabParams(e.viewId,e.viewParams||{})}},closeTab:e=>{const{tabs:s,activeMenuId:o}=r();s.find(c=>c.key===e);const t=s.filter(c=>c.key!==e);let a=o;if(o===e){const c=s.findIndex(d=>d.key===e);a=t.length?t[Math.min(c,t.length-1)]?.key??null:null}n({tabs:t}),a&&r().focusTab(a)},focusTab:e=>{const{tabs:s}=r(),o=s.find(t=>t.key===e);if(o){const t=o.gubun==="C"?{viewId:o.key,viewLabel:o.label,prntInfo:o.componentItem?.prntInfo}:null;o.menuItem?.prsnInfoYn==="Y"?(n({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),console.log("✅ 탭 포커스 (개인정보) - activeMenuItem:",o.menuItem),r().setProtectFlagForKey(e)):(n({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),r().clearProtectFlagForKey(e))}else n({activeMenuId:e,activeMenuItem:null,activeDetailItem:null}),console.warn("❌ 탭을 찾을 수 없음:",e)},closeAllTabs:()=>n({tabs:[],activeMenuId:null,activeMenuItem:null,activeDetailItem:null}),toggleSidebar:()=>n(e=>({sidebarCollapsed:!e.sidebarCollapsed})),reorderTabs:e=>n(s=>{const o=new Map(s.tabs.map(t=>[t.key,t]));return{tabs:e.map(t=>o.get(t)).filter(Boolean)}}),setProtectFlagForKey:e=>n(s=>({tabProtectFlag:{...s.tabProtectFlag,[e]:!0}})),clearProtectFlagForKey:e=>n(s=>{const o={...s.tabProtectFlag};return delete o[e],{tabProtectFlag:o}}),setTabParams:(e,s)=>n(o=>{const t=o.tabParams[e]||{},a={...s||{}};return Object.keys(t).length===Object.keys(a).length&&Object.keys(a).every(d=>t[d]===a[d])?o:{tabParams:{...o.tabParams,[e]:a}}}),setComponentLabelMap:(e,s)=>n({componentLabelMap:e})})),W=b.create((n,r)=>({popups:[],activePopupId:null,isLoading:!1,error:null,zIndexSeed:1e3,openPopup:async(e,s,o)=>{n({isLoading:!0,error:null});try{let t=null;const a=await y.callService(y.getServiceCode("SRCH_POPU"),{crprCd:y.getUserInfo()?.crprCd,popuCd:e});t=a?.mstr;const c=a?.dtls||[];if(!t||!t.popuUrl){const u=`팝업 정보를 찾을 수 없습니다: ${e}`;throw console.error(u),new Error(u)}const i=(u=>`/src/pages/views/popup/${u}`)(t.popuUrl),l=r().zIndexSeed+1,f={popupId:`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,popupCode:e,popupTitle:o?.title||t.popuNm||"팝업",popupUrl:i,popupParams:s,width:t.popuWdth||800,height:t.popuHght||600,resizable:!0,draggable:!0,buttonList:c,config:o,zIndex:l},m=r().popups.find(u=>u.popupCode===e);if(m){n({activePopupId:m.popupId,popups:r().popups.map(u=>u.popupId===m.popupId?{...u,config:o}:u),isLoading:!1});return}n(u=>({popups:[...u.popups,f],activePopupId:f.popupId,isLoading:!1,zIndexSeed:l}))}catch(t){n({error:t instanceof Error?t.message:"팝업 열기 실패",isLoading:!1})}},openCorePopup:(e,s)=>{const o=`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,t=r().zIndexSeed+1,c=V.localPopupRegistry[e]?.defaultConfig||{},d={...c,...s,buttons:s?.buttons!==void 0?s.buttons:c.buttons,callback:s?.callback!==void 0?s.callback:c.callback},i=s?.defaultParams||{},l=r().popups.find(m=>m.popupCode===e&&m.isLocal);if(l){const m=r().zIndexSeed+1;n({activePopupId:l.popupId,zIndexSeed:m}),n(u=>({popups:u.popups.map(h=>h.popupId===l.popupId?{...h,config:d,zIndex:m,close:()=>{r().closePopup(l.popupId)}}:h)}));return}const f={popupId:o,popupCode:e,popupTitle:d.title||e,popupUrl:"",popupParams:i,width:d.width||1e3,height:d.height||700,resizable:d.resizable!==void 0?d.resizable:!0,draggable:d.draggable!==void 0?d.draggable:!0,buttonList:[],config:d,isLocal:!0,zIndex:t,close:()=>{r().closePopup(o)}};n(m=>({popups:[...m.popups,f],activePopupId:o,zIndexSeed:t}))},closePopup:e=>{const{popups:s,activePopupId:o}=r(),t=s.filter(c=>c.popupId!==e);let a=o;o===e&&(a=t.length>0?t[t.length-1].popupId:null),n({popups:t,activePopupId:a})},closeAllPopups:()=>{n({popups:[],activePopupId:null})},setActivePopup:e=>{const s=r().zIndexSeed+1;n(o=>({activePopupId:e,zIndexSeed:s,popups:o.popups.map(t=>t.popupId===e?{...t,zIndex:s}:t)}))},updatePopupConfig:(e,s)=>{n(o=>({popups:o.popups.map(t=>t.popupId===e?{...t,config:{...t.config,...s}}:t)}))}})),$=b.create()(M((n,r)=>({systemMap:[],fetchSystemMap:async()=>{n({systemMap:[{sysCd:"KE",appItCd:"ERPS",appCd:"SAP",systemNm:"K-ERP",appNm:"SAP"},{sysCd:"KE",appItCd:"KERP",appCd:"FI",systemNm:"K-ERP",appNm:"재무회계"},{sysCd:"KE",appItCd:"KERP",appCd:"FM",systemNm:"K-ERP",appNm:"예산관리"},{sysCd:"KE",appItCd:"KERP",appCd:"MM",systemNm:"K-ERP",appNm:"구매계약"},{sysCd:"KE",appItCd:"KERP",appCd:"SD",systemNm:"K-ERP",appNm:"영업관리"},{sysCd:"CH",appItCd:"KERP",appCd:"PMN",systemNm:"K-ERP",appNm:"파트너관리"},{sysCd:"FB",appItCd:"FBK",appCd:"FBK",systemNm:"펌뱅킹",appNm:"펌뱅킹"},{sysCd:"IA",appItCd:"IAC",appCd:"IAC",systemNm:"내부회계",appNm:"내부회계"},{sysCd:"ET",appItCd:"ETAX",appCd:"ETAX",systemNm:"전자세금계산서",appNm:"전자세금계산서"},{sysCd:"HR",appItCd:"KHR",appCd:"HR",systemNm:"K-HR",appNm:"HR 솔루션"},{sysCd:"YT",appItCd:"KHYT",appCd:"YT",systemNm:"K-HR 연말정산",appNm:"연말정산"},{sysCd:"CM",appItCd:"KCM",appCd:"CM",systemNm:"K-HR 프레임워크 공통",appNm:"프레임워크 공통"},{sysCd:"PA",appItCd:"KHPE",appCd:"PE",systemNm:"K-HR 평정",appNm:"평정"},{sysCd:"OT",appItCd:"POF",appCd:"POF",systemNm:"시간외(PC-OFF)",appNm:"시간외(PC-OFF)"},{sysCd:"DC",appItCd:"CDT",appCd:"CDT",systemNm:"전자계약",appNm:"전자계약"},{sysCd:"KS",appItCd:"KSCM",appCd:"KSCM",systemNm:"KS-공통",appNm:"KS-공통"},{sysCd:"KS",appItCd:"EAUD",appCd:"EAUD",systemNm:"K-업무지원",appNm:"e-감사"},{sysCd:"KS",appItCd:"INR",appCd:"INR",systemNm:"K-업무지원",appNm:"청렴신고"},{sysCd:"KS",appItCd:"ITSM",appCd:"ITAM",systemNm:"K-업무지원",appNm:"ITAM"},{sysCd:"KS",appItCd:"CMM",appCd:"CMM",systemNm:"K-업무지원",appNm:"차량/회의실"},{sysCd:"KS",appItCd:"OAM",appCd:"OAM",systemNm:"K-업무지원",appNm:"OA전산물품관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"GAM",systemNm:"K-업무지원",appNm:"총무관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"ACM",systemNm:"K-업무지원",appNm:"출입관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"IVM",systemNm:"K-업무지원",appNm:"비품관리"},{sysCd:"KS",appItCd:"KSGA",appCd:"SGS",systemNm:"K-업무지원",appNm:"인장서비스"},{sysCd:"KS",appItCd:"HIS",appCd:"HIS",systemNm:"K-업무지원",appNm:"사료관리"},{sysCd:"KS",appItCd:"WFAX",appCd:"WFAX",systemNm:"K-업무지원",appNm:"웹펙스서비스"},{sysCd:"KS",appItCd:"SMS",appCd:"SMS",systemNm:"K-업무지원",appNm:"메시지서비스"},{sysCd:"KS",appItCd:"BID",appCd:"BID",systemNm:"K-업무지원",appNm:"경영공시"},{sysCd:"KS",appItCd:"PAM",appCd:"PAM",systemNm:"K-업무지원",appNm:"언론미디어"},{sysCd:"KS",appItCd:"DAC",appCd:"DAC",systemNm:"K-업무지원",appNm:"심의자문위원회"},{sysCd:"KS",appItCd:"IPR",appCd:"IPR",systemNm:"K-업무지원",appNm:"지식재산권신청"},{sysCd:"KS",appItCd:"ISB",appCd:"ISB",systemNm:"K-업무지원",appNm:"정보공유게시판"},{sysCd:"DE",appItCd:"BCOM",appCd:"BCOM",systemNm:"온통",appNm:"온통"},{sysCd:"TS",appItCd:"ITSM",appCd:"ITSM",systemNm:"ITSM",appNm:"ITSM"},{sysCd:"EP",appItCd:"EPOP",appCd:"EPOP",systemNm:"국민신문고",appNm:"국민신문고"},{sysCd:"VC",appItCd:"VOC",appCd:"VOC",systemNm:"VOC",appNm:"VOC"},{sysCd:"CC",appItCd:"CAL",appCd:"CAL",systemNm:"콜센터",appNm:"콜센터"},{sysCd:"LA",appItCd:"LEG",appCd:"LEG",systemNm:"법규포털",appNm:"법규포털"},{sysCd:"IM",appItCd:"IDXM",appCd:"IDXM",systemNm:"지수방법론",appNm:"지수방법론"},{sysCd:"PM",appItCd:"ORM",appCd:"ORM",systemNm:"운영리스크관리",appNm:"운영리스크관리"},{sysCd:"RF",appItCd:"RFID",appCd:"RFID",systemNm:"RFID(비품관리)",appNm:"RFID(비품관리)"},{sysCd:"SL",appItCd:"SGM",appCd:"SGM",systemNm:"인장관리",appNm:"인장관리"},{sysCd:"DM",appItCd:"LBS",appCd:"LBS",systemNm:"도서관리",appNm:"도서관리"},{sysCd:"HE",appItCd:"RMS",appCd:"RMS",systemNm:"원격지원",appNm:"원격지원"},{sysCd:"WF",appItCd:"WFX",appCd:"WFX",systemNm:"WebFax",appNm:"WebFax"},{sysCd:"SM",appItCd:"SMT",appCd:"SMT",systemNm:"SMS",appNm:"SMS"},{sysCd:"SO",appItCd:"SSO",appCd:"SSO",systemNm:"SSO",appNm:"SSO"},{sysCd:"SF",appItCd:"SFO",appCd:"SFO",systemNm:"생체인증(One Pass)",appNm:"생체인증 FIDO"},{sysCd:"SP",appItCd:"SPO",appCd:"SPO",systemNm:"생체인증(장정맥)",appNm:"생체인증 장정맥"},{sysCd:"AG",appItCd:"APG",appCd:"APG",systemNm:"API GW",appNm:"API Gateway"},{sysCd:"AM",appItCd:"APM",appCd:"APM",systemNm:"APM",appNm:"APM"},{sysCd:"JS",appItCd:"BXS",appCd:"BXS",systemNm:"배치스케줄러",appNm:"배치스케줄러"},{sysCd:"DT",appItCd:"PDT",appCd:"PDT",systemNm:"개인정보변환",appNm:"개인정보변환"}]})},setSystemMap:e=>{n({systemMap:e})},clearSystemMap:()=>{n({systemMap:[]})},getBySysCd:e=>r().systemMap.filter(s=>s.sysCd===e),getByAppItCd:e=>r().systemMap.filter(s=>s.appItCd===e),findByAppCd:e=>r().systemMap.find(s=>s.appCd===e),filterSystemMap:e=>{const{sysCd:s,appItCd:o,appCd:t}=e;return r().systemMap.filter(a=>(s?a.sysCd===s:!0)&&(o?a.appItCd===o:!0)&&(t?a.appCd===t:!0))}}),{name:"system-info-store"})),Ce=b.create(n=>({requestCount:0,loading:!1,showLoading:()=>n(r=>{const e=r.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>n(r=>{const e=Math.max(0,r.requestCount-1);return{requestCount:e,loading:e>0}})})),he=b.create(n=>({requestCount:0,loading:!1,showLoading:()=>n(r=>{const e=r.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>n(r=>{const e=Math.max(0,r.requestCount-1);return{requestCount:e,loading:e>0}})}));function J(){const[n,r]=F.useState(!1),e=F.useCallback(s=>{const o=s?.getModifierState?.("CapsLock");typeof o=="boolean"&&r(o)},[]);return{capsOn:n,onKeyDown:e}}function fe(n){const{loginApi:r,fetchCommonCodes:e,onAfterLogin:s,onError:o,rememberCookie:t={enabled:!0,days:30}}=n,[a,c]=F.useState(!1),{capsOn:d,onKeyDown:i}=J(),l="SCMSIGN00101",f=`${__SYS_CD__}_login_id`,m={id:t?.enabled?y.getCookie(f):void 0,pswr:void 0},u=F.useCallback(async(h,C)=>{c(!0);try{const S={crprCd:"100",id:h.id,pswr:await y.encryptSha256(h.pswr)},g=await(r??(N=>y.callService(l,N)))(S);if(g?.userInfo?.userId){if(w.getState().setLoginUser(g.userInfo,g?.hrInfo),t?.enabled){const N=t.days??30;h.remember?y.setCookie(f,h.id??"",N):y.setCookie(f,"",0)}return e?await e():await _.getState().fetchCommonCodes(),s?s(g,C):(L.message.success(`${g.userInfo.userNm}님 환영합니다.`),C("/main")),{user:g.userInfo,response:g}}else throw o?.({user:g.userInfo,response:g,navigate:C}),new Error("사용자 정보가 유효하지 않습니다.")}catch(S){throw o?.(S),S}finally{c(!1)}},[l,r,e,s,o,t?.enabled,t?.days]);return{loading:a,capsOn:d,onKeyDown:i,prefills:m,doLogin:u}}function Ie(){const n=Q.useNavigate();return()=>{w.getState().clearLoginUser(),$.getState().clearSystemMap(),_.getState().clearCodes(),A.getState().clearMenu(),U.getState().clearMenuViewStore(),R.getState().clearFavorites(),n("/login")}}const ye=()=>_.getState(),ge=()=>W.getState(),Se=()=>w.getState(),Ne=()=>R.getState(),be=()=>A.getState(),Me=()=>U.getState(),ke=()=>$.getState();exports.useCapsLock=J;exports.useCode=ye;exports.useCodeStore=_;exports.useColorStore=se;exports.useFavorite=Ne;exports.useFavoriteStore=R;exports.useLoadingStore=Ce;exports.useLogin=fe;exports.useLogout=Ie;exports.useMenuModel=be;exports.useMenuModelStore=A;exports.useMenuView=Me;exports.useMenuViewStore=U;exports.useOptionStore=oe;exports.usePopupLoadingStore=he;exports.usePopupState=ge;exports.usePopupStore=W;exports.useSystemCode=ke;exports.useSystemStore=$;exports.useUser=Se;exports.useUserStore=w;