@bwg-ui/core 1.2.15 → 1.2.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{MenuReport-CozV1tpR.js → MenuReport-ByLduwwZ.js} +27 -26
- package/dist/chunks/MenuReport-D5nIx5g9.cjs +1 -0
- package/dist/chunks/{common-components-B-zgrX-L.cjs → common-components-BXjzima0.cjs} +76 -76
- package/dist/chunks/{common-components-XA2KG7Pl.js → common-components-CyxuMobg.js} +7990 -7606
- package/dist/chunks/layout-components-CfFi4fiJ.cjs +35 -0
- package/dist/chunks/{layout-components-MrnKV5g7.js → layout-components-CyKRhOdT.js} +646 -614
- package/dist/components/common/BookmarkMngModal.d.ts.map +1 -1
- package/dist/components/common/BookmarkPopver.d.ts.map +1 -1
- package/dist/components/common/BwgConfigProvider.d.ts.map +1 -1
- package/dist/components/common/BwgEditor.d.ts.map +1 -1
- package/dist/components/common/BwgPagination.d.ts.map +1 -1
- package/dist/components/common/index.cjs +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/guide/BwgPracticeGuideS00.d.ts.map +1 -1
- package/dist/components/guide/BwgPracticeGuideS01.d.ts.map +1 -1
- package/dist/components/guide/index.cjs +1 -1
- package/dist/components/guide/index.d.ts +0 -1
- package/dist/components/guide/index.d.ts.map +1 -1
- package/dist/components/guide/index.js +97 -291
- package/dist/components/layout/custom/ConfigurableHeader.d.ts.map +1 -1
- package/dist/components/layout/custom/ConfigurableSidebar.d.ts.map +1 -1
- package/dist/components/layout/default/LoadingContainer.d.ts +1 -0
- package/dist/components/layout/default/LoadingContainer.d.ts.map +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +1 -1
- package/dist/components/layout/types.d.ts +28 -0
- package/dist/components/layout/types.d.ts.map +1 -1
- package/dist/components/pages/index.d.ts +1 -0
- package/dist/components/pages/index.d.ts.map +1 -1
- package/dist/components/pages/syst/CMHldyCfg.d.ts.map +1 -0
- package/dist/components/popup/MenuReport.d.ts.map +1 -1
- package/dist/components/popup/index.cjs +1 -1
- package/dist/components/popup/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +161 -159
- package/dist/public/realgrid/css/realgrid-style-custom.css +30 -4
- package/dist/stores/index.cjs +1 -1
- package/dist/stores/index.js +1 -1
- package/dist/styles/assets/images/contents/icon/ico-add-bookmark.svg +26 -0
- package/dist/styles/assets/images/contents/icon/ico-edit-folder.svg +18 -0
- package/dist/styles/assets/images/contents/icon/ico-new-folder.svg +20 -0
- package/dist/styles/assets/images/contents/icon/ico-save-bookmark.svg +25 -0
- package/dist/styles/components.css +207 -132
- package/dist/styles/layout-test.css +8 -300
- package/dist/styles/layout.css +77 -113
- package/dist/styles/variables.css +111 -78
- package/dist/utils/gwUtils.d.ts +38 -0
- package/dist/utils/gwUtils.d.ts.map +1 -1
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.js +731 -700
- package/package.json +2 -1
- package/dist/chunks/MenuReport-Bqeps5fC.cjs +0 -1
- package/dist/chunks/layout-components-bb0cWC3I.cjs +0 -35
- package/dist/components/guide/CMHldyCfg.d.ts.map +0 -1
- /package/dist/components/{guide → pages/syst}/CMHldyCfg.d.ts +0 -0
package/dist/stores/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("zustand"),g=require("../utils/index.cjs"),F=require("antd"),Z=require("../chunks/layout-components-bb0cWC3I.cjs"),L=require("react"),V=require("react-router-dom");function Q(n,r){let e;try{e=n()}catch{return}return{getItem:o=>{var t;const a=c=>c===null?null:JSON.parse(c,void 0),d=(t=e.getItem(o))!=null?t:null;return d instanceof Promise?d.then(a):a(d)},setItem:(o,t)=>e.setItem(o,JSON.stringify(t,void 0)),removeItem:o=>e.removeItem(o)}}const T=n=>r=>{try{const e=n(r);return e instanceof Promise?e:{then(s){return T(s)(e)},catch(s){return this}}}catch(e){return{then(s){return this},catch(s){return T(s)(e)}}}},ee=(n,r)=>(e,s,o)=>{let t={storage:Q(()=>localStorage),partialize:C=>C,version:0,merge:(C,S)=>({...S,...C}),...r},a=!1;const d=new Set,c=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 p=()=>{const C=t.partialize({...s()});return i.setItem(t.name,{state:C,version:t.version})},I=o.setState;o.setState=(C,S)=>(I(C,S),p());const m=n((...C)=>(e(...C),p()),s,o);o.getInitialState=()=>m;let u;const h=()=>{var C,S;if(!i)return;a=!1,d.forEach(y=>{var N;return y((N=s())!=null?N:m)});const k=((S=t.onRehydrateStorage)==null?void 0:S.call(t,(C=s())!=null?C:m))||void 0;return T(i.getItem.bind(i))(t.name).then(y=>{if(y)if(typeof y.version=="number"&&y.version!==t.version){if(t.migrate){const N=t.migrate(y.state,y.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,y.state];return[!1,void 0]}).then(y=>{var N;const[K,W]=y;if(u=t.merge(W,(N=s())!=null?N:m),e(u,!0),K)return p()}).then(()=>{k?.(u,void 0),u=s(),a=!0,c.forEach(y=>y(u))}).catch(y=>{k?.(void 0,y)})};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=>(d.add(C),()=>{d.delete(C)}),onFinishHydration:C=>(c.add(C),()=>{c.delete(C)})},t.skipHydration||h(),u||m},M=ee,w=b.create()(M((n,r)=>({user:null,hrInfo:null,isLoggedIn:()=>!!r().user,setLoginUser:(e,s)=>{n({user:e,hrInfo:s??null}),console.log("사용자 로그인:",e,s)},clearLoginUser:()=>{n({user:null,hrInfo:null}),console.log("사용자 로그아웃")},updateUser:(e,s)=>{const o=r().user,t=r().hrInfo;o&&n({user:{...o,...e}}),t&&n({hrInfo:{...t,...s}})}}),{name:"user-storage",partialize:n=>({user:n.user,hrInfo:n.hrInfo,isLoggedIn:n.isLoggedIn})})),A={CACHE_SIZE_LIMIT:1e3},l={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)}},te=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 c=(o.get(t.cmmnCd)||[]).reduce((i,p)=>(p.optnCd&&p.optnNm&&(i[p.optnCd]=p.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(c).length>0?c:null,originalData:t}}})}return console.log("대규모 데이터 변환 완료:",r),r},f=b.create()(M((n,r)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchData:async()=>{n({isLoading:!0,error:null});try{console.log("대규모 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await g.callService(g.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("대규모 공통코드 응답:",e),console.log("대규모 공통코드목록:",e.code),console.log("대규모 공통코드옵션션목록:",e.opt);const s=te(e);l.clearCache();const o=new Set(Object.keys(s));o.forEach(t=>{l.markGroupLoaded(t)}),n({codeData:s,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:o}),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}),l.markGroupLoaded(e)},setData:e=>{l.clearCache();const s=new Set(Object.keys(e));s.forEach(o=>{l.markGroupLoaded(o)}),n({codeData:e,lastUpdated:new Date,loadedGroups:s})},clearData:()=>{l.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)})})),D=b.create()(M((n,r)=>({get codeData(){return f.getState().codeData},get isLoading(){return f.getState().isLoading},get error(){return f.getState().error},get lastUpdated(){return f.getState().lastUpdated},fetchCommonCodes:async()=>{await f.getState().fetchData()},getCodeList:(e,s)=>{const{enabledOnly:o=!0,systemCodeOnly:t=!1,sortByOrder:a=!1,excludeParentCode:d=!1}=s||{},c=`simpleCodeList_${e}_${o}_${t}_${a}_${d}`;if(l.optionCache.has(c)){const h=l.cacheHits.get(c)||0;return l.cacheHits.set(c,h+1),l.optionCache.get(c)}const i=f.getState().codeData;if(!i)return[];if(!l.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const p=[],I=i[e];I&&Object.values(I).forEach(h=>{if(!(o&&!h.enabled)&&!(t&&h.systemCodeYn!=="Y"))if(d){const C=e.length,S=h.codeValue.substring(C);S.length>0&&p.push({...h,codeValue:S})}else p.push(h)});let m;a?m=p.sort((h,C)=>h.sortOrder!==C.sortOrder?h.sortOrder-C.sortOrder:h.codeValue.localeCompare(C.codeValue)):m=p.sort((h,C)=>h.codeValue.localeCompare(C.codeValue));const u=m.map(h=>({label:h.codeNm,value:h.codeValue,tagColor:h.labelColor}));return l.optionCache.size>=A.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.optionCache.set(c,u),l.cacheHits.set(c,1),u},getCodeName:e=>{if(l.nameCache.has(e)){const o=l.cacheHits.get(`name_${e}`)||0;return l.cacheHits.set(`name_${e}`,o+1),l.nameCache.get(e)}const s=f.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 l.nameCache.set(e,t.codeNm),l.cacheHits.set(`name_${e}`,1),t.codeNm;return null},getCodeColor:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const s=f.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 l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getGridLookup:e=>{const s=`gridLookup_${e}`;if(l.optionCache.has(s)){const i=l.cacheHits.get(s)||0;return l.cacheHits.set(s,i+1),l.optionCache.get(s)}const o=f.getState().codeData;if(!o)return{labels:[],values:[],lookupDisplay:!0};const t=o[e];if(!t)return{labels:[],values:[],lookupDisplay:!0};const a=[],d=[];Object.values(t).filter(i=>i.enabled).sort((i,p)=>i.sortOrder-p.sortOrder).forEach(i=>{a.push(i.codeNm),d.push(i.codeValue)});const c={labels:a,values:d,lookupDisplay:!0};return l.optionCache.set(s,c),l.cacheHits.set(s,1),c},getCodeByOption:(e,s,o)=>{const t=`codeByOption_${e}_${s}_${o}`;if(l.codeCache.has(t)){const p=l.cacheHits.get(t)||0;return l.cacheHits.set(t,p+1),l.codeCache.get(t)}const a=f.getState().codeData;if(!a)return[];const d=[],c=a[e];c&&Object.values(c).forEach(p=>{p.enabled&&p.options&&p.options[s]===o&&d.push({...p,codeNm:p.options[s]||p.codeNm})});const i=d.sort((p,I)=>p.codeValue.localeCompare(I.codeValue));return l.codeCache.size>=A.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(t,i),l.cacheHits.set(t,1),i},getCodeListByOption:(e,s,o)=>{const{enabledOnly:t=!0,systemCodeOnly:a=!1,sortByOrder:d=!1}=o||{},c=`codeListByOption_${e}_${s}_${t}_${a}_${d}`;if(l.codeCache.has(c)){const u=l.cacheHits.get(c)||0;return l.cacheHits.set(c,u+1),l.codeCache.get(c)}const i=f.getState().codeData;if(!i)return[];if(!l.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const p=[],I=i[e];I&&Object.values(I).forEach(u=>{t&&!u.enabled||a&&u.systemCodeYn!=="Y"||u.options&&u.options[s]&&p.push({label:u.options[s],value:u.commonCode,tagColor:u.labelColor})});let m;return d?m=p.sort((u,h)=>u.value.localeCompare(h.value)):m=p.sort((u,h)=>u.value.localeCompare(h.value)),l.codeCache.size>=A.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(c,m),l.cacheHits.set(c,1),m},getAvailableGroupCodes:()=>{const e="available_group_codes";if(l.nameCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),JSON.parse(l.nameCache.get(e))}const s=f.getState().codeData;if(!s)return[];const o=Object.keys(s).sort();return l.nameCache.set(e,JSON.stringify(o)),l.cacheHits.set(e,1),o},clearCodes:()=>{f.getState().clearData()}}),{name:"code-storage",partialize:n=>({})})),oe=b.create()(M((n,r)=>({get codeData(){return f.getState().codeData},get isLoading(){return f.getState().isLoading},get error(){return f.getState().error},get lastUpdated(){return f.getState().lastUpdated},fetchCommonCodes:async()=>{await f.getState().fetchData()},getOptionValue:(e,s)=>{const o=`option_${e}_${s}`;if(l.optionCache.has(o)){const d=l.cacheHits.get(o)||0;return l.cacheHits.set(o,d+1),l.optionCache.get(o)}const t=f.getState().codeData;if(!t)return null;const a=t[e];if(a&&a[s]){const d=a[s].options;return l.optionCache.set(o,d),l.cacheHits.set(o,1),d}return null},getOptionByKey:(e,s,o)=>{const t=`option_${e}_${s}_${o}`;if(l.optionCache.has(t)){const c=l.cacheHits.get(t)||0;return l.cacheHits.set(t,c+1),l.optionCache.get(t)}const a=r().getOptionValue(e,s),d=a?a[o]:null;return l.optionCache.set(t,d),l.cacheHits.set(t,1),d},clearCodes:()=>{f.getState().clearData()}}),{name:"option-storage",partialize:n=>({})})),se=b.create()(M((n,r)=>({get codeData(){return f.getState().codeData},get isLoading(){return f.getState().isLoading},get error(){return f.getState().error},get lastUpdated(){return f.getState().lastUpdated},fetchCommonCodes:async()=>{await f.getState().fetchData()},getColorCode:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const s=f.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 l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(l.optionCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),l.optionCache.get(e)}const s=f.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})})}),l.optionCache.set(e,o),l.cacheHits.set(e,1),o},clearCodes:()=>{f.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=P(r().nodes,e);return s?r().nodes[s]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const s=P(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=d=>e?d.toLowerCase().includes(e.toLowerCase()):!0,a=d=>{const c=s[d];if(!c||c.type!=="F")return null;const i=c,p=(i.children||[]).map(m=>s[m]).filter(m=>!!m&&m.type==="F").map(m=>a(m.bkmkId)).filter(Boolean);return t(i.bkmkNm)||p.length>0?{key:i.bkmkId,title:`📁 ${i.bkmkNm}`,children:p.length?p:void 0}:null};return o.map(d=>a(d)).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 g.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],d=re(a),c=v(d.nodes,d.rootIds);n({...d,treeNodes:c,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=B(r()),o=ae();n(t=>{const a=e.sortOrdr??$(t,e.prntBkmkId),d={...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 de(d,o,e.prntBkmkId),d.treeNodes=v(d.nodes,d.rootIds),d});try{let t=o;const a=$(r(),e.prntBkmkId),d=await g.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:g.getUserId()});return t=String(d?.bkmkId??d?.itemId??o),n(c=>{const i=pe(c,o,t);return{...i,treeNodes:v(i.nodes,i.rootIds)}}),t}catch(t){throw n(s),t}},moveNode:async({bkmkId:e,newPrntBkmkId:s,sortOrdr:o,userId:t})=>{const a=r(),d=structuredClone(a.nodes),c=[...a.rootIds],i=d[e];if(!i)return;if(s!=="-"){const u=d[s];if(!u||u.type!=="F")throw new Error("부모는 폴더만 가능합니다.")}const p=i.prntBkmkId??"-",I=p==="-"?c:d[p].children||=[];{const u=I.indexOf(e);u>=0&&I.splice(u,1)}const m=s==="-"?c:d[s].children||=[];m.splice(Math.max(0,Math.min(o,m.length)),0,e),i.prntBkmkId=s,n({nodes:d,rootIds:c}),j(d,c,s),j(d,c,p);try{await g.callService("SCMBKMK00104",{bkmkId:e,prntBkmkId:s,sortOrdr:o,chngId:t})}catch(u){throw n(a),u}},removeNode:async e=>{const s=B(r());n(o=>{if(!o.nodes[e])return o;const t={...o,nodes:{...o.nodes},rootIds:o.rootIds.slice(),treeNodes:o.treeNodes};return q(t,e),t.treeNodes=v(t.nodes,t.rootIds),t});try{await g.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw n(s),o}},editNode:async({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const d=B(r());n(c=>{const i={...c,nodes:{...c.nodes}},p=i.nodes[e];return p?.type==="F"&&typeof o=="string"&&(i.nodes[e]={...p,bkmkNm:o}),i});try{await g.callService("SCMBKMK00102",{iudFlag:"U",userId:s,bkmkId:e,bkmkNm:o,prntBkmkId:t,sortOrdr:a,chngId:g.getUserId()})}catch(c){throw n(d),c}},addFolder:async(e,s,o,t)=>await r().addNode({type:"F",bkmkNm:e,prntBkmkId:s,sysCd:o,userId:t}),addMenuToFolder:async(e,s)=>P(r().nodes,s.menuId)?"이미 북마크에 저장된 메뉴입니다.":await r().addNode({type:"M",prntBkmkId:e,sysCd:"KH",userId:g.getUserId(),menuId:s.menuId,menuNm:s.menuNm}),toggleMenuFavorite:async(e,s)=>{if(!e)return;const o=r(),t=Object.values(o.nodes).find(d=>d.type==="M"&&d.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:g.getUserId(),menuId:s.menuId,menuNm:s.menuNm})},removeMenuByMenuId:async e=>{const s=r(),o=P(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=c=>o?c.toLowerCase().includes(o.toLowerCase()):!0,d=c=>{const i=e[c];if(!i||t&&i.type!=="F")return null;if(i.type==="F"){const p=i,I=(p.children||[]).map(u=>d(u)).filter(Boolean);return a(p.bkmkNm)||I.length>0?{key:p.bkmkId,type:"F",title:`📁 ${p.bkmkNm}`,bkmkNm:p.bkmkNm,prntBkmkId:p.prntBkmkId,sortOrdr:p.sortOrdr,fullPath:p.fullPath,children:I.length?I:void 0}:null}else{const p=i,I=p.menuNm?`${p.menuNm} (${p.menuId})`:p.menuId;return a(I)?{key:p.bkmkId,type:"M",title:`📄 ${I}`,prntBkmkId:p.prntBkmkId,sortOrdr:p.sortOrdr,fullPath:p.fullPath,isLeaf:!0}:null}};return s.map(d).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 d=Array.isArray(t.children)?t.children:[];s(d)}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,d)=>(r[a].sortOrdr??0)-(r[d].sortOrdr??0))}),{nodes:r,rootIds:e}}function B(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 $(n,r){if(!r||r==="-")return n.rootIds.length;const e=n.nodes[r];return e?e.children.length:0}function de(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 ce(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 q(n,r){const e=n.nodes[r];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>q(n,a)),ce(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 d=t[o.prntBkmkId];d?.type==="F"&&(t[o.prntBkmkId]={...d,children:d.children.map(c=>c===r?e:c)})}else a=n.rootIds.map(d=>d===r?e:d);return{...n,nodes:t,rootIds:a}}function x(n){return n.rootIds.find(r=>n.nodes[r]?.type==="F")??null}function v(n,r){const e={};Object.values(n).forEach(c=>{const i=c.bkmkId,p=c.prntBkmkId;!i||!p||p==="-"||p===i||(e[p]??=[]).push(i)});const s=new Set,o=c=>{if(s.has(c))return null;const i=n[c];if(!i)return null;s.add(c);try{if(i.type==="F"){const I=i,m=e[c]??[];return{type:"F",bkmkId:c,bkmkNm:I.bkmkNm,prntBkmkId:I.prntBkmkId,children:m.map(o).filter(Boolean)}}const p=i;return{type:"M",bkmkId:c,bkmkNm:p.menuNm,menuId:p.menuId,menuNm:p.menuNm,prntBkmkId:p.prntBkmkId}}finally{s.delete(c)}},t=Object.values(n).filter(c=>c.prntBkmkId==="-"&&c.type==="M").map(c=>c.bkmkId),a=Object.values(n).filter(c=>c.prntBkmkId==="-"&&c.type==="F").map(c=>c.bkmkId);return Array.from(new Set([...r,...t,...a])).map(o).filter(Boolean)}function P(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 H={DEFAULT_PRNT_GBCD:1},le=n=>n&&typeof n=="object"&&typeof n.menuId=="string"&&typeof n.menuNm=="string",z=n=>Array.isArray(n)&&n.every(le);let E=[],Y=[];const ie=n=>{if(n&&typeof n=="object"){const r=n;if(r.menus&&z(r.menus))return r.menus;if(z(n))return n}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},ue=(n,r)=>!!r&&n.crprCd===r.crprCd&&n.userId===r.userId&&(n.prntGbcd??H.DEFAULT_PRNT_GBCD)===(r.prntGbcd??H.DEFAULT_PRNT_GBCD),me=n=>{if(E.length===n.length&&E.every((t,a)=>t.menuId===n[a]?.menuId&&t.menuPrntId===n[a]?.menuPrntId))return Y;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,d)=>(a?.menuNo??0)-(d?.menuNo??0)).map(a=>({...a,children:a.children&&a.children.length?s(a.children):void 0})),o=s(e);return E=[...n],Y=o,o},_=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??H.DEFAULT_PRNT_GBCD};if(ue(t,r()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}n({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await g.callService(g.getServiceCode("AUTH_MENU"),t),d=ie(a),c=me(d);n({flatMenuList:d,menuList:c,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},G=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(d=>d.key===e.menuId),a=o.find(d=>d.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)):F.message.warning("유효하지 않은 메뉴정보입니다.");else{if(o.length>O.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),F.message.warning(`최대 ${O.MAX_TABS}개의 탭만 열 수 있습니다.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("zustand"),g=require("../utils/index.cjs"),F=require("antd"),Z=require("../chunks/layout-components-CfFi4fiJ.cjs"),L=require("react"),V=require("react-router-dom");function Q(n,r){let e;try{e=n()}catch{return}return{getItem:o=>{var t;const a=c=>c===null?null:JSON.parse(c,void 0),d=(t=e.getItem(o))!=null?t:null;return d instanceof Promise?d.then(a):a(d)},setItem:(o,t)=>e.setItem(o,JSON.stringify(t,void 0)),removeItem:o=>e.removeItem(o)}}const T=n=>r=>{try{const e=n(r);return e instanceof Promise?e:{then(s){return T(s)(e)},catch(s){return this}}}catch(e){return{then(s){return this},catch(s){return T(s)(e)}}}},ee=(n,r)=>(e,s,o)=>{let t={storage:Q(()=>localStorage),partialize:C=>C,version:0,merge:(C,S)=>({...S,...C}),...r},a=!1;const d=new Set,c=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 p=()=>{const C=t.partialize({...s()});return i.setItem(t.name,{state:C,version:t.version})},I=o.setState;o.setState=(C,S)=>(I(C,S),p());const m=n((...C)=>(e(...C),p()),s,o);o.getInitialState=()=>m;let u;const h=()=>{var C,S;if(!i)return;a=!1,d.forEach(y=>{var N;return y((N=s())!=null?N:m)});const k=((S=t.onRehydrateStorage)==null?void 0:S.call(t,(C=s())!=null?C:m))||void 0;return T(i.getItem.bind(i))(t.name).then(y=>{if(y)if(typeof y.version=="number"&&y.version!==t.version){if(t.migrate){const N=t.migrate(y.state,y.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,y.state];return[!1,void 0]}).then(y=>{var N;const[K,W]=y;if(u=t.merge(W,(N=s())!=null?N:m),e(u,!0),K)return p()}).then(()=>{k?.(u,void 0),u=s(),a=!0,c.forEach(y=>y(u))}).catch(y=>{k?.(void 0,y)})};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=>(d.add(C),()=>{d.delete(C)}),onFinishHydration:C=>(c.add(C),()=>{c.delete(C)})},t.skipHydration||h(),u||m},M=ee,w=b.create()(M((n,r)=>({user:null,hrInfo:null,isLoggedIn:()=>!!r().user,setLoginUser:(e,s)=>{n({user:e,hrInfo:s??null}),console.log("사용자 로그인:",e,s)},clearLoginUser:()=>{n({user:null,hrInfo:null}),console.log("사용자 로그아웃")},updateUser:(e,s)=>{const o=r().user,t=r().hrInfo;o&&n({user:{...o,...e}}),t&&n({hrInfo:{...t,...s}})}}),{name:"user-storage",partialize:n=>({user:n.user,hrInfo:n.hrInfo,isLoggedIn:n.isLoggedIn})})),A={CACHE_SIZE_LIMIT:1e3},l={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)}},te=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 c=(o.get(t.cmmnCd)||[]).reduce((i,p)=>(p.optnCd&&p.optnNm&&(i[p.optnCd]=p.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(c).length>0?c:null,originalData:t}}})}return console.log("대규모 데이터 변환 완료:",r),r},f=b.create()(M((n,r)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchData:async()=>{n({isLoading:!0,error:null});try{console.log("대규모 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await g.callService(g.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("대규모 공통코드 응답:",e),console.log("대규모 공통코드목록:",e.code),console.log("대규모 공통코드옵션션목록:",e.opt);const s=te(e);l.clearCache();const o=new Set(Object.keys(s));o.forEach(t=>{l.markGroupLoaded(t)}),n({codeData:s,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:o}),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}),l.markGroupLoaded(e)},setData:e=>{l.clearCache();const s=new Set(Object.keys(e));s.forEach(o=>{l.markGroupLoaded(o)}),n({codeData:e,lastUpdated:new Date,loadedGroups:s})},clearData:()=>{l.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)})})),D=b.create()(M((n,r)=>({get codeData(){return f.getState().codeData},get isLoading(){return f.getState().isLoading},get error(){return f.getState().error},get lastUpdated(){return f.getState().lastUpdated},fetchCommonCodes:async()=>{await f.getState().fetchData()},getCodeList:(e,s)=>{const{enabledOnly:o=!0,systemCodeOnly:t=!1,sortByOrder:a=!1,excludeParentCode:d=!1}=s||{},c=`simpleCodeList_${e}_${o}_${t}_${a}_${d}`;if(l.optionCache.has(c)){const h=l.cacheHits.get(c)||0;return l.cacheHits.set(c,h+1),l.optionCache.get(c)}const i=f.getState().codeData;if(!i)return[];if(!l.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const p=[],I=i[e];I&&Object.values(I).forEach(h=>{if(!(o&&!h.enabled)&&!(t&&h.systemCodeYn!=="Y"))if(d){const C=e.length,S=h.codeValue.substring(C);S.length>0&&p.push({...h,codeValue:S})}else p.push(h)});let m;a?m=p.sort((h,C)=>h.sortOrder!==C.sortOrder?h.sortOrder-C.sortOrder:h.codeValue.localeCompare(C.codeValue)):m=p.sort((h,C)=>h.codeValue.localeCompare(C.codeValue));const u=m.map(h=>({label:h.codeNm,value:h.codeValue,tagColor:h.labelColor}));return l.optionCache.size>=A.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.optionCache.set(c,u),l.cacheHits.set(c,1),u},getCodeName:e=>{if(l.nameCache.has(e)){const o=l.cacheHits.get(`name_${e}`)||0;return l.cacheHits.set(`name_${e}`,o+1),l.nameCache.get(e)}const s=f.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 l.nameCache.set(e,t.codeNm),l.cacheHits.set(`name_${e}`,1),t.codeNm;return null},getCodeColor:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const s=f.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 l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getGridLookup:e=>{const s=`gridLookup_${e}`;if(l.optionCache.has(s)){const i=l.cacheHits.get(s)||0;return l.cacheHits.set(s,i+1),l.optionCache.get(s)}const o=f.getState().codeData;if(!o)return{labels:[],values:[],lookupDisplay:!0};const t=o[e];if(!t)return{labels:[],values:[],lookupDisplay:!0};const a=[],d=[];Object.values(t).filter(i=>i.enabled).sort((i,p)=>i.sortOrder-p.sortOrder).forEach(i=>{a.push(i.codeNm),d.push(i.codeValue)});const c={labels:a,values:d,lookupDisplay:!0};return l.optionCache.set(s,c),l.cacheHits.set(s,1),c},getCodeByOption:(e,s,o)=>{const t=`codeByOption_${e}_${s}_${o}`;if(l.codeCache.has(t)){const p=l.cacheHits.get(t)||0;return l.cacheHits.set(t,p+1),l.codeCache.get(t)}const a=f.getState().codeData;if(!a)return[];const d=[],c=a[e];c&&Object.values(c).forEach(p=>{p.enabled&&p.options&&p.options[s]===o&&d.push({...p,codeNm:p.options[s]||p.codeNm})});const i=d.sort((p,I)=>p.codeValue.localeCompare(I.codeValue));return l.codeCache.size>=A.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(t,i),l.cacheHits.set(t,1),i},getCodeListByOption:(e,s,o)=>{const{enabledOnly:t=!0,systemCodeOnly:a=!1,sortByOrder:d=!1}=o||{},c=`codeListByOption_${e}_${s}_${t}_${a}_${d}`;if(l.codeCache.has(c)){const u=l.cacheHits.get(c)||0;return l.cacheHits.set(c,u+1),l.codeCache.get(c)}const i=f.getState().codeData;if(!i)return[];if(!l.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const p=[],I=i[e];I&&Object.values(I).forEach(u=>{t&&!u.enabled||a&&u.systemCodeYn!=="Y"||u.options&&u.options[s]&&p.push({label:u.options[s],value:u.commonCode,tagColor:u.labelColor})});let m;return d?m=p.sort((u,h)=>u.value.localeCompare(h.value)):m=p.sort((u,h)=>u.value.localeCompare(h.value)),l.codeCache.size>=A.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(c,m),l.cacheHits.set(c,1),m},getAvailableGroupCodes:()=>{const e="available_group_codes";if(l.nameCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),JSON.parse(l.nameCache.get(e))}const s=f.getState().codeData;if(!s)return[];const o=Object.keys(s).sort();return l.nameCache.set(e,JSON.stringify(o)),l.cacheHits.set(e,1),o},clearCodes:()=>{f.getState().clearData()}}),{name:"code-storage",partialize:n=>({})})),oe=b.create()(M((n,r)=>({get codeData(){return f.getState().codeData},get isLoading(){return f.getState().isLoading},get error(){return f.getState().error},get lastUpdated(){return f.getState().lastUpdated},fetchCommonCodes:async()=>{await f.getState().fetchData()},getOptionValue:(e,s)=>{const o=`option_${e}_${s}`;if(l.optionCache.has(o)){const d=l.cacheHits.get(o)||0;return l.cacheHits.set(o,d+1),l.optionCache.get(o)}const t=f.getState().codeData;if(!t)return null;const a=t[e];if(a&&a[s]){const d=a[s].options;return l.optionCache.set(o,d),l.cacheHits.set(o,1),d}return null},getOptionByKey:(e,s,o)=>{const t=`option_${e}_${s}_${o}`;if(l.optionCache.has(t)){const c=l.cacheHits.get(t)||0;return l.cacheHits.set(t,c+1),l.optionCache.get(t)}const a=r().getOptionValue(e,s),d=a?a[o]:null;return l.optionCache.set(t,d),l.cacheHits.set(t,1),d},clearCodes:()=>{f.getState().clearData()}}),{name:"option-storage",partialize:n=>({})})),se=b.create()(M((n,r)=>({get codeData(){return f.getState().codeData},get isLoading(){return f.getState().isLoading},get error(){return f.getState().error},get lastUpdated(){return f.getState().lastUpdated},fetchCommonCodes:async()=>{await f.getState().fetchData()},getColorCode:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const s=f.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 l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(l.optionCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),l.optionCache.get(e)}const s=f.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})})}),l.optionCache.set(e,o),l.cacheHits.set(e,1),o},clearCodes:()=>{f.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=P(r().nodes,e);return s?r().nodes[s]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const s=P(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=d=>e?d.toLowerCase().includes(e.toLowerCase()):!0,a=d=>{const c=s[d];if(!c||c.type!=="F")return null;const i=c,p=(i.children||[]).map(m=>s[m]).filter(m=>!!m&&m.type==="F").map(m=>a(m.bkmkId)).filter(Boolean);return t(i.bkmkNm)||p.length>0?{key:i.bkmkId,title:`📁 ${i.bkmkNm}`,children:p.length?p:void 0}:null};return o.map(d=>a(d)).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 g.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],d=re(a),c=v(d.nodes,d.rootIds);n({...d,treeNodes:c,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=B(r()),o=ae();n(t=>{const a=e.sortOrdr??$(t,e.prntBkmkId),d={...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 de(d,o,e.prntBkmkId),d.treeNodes=v(d.nodes,d.rootIds),d});try{let t=o;const a=$(r(),e.prntBkmkId),d=await g.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:g.getUserId()});return t=String(d?.bkmkId??d?.itemId??o),n(c=>{const i=pe(c,o,t);return{...i,treeNodes:v(i.nodes,i.rootIds)}}),t}catch(t){throw n(s),t}},moveNode:async({bkmkId:e,newPrntBkmkId:s,sortOrdr:o,userId:t})=>{const a=r(),d=structuredClone(a.nodes),c=[...a.rootIds],i=d[e];if(!i)return;if(s!=="-"){const u=d[s];if(!u||u.type!=="F")throw new Error("부모는 폴더만 가능합니다.")}const p=i.prntBkmkId??"-",I=p==="-"?c:d[p].children||=[];{const u=I.indexOf(e);u>=0&&I.splice(u,1)}const m=s==="-"?c:d[s].children||=[];m.splice(Math.max(0,Math.min(o,m.length)),0,e),i.prntBkmkId=s,n({nodes:d,rootIds:c}),j(d,c,s),j(d,c,p);try{await g.callService("SCMBKMK00104",{bkmkId:e,prntBkmkId:s,sortOrdr:o,chngId:t})}catch(u){throw n(a),u}},removeNode:async e=>{const s=B(r());n(o=>{if(!o.nodes[e])return o;const t={...o,nodes:{...o.nodes},rootIds:o.rootIds.slice(),treeNodes:o.treeNodes};return q(t,e),t.treeNodes=v(t.nodes,t.rootIds),t});try{await g.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw n(s),o}},editNode:async({bkmkId:e,userId:s,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const d=B(r());n(c=>{const i={...c,nodes:{...c.nodes}},p=i.nodes[e];return p?.type==="F"&&typeof o=="string"&&(i.nodes[e]={...p,bkmkNm:o}),i});try{await g.callService("SCMBKMK00102",{iudFlag:"U",userId:s,bkmkId:e,bkmkNm:o,prntBkmkId:t,sortOrdr:a,chngId:g.getUserId()})}catch(c){throw n(d),c}},addFolder:async(e,s,o,t)=>await r().addNode({type:"F",bkmkNm:e,prntBkmkId:s,sysCd:o,userId:t}),addMenuToFolder:async(e,s)=>P(r().nodes,s.menuId)?"이미 북마크에 저장된 메뉴입니다.":await r().addNode({type:"M",prntBkmkId:e,sysCd:"KH",userId:g.getUserId(),menuId:s.menuId,menuNm:s.menuNm}),toggleMenuFavorite:async(e,s)=>{if(!e)return;const o=r(),t=Object.values(o.nodes).find(d=>d.type==="M"&&d.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:g.getUserId(),menuId:s.menuId,menuNm:s.menuNm})},removeMenuByMenuId:async e=>{const s=r(),o=P(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=c=>o?c.toLowerCase().includes(o.toLowerCase()):!0,d=c=>{const i=e[c];if(!i||t&&i.type!=="F")return null;if(i.type==="F"){const p=i,I=(p.children||[]).map(u=>d(u)).filter(Boolean);return a(p.bkmkNm)||I.length>0?{key:p.bkmkId,type:"F",title:`📁 ${p.bkmkNm}`,bkmkNm:p.bkmkNm,prntBkmkId:p.prntBkmkId,sortOrdr:p.sortOrdr,fullPath:p.fullPath,children:I.length?I:void 0}:null}else{const p=i,I=p.menuNm?`${p.menuNm} (${p.menuId})`:p.menuId;return a(I)?{key:p.bkmkId,type:"M",title:`📄 ${I}`,prntBkmkId:p.prntBkmkId,sortOrdr:p.sortOrdr,fullPath:p.fullPath,isLeaf:!0}:null}};return s.map(d).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 d=Array.isArray(t.children)?t.children:[];s(d)}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,d)=>(r[a].sortOrdr??0)-(r[d].sortOrdr??0))}),{nodes:r,rootIds:e}}function B(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 $(n,r){if(!r||r==="-")return n.rootIds.length;const e=n.nodes[r];return e?e.children.length:0}function de(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 ce(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 q(n,r){const e=n.nodes[r];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>q(n,a)),ce(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 d=t[o.prntBkmkId];d?.type==="F"&&(t[o.prntBkmkId]={...d,children:d.children.map(c=>c===r?e:c)})}else a=n.rootIds.map(d=>d===r?e:d);return{...n,nodes:t,rootIds:a}}function x(n){return n.rootIds.find(r=>n.nodes[r]?.type==="F")??null}function v(n,r){const e={};Object.values(n).forEach(c=>{const i=c.bkmkId,p=c.prntBkmkId;!i||!p||p==="-"||p===i||(e[p]??=[]).push(i)});const s=new Set,o=c=>{if(s.has(c))return null;const i=n[c];if(!i)return null;s.add(c);try{if(i.type==="F"){const I=i,m=e[c]??[];return{type:"F",bkmkId:c,bkmkNm:I.bkmkNm,prntBkmkId:I.prntBkmkId,children:m.map(o).filter(Boolean)}}const p=i;return{type:"M",bkmkId:c,bkmkNm:p.menuNm,menuId:p.menuId,menuNm:p.menuNm,prntBkmkId:p.prntBkmkId}}finally{s.delete(c)}},t=Object.values(n).filter(c=>c.prntBkmkId==="-"&&c.type==="M").map(c=>c.bkmkId),a=Object.values(n).filter(c=>c.prntBkmkId==="-"&&c.type==="F").map(c=>c.bkmkId);return Array.from(new Set([...r,...t,...a])).map(o).filter(Boolean)}function P(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 H={DEFAULT_PRNT_GBCD:1},le=n=>n&&typeof n=="object"&&typeof n.menuId=="string"&&typeof n.menuNm=="string",z=n=>Array.isArray(n)&&n.every(le);let E=[],Y=[];const ie=n=>{if(n&&typeof n=="object"){const r=n;if(r.menus&&z(r.menus))return r.menus;if(z(n))return n}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},ue=(n,r)=>!!r&&n.crprCd===r.crprCd&&n.userId===r.userId&&(n.prntGbcd??H.DEFAULT_PRNT_GBCD)===(r.prntGbcd??H.DEFAULT_PRNT_GBCD),me=n=>{if(E.length===n.length&&E.every((t,a)=>t.menuId===n[a]?.menuId&&t.menuPrntId===n[a]?.menuPrntId))return Y;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,d)=>(a?.menuNo??0)-(d?.menuNo??0)).map(a=>({...a,children:a.children&&a.children.length?s(a.children):void 0})),o=s(e);return E=[...n],Y=o,o},_=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??H.DEFAULT_PRNT_GBCD};if(ue(t,r()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}n({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await g.callService(g.getServiceCode("AUTH_MENU"),t),d=ie(a),c=me(d);n({flatMenuList:d,menuList:c,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},G=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(d=>d.key===e.menuId),a=o.find(d=>d.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)):F.message.warning("유효하지 않은 메뉴정보입니다.");else{if(o.length>O.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),F.message.warning(`최대 ${O.MAX_TABS}개의 탭만 열 수 있습니다.
|
|
2
2
|
기존 탭을 닫고 다시 시도해주세요.`);return}const d={key:e.menuId,label:e.menuNm,gubun:"M",menuItem:e,closable:!0};n({tabs:[...o,d],activeMenuId:e.menuId,activeMenuItem:e}),r().setTabParams(e.menuId,s||{}),e?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(e.menuId)}},openTabByMenuId:(e,s)=>{const o=_.getState().findMenuById(e);o?r().openTabFromMenu(o,s):F.message.warning("메뉴 ID를 찾을 수 없습니다.")},openDetailView:(e,s,o)=>{const{tabs:t}=r();if(t.find(d=>d.key===e.viewId))r().focusTab(e.viewId);else{const d={key:e.viewId,label:e.viewLabel,gubun:"C",componentItem:{scrnPath:s,prsnInfoYn:o,prntInfo:e.prntInfo},closable:!0};n({tabs:[...t,d],activeMenuId:e.viewId,activeDetailItem:e}),r().setTabParams(e.viewId,e.viewParams||{})}},closeTab:e=>{const{tabs:s,activeMenuId:o}=r();s.find(d=>d.key===e);const t=s.filter(d=>d.key!==e);let a=o;if(o===e){const d=s.findIndex(c=>c.key===e);a=t.length?t[Math.min(d,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(c=>t[c]===a[c])?o:{tabParams:{...o.tabParams,[e]:a}}}),setComponentLabelMap:(e,s)=>n({componentLabelMap:e})})),X=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 g.callService(g.getServiceCode("SRCH_POPU"),{crprCd:g.getUserInfo()?.crprCd,popuCd:e});t=a?.mstr;const d=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),p=r().zIndexSeed+1,I={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:d,config:o,zIndex:p},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,I],activePopupId:I.popupId,isLoading:!1,zIndexSeed:p}))}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,d=Z.localPopupRegistry[e]?.defaultConfig||{},c={...d,...s,buttons:s?.buttons!==void 0?s.buttons:d.buttons,callback:s?.callback!==void 0?s.callback:d.callback},i=s?.defaultParams||{},p=r().popups.find(m=>m.popupCode===e&&m.isLocal);if(p){const m=r().zIndexSeed+1;n({activePopupId:p.popupId,zIndexSeed:m}),n(u=>({popups:u.popups.map(h=>h.popupId===p.popupId?{...h,config:c,zIndex:m,close:()=>{r().closePopup(p.popupId)}}:h)}));return}const I={popupId:o,popupCode:e,popupTitle:c.title||e,popupUrl:"",popupParams:i,width:c.width||1e3,height:c.height||700,resizable:c.resizable!==void 0?c.resizable:!0,draggable:c.draggable!==void 0?c.draggable:!0,buttonList:[],config:c,isLocal:!0,zIndex:t,close:()=>{r().closePopup(o)}};n(m=>({popups:[...m.popups,I],activePopupId:o,zIndexSeed:t}))},closePopup:e=>{const{popups:s,activePopupId:o}=r(),t=s.filter(d=>d.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)}))}})),U=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:"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]=L.useState(!1),e=L.useCallback(s=>{const o=s?.getModifierState?.("CapsLock");typeof o=="boolean"&&r(o)},[]);return{capsOn:n,onKeyDown:e}}function Ie(n){const{loginApi:r,fetchCommonCodes:e,onAfterLogin:s,onError:o,rememberCookie:t={enabled:!0,days:30}}=n,[a,d]=L.useState(!1),{capsOn:c,onKeyDown:i}=J(),p="SCMSIGN00101",I=`${__SYS_CD__}_login_id`,m={id:t?.enabled?g.getCookie(I):void 0,pswr:void 0},u=L.useCallback(async(h,C)=>{d(!0);try{const S={crprCd:"100",id:h.id,pswr:await g.encryptSha256(h.pswr)},y=await(r??(N=>g.callService(p,N)))(S);if(y?.userInfo?.userId){if(w.getState().setLoginUser(y.userInfo,y?.hrInfo),t?.enabled){const N=t.days??30;h.remember?g.setCookie(I,h.id??"",N):g.setCookie(I,"",0)}return e?await e():await D.getState().fetchCommonCodes(),s?s(y,C):(F.message.success(`${y.userInfo.userNm}님 환영합니다.`),C("/main")),{user:y.userInfo,response:y}}else throw o?.({user:y.userInfo,response:y,navigate:C}),new Error("사용자 정보가 유효하지 않습니다.")}catch(S){throw o?.(S),S}finally{d(!1)}},[p,r,e,s,o,t?.enabled,t?.days]);return{loading:a,capsOn:c,onKeyDown:i,prefills:m,doLogin:u}}function fe(){const n=V.useNavigate();return()=>{w.getState().clearLoginUser(),U.getState().clearSystemMap(),D.getState().clearCodes(),_.getState().clearMenu(),G.getState().clearMenuViewStore(),R.getState().clearFavorites(),n("/login")}}const ye=()=>D.getState(),ge=()=>X.getState(),Se=()=>w.getState(),Ne=()=>R.getState(),be=()=>_.getState(),Me=()=>G.getState(),ke=()=>U.getState();exports.useCapsLock=J;exports.useCode=ye;exports.useCodeStore=D;exports.useColorStore=se;exports.useFavorite=Ne;exports.useFavoriteStore=R;exports.useLoadingStore=Ce;exports.useLogin=Ie;exports.useLogout=fe;exports.useMenuModel=be;exports.useMenuModelStore=_;exports.useMenuView=Me;exports.useMenuViewStore=G;exports.useOptionStore=oe;exports.usePopupLoadingStore=he;exports.usePopupState=ge;exports.usePopupStore=X;exports.useSystemCode=ke;exports.useSystemStore=U;exports.useUser=Se;exports.useUserStore=w;
|
package/dist/stores/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { create as N } from "zustand";
|
|
2
2
|
import { callService as b, getServiceCode as E, getUserId as v, getUserInfo as Q, getCookie as ee, encryptSha256 as te, setCookie as G } from "../utils/index.js";
|
|
3
3
|
import { message as L } from "antd";
|
|
4
|
-
import { l as oe } from "../chunks/layout-components-
|
|
4
|
+
import { l as oe } from "../chunks/layout-components-CyKRhOdT.js";
|
|
5
5
|
import { useState as Y, useCallback as X } from "react";
|
|
6
6
|
import { useNavigate as se } from "react-router-dom";
|
|
7
7
|
function ne(n, r) {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g clip-path="url(#clip0_1283_3082)">
|
|
3
|
+
<mask id="mask0_1283_3082" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="24">
|
|
4
|
+
<path d="M24 0H0V24H24V0Z" fill="white"/>
|
|
5
|
+
</mask>
|
|
6
|
+
<g mask="url(#mask0_1283_3082)">
|
|
7
|
+
<path d="M19.3845 3.23077C19.3845 2.64924 18.9506 2.17847 18.4245 2.17847H5.57523C5.03985 2.17847 4.61523 2.64924 4.61523 3.23077V21.8308L19.3845 13.7815V3.23077Z" fill="url(#paint0_linear_1283_3082)"/>
|
|
8
|
+
<path d="M11.4921 18.0739C11.806 17.9077 12.1844 17.9077 12.4983 18.0739L19.3752 21.8216V13.7723L11.4829 18.0739H11.4921Z" fill="url(#paint1_linear_1283_3082)"/>
|
|
9
|
+
<path d="M12 6.60925V12.8677" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
10
|
+
<path d="M15.1291 9.72925H8.87061" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
11
|
+
</g>
|
|
12
|
+
</g>
|
|
13
|
+
<defs>
|
|
14
|
+
<linearGradient id="paint0_linear_1283_3082" x1="8.50139" y1="3.24001" x2="13.246" y2="15.6831" gradientUnits="userSpaceOnUse">
|
|
15
|
+
<stop stop-color="#9797B3"/>
|
|
16
|
+
<stop offset="1" stop-color="#B9B9D7"/>
|
|
17
|
+
</linearGradient>
|
|
18
|
+
<linearGradient id="paint1_linear_1283_3082" x1="15.1844" y1="15.0462" x2="17.3352" y2="22.68" gradientUnits="userSpaceOnUse">
|
|
19
|
+
<stop stop-color="#797994"/>
|
|
20
|
+
<stop offset="1" stop-color="#AAAACC"/>
|
|
21
|
+
</linearGradient>
|
|
22
|
+
<clipPath id="clip0_1283_3082">
|
|
23
|
+
<rect width="24" height="24" fill="white"/>
|
|
24
|
+
</clipPath>
|
|
25
|
+
</defs>
|
|
26
|
+
</svg>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g clip-path="url(#clip0_1305_1792)">
|
|
3
|
+
<path d="M15.56 2.42969H2.04003C1.20608 2.42969 0.530029 3.10574 0.530029 3.93969V17.4597C0.530029 18.2936 1.20608 18.9697 2.04003 18.9697H15.56C16.394 18.9697 17.07 18.2936 17.07 17.4597V3.93969C17.07 3.10574 16.394 2.42969 15.56 2.42969Z" fill="url(#paint0_linear_1305_1792)"/>
|
|
4
|
+
<path d="M18.12 2.33984L17.16 1.37984C16.69 0.909844 15.93 0.909844 15.47 1.37984L6.67999 10.1598L8.48999 11.9698L18.12 2.33984Z" fill="#C15D5D"/>
|
|
5
|
+
<path d="M19.12 3.33984L18.12 2.33984L8.48999 11.9698L10.33 13.8098L19.11 5.02984C19.58 4.55984 19.58 3.79984 19.11 3.33984H19.12Z" fill="#9B4B4B"/>
|
|
6
|
+
<path d="M8.49 11.9702L6.68 10.1602L6.13 13.7702C6.13 13.9302 6.19 14.0702 6.29 14.1702C6.4 14.2902 6.55 14.3702 6.73 14.3702L10.34 13.8202L8.5 11.9802L8.49 11.9702Z" fill="#9B4B4B"/>
|
|
7
|
+
<path d="M13.1294 3.72145L16.7781 7.37012L18.2206 5.92762L14.5719 2.27895L13.1294 3.72145Z" fill="#FF8080"/>
|
|
8
|
+
</g>
|
|
9
|
+
<defs>
|
|
10
|
+
<linearGradient id="paint0_linear_1305_1792" x1="10.58" y1="8.24969" x2="2.53003" y2="19.3297" gradientUnits="userSpaceOnUse">
|
|
11
|
+
<stop stop-color="#FFA9A9"/>
|
|
12
|
+
<stop offset="1" stop-color="#F48484"/>
|
|
13
|
+
</linearGradient>
|
|
14
|
+
<clipPath id="clip0_1305_1792">
|
|
15
|
+
<rect width="20" height="20" fill="white"/>
|
|
16
|
+
</clipPath>
|
|
17
|
+
</defs>
|
|
18
|
+
</svg>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g clip-path="url(#clip0_1302_1762)">
|
|
3
|
+
<path d="M8.72 3.66992H19.42C20.38 3.66992 21.16 4.44992 21.16 5.40992V9.94992H8.72V3.66992Z" fill="url(#paint0_linear_1302_1762)"/>
|
|
4
|
+
<path d="M19.41 6.84004H10.47L8.55001 1.79004H2.51001C1.60001 1.79004 0.850006 2.54004 0.850006 3.45004V17.65C0.850006 19.07 2.00001 20.22 3.42001 20.22H18.6C20.02 20.22 21.17 19.07 21.17 17.65V8.58004C21.17 7.62004 20.39 6.84004 19.43 6.84004H19.41Z" fill="url(#paint1_linear_1302_1762)"/>
|
|
5
|
+
<path d="M14.1 12.8402H11.67V10.4102C11.67 10.0402 11.37 9.74023 11 9.74023C10.63 9.74023 10.33 10.0402 10.33 10.4102V12.8402H7.90001C7.53001 12.8402 7.23001 13.1402 7.23001 13.5102C7.23001 13.8802 7.53001 14.1802 7.90001 14.1802H10.33V16.6102C10.33 16.9802 10.63 17.2802 11 17.2802C11.37 17.2802 11.67 16.9802 11.67 16.6102V14.1802H14.1C14.47 14.1802 14.77 13.8802 14.77 13.5102C14.77 13.1402 14.47 12.8402 14.1 12.8402Z" fill="white"/>
|
|
6
|
+
</g>
|
|
7
|
+
<defs>
|
|
8
|
+
<linearGradient id="paint0_linear_1302_1762" x1="14.94" y1="10.5099" x2="14.94" y2="5.21992" gradientUnits="userSpaceOnUse">
|
|
9
|
+
<stop stop-color="#364A89"/>
|
|
10
|
+
<stop offset="1" stop-color="#4A60AF"/>
|
|
11
|
+
</linearGradient>
|
|
12
|
+
<linearGradient id="paint1_linear_1302_1762" x1="11" y1="7.22004" x2="11" y2="24.66" gradientUnits="userSpaceOnUse">
|
|
13
|
+
<stop stop-color="#8E9EEF"/>
|
|
14
|
+
<stop offset="1" stop-color="#7C8FED"/>
|
|
15
|
+
</linearGradient>
|
|
16
|
+
<clipPath id="clip0_1302_1762">
|
|
17
|
+
<rect width="22" height="22" fill="white"/>
|
|
18
|
+
</clipPath>
|
|
19
|
+
</defs>
|
|
20
|
+
</svg>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g clip-path="url(#clip0_1283_3093)">
|
|
3
|
+
<mask id="mask0_1283_3093" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="24">
|
|
4
|
+
<path d="M24 0H0V24H24V0Z" fill="white"/>
|
|
5
|
+
</mask>
|
|
6
|
+
<g mask="url(#mask0_1283_3093)">
|
|
7
|
+
<path d="M19.3845 3.23077C19.3845 2.64924 18.9506 2.17847 18.4245 2.17847H5.57523C5.03985 2.17847 4.61523 2.64924 4.61523 3.23077V21.8308L19.3845 13.7815V3.23077Z" fill="url(#paint0_linear_1283_3093)"/>
|
|
8
|
+
<path d="M11.4921 18.0739C11.806 17.9077 12.1844 17.9077 12.4983 18.0739L19.3752 21.8216V13.7723L11.4829 18.0739H11.4921Z" fill="url(#paint1_linear_1283_3093)"/>
|
|
9
|
+
<path d="M9.11084 9.58155L10.9755 11.2708L14.8893 7.35693" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
10
|
+
</g>
|
|
11
|
+
</g>
|
|
12
|
+
<defs>
|
|
13
|
+
<linearGradient id="paint0_linear_1283_3093" x1="8.50139" y1="3.24001" x2="13.246" y2="15.6831" gradientUnits="userSpaceOnUse">
|
|
14
|
+
<stop stop-color="#9797B3"/>
|
|
15
|
+
<stop offset="1" stop-color="#B9B9D7"/>
|
|
16
|
+
</linearGradient>
|
|
17
|
+
<linearGradient id="paint1_linear_1283_3093" x1="15.1844" y1="15.0462" x2="17.3352" y2="22.68" gradientUnits="userSpaceOnUse">
|
|
18
|
+
<stop stop-color="#797994"/>
|
|
19
|
+
<stop offset="1" stop-color="#AAAACC"/>
|
|
20
|
+
</linearGradient>
|
|
21
|
+
<clipPath id="clip0_1283_3093">
|
|
22
|
+
<rect width="24" height="24" fill="white"/>
|
|
23
|
+
</clipPath>
|
|
24
|
+
</defs>
|
|
25
|
+
</svg>
|