@j-solution/components 1.7.0 → 1.9.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.
- package/README.md +413 -415
- package/assets/jwms-portal-frontend-Ct2Tc7yj.css +1 -0
- package/assets/styles/global-utilities.css +34 -0
- package/assets/styles/j-components.css +1 -1
- package/assets/styles/themes.css +443 -443
- package/components/atoms/JButton.vue.cjs +6 -1
- package/components/atoms/JButton.vue.cjs.map +1 -1
- package/components/atoms/JButton.vue.js +10 -85
- package/components/atoms/JButton.vue.js.map +1 -1
- package/components/atoms/JButton.vue2.cjs +1 -1
- package/components/atoms/JButton.vue2.cjs.map +1 -1
- package/components/atoms/JButton.vue2.js +85 -2
- package/components/atoms/JButton.vue2.js.map +1 -1
- package/components/atoms/JGrid.vue.cjs +1 -1
- package/components/atoms/JGrid.vue.js +1 -1
- package/components/atoms/JGrid.vue2.cjs +1 -1
- package/components/atoms/JGrid.vue2.cjs.map +1 -1
- package/components/atoms/JGrid.vue2.js +39 -35
- package/components/atoms/JGrid.vue2.js.map +1 -1
- package/components/atoms/JLabel.vue.cjs +1 -1
- package/components/atoms/JLabel.vue.cjs.map +1 -1
- package/components/atoms/JLabel.vue.js +26 -22
- package/components/atoms/JLabel.vue.js.map +1 -1
- package/components/atoms/JSectionTitle.vue.cjs +7 -0
- package/components/atoms/JSectionTitle.vue.cjs.map +1 -0
- package/components/atoms/JSectionTitle.vue.js +13 -0
- package/components/atoms/JSectionTitle.vue.js.map +1 -0
- package/components/atoms/JSectionTitle.vue2.cjs +2 -0
- package/components/atoms/JSectionTitle.vue2.cjs.map +1 -0
- package/components/atoms/JSectionTitle.vue2.js +67 -0
- package/components/atoms/JSectionTitle.vue2.js.map +1 -0
- package/components/atoms/JSplitter.vue.cjs +6 -1
- package/components/atoms/JSplitter.vue.cjs.map +1 -1
- package/components/atoms/JSplitter.vue.js +10 -59
- package/components/atoms/JSplitter.vue.js.map +1 -1
- package/components/atoms/JSplitter.vue2.cjs +1 -1
- package/components/atoms/JSplitter.vue2.cjs.map +1 -1
- package/components/atoms/JSplitter.vue2.js +59 -2
- package/components/atoms/JSplitter.vue2.js.map +1 -1
- package/components/examples/ExampleCrudPage.vue.cjs +1 -1
- package/components/examples/ExampleCrudPage.vue.cjs.map +1 -1
- package/components/examples/ExampleCrudPage.vue.js +228 -208
- package/components/examples/ExampleCrudPage.vue.js.map +1 -1
- package/components/examples/ExampleTabMappingPage.vue.cjs +1 -1
- package/components/examples/ExampleTabMappingPage.vue.cjs.map +1 -1
- package/components/examples/ExampleTabMappingPage.vue.js +341 -368
- package/components/examples/ExampleTabMappingPage.vue.js.map +1 -1
- package/components/molecules/JAlert.vue.cjs +1 -1
- package/components/molecules/JAlert.vue.cjs.map +1 -1
- package/components/molecules/JAlert.vue.js +18 -16
- package/components/molecules/JAlert.vue.js.map +1 -1
- package/components/molecules/JCard.vue.cjs +1 -1
- package/components/molecules/JCard.vue.cjs.map +1 -1
- package/components/molecules/JCard.vue.js +55 -39
- package/components/molecules/JCard.vue.js.map +1 -1
- package/components/molecules/JEmptyState.vue.cjs +7 -0
- package/components/molecules/JEmptyState.vue.cjs.map +1 -0
- package/components/molecules/JEmptyState.vue.js +13 -0
- package/components/molecules/JEmptyState.vue.js.map +1 -0
- package/components/molecules/JEmptyState.vue2.cjs +2 -0
- package/components/molecules/JEmptyState.vue2.cjs.map +1 -0
- package/components/molecules/JEmptyState.vue2.js +127 -0
- package/components/molecules/JEmptyState.vue2.js.map +1 -0
- package/components/molecules/JFormField.vue.cjs +6 -1
- package/components/molecules/JFormField.vue.cjs.map +1 -1
- package/components/molecules/JFormField.vue.js +10 -264
- package/components/molecules/JFormField.vue.js.map +1 -1
- package/components/molecules/JFormField.vue2.cjs +2 -0
- package/components/molecules/JFormField.vue2.cjs.map +1 -0
- package/components/molecules/JFormField.vue2.js +271 -0
- package/components/molecules/JFormField.vue2.js.map +1 -0
- package/components/molecules/JTabs.vue.cjs +1 -1
- package/components/molecules/JTabs.vue.js +1 -1
- package/components/molecules/JTabs.vue2.cjs +1 -1
- package/components/molecules/JTabs.vue2.cjs.map +1 -1
- package/components/molecules/JTabs.vue2.js +44 -50
- package/components/molecules/JTabs.vue2.js.map +1 -1
- package/components/molecules/JTitlebar.vue.cjs +1 -1
- package/components/molecules/JTitlebar.vue.cjs.map +1 -1
- package/components/molecules/JTitlebar.vue.js +23 -20
- package/components/molecules/JTitlebar.vue.js.map +1 -1
- package/components/organisms/JDynamicForm.vue2.cjs +1 -1
- package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
- package/components/organisms/JDynamicForm.vue2.js +35 -32
- package/components/organisms/JDynamicForm.vue2.js.map +1 -1
- package/components/organisms/JDynamicTabs.vue.cjs +1 -1
- package/components/organisms/JDynamicTabs.vue.cjs.map +1 -1
- package/components/organisms/JDynamicTabs.vue.js +47 -52
- package/components/organisms/JDynamicTabs.vue.js.map +1 -1
- package/components/organisms/JFilterBar.vue.cjs +6 -1
- package/components/organisms/JFilterBar.vue.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue.js +10 -137
- package/components/organisms/JFilterBar.vue.js.map +1 -1
- package/components/organisms/JFilterBar.vue2.cjs +1 -1
- package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue2.js +143 -2
- package/components/organisms/JFilterBar.vue2.js.map +1 -1
- package/components/organisms/JFormModal.vue.cjs +1 -1
- package/components/organisms/JFormModal.vue.cjs.map +1 -1
- package/components/organisms/JFormModal.vue.js +54 -49
- package/components/organisms/JFormModal.vue.js.map +1 -1
- package/components/organisms/JHeader.vue.cjs +1 -1
- package/components/organisms/JHeader.vue.cjs.map +1 -1
- package/components/organisms/JHeader.vue.js +191 -190
- package/components/organisms/JHeader.vue.js.map +1 -1
- package/components/organisms/JModal.vue.cjs +1 -1
- package/components/organisms/JModal.vue.cjs.map +1 -1
- package/components/organisms/JModal.vue.js +47 -45
- package/components/organisms/JModal.vue.js.map +1 -1
- package/components/organisms/JPageContainer.vue.cjs +1 -1
- package/components/organisms/JPageContainer.vue.cjs.map +1 -1
- package/components/organisms/JPageContainer.vue.js +22 -22
- package/components/organisms/JPageContainer.vue.js.map +1 -1
- package/components/organisms/JSearchPanel.vue2.cjs +1 -1
- package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
- package/components/organisms/JSearchPanel.vue2.js +34 -32
- package/components/organisms/JSearchPanel.vue2.js.map +1 -1
- package/components/organisms/JShuttle.vue.cjs +7 -0
- package/components/organisms/JShuttle.vue.cjs.map +1 -0
- package/components/organisms/JShuttle.vue.js +13 -0
- package/components/organisms/JShuttle.vue.js.map +1 -0
- package/components/organisms/JShuttle.vue2.cjs +2 -0
- package/components/organisms/JShuttle.vue2.cjs.map +1 -0
- package/components/organisms/JShuttle.vue2.js +216 -0
- package/components/organisms/JShuttle.vue2.js.map +1 -0
- package/components/organisms/JSidebar/JSidebar.vue.cjs +2 -0
- package/components/organisms/JSidebar/JSidebar.vue.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebar.vue.js +189 -0
- package/components/organisms/JSidebar/JSidebar.vue.js.map +1 -0
- package/components/{molecules/JFormField.vue3.cjs → organisms/JSidebar/JSidebar.vue2.cjs} +2 -2
- package/components/organisms/JSidebar/JSidebar.vue2.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebar.vue2.js +5 -0
- package/components/organisms/JSidebar/JSidebar.vue2.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.js +89 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.js +5 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.js +79 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.js +5 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.js.map +1 -0
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs +1 -1
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs.map +1 -1
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js +52 -52
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js.map +1 -1
- package/components/shadcn/Card.vue.cjs +1 -1
- package/components/shadcn/Card.vue.cjs.map +1 -1
- package/components/shadcn/Card.vue.js +1 -1
- package/components/shadcn/Card.vue.js.map +1 -1
- package/components/shadcn/CardContent.vue.cjs +1 -1
- package/components/shadcn/CardContent.vue.cjs.map +1 -1
- package/components/shadcn/CardContent.vue.js +4 -4
- package/components/shadcn/CardContent.vue.js.map +1 -1
- package/components/shadcn/CardHeader.vue.cjs +1 -1
- package/components/shadcn/CardHeader.vue.cjs.map +1 -1
- package/components/shadcn/CardHeader.vue.js +5 -5
- package/components/shadcn/CardHeader.vue.js.map +1 -1
- package/components/shadcn/Input.vue.cjs +1 -1
- package/components/shadcn/Input.vue.cjs.map +1 -1
- package/components/shadcn/Input.vue.js +3 -3
- package/components/shadcn/Input.vue.js.map +1 -1
- package/components/shadcn/SelectTrigger.vue.cjs +1 -1
- package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
- package/components/shadcn/SelectTrigger.vue.js +1 -1
- package/components/shadcn/SelectTrigger.vue.js.map +1 -1
- package/components/shadcn/TabsContent.vue.cjs +1 -1
- package/components/shadcn/TabsContent.vue.cjs.map +1 -1
- package/components/shadcn/TabsContent.vue.js +1 -1
- package/components/shadcn/TabsContent.vue.js.map +1 -1
- package/components/shadcn/TabsList.vue.cjs +1 -1
- package/components/shadcn/TabsList.vue.cjs.map +1 -1
- package/components/shadcn/TabsList.vue.js +10 -10
- package/components/shadcn/TabsList.vue.js.map +1 -1
- package/components/shadcn/Textarea.vue.cjs +1 -1
- package/components/shadcn/Textarea.vue.cjs.map +1 -1
- package/components/shadcn/Textarea.vue.js +1 -1
- package/components/shadcn/Textarea.vue.js.map +1 -1
- package/components/shadcn/index.cjs +1 -1
- package/components/shadcn/index.cjs.map +1 -1
- package/components/shadcn/index.js +4 -4
- package/components/shadcn/index.js.map +1 -1
- package/components/templates/JLayout.vue.cjs.map +1 -1
- package/components/templates/JLayout.vue.js.map +1 -1
- package/components/templates/JLayoutSimple.vue.cjs +1 -1
- package/components/templates/JLayoutSimple.vue.cjs.map +1 -1
- package/components/templates/JLayoutSimple.vue.js +36 -30
- package/components/templates/JLayoutSimple.vue.js.map +1 -1
- package/index.cjs +1 -1
- package/index.js +75 -67
- package/package.json +1 -1
- package/types/index.d.ts +662 -461
- package/types/sidebar.types.cjs +2 -0
- package/types/sidebar.types.cjs.map +1 -0
- package/types/sidebar.types.js +5 -0
- package/types/sidebar.types.js.map +1 -0
- package/assets/jwms-portal-frontend-CwxPfHfa.css +0 -1
- package/components/molecules/JFormField.vue3.cjs.map +0 -1
- package/components/molecules/JFormField.vue3.js +0 -6
- package/components/molecules/JFormField.vue3.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),m=require("../molecules/JFormField.vue.cjs");;/* empty css */require("../shadcn/index.cjs");require("@vueuse/core");require("reka-ui");require("clsx");require("tailwind-merge");require("lucide-vue-next");const K=require("../molecules/JTabs.vue.cjs");;/* empty css */;/* empty css */const L=require("../molecules/JCard.vue.cjs"),i=require("../atoms/JButton.vue.cjs");require("@internationalized/date");require("md-editor-v3");;/* empty css */;/* empty css */require("../shadcn/badge-variants.cjs");;/* empty css */require("../shadcn/avatar-variants.cjs");require("dompurify");;/* empty css */const f=require("../atoms/JGrid.vue.cjs"),y=require("../atoms/JSplitter.vue.cjs");require("vue-sonner");const X=require("../molecules/JTitlebar.vue.cjs");;/* empty css */;/* empty css */const k=require("../organisms/JFilterBar.vue.cjs");require("vue-router");;/* empty css */;/* empty css */const Z={class:"flex flex-col h-full gap-2 bg-background text-foreground"},Q={class:"flex flex-col h-full gap-2 p-2"},ee={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2"},te={class:"h-full overflow-auto bg-background"},le={class:"h-full overflow-y-auto border-l bg-muted/30"},ae={class:"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2"},re={class:"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2"},oe={class:"flex justify-end gap-2"},ie={class:"flex flex-col h-full gap-2 p-2"},ue={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2"},ne={class:"h-full overflow-auto bg-background"},se={class:"h-full flex gap-2 overflow-hidden items-stretch p-2 bg-background"},de={class:"flex-1 flex flex-col overflow-hidden"},me={class:"flex-1 overflow-auto bg-background"},ce={class:"flex flex-col justify-center gap-2 px-2"},fe={class:"flex-1 flex flex-col overflow-hidden"},pe={class:"flex-1 overflow-auto bg-background"},ve=e.defineComponent({__name:"ExampleTabMappingPage",setup(be,{expose:h}){const p=e.ref("master"),q=[{id:"master",label:"회원사 기본정보"},{id:"mapping-customer",label:"고객사 매핑"}];function D(l){console.log("탭 변경:",l)}const M=[{value:"Y",label:"Y:활성"},{value:"N",label:"N:비활성"}],v=e.ref(!1),u=e.ref({isActive:"",keyword:""}),E={isActive:{label:"활성여부",displayValue:l=>l==="Y"?"Y:활성":l==="N"?"N:비활성":""},keyword:{label:"검색어"}},b=e.ref([{memberId:"M001",memberName:"제이솔루션",isActive:"Y"},{memberId:"M002",memberName:"ABC물류",isActive:"Y"},{memberId:"M003",memberName:"XYZ유통",isActive:"N"}]),I=e.ref([{field:"memberId",headerName:"회원사코드",width:150,enableValue:!0},{field:"memberName",headerName:"회원사명",flex:1,enableValue:!0},{field:"isActive",headerName:"활성",width:100,cellRenderer:l=>l.value==="Y"?"✓":"",enableRowGroup:!0,enablePivot:!0}]),R=[{icon:"pencil",label:"수정",tooltip:"편집",onClick:l=>{s.value=!1,r.value={memberId:l.memberId,memberName:l.memberName,isActive:l.isActive}}},{icon:"trash2",label:"삭제",tooltip:"삭제",styletype:"danger",onClick:l=>{confirm(`${l.memberName}을(를) 삭제하시겠습니까?`)&&(console.log("회원사 삭제:",l.memberId),alert(`삭제되었습니다: ${l.memberName}`))}}],N=e.ref(),s=e.ref(!1),r=e.ref({memberId:"",memberName:"",isActive:"Y"});function A(l){s.value=!1,r.value={memberId:l.data.memberId,memberName:l.data.memberName,isActive:l.data.isActive}}function T(){s.value=!0,r.value={memberId:"",memberName:"",isActive:"Y"}}function z(){console.log("회원사 저장:",r.value),alert(`저장되었습니다: ${r.value.memberName}`)}function G(){confirm(`${r.value.memberName}을(를) 삭제하시겠습니까?`)&&(console.log("회원사 삭제:",r.value.memberId),alert(`삭제되었습니다: ${r.value.memberName}`))}function U(){u.value={isActive:"",keyword:""}}function F(){console.log("회원사 조회:",u.value)}function S(){alert("회원사 관리 페이지 도움말")}const g=e.ref(!1),d=e.ref({keyword:""}),Y={keyword:{label:"검색어"}},V=e.ref(),x=e.ref(),w=e.ref(),B=e.ref([{field:"memberId",headerName:"회원사코드",width:150},{field:"memberName",headerName:"회원사명",flex:1}]),o=e.ref(""),n=e.ref({M001:["C001","C002"],M002:["C003"],M003:[]}),C=[{code:"C001",name:"고객A"},{code:"C002",name:"고객B"},{code:"C003",name:"고객C"},{code:"C004",name:"고객D"},{code:"C005",name:"고객E"}],_=e.ref([{field:"code",headerName:"코드",width:120},{field:"name",headerName:"이름",flex:1}]),J=e.computed(()=>{if(!o.value)return[];const l=n.value[o.value]||[];return C.filter(t=>!l.includes(t.code))}),P=e.computed(()=>{if(!o.value)return[];const l=n.value[o.value]||[];return C.filter(t=>l.includes(t.code))});function $(l){o.value=l.data.memberId,console.log("선택된 회원사:",l.data.memberName)}function j(){if(!o.value){alert("회원사를 먼저 선택해주세요.");return}const l=x.value?.getSelectedRows()||[];if(l.length===0){alert("매핑할 고객사를 선택해주세요.");return}const t=l.map(c=>c.code),a=o.value;n.value[a]||(n.value[a]=[]),n.value[a].push(...t),console.log("매핑:",t)}function H(){if(!o.value){alert("회원사를 먼저 선택해주세요.");return}const l=w.value?.getSelectedRows()||[];if(l.length===0){alert("해제할 고객사를 선택해주세요.");return}const t=l.map(c=>c.code),a=o.value;n.value[a]=(n.value[a]||[]).filter(c=>!t.includes(c)),console.log("해제:",t)}function O(){d.value={keyword:""}}function W(){console.log("매핑 조회:",d.value)}return h({masterGridRef:N,mappingMasterGridRef:V}),(l,t)=>(e.openBlock(),e.createElementBlock("div",Z,[e.createVNode(e.unref(X.default),{icon:"users",title:"회원사 관리",description:"회원사 정보 및 고객사 매핑을 관리합니다",showHelp:!0,onHelp:S}),e.createVNode(e.unref(K.default),{activeTabId:p.value,"onUpdate:activeTabId":t[10]||(t[10]=a=>p.value=a),tabs:q,onTabChange:D},{"content-master":e.withCtx(()=>[e.createElementVNode("div",Q,[e.createVNode(e.unref(k.default),{collapsed:v.value,"onUpdate:collapsed":t[2]||(t[2]=a=>v.value=a),filterValues:u.value,"onUpdate:filterValues":t[3]||(t[3]=a=>u.value=a),filterDisplay:E,collapsible:!0,title:"회원사 목록"},{actions:e.withCtx(()=>[e.createVNode(e.unref(i.default),{size:"sm",variant:"outline",onClick:U},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode("초기화",-1)])]),_:1}),e.createVNode(e.unref(i.default),{size:"sm",styletype:"primary",onClick:F},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("조회",-1)])]),_:1}),e.createVNode(e.unref(i.default),{size:"sm",styletype:"primary",onClick:T},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode("신규",-1)])]),_:1})]),filters:e.withCtx(()=>[e.createElementVNode("div",ee,[e.createVNode(e.unref(m.default),{type:"combo",label:"활성여부",modelValue:u.value.isActive,"onUpdate:modelValue":t[0]||(t[0]=a=>u.value.isActive=a),options:M,orientation:"horizontal",labelWidth:"30%"},null,8,["modelValue"]),e.createVNode(e.unref(m.default),{type:"input",label:"검색어",modelValue:u.value.keyword,"onUpdate:modelValue":t[1]||(t[1]=a=>u.value.keyword=a),orientation:"horizontal",labelWidth:"30%"},null,8,["modelValue"])])]),_:1},8,["collapsed","filterValues"]),e.createVNode(e.unref(y.default),{direction:"horizontal","default-size":60,"min-size":30,"second-min-size":20,"second-max-size":60,gap:2,class:"flex-1"},{left:e.withCtx(()=>[e.createElementVNode("div",te,[e.createVNode(e.unref(f.default),{ref_key:"masterGridRef",ref:N,columnDefs:I.value,rowData:b.value,"action-buttons":R,enableGrouping:!0,enablePivot:!0,enableColumnsToolPanel:!0,rowGroupPanelShow:"always",pivotPanelShow:"always",groupDefaultExpanded:1,compactFooter:!0,onRowClicked:A},null,8,["columnDefs","rowData"])])]),right:e.withCtx(()=>[e.createElementVNode("div",le,[e.createVNode(e.unref(L.default),{class:"h-full",title:s.value?"신규 등록":"상세 정보"},{footer:e.withCtx(()=>[e.createElementVNode("div",oe,[e.createVNode(e.unref(i.default),{styletype:"primary",size:"sm",onClick:z},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("저장",-1)])]),_:1}),s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(i.default),{key:0,variant:"outline",size:"sm",onClick:G},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("삭제",-1)])]),_:1}))])]),default:e.withCtx(()=>[e.createElementVNode("div",ae,[e.createVNode(e.unref(m.default),{type:"input",label:"회원사코드",modelValue:r.value.memberId,"onUpdate:modelValue":t[4]||(t[4]=a=>r.value.memberId=a),readonly:!s.value,placeholder:"회원사 코드"},null,8,["modelValue","readonly"]),e.createVNode(e.unref(m.default),{type:"input",label:"회원사명",modelValue:r.value.memberName,"onUpdate:modelValue":t[5]||(t[5]=a=>r.value.memberName=a),placeholder:"회원사 이름"},null,8,["modelValue"])]),e.createElementVNode("div",re,[e.createVNode(e.unref(m.default),{type:"checkbox",label:"활성여부",modelValue:r.value.isActive,"onUpdate:modelValue":t[6]||(t[6]=a=>r.value.isActive=a),inlineLabel:"활성"},null,8,["modelValue"])])]),_:1},8,["title"])])]),_:1})])]),"content-mapping-customer":e.withCtx(()=>[e.createElementVNode("div",ie,[e.createVNode(e.unref(k.default),{collapsed:g.value,"onUpdate:collapsed":t[8]||(t[8]=a=>g.value=a),filterValues:d.value,"onUpdate:filterValues":t[9]||(t[9]=a=>d.value=a),filterDisplay:Y,collapsible:!0,title:"회원사별 고객사 매핑"},{actions:e.withCtx(()=>[e.createVNode(e.unref(i.default),{size:"sm",variant:"outline",onClick:O},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("초기화",-1)])]),_:1}),e.createVNode(e.unref(i.default),{size:"sm",styletype:"primary",onClick:W},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("조회",-1)])]),_:1})]),filters:e.withCtx(()=>[e.createElementVNode("div",ue,[e.createVNode(e.unref(m.default),{type:"input",label:"검색어",modelValue:d.value.keyword,"onUpdate:modelValue":t[7]||(t[7]=a=>d.value.keyword=a)},null,8,["modelValue"])])]),_:1},8,["collapsed","filterValues"]),e.createVNode(e.unref(y.default),{direction:"vertical","default-size":30,"min-size":20,"second-min-size":40,gap:2,class:"flex-1"},{top:e.withCtx(()=>[e.createElementVNode("div",ne,[e.createVNode(e.unref(f.default),{ref_key:"mappingMasterGridRef",ref:V,columnDefs:B.value,rowData:b.value,onRowClicked:$},null,8,["columnDefs","rowData"])])]),bottom:e.withCtx(()=>[e.createElementVNode("div",se,[e.createElementVNode("div",de,[t[18]||(t[18]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-2 px-2"},"미매핑 고객사",-1)),e.createElementVNode("div",me,[e.createVNode(e.unref(f.default),{ref_key:"unmappedGridRef",ref:x,columnDefs:_.value,rowData:J.value,pagination:!1,checkbox:""},null,8,["columnDefs","rowData"])])]),e.createElementVNode("div",ce,[e.createVNode(e.unref(i.default),{styletype:"primary",size:"sm",onClick:j},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode("매핑 ▶",-1)])]),_:1}),e.createVNode(e.unref(i.default),{variant:"outline",size:"sm",onClick:H},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("◀ 해제",-1)])]),_:1})]),e.createElementVNode("div",fe,[t[21]||(t[21]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-2 px-2"},"매핑된 고객사",-1)),e.createElementVNode("div",pe,[e.createVNode(e.unref(f.default),{ref_key:"mappedGridRef",ref:w,columnDefs:_.value,rowData:P.value,pagination:!1,checkbox:""},null,8,["columnDefs","rowData"])])])])]),_:1})])]),_:1},8,["activeTabId"])]))}});exports.default=ve;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),m=require("../molecules/JFormField.vue.cjs");require("../shadcn/index.cjs");require("@vueuse/core");require("reka-ui");require("clsx");require("tailwind-merge");require("lucide-vue-next");const j=require("../molecules/JTabs.vue.cjs");;/* empty css */;/* empty css */const X=require("../molecules/JCard.vue.cjs"),i=require("../atoms/JButton.vue.cjs");require("@internationalized/date");require("md-editor-v3");;/* empty css */;/* empty css */require("../shadcn/badge-variants.cjs");;/* empty css */require("../shadcn/avatar-variants.cjs");require("dompurify");;/* empty css */const h=require("../atoms/JGrid.vue.cjs"),q=require("../atoms/JSplitter.vue.cjs");;/* empty css */require("vue-sonner");const M=require("../molecules/JEmptyState.vue.cjs");;/* empty css */;/* empty css */const I=require("../organisms/JFilterBar.vue.cjs");require("vue-router");;/* empty css */;/* empty css */const Z=require("../organisms/JShuttle.vue.cjs"),K={class:"flex flex-col h-full gap-2 p-2"},Q={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2"},ee={class:"h-full overflow-auto bg-background"},te={class:"h-full overflow-y-auto bg-muted/30"},le={class:"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2"},ae={class:"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2"},re={class:"flex flex-col h-full gap-2 p-2"},oe={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2"},ie={class:"h-full overflow-auto bg-background"},ne={class:"h-full"},ue=e.defineComponent({__name:"ExampleTabMappingPage",setup(de,{expose:D}){const N=e.ref("master"),A=[{id:"master",label:"회원사 기본정보"},{id:"mapping-customer",label:"고객사 매핑"}];function z(a){console.log("탭 변경:",a)}const T=[{value:"Y",label:"Y:활성"},{value:"N",label:"N:비활성"}],V=e.ref(!1),o=e.ref({isActive:"",keyword:""}),B={isActive:{label:"활성여부",displayValue:a=>a==="Y"?"Y:활성":a==="N"?"N:비활성":""},keyword:{label:"검색어"}},g=e.ref([{memberId:"M001",memberName:"제이솔루션",isActive:"Y"},{memberId:"M002",memberName:"ABC물류",isActive:"Y"},{memberId:"M003",memberName:"XYZ유통",isActive:"N"}]),R=e.ref([{field:"memberId",headerName:"회원사코드",width:150,enableValue:!0},{field:"memberName",headerName:"회원사명",flex:1,enableValue:!0},{field:"isActive",headerName:"활성",width:100,cellRenderer:a=>a.value==="Y"?"✓":"",enableRowGroup:!0,enablePivot:!0}]),E=[{icon:"pencil",label:"수정",tooltip:"편집",onClick:a=>{n.value=!1,r.value={memberId:a.memberId,memberName:a.memberName,isActive:a.isActive}}},{icon:"trash2",label:"삭제",tooltip:"삭제",styletype:"danger",onClick:a=>{confirm(`${a.memberName}을(를) 삭제하시겠습니까?`)&&(console.log("회원사 삭제:",a.memberId),alert(`삭제되었습니다: ${a.memberName}`))}}],C=e.ref(),n=e.ref(!1),r=e.ref({memberId:"",memberName:"",isActive:"Y"});function U(a){n.value=!1,r.value={memberId:a.data.memberId,memberName:a.data.memberName,isActive:a.data.isActive}}function _(){n.value=!0,r.value={memberId:"",memberName:"",isActive:"Y"}}function J(){console.log("회원사 저장:",r.value),alert(`저장되었습니다: ${r.value.memberName}`)}function S(){confirm(`${r.value.memberName}을(를) 삭제하시겠습니까?`)&&(console.log("회원사 삭제:",r.value.memberId),alert(`삭제되었습니다: ${r.value.memberName}`))}function w(){o.value={isActive:"",keyword:""}}function F(){console.log("회원사 조회:",o.value)}function P(){alert("회원사 관리 페이지 도움말")}const x=e.ref(!1),d=e.ref({keyword:""}),Y={keyword:{label:"검색어"}},y=e.ref(),G=e.ref([{field:"memberId",headerName:"회원사코드",width:150},{field:"memberName",headerName:"회원사명",flex:1}]),p=e.ref(""),s=e.ref({M001:["C001","C002"],M002:["C003"],M003:[]}),k=[{id:"C001",code:"C001",name:"고객A"},{id:"C002",code:"C002",name:"고객B"},{id:"C003",code:"C003",name:"고객C"},{id:"C004",code:"C004",name:"고객D"},{id:"C005",code:"C005",name:"고객E"}],$=e.ref([{field:"code",headerName:"코드",width:120},{field:"name",headerName:"이름",flex:1}]),v=e.ref([]),b=e.ref([]);function H(a){p.value=a.data.memberId,console.log("선택된 회원사:",a.data.memberName);const t=s.value[a.data.memberId]||[];v.value=k.filter(u=>!t.includes(u.code)),b.value=k.filter(u=>t.includes(u.code))}function L(a){if(!p.value){alert("회원사를 먼저 선택해주세요.");return}const{items:t,direction:u}=a,l=p.value;if(u==="toRight"){const c=t.map(f=>f.code);s.value[l]||(s.value[l]=[]),s.value[l].push(...c),console.log("매핑:",c)}else{const c=t.map(f=>f.code);s.value[l]=(s.value[l]||[]).filter(f=>!c.includes(f)),console.log("해제:",c)}}function O(){d.value={keyword:""}}function W(){console.log("매핑 조회:",d.value)}return D({masterGridRef:C,mappingMasterGridRef:y}),v.value=[],b.value=[],(a,t)=>{const u=e.resolveComponent("JPageContainer");return e.openBlock(),e.createBlock(u,{title:"회원사 관리",icon:"users",description:"회원사 정보 및 고객사 매핑을 관리합니다",showHelp:!0,onHelp:P,"content-scroll":!1},{default:e.withCtx(()=>[e.createVNode(e.unref(j.default),{activeTabId:N.value,"onUpdate:activeTabId":t[12]||(t[12]=l=>N.value=l),tabs:A,onTabChange:z},{"content-master":e.withCtx(()=>[e.createElementVNode("div",K,[e.createVNode(e.unref(I.default),{collapsed:V.value,"onUpdate:collapsed":t[2]||(t[2]=l=>V.value=l),filterValues:o.value,"onUpdate:filterValues":t[3]||(t[3]=l=>o.value=l),filterDisplay:B,collapsible:!0,title:"회원사 목록"},{actions:e.withCtx(()=>[e.createVNode(e.unref(i.default),{size:"xs",variant:"outline",onClick:w},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode("초기화",-1)])]),_:1}),e.createVNode(e.unref(i.default),{size:"xs",styletype:"primary",onClick:F},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("조회",-1)])]),_:1}),e.createVNode(e.unref(i.default),{size:"xs",styletype:"primary",onClick:_},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("신규",-1)])]),_:1})]),filters:e.withCtx(()=>[e.createElementVNode("div",Q,[e.createVNode(e.unref(m.default),{type:"combo",label:"활성여부",modelValue:o.value.isActive,"onUpdate:modelValue":t[0]||(t[0]=l=>o.value.isActive=l),options:T,orientation:"horizontal",labelWidth:"30%"},null,8,["modelValue"]),e.createVNode(e.unref(m.default),{type:"input",label:"검색어",modelValue:o.value.keyword,"onUpdate:modelValue":t[1]||(t[1]=l=>o.value.keyword=l),orientation:"horizontal",labelWidth:"30%"},null,8,["modelValue"])])]),_:1},8,["collapsed","filterValues"]),e.createVNode(e.unref(q.default),{direction:"horizontal","default-size":60,"min-size":30,"second-min-size":20,"second-max-size":60,class:"flex-1"},{left:e.withCtx(()=>[e.createElementVNode("div",ee,[e.createVNode(e.unref(h.default),{ref_key:"masterGridRef",ref:C,columnDefs:R.value,rowData:g.value,"action-buttons":E,enableGrouping:!0,enablePivot:!0,enableColumnsToolPanel:!0,rowGroupPanelShow:"always",pivotPanelShow:"always",groupDefaultExpanded:1,compactFooter:!0,onRowClicked:U},null,8,["columnDefs","rowData"])])]),right:e.withCtx(()=>[e.createElementVNode("div",te,[!r.value.memberId&&!n.value?(e.openBlock(),e.createBlock(e.unref(M.default),{key:0,variant:"simple",icon:"mousePointerClick",title:"항목을 선택하거나 신규 버튼을 클릭하세요",class:"h-full"})):(e.openBlock(),e.createBlock(e.unref(X.default),{key:1,class:"h-full",title:n.value?"신규 등록":"상세 정보",variant:"elevated"},{actions:e.withCtx(()=>[e.createVNode(e.unref(i.default),{size:"xs",styletype:"primary",onClick:J},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("저장",-1)])]),_:1}),n.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(i.default),{key:0,size:"xs",variant:"destructive",onClick:S},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("삭제",-1)])]),_:1})),e.createVNode(e.unref(i.default),{size:"xs",variant:"outline",onClick:w},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode("취소",-1)])]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",le,[e.createVNode(e.unref(m.default),{type:"input",label:"회원사코드",modelValue:r.value.memberId,"onUpdate:modelValue":t[4]||(t[4]=l=>r.value.memberId=l),readonly:!n.value,placeholder:"회원사 코드"},null,8,["modelValue","readonly"]),e.createVNode(e.unref(m.default),{type:"input",label:"회원사명",modelValue:r.value.memberName,"onUpdate:modelValue":t[5]||(t[5]=l=>r.value.memberName=l),placeholder:"회원사 이름"},null,8,["modelValue"])]),e.createElementVNode("div",ae,[e.createVNode(e.unref(m.default),{type:"checkbox",label:"활성여부",modelValue:r.value.isActive,"onUpdate:modelValue":t[6]||(t[6]=l=>r.value.isActive=l),inlineLabel:"활성"},null,8,["modelValue"])])]),_:1},8,["title"]))])]),_:1})])]),"content-mapping-customer":e.withCtx(()=>[e.createElementVNode("div",re,[e.createVNode(e.unref(I.default),{collapsed:x.value,"onUpdate:collapsed":t[8]||(t[8]=l=>x.value=l),filterValues:d.value,"onUpdate:filterValues":t[9]||(t[9]=l=>d.value=l),filterDisplay:Y,collapsible:!0,title:"회원사별 고객사 매핑"},{actions:e.withCtx(()=>[e.createVNode(e.unref(i.default),{size:"xs",variant:"outline",onClick:O},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode("초기화",-1)])]),_:1}),e.createVNode(e.unref(i.default),{size:"xs",styletype:"primary",onClick:W},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("조회",-1)])]),_:1})]),filters:e.withCtx(()=>[e.createElementVNode("div",oe,[e.createVNode(e.unref(m.default),{type:"input",label:"검색어",modelValue:d.value.keyword,"onUpdate:modelValue":t[7]||(t[7]=l=>d.value.keyword=l)},null,8,["modelValue"])])]),_:1},8,["collapsed","filterValues"]),e.createVNode(e.unref(q.default),{direction:"vertical","default-size":30,"min-size":20,"second-min-size":40,class:"flex-1"},{top:e.withCtx(()=>[e.createElementVNode("div",ie,[e.createVNode(e.unref(h.default),{ref_key:"mappingMasterGridRef",ref:y,columnDefs:G.value,rowData:g.value,onRowClicked:H},null,8,["columnDefs","rowData"])])]),bottom:e.withCtx(()=>[e.createElementVNode("div",ne,[p.value?(e.openBlock(),e.createBlock(e.unref(Z.default),{key:1,"left-title":"미매핑 고객사","right-title":"매핑된 고객사","column-defs":$.value,"left-data":v.value,"onUpdate:leftData":t[10]||(t[10]=l=>v.value=l),"right-data":b.value,"onUpdate:rightData":t[11]||(t[11]=l=>b.value=l),searchable:!1,onMove:L},null,8,["column-defs","left-data","right-data"])):(e.openBlock(),e.createBlock(e.unref(M.default),{key:0,variant:"simple",icon:"arrowLeftRight",title:"상단에서 회원사를 선택하세요",class:"h-full"}))])]),_:1})])]),_:1},8,["activeTabId"])]),_:1})}}});exports.default=ue;
|
|
2
2
|
//# sourceMappingURL=ExampleTabMappingPage.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExampleTabMappingPage.vue.cjs","sources":["../../../../src/components/examples/ExampleTabMappingPage.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-col h-full gap-2 bg-background text-foreground\">\n <!-- ==================== 타이틀바 ==================== -->\n <JTitlebar \n icon=\"users\" \n title=\"회원사 관리\" \n description=\"회원사 정보 및 고객사 매핑을 관리합니다\"\n :showHelp=\"true\" \n @help=\"onHelp\" \n />\n\n <!-- ==================== 탭 ==================== -->\n <JTabs v-model:activeTabId=\"activeTabId\" :tabs=\"tabs\" @tab-change=\"handleTabChange\">\n <!-- ==================== Tab 1: 마스터 (회원사 기본정보) ==================== -->\n <template #content-master>\n <div class=\"flex flex-col h-full gap-2 p-2\">\n <!-- 필터바 -->\n <JFilterBar\n v-model:collapsed=\"masterFilterCollapsed\"\n v-model:filterValues=\"masterFilterValues\"\n :filterDisplay=\"masterFilterDisplay\"\n :collapsible=\"true\"\n title=\"회원사 목록\"\n >\n <template #actions>\n <JButton size=\"sm\" variant=\"outline\" @click=\"onMasterReset\">초기화</JButton>\n <JButton size=\"sm\" styletype=\"primary\" @click=\"onMasterSearch\">조회</JButton>\n <JButton size=\"sm\" styletype=\"primary\" @click=\"onMasterNew\">신규</JButton>\n </template>\n\n <template #filters>\n <div class=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2\">\n <JFormField\n type=\"combo\"\n label=\"활성여부\"\n v-model=\"masterFilterValues.isActive\"\n :options=\"activeOptions\"\n orientation=\"horizontal\"\n labelWidth=\"30%\"\n />\n <JFormField type=\"input\" label=\"검색어\" v-model=\"masterFilterValues.keyword\"\n orientation=\"horizontal\"\n labelWidth=\"30%\" \n />\n </div>\n </template>\n </JFilterBar>\n\n <!-- 그리드 + 상세 영역 (Resizable) -->\n <JSplitter\n direction=\"horizontal\"\n :default-size=\"60\"\n :min-size=\"30\"\n :second-min-size=\"20\"\n :second-max-size=\"60\"\n :gap=\"2\"\n class=\"flex-1\"\n >\n <!-- 좌측: 그리드 -->\n <template #left>\n <div class=\"h-full overflow-auto bg-background\">\n <JGrid\n ref=\"masterGridRef\"\n :columnDefs=\"masterColumnDefs\"\n :rowData=\"masterRowData\"\n :action-buttons=\"masterActionButtons\"\n :enableGrouping=\"true\"\n :enablePivot=\"true\"\n :enableColumnsToolPanel=\"true\"\n rowGroupPanelShow=\"always\"\n pivotPanelShow=\"always\"\n :groupDefaultExpanded=\"1\"\n :compactFooter=\"true\"\n @row-clicked=\"onMasterRowClicked\"\n />\n </div>\n </template>\n\n <!-- 우측: 상세 영역 -->\n <template #right>\n <div class=\"h-full overflow-y-auto border-l bg-muted/30\">\n <JCard class=\"h-full\" :title=\"isMasterNew ? '신규 등록' : '상세 정보'\">\n <!-- 2열 그리드: 회원사코드, 회원사명 -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2\">\n <JFormField\n type=\"input\"\n label=\"회원사코드\"\n v-model=\"masterDetail.memberId\"\n :readonly=\"!isMasterNew\"\n placeholder=\"회원사 코드\"\n />\n <JFormField\n type=\"input\"\n label=\"회원사명\"\n v-model=\"masterDetail.memberName\"\n placeholder=\"회원사 이름\"\n />\n </div>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2\">\n <!-- 활성여부 -->\n <JFormField\n type=\"checkbox\"\n label=\"활성여부\"\n v-model=\"masterDetail.isActive\"\n inlineLabel=\"활성\"\n />\n </div>\n\n\n <template #footer>\n <div class=\"flex justify-end gap-2\">\n <JButton styletype=\"primary\" size=\"sm\" @click=\"onMasterSave\">저장</JButton>\n <JButton variant=\"outline\" size=\"sm\" @click=\"onMasterDelete\" v-if=\"!isMasterNew\"\n >삭제</JButton\n >\n </div>\n </template>\n </JCard>\n </div>\n </template>\n </JSplitter>\n </div>\n </template>\n\n <!-- ==================== Tab 2: 매핑 (고객사 매핑) ==================== -->\n <template #content-mapping-customer>\n <div class=\"flex flex-col h-full gap-2 p-2\">\n <!-- 필터바 -->\n <JFilterBar\n v-model:collapsed=\"mappingFilterCollapsed\"\n v-model:filterValues=\"mappingFilterValues\"\n :filterDisplay=\"mappingFilterDisplay\"\n :collapsible=\"true\"\n title=\"회원사별 고객사 매핑\"\n >\n <template #actions>\n <JButton size=\"sm\" variant=\"outline\" @click=\"onMappingReset\">초기화</JButton>\n <JButton size=\"sm\" styletype=\"primary\" @click=\"onMappingSearch\">조회</JButton>\n </template>\n\n <template #filters>\n <div class=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2\">\n <JFormField type=\"input\" label=\"검색어\" v-model=\"mappingFilterValues.keyword\" />\n </div>\n </template>\n </JFilterBar>\n\n <!-- Vertical Splitter: 상단(마스터 그리드) / 하단(매핑 영역) -->\n <JSplitter\n direction=\"vertical\"\n :default-size=\"30\"\n :min-size=\"20\"\n :second-min-size=\"40\"\n :gap=\"2\"\n class=\"flex-1\"\n >\n <!-- 상단: 마스터 그리드 -->\n <template #top>\n <div class=\"h-full overflow-auto bg-background\">\n <JGrid\n ref=\"mappingMasterGridRef\"\n :columnDefs=\"mappingMasterColumnDefs\"\n :rowData=\"masterRowData\"\n @row-clicked=\"onMappingMasterRowClicked\"\n />\n </div>\n </template>\n\n <!-- 하단: 매핑 영역 (미매핑 - 버튼 - 매핑) -->\n <template #bottom>\n <div class=\"h-full flex gap-2 overflow-hidden items-stretch p-2 bg-background\">\n <!-- 좌측: 미매핑 그리드 -->\n <div class=\"flex-1 flex flex-col overflow-hidden\">\n <h4 class=\"text-sm font-semibold mb-2 px-2\">미매핑 고객사</h4>\n <div class=\"flex-1 overflow-auto bg-background\">\n <JGrid\n ref=\"unmappedGridRef\"\n :columnDefs=\"customerColumnDefs\"\n :rowData=\"unmappedCustomers\"\n :pagination=\"false\"\n checkbox\n />\n </div>\n </div>\n\n <!-- 중앙: 매핑/해제 버튼 -->\n <div class=\"flex flex-col justify-center gap-2 px-2\">\n <JButton styletype=\"primary\" size=\"sm\" @click=\"onMap\">매핑 ▶</JButton>\n <JButton variant=\"outline\" size=\"sm\" @click=\"onUnmap\">◀ 해제</JButton>\n </div>\n\n <!-- 우측: 매핑 그리드 -->\n <div class=\"flex-1 flex flex-col overflow-hidden\">\n <h4 class=\"text-sm font-semibold mb-2 px-2\">매핑된 고객사</h4>\n <div class=\"flex-1 overflow-auto bg-background\">\n <JGrid\n ref=\"mappedGridRef\"\n :columnDefs=\"customerColumnDefs\"\n :rowData=\"mappedCustomers\"\n :pagination=\"false\"\n checkbox\n />\n </div>\n </div>\n </div>\n </template>\n </JSplitter>\n </div>\n </template>\n </JTabs>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport { JTitlebar, JCard } from '@/components/molecules'\nimport { JFilterBar } from '@/components/organisms'\nimport { JGrid, JButton, JSplitter, type ActionButton } from '@/components/atoms'\nimport { JFormField } from '@/components/molecules'\nimport { JTabs } from '@/components/molecules'\n\n// ==================== 탭 상태 ====================\nconst activeTabId = ref('master')\n\nconst tabs = [\n { id: 'master', label: '회원사 기본정보' },\n { id: 'mapping-customer', label: '고객사 매핑' },\n]\n\nfunction handleTabChange(tabId: string) {\n console.log('탭 변경:', tabId)\n}\n\n// ==================== 공통 옵션 ====================\nconst activeOptions = [\n { value: 'Y', label: 'Y:활성' },\n { value: 'N', label: 'N:비활성' },\n]\n\n// ==================== Tab 1: 마스터 (회원사) ====================\n\nconst masterFilterCollapsed = ref(false)\nconst masterFilterValues = ref({\n isActive: '',\n keyword: '',\n})\n\nconst masterFilterDisplay = {\n isActive: {\n label: '활성여부',\n displayValue: (val: unknown) => {\n if (val === 'Y') return 'Y:활성'\n if (val === 'N') return 'N:비활성'\n return ''\n },\n },\n keyword: {\n label: '검색어',\n },\n}\n\n// Mock 데이터 - 회원사 목록\nconst masterRowData = ref([\n { memberId: 'M001', memberName: '제이솔루션', isActive: 'Y' },\n { memberId: 'M002', memberName: 'ABC물류', isActive: 'Y' },\n { memberId: 'M003', memberName: 'XYZ유통', isActive: 'N' },\n])\n\nconst masterColumnDefs = ref([\n { \n field: 'memberId', \n headerName: '회원사코드', \n width: 150,\n enableValue: true, // 집계 가능 (count)\n },\n { \n field: 'memberName', \n headerName: '회원사명', \n flex: 1,\n enableValue: true, // 집계 가능 (count)\n },\n {\n field: 'isActive',\n headerName: '활성',\n width: 100,\n cellRenderer: (params: any) => (params.value === 'Y' ? '✓' : ''),\n enableRowGroup: true, // Row Group으로 사용 가능\n enablePivot: true, // Pivot Column으로 사용 가능\n },\n])\n\n// 마스터 탭 행별 액션 버튼\nconst masterActionButtons: ActionButton[] = [\n {\n icon: 'pencil',\n label: '수정',\n tooltip: '편집',\n onClick: (rowData: any) => {\n isMasterNew.value = false\n masterDetail.value = {\n memberId: rowData.memberId,\n memberName: rowData.memberName,\n isActive: rowData.isActive,\n }\n },\n },\n {\n icon: 'trash2',\n label: '삭제',\n tooltip: '삭제',\n styletype: 'danger',\n onClick: (rowData: any) => {\n if (confirm(`${rowData.memberName}을(를) 삭제하시겠습니까?`)) {\n console.log('회원사 삭제:', rowData.memberId)\n alert(`삭제되었습니다: ${rowData.memberName}`)\n }\n },\n },\n]\n\nconst masterGridRef = ref()\nconst isMasterNew = ref(false)\nconst masterDetail = ref({\n memberId: '',\n memberName: '',\n isActive: 'Y',\n})\n\nfunction onMasterRowClicked(event: any) {\n isMasterNew.value = false\n masterDetail.value = {\n memberId: event.data.memberId,\n memberName: event.data.memberName,\n isActive: event.data.isActive,\n }\n}\n\nfunction onMasterNew() {\n isMasterNew.value = true\n masterDetail.value = {\n memberId: '',\n memberName: '',\n isActive: 'Y',\n }\n}\n\nfunction onMasterSave() {\n console.log('회원사 저장:', masterDetail.value)\n // TODO: 실제 구현 시 API 호출로 대체\n alert(`저장되었습니다: ${masterDetail.value.memberName}`)\n}\n\nfunction onMasterDelete() {\n if (confirm(`${masterDetail.value.memberName}을(를) 삭제하시겠습니까?`)) {\n console.log('회원사 삭제:', masterDetail.value.memberId)\n // TODO: 실제 구현 시 API 호출로 대체\n alert(`삭제되었습니다: ${masterDetail.value.memberName}`)\n }\n}\n\nfunction onMasterReset() {\n masterFilterValues.value = {\n isActive: '',\n keyword: '',\n }\n}\n\nfunction onMasterSearch() {\n console.log('회원사 조회:', masterFilterValues.value)\n // TODO: 실제 구현 시 API 호출로 대체\n}\n\nfunction onHelp() {\n alert('회원사 관리 페이지 도움말')\n}\n\n// ==================== Tab 2: 매핑 (고객사) ====================\n\nconst mappingFilterCollapsed = ref(false)\nconst mappingFilterValues = ref({\n keyword: '',\n})\n\nconst mappingFilterDisplay = {\n keyword: {\n label: '검색어',\n },\n}\n\nconst mappingMasterGridRef = ref()\nconst unmappedGridRef = ref()\nconst mappedGridRef = ref()\n\nconst mappingMasterColumnDefs = ref([\n { field: 'memberId', headerName: '회원사코드', width: 150 },\n { field: 'memberName', headerName: '회원사명', flex: 1 },\n])\n\n// Mock 데이터 - 전체 고객사 (매핑 여부 포함)\nconst selectedMemberId = ref<string>('')\n\n// Mock 데이터 - 회원사별 매핑 정보\nconst mappingData = ref<Record<string, string[]>>({\n M001: ['C001', 'C002'], // 제이솔루션에 매핑된 고객사\n M002: ['C003'], // ABC물류에 매핑된 고객사\n M003: [], // XYZ유통에 매핑된 고객사 없음\n})\n\nconst allCustomersData = [\n { code: 'C001', name: '고객A' },\n { code: 'C002', name: '고객B' },\n { code: 'C003', name: '고객C' },\n { code: 'C004', name: '고객D' },\n { code: 'C005', name: '고객E' },\n]\n\nconst customerColumnDefs = ref([\n { field: 'code', headerName: '코드', width: 120 },\n { field: 'name', headerName: '이름', flex: 1 },\n])\n\n// 매핑/미매핑 고객사 계산\nconst unmappedCustomers = computed(() => {\n if (!selectedMemberId.value) return []\n const mappedCodes = mappingData.value[selectedMemberId.value] || []\n return allCustomersData.filter((c) => !mappedCodes.includes(c.code))\n})\n\nconst mappedCustomers = computed(() => {\n if (!selectedMemberId.value) return []\n const mappedCodes = mappingData.value[selectedMemberId.value] || []\n return allCustomersData.filter((c) => mappedCodes.includes(c.code))\n})\n\nfunction onMappingMasterRowClicked(event: any) {\n selectedMemberId.value = event.data.memberId\n console.log('선택된 회원사:', event.data.memberName)\n // TODO: 실제 구현 시 API 호출로 매핑/미매핑 데이터 로드\n}\n\n/**\n * 매핑 버튼 클릭 (좌측 → 우측)\n */\nfunction onMap() {\n if (!selectedMemberId.value) {\n alert('회원사를 먼저 선택해주세요.')\n return\n }\n\n const selectedRows = unmappedGridRef.value?.getSelectedRows() || []\n if (selectedRows.length === 0) {\n alert('매핑할 고객사를 선택해주세요.')\n return\n }\n\n // 선택된 고객사 코드 추출\n const selectedCodes = selectedRows.map((row: any) => row.code)\n\n // 매핑 데이터 업데이트\n const key = selectedMemberId.value\n if (!mappingData.value[key]) {\n mappingData.value[key] = []\n }\n mappingData.value[key]!.push(...selectedCodes)\n\n console.log('매핑:', selectedCodes)\n // TODO: 실제 구현 시 API 호출로 매핑 처리\n // await api.mapCustomers(selectedMemberId.value, selectedCodes)\n}\n\n/**\n * 해제 버튼 클릭 (우측 → 좌측)\n */\nfunction onUnmap() {\n if (!selectedMemberId.value) {\n alert('회원사를 먼저 선택해주세요.')\n return\n }\n\n const selectedRows = mappedGridRef.value?.getSelectedRows() || []\n if (selectedRows.length === 0) {\n alert('해제할 고객사를 선택해주세요.')\n return\n }\n\n // 선택된 고객사 코드 추출\n const selectedCodes = selectedRows.map((row: any) => row.code)\n\n // 매핑 데이터에서 제거\n const unmapKey = selectedMemberId.value\n mappingData.value[unmapKey] = (mappingData.value[unmapKey] || []).filter(\n (code) => !selectedCodes.includes(code)\n )\n\n console.log('해제:', selectedCodes)\n // TODO: 실제 구현 시 API 호출로 매핑 해제 처리\n // await api.unmapCustomers(selectedMemberId.value, selectedCodes)\n}\n\nfunction onMappingReset() {\n mappingFilterValues.value = {\n keyword: '',\n }\n}\n\nfunction onMappingSearch() {\n console.log('매핑 조회:', mappingFilterValues.value)\n // TODO: 실제 구현 시 API 호출로 대체\n}\n\ndefineExpose({ masterGridRef, mappingMasterGridRef })\n</script>\n"],"names":["activeTabId","ref","tabs","handleTabChange","tabId","activeOptions","masterFilterCollapsed","masterFilterValues","masterFilterDisplay","val","masterRowData","masterColumnDefs","params","masterActionButtons","rowData","isMasterNew","masterDetail","masterGridRef","onMasterRowClicked","event","onMasterNew","onMasterSave","onMasterDelete","onMasterReset","onMasterSearch","onHelp","mappingFilterCollapsed","mappingFilterValues","mappingFilterDisplay","mappingMasterGridRef","unmappedGridRef","mappedGridRef","mappingMasterColumnDefs","selectedMemberId","mappingData","allCustomersData","customerColumnDefs","unmappedCustomers","computed","mappedCodes","c","mappedCustomers","onMappingMasterRowClicked","onMap","selectedRows","selectedCodes","row","key","onUnmap","unmapKey","code","onMappingReset","onMappingSearch","__expose","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","JTitlebar","JTabs","$event","_createElementVNode","_hoisted_2","JFilterBar","JButton","_cache","_hoisted_3","JFormField","JSplitter","_hoisted_4","JGrid","_hoisted_5","JCard","_hoisted_8","_createBlock","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17"],"mappings":"i2EA8NA,MAAMA,EAAcC,EAAAA,IAAI,QAAQ,EAE1BC,EAAO,CACX,CAAE,GAAI,SAAU,MAAO,UAAA,EACvB,CAAE,GAAI,mBAAoB,MAAO,QAAA,CAAS,EAG5C,SAASC,EAAgBC,EAAe,CACtC,QAAQ,IAAI,QAASA,CAAK,CAC5B,CAGA,MAAMC,EAAgB,CACpB,CAAE,MAAO,IAAK,MAAO,MAAA,EACrB,CAAE,MAAO,IAAK,MAAO,OAAA,CAAQ,EAKzBC,EAAwBL,EAAAA,IAAI,EAAK,EACjCM,EAAqBN,EAAAA,IAAI,CAC7B,SAAU,GACV,QAAS,EAAA,CACV,EAEKO,EAAsB,CAC1B,SAAU,CACR,MAAO,OACP,aAAeC,GACTA,IAAQ,IAAY,OACpBA,IAAQ,IAAY,QACjB,EACT,EAEF,QAAS,CACP,MAAO,KAAA,CACT,EAIIC,EAAgBT,EAAAA,IAAI,CACxB,CAAE,SAAU,OAAQ,WAAY,QAAS,SAAU,GAAA,EACnD,CAAE,SAAU,OAAQ,WAAY,QAAS,SAAU,GAAA,EACnD,CAAE,SAAU,OAAQ,WAAY,QAAS,SAAU,GAAA,CAAI,CACxD,EAEKU,EAAmBV,EAAAA,IAAI,CAC3B,CACE,MAAO,WACP,WAAY,QACZ,MAAO,IACP,YAAa,EAAA,EAEf,CACE,MAAO,aACP,WAAY,OACZ,KAAM,EACN,YAAa,EAAA,EAEf,CACE,MAAO,WACP,WAAY,KACZ,MAAO,IACP,aAAeW,GAAiBA,EAAO,QAAU,IAAM,IAAM,GAC7D,eAAgB,GAChB,YAAa,EAAA,CACf,CACD,EAGKC,EAAsC,CAC1C,CACE,KAAM,SACN,MAAO,KACP,QAAS,KACT,QAAUC,GAAiB,CACzBC,EAAY,MAAQ,GACpBC,EAAa,MAAQ,CACnB,SAAUF,EAAQ,SAClB,WAAYA,EAAQ,WACpB,SAAUA,EAAQ,QAAA,CAEtB,CAAA,EAEF,CACE,KAAM,SACN,MAAO,KACP,QAAS,KACT,UAAW,SACX,QAAUA,GAAiB,CACrB,QAAQ,GAAGA,EAAQ,UAAU,gBAAgB,IAC/C,QAAQ,IAAI,UAAWA,EAAQ,QAAQ,EACvC,MAAM,YAAYA,EAAQ,UAAU,EAAE,EAE1C,CAAA,CACF,EAGIG,EAAgBhB,EAAAA,IAAA,EAChBc,EAAcd,EAAAA,IAAI,EAAK,EACvBe,EAAef,EAAAA,IAAI,CACvB,SAAU,GACV,WAAY,GACZ,SAAU,GAAA,CACX,EAED,SAASiB,EAAmBC,EAAY,CACtCJ,EAAY,MAAQ,GACpBC,EAAa,MAAQ,CACnB,SAAUG,EAAM,KAAK,SACrB,WAAYA,EAAM,KAAK,WACvB,SAAUA,EAAM,KAAK,QAAA,CAEzB,CAEA,SAASC,GAAc,CACrBL,EAAY,MAAQ,GACpBC,EAAa,MAAQ,CACnB,SAAU,GACV,WAAY,GACZ,SAAU,GAAA,CAEd,CAEA,SAASK,GAAe,CACtB,QAAQ,IAAI,UAAWL,EAAa,KAAK,EAEzC,MAAM,YAAYA,EAAa,MAAM,UAAU,EAAE,CACnD,CAEA,SAASM,GAAiB,CACpB,QAAQ,GAAGN,EAAa,MAAM,UAAU,gBAAgB,IAC1D,QAAQ,IAAI,UAAWA,EAAa,MAAM,QAAQ,EAElD,MAAM,YAAYA,EAAa,MAAM,UAAU,EAAE,EAErD,CAEA,SAASO,GAAgB,CACvBhB,EAAmB,MAAQ,CACzB,SAAU,GACV,QAAS,EAAA,CAEb,CAEA,SAASiB,GAAiB,CACxB,QAAQ,IAAI,UAAWjB,EAAmB,KAAK,CAEjD,CAEA,SAASkB,GAAS,CAChB,MAAM,gBAAgB,CACxB,CAIA,MAAMC,EAAyBzB,EAAAA,IAAI,EAAK,EAClC0B,EAAsB1B,EAAAA,IAAI,CAC9B,QAAS,EAAA,CACV,EAEK2B,EAAuB,CAC3B,QAAS,CACP,MAAO,KAAA,CACT,EAGIC,EAAuB5B,EAAAA,IAAA,EACvB6B,EAAkB7B,EAAAA,IAAA,EAClB8B,EAAgB9B,EAAAA,IAAA,EAEhB+B,EAA0B/B,EAAAA,IAAI,CAClC,CAAE,MAAO,WAAY,WAAY,QAAS,MAAO,GAAA,EACjD,CAAE,MAAO,aAAc,WAAY,OAAQ,KAAM,CAAA,CAAE,CACpD,EAGKgC,EAAmBhC,EAAAA,IAAY,EAAE,EAGjCiC,EAAcjC,EAAAA,IAA8B,CAChD,KAAM,CAAC,OAAQ,MAAM,EACrB,KAAM,CAAC,MAAM,EACb,KAAM,CAAA,CAAC,CACR,EAEKkC,EAAmB,CACvB,CAAE,KAAM,OAAQ,KAAM,KAAA,EACtB,CAAE,KAAM,OAAQ,KAAM,KAAA,EACtB,CAAE,KAAM,OAAQ,KAAM,KAAA,EACtB,CAAE,KAAM,OAAQ,KAAM,KAAA,EACtB,CAAE,KAAM,OAAQ,KAAM,KAAA,CAAM,EAGxBC,EAAqBnC,EAAAA,IAAI,CAC7B,CAAE,MAAO,OAAQ,WAAY,KAAM,MAAO,GAAA,EAC1C,CAAE,MAAO,OAAQ,WAAY,KAAM,KAAM,CAAA,CAAE,CAC5C,EAGKoC,EAAoBC,EAAAA,SAAS,IAAM,CACvC,GAAI,CAACL,EAAiB,MAAO,MAAO,CAAA,EACpC,MAAMM,EAAcL,EAAY,MAAMD,EAAiB,KAAK,GAAK,CAAA,EACjE,OAAOE,EAAiB,OAAQK,GAAM,CAACD,EAAY,SAASC,EAAE,IAAI,CAAC,CACrE,CAAC,EAEKC,EAAkBH,EAAAA,SAAS,IAAM,CACrC,GAAI,CAACL,EAAiB,MAAO,MAAO,CAAA,EACpC,MAAMM,EAAcL,EAAY,MAAMD,EAAiB,KAAK,GAAK,CAAA,EACjE,OAAOE,EAAiB,OAAQK,GAAMD,EAAY,SAASC,EAAE,IAAI,CAAC,CACpE,CAAC,EAED,SAASE,EAA0BvB,EAAY,CAC7Cc,EAAiB,MAAQd,EAAM,KAAK,SACpC,QAAQ,IAAI,WAAYA,EAAM,KAAK,UAAU,CAE/C,CAKA,SAASwB,GAAQ,CACf,GAAI,CAACV,EAAiB,MAAO,CAC3B,MAAM,iBAAiB,EACvB,MACF,CAEA,MAAMW,EAAed,EAAgB,OAAO,gBAAA,GAAqB,CAAA,EACjE,GAAIc,EAAa,SAAW,EAAG,CAC7B,MAAM,kBAAkB,EACxB,MACF,CAGA,MAAMC,EAAgBD,EAAa,IAAKE,GAAaA,EAAI,IAAI,EAGvDC,EAAMd,EAAiB,MACxBC,EAAY,MAAMa,CAAG,IACxBb,EAAY,MAAMa,CAAG,EAAI,CAAA,GAE3Bb,EAAY,MAAMa,CAAG,EAAG,KAAK,GAAGF,CAAa,EAE7C,QAAQ,IAAI,MAAOA,CAAa,CAGlC,CAKA,SAASG,GAAU,CACjB,GAAI,CAACf,EAAiB,MAAO,CAC3B,MAAM,iBAAiB,EACvB,MACF,CAEA,MAAMW,EAAeb,EAAc,OAAO,gBAAA,GAAqB,CAAA,EAC/D,GAAIa,EAAa,SAAW,EAAG,CAC7B,MAAM,kBAAkB,EACxB,MACF,CAGA,MAAMC,EAAgBD,EAAa,IAAKE,GAAaA,EAAI,IAAI,EAGvDG,EAAWhB,EAAiB,MAClCC,EAAY,MAAMe,CAAQ,GAAKf,EAAY,MAAMe,CAAQ,GAAK,CAAA,GAAI,OAC/DC,GAAS,CAACL,EAAc,SAASK,CAAI,CAAA,EAGxC,QAAQ,IAAI,MAAOL,CAAa,CAGlC,CAEA,SAASM,GAAiB,CACxBxB,EAAoB,MAAQ,CAC1B,QAAS,EAAA,CAEb,CAEA,SAASyB,GAAkB,CACzB,QAAQ,IAAI,SAAUzB,EAAoB,KAAK,CAEjD,CAEA,OAAA0B,EAAa,CAAE,cAAApC,EAAe,qBAAAY,EAAsB,UA7flDyB,YAAA,EAAAC,qBAiNM,MAjNNC,EAiNM,CA/MJC,cAMEC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CALA,KAAK,QACL,MAAM,SACN,YAAY,yBACX,SAAU,GACV,OAAAlC,CAAA,GAIHgC,cAqMQC,EAAAA,MAAAE,EAAAA,OAAA,EAAA,CArMO,YAAa5D,EAAA,8CAAAA,EAAW,MAAA6D,GAAG,KAAA3D,EAAa,YAAYC,CAAA,GAEtD,2BACT,IA0GM,CA1GN2D,EAAAA,mBA0GM,MA1GNC,EA0GM,CAxGJN,cA6BaC,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CA5BH,UAAW1D,EAAA,0CAAAA,EAAqB,MAAAuD,GAChC,aAActD,EAAA,6CAAAA,EAAkB,MAAAsD,GACvC,cAAerD,EACf,YAAa,GACd,MAAM,QAAA,GAEK,kBACT,IAAyE,CAAzEiD,cAAyEC,EAAAA,MAAAO,EAAAA,OAAA,EAAA,CAAhE,KAAK,KAAK,QAAQ,UAAW,QAAO1C,CAAA,qBAAe,IAAG,CAAA,GAAA2C,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAH,MAAG,EAAA,CAAA,WAC/DT,cAA2EC,EAAAA,MAAAO,EAAAA,OAAA,EAAA,CAAlE,KAAK,KAAK,UAAU,UAAW,QAAOzC,CAAA,qBAAgB,IAAE,CAAA,GAAA0C,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,CAAA,WACjET,cAAwEC,EAAAA,MAAAO,EAAAA,OAAA,EAAA,CAA/D,KAAK,KAAK,UAAU,UAAW,QAAO7C,CAAA,qBAAa,IAAE,CAAA,GAAA8C,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,CAAA,aAGrD,kBACT,IAaM,CAbNJ,EAAAA,mBAaM,MAbNK,GAaM,CAZJV,cAOEC,EAAAA,MAAAU,EAAAA,OAAA,EAAA,CANA,KAAK,QACL,MAAM,OACG,WAAA7D,EAAA,MAAmB,SAAnB,sBAAA2D,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAtD,EAAA,MAAmB,SAAQsD,GACnC,QAASxD,EACV,YAAY,aACZ,WAAW,KAAA,yBAEboD,cAGEC,EAAAA,MAAAU,EAAAA,OAAA,EAAA,CAHU,KAAK,QAAQ,MAAM,MAAe,WAAA7D,EAAA,MAAmB,QAAnB,sBAAA2D,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAtD,EAAA,MAAmB,QAAOsD,GACtE,YAAY,aACZ,WAAW,KAAA,kEAOnBJ,cAuEYC,EAAAA,MAAAW,EAAAA,OAAA,EAAA,CAtEV,UAAU,aACT,eAAc,GACd,WAAU,GACV,kBAAiB,GACjB,kBAAiB,GACjB,IAAK,EACN,MAAM,QAAA,GAGK,eACT,IAeM,CAfNP,EAAAA,mBAeM,MAfNQ,GAeM,CAdJb,cAaEC,EAAAA,MAAAa,EAAAA,OAAA,EAAA,SAZI,gBAAJ,IAAItD,EACH,WAAYN,EAAA,MACZ,QAASD,EAAA,MACT,iBAAgBG,EAChB,eAAgB,GAChB,YAAa,GACb,uBAAwB,GACzB,kBAAkB,SAClB,eAAe,SACd,qBAAsB,EACtB,cAAe,GACf,aAAaK,CAAA,uCAMT,gBACT,IAsCM,CAtCN4C,EAAAA,mBAsCM,MAtCNU,GAsCM,CArCJf,cAoCQC,EAAAA,MAAAe,EAAAA,OAAA,EAAA,CApCD,MAAM,SAAU,MAAO1D,EAAA,MAAW,QAAA,OAAA,GA4B5B,iBACT,IAKM,CALN+C,EAAAA,mBAKM,MALNY,GAKM,CAJJjB,cAAyEC,EAAAA,MAAAO,EAAAA,OAAA,EAAA,CAAhE,UAAU,UAAU,KAAK,KAAM,QAAO5C,CAAA,qBAAc,IAAE,CAAA,GAAA6C,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,CAAA,WACKnD,EAAA,iDAApE4D,EAAAA,YAECjB,EAAAA,MAAAO,EAAAA,OAAA,EAAA,OAFQ,QAAQ,UAAU,KAAK,KAAM,QAAO3C,CAAA,qBAC1C,IAAE,CAAA,GAAA4C,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,CAAA,kCA9BT,IAcM,CAdNJ,EAAAA,mBAcM,MAdNc,GAcM,CAbJnB,cAMEC,EAAAA,MAAAU,EAAAA,OAAA,EAAA,CALA,KAAK,QACL,MAAM,QACG,WAAApD,EAAA,MAAa,SAAb,sBAAAkD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAA7C,EAAA,MAAa,SAAQ6C,GAC7B,UAAW9C,EAAA,MACZ,YAAY,QAAA,oCAEd0C,cAKEC,EAAAA,MAAAU,EAAAA,OAAA,EAAA,CAJA,KAAK,QACL,MAAM,OACG,WAAApD,EAAA,MAAa,WAAb,sBAAAkD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAA7C,EAAA,MAAa,WAAU6C,GAChC,YAAY,QAAA,2BAGhBC,EAAAA,mBAQM,MARNe,GAQM,CANJpB,cAKEC,EAAAA,MAAAU,EAAAA,OAAA,EAAA,CAJA,KAAK,WACL,MAAM,OACG,WAAApD,EAAA,MAAa,SAAb,sBAAAkD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAA7C,EAAA,MAAa,SAAQ6C,GAC9B,YAAY,IAAA,6DAqBjB,qCACT,IAiFM,CAjFNC,EAAAA,mBAiFM,MAjFNgB,GAiFM,CA/EJrB,cAiBaC,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAhBH,UAAWtC,EAAA,0CAAAA,EAAsB,MAAAmC,GACjC,aAAclC,EAAA,6CAAAA,EAAmB,MAAAkC,GACxC,cAAejC,EACf,YAAa,GACd,MAAM,aAAA,GAEK,kBACT,IAA0E,CAA1E6B,cAA0EC,EAAAA,MAAAO,EAAAA,OAAA,EAAA,CAAjE,KAAK,KAAK,QAAQ,UAAW,QAAOd,CAAA,qBAAgB,IAAG,CAAA,GAAAe,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAH,MAAG,EAAA,CAAA,WAChET,cAA4EC,EAAAA,MAAAO,EAAAA,OAAA,EAAA,CAAnE,KAAK,KAAK,UAAU,UAAW,QAAOb,CAAA,qBAAiB,IAAE,CAAA,GAAAc,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,CAAA,aAGzD,kBACT,IAEM,CAFNJ,EAAAA,mBAEM,MAFNiB,GAEM,CADJtB,cAA6EC,EAAAA,MAAAU,EAAAA,OAAA,EAAA,CAAjE,KAAK,QAAQ,MAAM,MAAe,WAAAzC,EAAA,MAAoB,QAApB,sBAAAuC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAlC,EAAA,MAAoB,QAAOkC,EAAA,kEAM/EJ,cA0DYC,EAAAA,MAAAW,EAAAA,OAAA,EAAA,CAzDV,UAAU,WACT,eAAc,GACd,WAAU,GACV,kBAAiB,GACjB,IAAK,EACN,MAAM,QAAA,GAGK,cACT,IAOM,CAPNP,EAAAA,mBAOM,MAPNkB,GAOM,CANJvB,cAKEC,EAAAA,MAAAa,EAAAA,OAAA,EAAA,SAJI,uBAAJ,IAAI1C,EACH,WAAYG,EAAA,MACZ,QAAStB,EAAA,MACT,aAAagC,CAAA,uCAMT,iBACT,IAkCM,CAlCNoB,EAAAA,mBAkCM,MAlCNmB,GAkCM,CAhCJnB,EAAAA,mBAWM,MAXNoB,GAWM,CAVJhB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAJ,EAAAA,mBAAwD,KAAA,CAApD,MAAM,iCAAA,EAAkC,UAAO,EAAA,GACnDA,EAAAA,mBAQM,MARNqB,GAQM,CAPJ1B,cAMEC,EAAAA,MAAAa,EAAAA,OAAA,EAAA,SALI,kBAAJ,IAAIzC,EACH,WAAYM,EAAA,MACZ,QAASC,EAAA,MACT,WAAY,GACb,SAAA,EAAA,uCAMNyB,EAAAA,mBAGM,MAHNsB,GAGM,CAFJ3B,cAAoEC,EAAAA,MAAAO,EAAAA,OAAA,EAAA,CAA3D,UAAU,UAAU,KAAK,KAAM,QAAOtB,CAAA,qBAAO,IAAI,CAAA,GAAAuB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAJ,OAAI,EAAA,CAAA,WAC1DT,cAAoEC,EAAAA,MAAAO,EAAAA,OAAA,EAAA,CAA3D,QAAQ,UAAU,KAAK,KAAM,QAAOjB,CAAA,qBAAS,IAAI,CAAA,GAAAkB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAJ,OAAI,EAAA,CAAA,aAI5DJ,EAAAA,mBAWM,MAXNuB,GAWM,CAVJnB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAJ,EAAAA,mBAAwD,KAAA,CAApD,MAAM,iCAAA,EAAkC,UAAO,EAAA,GACnDA,EAAAA,mBAQM,MARNwB,GAQM,CAPJ7B,cAMEC,EAAAA,MAAAa,EAAAA,OAAA,EAAA,SALI,gBAAJ,IAAIxC,EACH,WAAYK,EAAA,MACZ,QAASK,EAAA,MACT,WAAY,GACb,SAAA,EAAA"}
|
|
1
|
+
{"version":3,"file":"ExampleTabMappingPage.vue.cjs","sources":["../../../../src/components/examples/ExampleTabMappingPage.vue"],"sourcesContent":["<template>\n <JPageContainer title=\"회원사 관리\" icon=\"users\" description=\"회원사 정보 및 고객사 매핑을 관리합니다\" :showHelp=\"true\" @help=\"onHelp\" :content-scroll=\"false\">\n\n <!-- ==================== 탭 ==================== -->\n <JTabs v-model:activeTabId=\"activeTabId\" :tabs=\"tabs\" @tab-change=\"handleTabChange\">\n <!-- ==================== Tab 1: 마스터 (회원사 기본정보) ==================== -->\n <template #content-master>\n <div class=\"flex flex-col h-full gap-2 p-2\">\n <!-- 필터바 -->\n <JFilterBar\n v-model:collapsed=\"masterFilterCollapsed\"\n v-model:filterValues=\"masterFilterValues\"\n :filterDisplay=\"masterFilterDisplay\"\n :collapsible=\"true\"\n title=\"회원사 목록\"\n >\n <template #actions>\n <JButton size=\"xs\" variant=\"outline\" @click=\"onMasterReset\">초기화</JButton>\n <JButton size=\"xs\" styletype=\"primary\" @click=\"onMasterSearch\">조회</JButton>\n <JButton size=\"xs\" styletype=\"primary\" @click=\"onMasterNew\">신규</JButton>\n </template>\n\n <template #filters>\n <div class=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2\">\n <JFormField\n type=\"combo\"\n label=\"활성여부\"\n v-model=\"masterFilterValues.isActive\"\n :options=\"activeOptions\"\n orientation=\"horizontal\"\n labelWidth=\"30%\"\n />\n <JFormField type=\"input\" label=\"검색어\" v-model=\"masterFilterValues.keyword\"\n orientation=\"horizontal\"\n labelWidth=\"30%\" \n />\n </div>\n </template>\n </JFilterBar>\n\n <!-- 그리드 + 상세 영역 (Resizable) -->\n <JSplitter\n direction=\"horizontal\"\n :default-size=\"60\"\n :min-size=\"30\"\n :second-min-size=\"20\"\n :second-max-size=\"60\"\n class=\"flex-1\"\n >\n <!-- 좌측: 그리드 -->\n <template #left>\n <div class=\"h-full overflow-auto bg-background\">\n <JGrid\n ref=\"masterGridRef\"\n :columnDefs=\"masterColumnDefs\"\n :rowData=\"masterRowData\"\n :action-buttons=\"masterActionButtons\"\n :enableGrouping=\"true\"\n :enablePivot=\"true\"\n :enableColumnsToolPanel=\"true\"\n rowGroupPanelShow=\"always\"\n pivotPanelShow=\"always\"\n :groupDefaultExpanded=\"1\"\n :compactFooter=\"true\"\n @row-clicked=\"onMasterRowClicked\"\n />\n </div>\n </template>\n\n <!-- 우측: 상세 영역 -->\n <template #right>\n <div class=\"h-full overflow-y-auto bg-muted/30\">\n <!-- 선택된 항목이 없을 때: EmptyState -->\n <JEmptyState\n v-if=\"!masterDetail.memberId && !isMasterNew\"\n variant=\"simple\"\n icon=\"mousePointerClick\"\n title=\"항목을 선택하거나 신규 버튼을 클릭하세요\"\n class=\"h-full\"\n />\n \n <!-- 선택된 항목이 있거나 신규일 때: 상세 폼 -->\n <JCard \n v-else\n class=\"h-full\" \n :title=\"isMasterNew ? '신규 등록' : '상세 정보'\"\n variant=\"elevated\"\n >\n <!-- actions 슬롯 (header 우측 버튼) -->\n <template #actions>\n <JButton size=\"xs\" styletype=\"primary\" @click=\"onMasterSave\">저장</JButton>\n <JButton size=\"xs\" variant=\"destructive\" v-if=\"!isMasterNew\" @click=\"onMasterDelete\">삭제</JButton>\n <JButton size=\"xs\" variant=\"outline\" @click=\"onMasterReset\">취소</JButton>\n </template>\n\n <!-- 2열 그리드: 회원사코드, 회원사명 -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2\">\n <JFormField\n type=\"input\"\n label=\"회원사코드\"\n v-model=\"masterDetail.memberId\"\n :readonly=\"!isMasterNew\"\n placeholder=\"회원사 코드\"\n />\n <JFormField\n type=\"input\"\n label=\"회원사명\"\n v-model=\"masterDetail.memberName\"\n placeholder=\"회원사 이름\"\n />\n </div>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2\">\n <!-- 활성여부 -->\n <JFormField\n type=\"checkbox\"\n label=\"활성여부\"\n v-model=\"masterDetail.isActive\"\n inlineLabel=\"활성\"\n />\n </div>\n </JCard>\n </div>\n </template>\n </JSplitter>\n </div>\n </template>\n\n <!-- ==================== Tab 2: 매핑 (고객사 매핑) ==================== -->\n <template #content-mapping-customer>\n <div class=\"flex flex-col h-full gap-2 p-2\">\n <!-- 필터바 -->\n <JFilterBar\n v-model:collapsed=\"mappingFilterCollapsed\"\n v-model:filterValues=\"mappingFilterValues\"\n :filterDisplay=\"mappingFilterDisplay\"\n :collapsible=\"true\"\n title=\"회원사별 고객사 매핑\"\n >\n <template #actions>\n <JButton size=\"xs\" variant=\"outline\" @click=\"onMappingReset\">초기화</JButton>\n <JButton size=\"xs\" styletype=\"primary\" @click=\"onMappingSearch\">조회</JButton>\n </template>\n\n <template #filters>\n <div class=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2\">\n <JFormField type=\"input\" label=\"검색어\" v-model=\"mappingFilterValues.keyword\" />\n </div>\n </template>\n </JFilterBar>\n\n <!-- Vertical Splitter: 상단(마스터 그리드) / 하단(매핑 영역) -->\n <JSplitter\n direction=\"vertical\"\n :default-size=\"30\"\n :min-size=\"20\"\n :second-min-size=\"40\"\n class=\"flex-1\"\n >\n <!-- 상단: 마스터 그리드 -->\n <template #top>\n <div class=\"h-full overflow-auto bg-background\">\n <JGrid\n ref=\"mappingMasterGridRef\"\n :columnDefs=\"mappingMasterColumnDefs\"\n :rowData=\"masterRowData\"\n @row-clicked=\"onMappingMasterRowClicked\"\n />\n </div>\n </template>\n\n <!-- 하단: 매핑 영역 (JShuttle 사용) -->\n <template #bottom>\n <div class=\"h-full\">\n <!-- 회원사 미선택 시: EmptyState -->\n <JEmptyState\n v-if=\"!selectedMemberId\"\n variant=\"simple\"\n icon=\"arrowLeftRight\"\n title=\"상단에서 회원사를 선택하세요\"\n class=\"h-full\"\n />\n \n <!-- 회원사 선택 후: Shuttle -->\n <JShuttle\n v-else\n left-title=\"미매핑 고객사\"\n right-title=\"매핑된 고객사\"\n :column-defs=\"customerColumnDefs\"\n v-model:left-data=\"shuttleUnmappedData\"\n v-model:right-data=\"shuttleMappedData\"\n :searchable=\"false\"\n @move=\"onShuttleMove\"\n />\n </div>\n </template>\n </JSplitter>\n </div>\n </template>\n </JTabs>\n </JPageContainer>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport { JTitlebar, JCard, JEmptyState } from '@/components/molecules'\nimport { JFilterBar, JShuttle } from '@/components/organisms'\nimport { JGrid, JButton, JSplitter, type ActionButton } from '@/components/atoms'\nimport { JFormField } from '@/components/molecules'\nimport { JTabs } from '@/components/molecules'\n\n// ==================== 탭 상태 ====================\nconst activeTabId = ref('master')\n\nconst tabs = [\n { id: 'master', label: '회원사 기본정보' },\n { id: 'mapping-customer', label: '고객사 매핑' },\n]\n\nfunction handleTabChange(tabId: string) {\n console.log('탭 변경:', tabId)\n}\n\n// ==================== 공통 옵션 ====================\nconst activeOptions = [\n { value: 'Y', label: 'Y:활성' },\n { value: 'N', label: 'N:비활성' },\n]\n\n// ==================== Tab 1: 마스터 (회원사) ====================\n\nconst masterFilterCollapsed = ref(false)\nconst masterFilterValues = ref({\n isActive: '',\n keyword: '',\n})\n\nconst masterFilterDisplay = {\n isActive: {\n label: '활성여부',\n displayValue: (val: unknown) => {\n if (val === 'Y') return 'Y:활성'\n if (val === 'N') return 'N:비활성'\n return ''\n },\n },\n keyword: {\n label: '검색어',\n },\n}\n\n// Mock 데이터 - 회원사 목록\nconst masterRowData = ref([\n { memberId: 'M001', memberName: '제이솔루션', isActive: 'Y' },\n { memberId: 'M002', memberName: 'ABC물류', isActive: 'Y' },\n { memberId: 'M003', memberName: 'XYZ유통', isActive: 'N' },\n])\n\nconst masterColumnDefs = ref([\n { \n field: 'memberId', \n headerName: '회원사코드', \n width: 150,\n enableValue: true, // 집계 가능 (count)\n },\n { \n field: 'memberName', \n headerName: '회원사명', \n flex: 1,\n enableValue: true, // 집계 가능 (count)\n },\n {\n field: 'isActive',\n headerName: '활성',\n width: 100,\n cellRenderer: (params: any) => (params.value === 'Y' ? '✓' : ''),\n enableRowGroup: true, // Row Group으로 사용 가능\n enablePivot: true, // Pivot Column으로 사용 가능\n },\n])\n\n// 마스터 탭 행별 액션 버튼\nconst masterActionButtons: ActionButton[] = [\n {\n icon: 'pencil',\n label: '수정',\n tooltip: '편집',\n onClick: (rowData: any) => {\n isMasterNew.value = false\n masterDetail.value = {\n memberId: rowData.memberId,\n memberName: rowData.memberName,\n isActive: rowData.isActive,\n }\n },\n },\n {\n icon: 'trash2',\n label: '삭제',\n tooltip: '삭제',\n styletype: 'danger',\n onClick: (rowData: any) => {\n if (confirm(`${rowData.memberName}을(를) 삭제하시겠습니까?`)) {\n console.log('회원사 삭제:', rowData.memberId)\n alert(`삭제되었습니다: ${rowData.memberName}`)\n }\n },\n },\n]\n\nconst masterGridRef = ref()\nconst isMasterNew = ref(false)\nconst masterDetail = ref({\n memberId: '',\n memberName: '',\n isActive: 'Y',\n})\n\nfunction onMasterRowClicked(event: any) {\n isMasterNew.value = false\n masterDetail.value = {\n memberId: event.data.memberId,\n memberName: event.data.memberName,\n isActive: event.data.isActive,\n }\n}\n\nfunction onMasterNew() {\n isMasterNew.value = true\n masterDetail.value = {\n memberId: '',\n memberName: '',\n isActive: 'Y',\n }\n}\n\nfunction onMasterSave() {\n console.log('회원사 저장:', masterDetail.value)\n // TODO: 실제 구현 시 API 호출로 대체\n alert(`저장되었습니다: ${masterDetail.value.memberName}`)\n}\n\nfunction onMasterDelete() {\n if (confirm(`${masterDetail.value.memberName}을(를) 삭제하시겠습니까?`)) {\n console.log('회원사 삭제:', masterDetail.value.memberId)\n // TODO: 실제 구현 시 API 호출로 대체\n alert(`삭제되었습니다: ${masterDetail.value.memberName}`)\n }\n}\n\nfunction onMasterReset() {\n masterFilterValues.value = {\n isActive: '',\n keyword: '',\n }\n}\n\nfunction onMasterSearch() {\n console.log('회원사 조회:', masterFilterValues.value)\n // TODO: 실제 구현 시 API 호출로 대체\n}\n\nfunction onHelp() {\n alert('회원사 관리 페이지 도움말')\n}\n\n// ==================== Tab 2: 매핑 (고객사) ====================\n\nconst mappingFilterCollapsed = ref(false)\nconst mappingFilterValues = ref({\n keyword: '',\n})\n\nconst mappingFilterDisplay = {\n keyword: {\n label: '검색어',\n },\n}\n\nconst mappingMasterGridRef = ref()\n\nconst mappingMasterColumnDefs = ref([\n { field: 'memberId', headerName: '회원사코드', width: 150 },\n { field: 'memberName', headerName: '회원사명', flex: 1 },\n])\n\n// Mock 데이터 - 전체 고객사 (매핑 여부 포함)\nconst selectedMemberId = ref<string>('')\n\n// Mock 데이터 - 회원사별 매핑 정보\nconst mappingData = ref<Record<string, string[]>>({\n M001: ['C001', 'C002'], // 제이솔루션에 매핑된 고객사\n M002: ['C003'], // ABC물류에 매핑된 고객사\n M003: [], // XYZ유통에 매핑된 고객사 없음\n})\n\nconst allCustomersData = [\n { id: 'C001', code: 'C001', name: '고객A' },\n { id: 'C002', code: 'C002', name: '고객B' },\n { id: 'C003', code: 'C003', name: '고객C' },\n { id: 'C004', code: 'C004', name: '고객D' },\n { id: 'C005', code: 'C005', name: '고객E' },\n]\n\nconst customerColumnDefs = ref([\n { field: 'code', headerName: '코드', width: 120 },\n { field: 'name', headerName: '이름', flex: 1 },\n])\n\n// JShuttle용 데이터\nconst shuttleUnmappedData = ref<any[]>([])\nconst shuttleMappedData = ref<any[]>([])\n\nfunction onMappingMasterRowClicked(event: any) {\n selectedMemberId.value = event.data.memberId\n console.log('선택된 회원사:', event.data.memberName)\n \n // JShuttle 데이터 업데이트\n const mappedCodes = mappingData.value[event.data.memberId] || []\n shuttleUnmappedData.value = allCustomersData.filter((c) => !mappedCodes.includes(c.code))\n shuttleMappedData.value = allCustomersData.filter((c) => mappedCodes.includes(c.code))\n \n // TODO: 실제 구현 시 API 호출로 매핑/미매핑 데이터 로드\n}\n\n/**\n * JShuttle 이동 이벤트 핸들러\n */\nfunction onShuttleMove(event: any) {\n if (!selectedMemberId.value) {\n alert('회원사를 먼저 선택해주세요.')\n return\n }\n\n const { items, direction } = event\n const key = selectedMemberId.value\n\n if (direction === 'toRight') {\n // 매핑\n const codes = items.map((item: any) => item.code)\n if (!mappingData.value[key]) {\n mappingData.value[key] = []\n }\n mappingData.value[key]!.push(...codes)\n console.log('매핑:', codes)\n // TODO: 실제 구현 시 API 호출로 매핑 처리\n } else {\n // 해제\n const codes = items.map((item: any) => item.code)\n mappingData.value[key] = (mappingData.value[key] || []).filter(\n (code) => !codes.includes(code)\n )\n console.log('해제:', codes)\n // TODO: 실제 구현 시 API 호출로 매핑 해제 처리\n }\n}\n\nfunction onMappingReset() {\n mappingFilterValues.value = {\n keyword: '',\n }\n}\n\nfunction onMappingSearch() {\n console.log('매핑 조회:', mappingFilterValues.value)\n // TODO: 실제 구현 시 API 호출로 대체\n}\n\ndefineExpose({ masterGridRef, mappingMasterGridRef })\n\n// 초기 데이터 설정 (빈 상태)\nshuttleUnmappedData.value = []\nshuttleMappedData.value = []\n</script>\n"],"names":["activeTabId","ref","tabs","handleTabChange","tabId","activeOptions","masterFilterCollapsed","masterFilterValues","masterFilterDisplay","val","masterRowData","masterColumnDefs","params","masterActionButtons","rowData","isMasterNew","masterDetail","masterGridRef","onMasterRowClicked","event","onMasterNew","onMasterSave","onMasterDelete","onMasterReset","onMasterSearch","onHelp","mappingFilterCollapsed","mappingFilterValues","mappingFilterDisplay","mappingMasterGridRef","mappingMasterColumnDefs","selectedMemberId","mappingData","allCustomersData","customerColumnDefs","shuttleUnmappedData","shuttleMappedData","onMappingMasterRowClicked","mappedCodes","c","onShuttleMove","items","direction","key","codes","item","code","onMappingReset","onMappingSearch","__expose","_createBlock","_component_JPageContainer","_createVNode","_unref","JTabs","$event","_createElementVNode","_hoisted_1","JFilterBar","JButton","_cache","_hoisted_2","JFormField","JSplitter","_hoisted_3","JGrid","_hoisted_4","JEmptyState","JCard","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","JShuttle"],"mappings":"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"}
|