@j-solution/components 1.5.0 → 1.6.1
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 +5 -6
- package/assets/jwms-portal-frontend-DntSIcYt.css +1 -0
- package/assets/styles/j-components.css +1 -1
- package/components/atoms/JGrid.vue.cjs +1 -1
- package/components/atoms/JGrid.vue.js +2 -2
- package/components/atoms/JGrid.vue2.cjs +1 -1
- package/components/atoms/JGrid.vue2.cjs.map +1 -1
- package/components/atoms/JGrid.vue2.js +124 -56
- package/components/atoms/JGrid.vue2.js.map +1 -1
- package/components/atoms/JSplitter.vue.cjs +2 -0
- package/components/atoms/JSplitter.vue.cjs.map +1 -0
- package/components/atoms/JSplitter.vue.js +57 -0
- package/components/atoms/JSplitter.vue.js.map +1 -0
- package/components/atoms/JSplitter.vue2.cjs +2 -0
- package/components/atoms/JSplitter.vue2.cjs.map +1 -0
- package/components/atoms/JSplitter.vue2.js +5 -0
- package/components/atoms/JSplitter.vue2.js.map +1 -0
- package/components/examples/ExampleCrudPage.vue.cjs +2 -0
- package/components/examples/ExampleCrudPage.vue.cjs.map +1 -0
- package/components/examples/ExampleCrudPage.vue.js +304 -0
- package/components/examples/ExampleCrudPage.vue.js.map +1 -0
- package/components/examples/ExampleCrudPage.vue2.cjs +2 -0
- package/components/examples/ExampleCrudPage.vue2.cjs.map +1 -0
- package/components/examples/ExampleCrudPage.vue2.js +5 -0
- package/components/examples/ExampleCrudPage.vue2.js.map +1 -0
- package/components/examples/ExampleTabMappingPage.vue.cjs +2 -0
- package/components/examples/ExampleTabMappingPage.vue.cjs.map +1 -0
- package/components/examples/ExampleTabMappingPage.vue.js +479 -0
- package/components/examples/ExampleTabMappingPage.vue.js.map +1 -0
- package/components/examples/ExampleTabMappingPage.vue2.cjs +2 -0
- package/components/examples/ExampleTabMappingPage.vue2.cjs.map +1 -0
- package/components/examples/ExampleTabMappingPage.vue2.js +5 -0
- package/components/examples/ExampleTabMappingPage.vue2.js.map +1 -0
- package/components/molecules/JTitlebar.vue.cjs +1 -1
- package/components/molecules/JTitlebar.vue.cjs.map +1 -1
- package/components/molecules/JTitlebar.vue.js +48 -40
- package/components/molecules/JTitlebar.vue.js.map +1 -1
- package/components/organisms/JFilterBar.vue.cjs +1 -1
- package/components/organisms/JFilterBar.vue.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue.js +60 -53
- package/components/organisms/JFilterBar.vue.js.map +1 -1
- package/components/shadcn/resizable/ResizableHandle.vue.cjs +2 -0
- package/components/shadcn/resizable/ResizableHandle.vue.cjs.map +1 -0
- package/components/shadcn/resizable/ResizableHandle.vue.js +40 -0
- package/components/shadcn/resizable/ResizableHandle.vue.js.map +1 -0
- package/components/shadcn/resizable/ResizableHandle.vue2.cjs +2 -0
- package/components/shadcn/resizable/ResizableHandle.vue2.cjs.map +1 -0
- package/components/shadcn/resizable/ResizableHandle.vue2.js +5 -0
- package/components/shadcn/resizable/ResizableHandle.vue2.js.map +1 -0
- package/components/shadcn/resizable/ResizablePanelGroup.vue.cjs +2 -0
- package/components/shadcn/resizable/ResizablePanelGroup.vue.cjs.map +1 -0
- package/components/shadcn/resizable/ResizablePanelGroup.vue.js +33 -0
- package/components/shadcn/resizable/ResizablePanelGroup.vue.js.map +1 -0
- package/components/shadcn/resizable/ResizablePanelGroup.vue2.cjs +2 -0
- package/components/shadcn/resizable/ResizablePanelGroup.vue2.cjs.map +1 -0
- package/components/shadcn/resizable/ResizablePanelGroup.vue2.js +5 -0
- package/components/shadcn/resizable/ResizablePanelGroup.vue2.js.map +1 -0
- package/index.cjs +1 -1
- package/index.js +76 -70
- package/package.json +2 -2
- package/types/index.d.ts +895 -188
- package/assets/jwms-portal-frontend-uK756XTb.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExampleCrudPage.vue.cjs","sources":["../../../../src/components/examples/ExampleCrudPage.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-col h-full gap-4 bg-background text-foreground\">\n <!-- ==================== 타이틀바 ==================== -->\n <JTitlebar \n icon=\"building\" \n title=\"고객사 관리\" \n description=\"고객사 정보를 조회하고 관리합니다\"\n :showHelp=\"true\" \n @help=\"onHelp\" \n />\n\n <!-- ==================== 필터바 ==================== -->\n <JFilterBar\n v-model:collapsed=\"filterCollapsed\"\n v-model:filterValues=\"filterValues\"\n :filterDisplay=\"filterDisplay\"\n :collapsible=\"true\"\n title=\"고객사 목록\"\n >\n <!-- 액션 버튼 -->\n <template #actions>\n <JButton size=\"sm\" variant=\"outline\" @click=\"onReset\">초기화</JButton>\n <JButton size=\"sm\" styletype=\"primary\" @click=\"onSearch\">조회</JButton>\n <JButton size=\"sm\" styletype=\"primary\" @click=\"onNew\">신규</JButton>\n </template>\n\n <!-- 필터 필드 - 다중 열 배치 -->\n <template #filters>\n <div class=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4\">\n <JFormField\n type=\"combo\"\n label=\"활성여부\"\n v-model=\"filterValues.isActive\"\n :options=\"activeOptions\"\n />\n <JFormField type=\"input\" label=\"검색어\" v-model=\"filterValues.keyword\" />\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=\"gridRef\"\n :columnDefs=\"columnDefs\"\n :rowData=\"rowData\"\n :action-buttons=\"actionButtons\"\n @row-clicked=\"onRowClicked\"\n />\n </div>\n </template>\n\n <!-- 우측: 상세 영역 -->\n <template #right>\n <div class=\"h-full flex flex-col gap-4 overflow-y-auto p-4 border-l rounded-lg bg-card\">\n <h3 class=\"text-lg font-semibold mb-2\">{{ isNew ? '신규 등록' : '상세 정보' }}</h3>\n\n <!-- 2열 그리드: 코드, 이름 -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <JFormField\n type=\"input\"\n label=\"코드\"\n v-model=\"detail.code\"\n :readonly=\"!isNew\"\n placeholder=\"고객사 코드\"\n />\n <JFormField\n type=\"input\"\n label=\"이름\"\n v-model=\"detail.name\"\n placeholder=\"고객사 이름\"\n />\n </div>\n\n <!-- 2열 그리드: 분류, 활성여부 -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <JFormField\n type=\"combo\"\n label=\"분류\"\n v-model=\"detail.category\"\n :options=\"categoryOptions\"\n />\n <JFormField\n type=\"checkbox\"\n label=\"활성여부\"\n v-model=\"detail.isActive\"\n inlineLabel=\"활성\"\n />\n </div>\n\n <!-- 전체 너비: 비고 -->\n <JFormField type=\"textarea\" label=\"비고\" v-model=\"detail.remark\" placeholder=\"비고\" />\n\n <!-- 액션 버튼 -->\n <div class=\"flex justify-end gap-2 mt-4\">\n <JButton styletype=\"primary\" size=\"sm\" @click=\"onSave\">저장</JButton>\n <JButton variant=\"outline\" size=\"sm\" @click=\"onDelete\" v-if=\"!isNew\">삭제</JButton>\n </div>\n </div>\n </template>\n </JSplitter>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { JTitlebar } from '@/components/molecules'\nimport { JFilterBar } from '@/components/organisms'\nimport { JGrid, JButton, JSplitter, type ActionButton } from '@/components/atoms'\nimport { JFormField } from '@/components/molecules'\n\n// ==================== 필터 상태 ====================\nconst filterCollapsed = ref(false)\n\n// 필터 값 (v-model:filterValues)\nconst filterValues = ref({\n isActive: '',\n keyword: '',\n})\n\n// 필터 표시 설정 (배지에 표시될 라벨 및 값 변환 함수)\nconst filterDisplay = {\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// ==================== 옵션 데이터 ====================\nconst activeOptions = [\n { value: 'Y', label: 'Y:활성' },\n { value: 'N', label: 'N:비활성' },\n]\n\nconst categoryOptions = [\n { value: 'A', label: 'A등급' },\n { value: 'B', label: 'B등급' },\n { value: 'C', label: 'C등급' },\n]\n\n// ==================== 그리드 설정 ====================\nconst gridRef = ref()\n\n// Mock 데이터 - 실제 백엔드 응답 구조\nconst rowData = ref([\n { code: 'C001', name: '제이솔루션', category: 'A', isActive: 'Y', remark: '주력 고객사' },\n { code: 'C002', name: 'ABC물류', category: 'B', isActive: 'Y', remark: '' },\n { code: 'C003', name: 'XYZ유통', category: 'A', isActive: 'N', remark: '비활성' },\n { code: 'C004', name: '대한물류', category: 'B', isActive: 'Y', remark: '' },\n { code: 'C005', name: '글로벌이커머스', category: 'A', isActive: 'Y', remark: '신규 고객사' },\n])\n\nconst columnDefs = ref([\n { field: 'code', headerName: '코드', width: 120 },\n { field: 'name', headerName: '이름', width: 200 },\n { field: 'category', headerName: '분류', width: 100 },\n {\n field: 'isActive',\n headerName: '활성',\n width: 100,\n cellRenderer: (params: any) => (params.value === 'Y' ? '✓' : ''),\n },\n { field: 'remark', headerName: '비고', flex: 1 },\n])\n\n// 행별 액션 버튼\nconst actionButtons: ActionButton[] = [\n {\n icon: 'pencil',\n label: '수정',\n tooltip: '편집',\n onClick: (rowData: any) => {\n isNew.value = false\n detail.value = {\n code: rowData.code,\n name: rowData.name,\n category: rowData.category,\n isActive: rowData.isActive,\n remark: rowData.remark,\n }\n },\n },\n {\n icon: 'trash2',\n label: '삭제',\n tooltip: '삭제',\n styletype: 'danger',\n onClick: (rowData: any) => {\n if (confirm(`${rowData.name}을(를) 삭제하시겠습니까?`)) {\n console.log('삭제:', rowData.code)\n alert(`삭제되었습니다: ${rowData.name}`)\n }\n },\n },\n]\n\n// ==================== 상세 영역 상태 ====================\nconst isNew = ref(false)\nconst detail = ref({\n code: '',\n name: '',\n category: '',\n isActive: 'Y',\n remark: '',\n})\n\n// ==================== 이벤트 핸들러 ====================\n\n/**\n * 그리드 행 클릭 핸들러\n */\nfunction onRowClicked(event: any) {\n isNew.value = false\n const rowData = event.data\n\n // 선택된 행 데이터를 상세 영역에 바인딩\n detail.value = {\n code: rowData.code,\n name: rowData.name,\n category: rowData.category,\n isActive: rowData.isActive,\n remark: rowData.remark,\n }\n}\n\n/**\n * 신규 버튼 클릭\n */\nfunction onNew() {\n isNew.value = true\n // 상세 영역 초기화\n detail.value = {\n code: '',\n name: '',\n category: '',\n isActive: 'Y',\n remark: '',\n }\n}\n\n/**\n * 저장 버튼 클릭\n */\nfunction onSave() {\n console.log('저장:', detail.value)\n // TODO: 실제 구현 시 API 호출로 대체\n // if (isNew.value) {\n // await api.createCustomer(detail.value)\n // } else {\n // await api.updateCustomer(detail.value.code, detail.value)\n // }\n // 성공 시 그리드 데이터 갱신\n alert(`저장되었습니다: ${detail.value.name}`)\n}\n\n/**\n * 삭제 버튼 클릭\n */\nfunction onDelete() {\n if (confirm(`${detail.value.name}을(를) 삭제하시겠습니까?`)) {\n console.log('삭제:', detail.value.code)\n // TODO: 실제 구현 시 API 호출로 대체\n // await api.deleteCustomer(detail.value.code)\n // 성공 시 그리드에서 해당 행 제거\n alert(`삭제되었습니다: ${detail.value.name}`)\n }\n}\n\n/**\n * 초기화 버튼 클릭\n */\nfunction onReset() {\n filterValues.value = {\n isActive: '',\n keyword: '',\n }\n console.log('필터 초기화')\n}\n\n/**\n * 조회 버튼 클릭\n */\nfunction onSearch() {\n console.log('조회 조건:', filterValues.value)\n // TODO: 실제 구현 시 API 호출로 대체\n // const result = await api.searchCustomers(filterValues.value)\n // rowData.value = result.data\n}\n\n/**\n * 도움말 아이콘 클릭\n */\nfunction onHelp() {\n alert('고객사 관리 페이지 도움말')\n}\n\ndefineExpose({ gridRef })\n</script>\n"],"names":["filterCollapsed","ref","filterValues","filterDisplay","val","activeOptions","categoryOptions","gridRef","rowData","columnDefs","params","actionButtons","isNew","detail","onRowClicked","event","onNew","onSave","onDelete","onReset","onSearch","onHelp","__expose","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","JTitlebar","JFilterBar","$event","JButton","_cache","_createElementVNode","_hoisted_2","JFormField","JSplitter","_hoisted_3","JGrid","_hoisted_4","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_7","_hoisted_8","_createBlock"],"mappings":"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"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { defineComponent as U, ref as s, createElementBlock as R, openBlock as g, createVNode as i, unref as a, withCtx as r, createElementVNode as d, createTextVNode as c, toDisplayString as h, createBlock as D, createCommentVNode as E } from "vue";
|
|
2
|
+
import m from "../molecules/JFormField.vue.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
import "../shadcn/index.js";
|
|
5
|
+
import "@vueuse/core";
|
|
6
|
+
import "reka-ui";
|
|
7
|
+
import "clsx";
|
|
8
|
+
import "tailwind-merge";
|
|
9
|
+
import "lucide-vue-next";
|
|
10
|
+
/* empty css */
|
|
11
|
+
/* empty css */
|
|
12
|
+
/* empty css */
|
|
13
|
+
import p from "../atoms/JButton.vue.js";
|
|
14
|
+
import "@internationalized/date";
|
|
15
|
+
import "md-editor-v3";
|
|
16
|
+
/* empty css */
|
|
17
|
+
/* empty css */
|
|
18
|
+
import "../shadcn/badge-variants.js";
|
|
19
|
+
/* empty css */
|
|
20
|
+
import "../shadcn/avatar-variants.js";
|
|
21
|
+
import "dompurify";
|
|
22
|
+
/* empty css */
|
|
23
|
+
import S from "../atoms/JGrid.vue.js";
|
|
24
|
+
import H from "../atoms/JSplitter.vue.js";
|
|
25
|
+
import "vue-sonner";
|
|
26
|
+
import O from "../molecules/JTitlebar.vue.js";
|
|
27
|
+
/* empty css */
|
|
28
|
+
/* empty css */
|
|
29
|
+
import j from "../organisms/JFilterBar.vue.js";
|
|
30
|
+
import "vue-router";
|
|
31
|
+
/* empty css */
|
|
32
|
+
/* empty css */
|
|
33
|
+
const G = { class: "flex flex-col h-full gap-4 bg-background text-foreground" }, J = { class: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4" }, L = { class: "h-full overflow-auto bg-background" }, P = { class: "h-full flex flex-col gap-4 overflow-y-auto p-4 border-l rounded-lg bg-card" }, T = { class: "text-lg font-semibold mb-2" }, X = { class: "grid grid-cols-1 md:grid-cols-2 gap-4" }, Z = { class: "grid grid-cols-1 md:grid-cols-2 gap-4" }, q = { class: "flex justify-end gap-2 mt-4" }, Ye = /* @__PURE__ */ U({
|
|
34
|
+
__name: "ExampleCrudPage",
|
|
35
|
+
setup(F, { expose: y }) {
|
|
36
|
+
const f = s(!1), n = s({
|
|
37
|
+
isActive: "",
|
|
38
|
+
keyword: ""
|
|
39
|
+
}), k = {
|
|
40
|
+
isActive: {
|
|
41
|
+
label: "활성여부",
|
|
42
|
+
displayValue: (o) => o === "Y" ? "Y:활성" : o === "N" ? "N:비활성" : ""
|
|
43
|
+
},
|
|
44
|
+
keyword: {
|
|
45
|
+
label: "검색어"
|
|
46
|
+
}
|
|
47
|
+
}, b = [
|
|
48
|
+
{ value: "Y", label: "Y:활성" },
|
|
49
|
+
{ value: "N", label: "N:비활성" }
|
|
50
|
+
], V = [
|
|
51
|
+
{ value: "A", label: "A등급" },
|
|
52
|
+
{ value: "B", label: "B등급" },
|
|
53
|
+
{ value: "C", label: "C등급" }
|
|
54
|
+
], v = s(), A = s([
|
|
55
|
+
{ code: "C001", name: "제이솔루션", category: "A", isActive: "Y", remark: "주력 고객사" },
|
|
56
|
+
{ code: "C002", name: "ABC물류", category: "B", isActive: "Y", remark: "" },
|
|
57
|
+
{ code: "C003", name: "XYZ유통", category: "A", isActive: "N", remark: "비활성" },
|
|
58
|
+
{ code: "C004", name: "대한물류", category: "B", isActive: "Y", remark: "" },
|
|
59
|
+
{ code: "C005", name: "글로벌이커머스", category: "A", isActive: "Y", remark: "신규 고객사" }
|
|
60
|
+
]), C = s([
|
|
61
|
+
{ field: "code", headerName: "코드", width: 120 },
|
|
62
|
+
{ field: "name", headerName: "이름", width: 200 },
|
|
63
|
+
{ field: "category", headerName: "분류", width: 100 },
|
|
64
|
+
{
|
|
65
|
+
field: "isActive",
|
|
66
|
+
headerName: "활성",
|
|
67
|
+
width: 100,
|
|
68
|
+
cellRenderer: (o) => o.value === "Y" ? "✓" : ""
|
|
69
|
+
},
|
|
70
|
+
{ field: "remark", headerName: "비고", flex: 1 }
|
|
71
|
+
]), x = [
|
|
72
|
+
{
|
|
73
|
+
icon: "pencil",
|
|
74
|
+
label: "수정",
|
|
75
|
+
tooltip: "편집",
|
|
76
|
+
onClick: (o) => {
|
|
77
|
+
u.value = !1, l.value = {
|
|
78
|
+
code: o.code,
|
|
79
|
+
name: o.name,
|
|
80
|
+
category: o.category,
|
|
81
|
+
isActive: o.isActive,
|
|
82
|
+
remark: o.remark
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
icon: "trash2",
|
|
88
|
+
label: "삭제",
|
|
89
|
+
tooltip: "삭제",
|
|
90
|
+
styletype: "danger",
|
|
91
|
+
onClick: (o) => {
|
|
92
|
+
confirm(`${o.name}을(를) 삭제하시겠습니까?`) && (console.log("삭제:", o.code), alert(`삭제되었습니다: ${o.name}`));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
], u = s(!1), l = s({
|
|
96
|
+
code: "",
|
|
97
|
+
name: "",
|
|
98
|
+
category: "",
|
|
99
|
+
isActive: "Y",
|
|
100
|
+
remark: ""
|
|
101
|
+
});
|
|
102
|
+
function N(o) {
|
|
103
|
+
u.value = !1;
|
|
104
|
+
const e = o.data;
|
|
105
|
+
l.value = {
|
|
106
|
+
code: e.code,
|
|
107
|
+
name: e.name,
|
|
108
|
+
category: e.category,
|
|
109
|
+
isActive: e.isActive,
|
|
110
|
+
remark: e.remark
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function w() {
|
|
114
|
+
u.value = !0, l.value = {
|
|
115
|
+
code: "",
|
|
116
|
+
name: "",
|
|
117
|
+
category: "",
|
|
118
|
+
isActive: "Y",
|
|
119
|
+
remark: ""
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function _() {
|
|
123
|
+
console.log("저장:", l.value), alert(`저장되었습니다: ${l.value.name}`);
|
|
124
|
+
}
|
|
125
|
+
function Y() {
|
|
126
|
+
confirm(`${l.value.name}을(를) 삭제하시겠습니까?`) && (console.log("삭제:", l.value.code), alert(`삭제되었습니다: ${l.value.name}`));
|
|
127
|
+
}
|
|
128
|
+
function z() {
|
|
129
|
+
n.value = {
|
|
130
|
+
isActive: "",
|
|
131
|
+
keyword: ""
|
|
132
|
+
}, console.log("필터 초기화");
|
|
133
|
+
}
|
|
134
|
+
function $() {
|
|
135
|
+
console.log("조회 조건:", n.value);
|
|
136
|
+
}
|
|
137
|
+
function B() {
|
|
138
|
+
alert("고객사 관리 페이지 도움말");
|
|
139
|
+
}
|
|
140
|
+
return y({ gridRef: v }), (o, e) => (g(), R("div", G, [
|
|
141
|
+
i(a(O), {
|
|
142
|
+
icon: "building",
|
|
143
|
+
title: "고객사 관리",
|
|
144
|
+
description: "고객사 정보를 조회하고 관리합니다",
|
|
145
|
+
showHelp: !0,
|
|
146
|
+
onHelp: B
|
|
147
|
+
}),
|
|
148
|
+
i(a(j), {
|
|
149
|
+
collapsed: f.value,
|
|
150
|
+
"onUpdate:collapsed": e[2] || (e[2] = (t) => f.value = t),
|
|
151
|
+
filterValues: n.value,
|
|
152
|
+
"onUpdate:filterValues": e[3] || (e[3] = (t) => n.value = t),
|
|
153
|
+
filterDisplay: k,
|
|
154
|
+
collapsible: !0,
|
|
155
|
+
title: "고객사 목록"
|
|
156
|
+
}, {
|
|
157
|
+
actions: r(() => [
|
|
158
|
+
i(a(p), {
|
|
159
|
+
size: "sm",
|
|
160
|
+
variant: "outline",
|
|
161
|
+
onClick: z
|
|
162
|
+
}, {
|
|
163
|
+
default: r(() => [...e[9] || (e[9] = [
|
|
164
|
+
c("초기화", -1)
|
|
165
|
+
])]),
|
|
166
|
+
_: 1
|
|
167
|
+
}),
|
|
168
|
+
i(a(p), {
|
|
169
|
+
size: "sm",
|
|
170
|
+
styletype: "primary",
|
|
171
|
+
onClick: $
|
|
172
|
+
}, {
|
|
173
|
+
default: r(() => [...e[10] || (e[10] = [
|
|
174
|
+
c("조회", -1)
|
|
175
|
+
])]),
|
|
176
|
+
_: 1
|
|
177
|
+
}),
|
|
178
|
+
i(a(p), {
|
|
179
|
+
size: "sm",
|
|
180
|
+
styletype: "primary",
|
|
181
|
+
onClick: w
|
|
182
|
+
}, {
|
|
183
|
+
default: r(() => [...e[11] || (e[11] = [
|
|
184
|
+
c("신규", -1)
|
|
185
|
+
])]),
|
|
186
|
+
_: 1
|
|
187
|
+
})
|
|
188
|
+
]),
|
|
189
|
+
filters: r(() => [
|
|
190
|
+
d("div", J, [
|
|
191
|
+
i(a(m), {
|
|
192
|
+
type: "combo",
|
|
193
|
+
label: "활성여부",
|
|
194
|
+
modelValue: n.value.isActive,
|
|
195
|
+
"onUpdate:modelValue": e[0] || (e[0] = (t) => n.value.isActive = t),
|
|
196
|
+
options: b
|
|
197
|
+
}, null, 8, ["modelValue"]),
|
|
198
|
+
i(a(m), {
|
|
199
|
+
type: "input",
|
|
200
|
+
label: "검색어",
|
|
201
|
+
modelValue: n.value.keyword,
|
|
202
|
+
"onUpdate:modelValue": e[1] || (e[1] = (t) => n.value.keyword = t)
|
|
203
|
+
}, null, 8, ["modelValue"])
|
|
204
|
+
])
|
|
205
|
+
]),
|
|
206
|
+
_: 1
|
|
207
|
+
}, 8, ["collapsed", "filterValues"]),
|
|
208
|
+
i(a(H), {
|
|
209
|
+
direction: "horizontal",
|
|
210
|
+
"default-size": 60,
|
|
211
|
+
"min-size": 30,
|
|
212
|
+
"second-min-size": 20,
|
|
213
|
+
"second-max-size": 60,
|
|
214
|
+
class: "flex-1"
|
|
215
|
+
}, {
|
|
216
|
+
left: r(() => [
|
|
217
|
+
d("div", L, [
|
|
218
|
+
i(a(S), {
|
|
219
|
+
ref_key: "gridRef",
|
|
220
|
+
ref: v,
|
|
221
|
+
columnDefs: C.value,
|
|
222
|
+
rowData: A.value,
|
|
223
|
+
"action-buttons": x,
|
|
224
|
+
onRowClicked: N
|
|
225
|
+
}, null, 8, ["columnDefs", "rowData"])
|
|
226
|
+
])
|
|
227
|
+
]),
|
|
228
|
+
right: r(() => [
|
|
229
|
+
d("div", P, [
|
|
230
|
+
d("h3", T, h(u.value ? "신규 등록" : "상세 정보"), 1),
|
|
231
|
+
d("div", X, [
|
|
232
|
+
i(a(m), {
|
|
233
|
+
type: "input",
|
|
234
|
+
label: "코드",
|
|
235
|
+
modelValue: l.value.code,
|
|
236
|
+
"onUpdate:modelValue": e[4] || (e[4] = (t) => l.value.code = t),
|
|
237
|
+
readonly: !u.value,
|
|
238
|
+
placeholder: "고객사 코드"
|
|
239
|
+
}, null, 8, ["modelValue", "readonly"]),
|
|
240
|
+
i(a(m), {
|
|
241
|
+
type: "input",
|
|
242
|
+
label: "이름",
|
|
243
|
+
modelValue: l.value.name,
|
|
244
|
+
"onUpdate:modelValue": e[5] || (e[5] = (t) => l.value.name = t),
|
|
245
|
+
placeholder: "고객사 이름"
|
|
246
|
+
}, null, 8, ["modelValue"])
|
|
247
|
+
]),
|
|
248
|
+
d("div", Z, [
|
|
249
|
+
i(a(m), {
|
|
250
|
+
type: "combo",
|
|
251
|
+
label: "분류",
|
|
252
|
+
modelValue: l.value.category,
|
|
253
|
+
"onUpdate:modelValue": e[6] || (e[6] = (t) => l.value.category = t),
|
|
254
|
+
options: V
|
|
255
|
+
}, null, 8, ["modelValue"]),
|
|
256
|
+
i(a(m), {
|
|
257
|
+
type: "checkbox",
|
|
258
|
+
label: "활성여부",
|
|
259
|
+
modelValue: l.value.isActive,
|
|
260
|
+
"onUpdate:modelValue": e[7] || (e[7] = (t) => l.value.isActive = t),
|
|
261
|
+
inlineLabel: "활성"
|
|
262
|
+
}, null, 8, ["modelValue"])
|
|
263
|
+
]),
|
|
264
|
+
i(a(m), {
|
|
265
|
+
type: "textarea",
|
|
266
|
+
label: "비고",
|
|
267
|
+
modelValue: l.value.remark,
|
|
268
|
+
"onUpdate:modelValue": e[8] || (e[8] = (t) => l.value.remark = t),
|
|
269
|
+
placeholder: "비고"
|
|
270
|
+
}, null, 8, ["modelValue"]),
|
|
271
|
+
d("div", q, [
|
|
272
|
+
i(a(p), {
|
|
273
|
+
styletype: "primary",
|
|
274
|
+
size: "sm",
|
|
275
|
+
onClick: _
|
|
276
|
+
}, {
|
|
277
|
+
default: r(() => [...e[12] || (e[12] = [
|
|
278
|
+
c("저장", -1)
|
|
279
|
+
])]),
|
|
280
|
+
_: 1
|
|
281
|
+
}),
|
|
282
|
+
u.value ? E("", !0) : (g(), D(a(p), {
|
|
283
|
+
key: 0,
|
|
284
|
+
variant: "outline",
|
|
285
|
+
size: "sm",
|
|
286
|
+
onClick: Y
|
|
287
|
+
}, {
|
|
288
|
+
default: r(() => [...e[13] || (e[13] = [
|
|
289
|
+
c("삭제", -1)
|
|
290
|
+
])]),
|
|
291
|
+
_: 1
|
|
292
|
+
}))
|
|
293
|
+
])
|
|
294
|
+
])
|
|
295
|
+
]),
|
|
296
|
+
_: 1
|
|
297
|
+
})
|
|
298
|
+
]));
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
export {
|
|
302
|
+
Ye as default
|
|
303
|
+
};
|
|
304
|
+
//# sourceMappingURL=ExampleCrudPage.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExampleCrudPage.vue.js","sources":["../../../../src/components/examples/ExampleCrudPage.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-col h-full gap-4 bg-background text-foreground\">\n <!-- ==================== 타이틀바 ==================== -->\n <JTitlebar \n icon=\"building\" \n title=\"고객사 관리\" \n description=\"고객사 정보를 조회하고 관리합니다\"\n :showHelp=\"true\" \n @help=\"onHelp\" \n />\n\n <!-- ==================== 필터바 ==================== -->\n <JFilterBar\n v-model:collapsed=\"filterCollapsed\"\n v-model:filterValues=\"filterValues\"\n :filterDisplay=\"filterDisplay\"\n :collapsible=\"true\"\n title=\"고객사 목록\"\n >\n <!-- 액션 버튼 -->\n <template #actions>\n <JButton size=\"sm\" variant=\"outline\" @click=\"onReset\">초기화</JButton>\n <JButton size=\"sm\" styletype=\"primary\" @click=\"onSearch\">조회</JButton>\n <JButton size=\"sm\" styletype=\"primary\" @click=\"onNew\">신규</JButton>\n </template>\n\n <!-- 필터 필드 - 다중 열 배치 -->\n <template #filters>\n <div class=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4\">\n <JFormField\n type=\"combo\"\n label=\"활성여부\"\n v-model=\"filterValues.isActive\"\n :options=\"activeOptions\"\n />\n <JFormField type=\"input\" label=\"검색어\" v-model=\"filterValues.keyword\" />\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=\"gridRef\"\n :columnDefs=\"columnDefs\"\n :rowData=\"rowData\"\n :action-buttons=\"actionButtons\"\n @row-clicked=\"onRowClicked\"\n />\n </div>\n </template>\n\n <!-- 우측: 상세 영역 -->\n <template #right>\n <div class=\"h-full flex flex-col gap-4 overflow-y-auto p-4 border-l rounded-lg bg-card\">\n <h3 class=\"text-lg font-semibold mb-2\">{{ isNew ? '신규 등록' : '상세 정보' }}</h3>\n\n <!-- 2열 그리드: 코드, 이름 -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <JFormField\n type=\"input\"\n label=\"코드\"\n v-model=\"detail.code\"\n :readonly=\"!isNew\"\n placeholder=\"고객사 코드\"\n />\n <JFormField\n type=\"input\"\n label=\"이름\"\n v-model=\"detail.name\"\n placeholder=\"고객사 이름\"\n />\n </div>\n\n <!-- 2열 그리드: 분류, 활성여부 -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <JFormField\n type=\"combo\"\n label=\"분류\"\n v-model=\"detail.category\"\n :options=\"categoryOptions\"\n />\n <JFormField\n type=\"checkbox\"\n label=\"활성여부\"\n v-model=\"detail.isActive\"\n inlineLabel=\"활성\"\n />\n </div>\n\n <!-- 전체 너비: 비고 -->\n <JFormField type=\"textarea\" label=\"비고\" v-model=\"detail.remark\" placeholder=\"비고\" />\n\n <!-- 액션 버튼 -->\n <div class=\"flex justify-end gap-2 mt-4\">\n <JButton styletype=\"primary\" size=\"sm\" @click=\"onSave\">저장</JButton>\n <JButton variant=\"outline\" size=\"sm\" @click=\"onDelete\" v-if=\"!isNew\">삭제</JButton>\n </div>\n </div>\n </template>\n </JSplitter>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { JTitlebar } from '@/components/molecules'\nimport { JFilterBar } from '@/components/organisms'\nimport { JGrid, JButton, JSplitter, type ActionButton } from '@/components/atoms'\nimport { JFormField } from '@/components/molecules'\n\n// ==================== 필터 상태 ====================\nconst filterCollapsed = ref(false)\n\n// 필터 값 (v-model:filterValues)\nconst filterValues = ref({\n isActive: '',\n keyword: '',\n})\n\n// 필터 표시 설정 (배지에 표시될 라벨 및 값 변환 함수)\nconst filterDisplay = {\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// ==================== 옵션 데이터 ====================\nconst activeOptions = [\n { value: 'Y', label: 'Y:활성' },\n { value: 'N', label: 'N:비활성' },\n]\n\nconst categoryOptions = [\n { value: 'A', label: 'A등급' },\n { value: 'B', label: 'B등급' },\n { value: 'C', label: 'C등급' },\n]\n\n// ==================== 그리드 설정 ====================\nconst gridRef = ref()\n\n// Mock 데이터 - 실제 백엔드 응답 구조\nconst rowData = ref([\n { code: 'C001', name: '제이솔루션', category: 'A', isActive: 'Y', remark: '주력 고객사' },\n { code: 'C002', name: 'ABC물류', category: 'B', isActive: 'Y', remark: '' },\n { code: 'C003', name: 'XYZ유통', category: 'A', isActive: 'N', remark: '비활성' },\n { code: 'C004', name: '대한물류', category: 'B', isActive: 'Y', remark: '' },\n { code: 'C005', name: '글로벌이커머스', category: 'A', isActive: 'Y', remark: '신규 고객사' },\n])\n\nconst columnDefs = ref([\n { field: 'code', headerName: '코드', width: 120 },\n { field: 'name', headerName: '이름', width: 200 },\n { field: 'category', headerName: '분류', width: 100 },\n {\n field: 'isActive',\n headerName: '활성',\n width: 100,\n cellRenderer: (params: any) => (params.value === 'Y' ? '✓' : ''),\n },\n { field: 'remark', headerName: '비고', flex: 1 },\n])\n\n// 행별 액션 버튼\nconst actionButtons: ActionButton[] = [\n {\n icon: 'pencil',\n label: '수정',\n tooltip: '편집',\n onClick: (rowData: any) => {\n isNew.value = false\n detail.value = {\n code: rowData.code,\n name: rowData.name,\n category: rowData.category,\n isActive: rowData.isActive,\n remark: rowData.remark,\n }\n },\n },\n {\n icon: 'trash2',\n label: '삭제',\n tooltip: '삭제',\n styletype: 'danger',\n onClick: (rowData: any) => {\n if (confirm(`${rowData.name}을(를) 삭제하시겠습니까?`)) {\n console.log('삭제:', rowData.code)\n alert(`삭제되었습니다: ${rowData.name}`)\n }\n },\n },\n]\n\n// ==================== 상세 영역 상태 ====================\nconst isNew = ref(false)\nconst detail = ref({\n code: '',\n name: '',\n category: '',\n isActive: 'Y',\n remark: '',\n})\n\n// ==================== 이벤트 핸들러 ====================\n\n/**\n * 그리드 행 클릭 핸들러\n */\nfunction onRowClicked(event: any) {\n isNew.value = false\n const rowData = event.data\n\n // 선택된 행 데이터를 상세 영역에 바인딩\n detail.value = {\n code: rowData.code,\n name: rowData.name,\n category: rowData.category,\n isActive: rowData.isActive,\n remark: rowData.remark,\n }\n}\n\n/**\n * 신규 버튼 클릭\n */\nfunction onNew() {\n isNew.value = true\n // 상세 영역 초기화\n detail.value = {\n code: '',\n name: '',\n category: '',\n isActive: 'Y',\n remark: '',\n }\n}\n\n/**\n * 저장 버튼 클릭\n */\nfunction onSave() {\n console.log('저장:', detail.value)\n // TODO: 실제 구현 시 API 호출로 대체\n // if (isNew.value) {\n // await api.createCustomer(detail.value)\n // } else {\n // await api.updateCustomer(detail.value.code, detail.value)\n // }\n // 성공 시 그리드 데이터 갱신\n alert(`저장되었습니다: ${detail.value.name}`)\n}\n\n/**\n * 삭제 버튼 클릭\n */\nfunction onDelete() {\n if (confirm(`${detail.value.name}을(를) 삭제하시겠습니까?`)) {\n console.log('삭제:', detail.value.code)\n // TODO: 실제 구현 시 API 호출로 대체\n // await api.deleteCustomer(detail.value.code)\n // 성공 시 그리드에서 해당 행 제거\n alert(`삭제되었습니다: ${detail.value.name}`)\n }\n}\n\n/**\n * 초기화 버튼 클릭\n */\nfunction onReset() {\n filterValues.value = {\n isActive: '',\n keyword: '',\n }\n console.log('필터 초기화')\n}\n\n/**\n * 조회 버튼 클릭\n */\nfunction onSearch() {\n console.log('조회 조건:', filterValues.value)\n // TODO: 실제 구현 시 API 호출로 대체\n // const result = await api.searchCustomers(filterValues.value)\n // rowData.value = result.data\n}\n\n/**\n * 도움말 아이콘 클릭\n */\nfunction onHelp() {\n alert('고객사 관리 페이지 도움말')\n}\n\ndefineExpose({ gridRef })\n</script>\n"],"names":["filterCollapsed","ref","filterValues","filterDisplay","val","activeOptions","categoryOptions","gridRef","rowData","columnDefs","params","actionButtons","isNew","detail","onRowClicked","event","onNew","onSave","onDelete","onReset","onSearch","onHelp","__expose","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","JTitlebar","JFilterBar","$event","JButton","_cache","_createElementVNode","_hoisted_2","JFormField","JSplitter","_hoisted_3","JGrid","_hoisted_4","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_7","_hoisted_8","_createBlock"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExampleCrudPage.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExampleCrudPage.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +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 L=require("../molecules/JTabs.vue.cjs");;/* empty css */;/* empty css */const 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"),_=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-4 bg-background text-foreground"},Q={class:"flex flex-col h-full gap-4 p-4"},W={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4"},ee={class:"h-full overflow-auto bg-background"},te={class:"h-full flex flex-col gap-4 overflow-y-auto p-4 border-l rounded-lg bg-card"},le={class:"text-lg font-semibold mb-2"},ae={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},re={class:"flex justify-end gap-2 mt-4"},oe={class:"flex flex-col h-full gap-4 p-4"},ie={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4"},se={class:"h-full overflow-auto bg-background"},ue={class:"h-full flex gap-2 overflow-hidden items-stretch p-2 bg-background"},ne={class:"flex-1 flex flex-col overflow-hidden"},de={class:"flex-1 overflow-auto bg-background"},me={class:"flex flex-col justify-center gap-2 px-2"},ce={class:"flex-1 flex flex-col overflow-hidden"},fe={class:"flex-1 overflow-auto bg-background"},pe=e.defineComponent({__name:"ExampleTabMappingPage",setup(ve,{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),s=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},{field:"memberName",headerName:"회원사명",flex:1},{field:"isActive",headerName:"활성",width:100,cellRenderer:l=>l.value==="Y"?"✓":""}]),A=[{icon:"pencil",label:"수정",tooltip:"편집",onClick:l=>{n.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(),n=e.ref(!1),r=e.ref({memberId:"",memberName:"",isActive:"Y"});function R(l){n.value=!1,r.value={memberId:l.data.memberId,memberName:l.data.memberName,isActive:l.data.isActive}}function T(){n.value=!0,r.value={memberId:"",memberName:"",isActive:"Y"}}function z(){console.log("회원사 저장:",r.value),alert(`저장되었습니다: ${r.value.memberName}`)}function U(){confirm(`${r.value.memberName}을(를) 삭제하시겠습니까?`)&&(console.log("회원사 삭제:",r.value.memberId),alert(`삭제되었습니다: ${r.value.memberName}`))}function Y(){s.value={isActive:"",keyword:""}}function B(){console.log("회원사 조회:",s.value)}function F(){alert("회원사 관리 페이지 도움말")}const V=e.ref(!1),d=e.ref({keyword:""}),G={keyword:{label:"검색어"}},g=e.ref(),x=e.ref(),C=e.ref(),S=e.ref([{field:"memberId",headerName:"회원사코드",width:150},{field:"memberName",headerName:"회원사명",flex:1}]),o=e.ref(""),u=e.ref({M001:["C001","C002"],M002:["C003"],M003:[]}),w=[{code:"C001",name:"고객A"},{code:"C002",name:"고객B"},{code:"C003",name:"고객C"},{code:"C004",name:"고객D"},{code:"C005",name:"고객E"}],y=e.ref([{field:"code",headerName:"코드",width:120},{field:"name",headerName:"이름",flex:1}]),J=e.computed(()=>{if(!o.value)return[];const l=u.value[o.value]||[];return w.filter(t=>!l.includes(t.code))}),$=e.computed(()=>{if(!o.value)return[];const l=u.value[o.value]||[];return w.filter(t=>l.includes(t.code))});function j(l){o.value=l.data.memberId,console.log("선택된 회원사:",l.data.memberName)}function H(){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;u.value[a]||(u.value[a]=[]),u.value[a].push(...t),console.log("매핑:",t)}function O(){if(!o.value){alert("회원사를 먼저 선택해주세요.");return}const l=C.value?.getSelectedRows()||[];if(l.length===0){alert("해제할 고객사를 선택해주세요.");return}const t=l.map(c=>c.code),a=o.value;u.value[a]=(u.value[a]||[]).filter(c=>!t.includes(c)),console.log("해제:",t)}function P(){d.value={keyword:""}}function K(){console.log("매핑 조회:",d.value)}return h({masterGridRef:N,mappingMasterGridRef:g}),(l,t)=>(e.openBlock(),e.createElementBlock("div",Z,[e.createVNode(e.unref(X.default),{icon:"users",title:"회원사 관리",description:"회원사 정보 및 고객사 매핑을 관리합니다",showHelp:!0,onHelp:F}),e.createVNode(e.unref(L.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:s.value,"onUpdate:filterValues":t[3]||(t[3]=a=>s.value=a),filterDisplay:E,collapsible:!0,title:"회원사 목록"},{actions:e.withCtx(()=>[e.createVNode(e.unref(i.default),{size:"sm",variant:"outline",onClick:Y},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode("초기화",-1)])]),_:1}),e.createVNode(e.unref(i.default),{size:"sm",styletype:"primary",onClick:B},{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",W,[e.createVNode(e.unref(m.default),{type:"combo",label:"활성여부",modelValue:s.value.isActive,"onUpdate:modelValue":t[0]||(t[0]=a=>s.value.isActive=a),options:M},null,8,["modelValue"]),e.createVNode(e.unref(m.default),{type:"input",label:"검색어",modelValue:s.value.keyword,"onUpdate:modelValue":t[1]||(t[1]=a=>s.value.keyword=a)},null,8,["modelValue"])])]),_:1},8,["collapsed","filterValues"]),e.createVNode(e.unref(_.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(f.default),{ref_key:"masterGridRef",ref:N,columnDefs:I.value,rowData:b.value,"action-buttons":A,onRowClicked:R},null,8,["columnDefs","rowData"])])]),right:e.withCtx(()=>[e.createElementVNode("div",te,[e.createElementVNode("h3",le,e.toDisplayString(n.value?"신규 등록":"상세 정보"),1),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:!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]=a=>r.value.memberName=a),placeholder:"회원사 이름"},null,8,["modelValue"])]),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"]),e.createElementVNode("div",re,[e.createVNode(e.unref(i.default),{styletype:"primary",size:"sm",onClick:z},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("저장",-1)])]),_:1}),n.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(i.default),{key:0,variant:"outline",size:"sm",onClick:U},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("삭제",-1)])]),_:1}))])])]),_:1})])]),"content-mapping-customer":e.withCtx(()=>[e.createElementVNode("div",oe,[e.createVNode(e.unref(k.default),{collapsed:V.value,"onUpdate:collapsed":t[8]||(t[8]=a=>V.value=a),filterValues:d.value,"onUpdate:filterValues":t[9]||(t[9]=a=>d.value=a),filterDisplay:G,collapsible:!0,title:"회원사별 고객사 매핑"},{actions:e.withCtx(()=>[e.createVNode(e.unref(i.default),{size:"sm",variant:"outline",onClick:P},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("초기화",-1)])]),_:1}),e.createVNode(e.unref(i.default),{size:"sm",styletype:"primary",onClick:K},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("조회",-1)])]),_:1})]),filters:e.withCtx(()=>[e.createElementVNode("div",ie,[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(_.default),{direction:"vertical","default-size":30,"min-size":20,"second-min-size":40,class:"flex-1"},{top:e.withCtx(()=>[e.createElementVNode("div",se,[e.createVNode(e.unref(f.default),{ref_key:"mappingMasterGridRef",ref:g,columnDefs:S.value,rowData:b.value,onRowClicked:j},null,8,["columnDefs","rowData"])])]),bottom:e.withCtx(()=>[e.createElementVNode("div",ue,[e.createElementVNode("div",ne,[t[18]||(t[18]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-2 px-2"},"미매핑 고객사",-1)),e.createElementVNode("div",de,[e.createVNode(e.unref(f.default),{ref_key:"unmappedGridRef",ref:x,columnDefs:y.value,rowData:J.value,checkbox:""},null,8,["columnDefs","rowData"])])]),e.createElementVNode("div",me,[e.createVNode(e.unref(i.default),{styletype:"primary",size:"sm",onClick:H},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode("매핑 ▶",-1)])]),_:1}),e.createVNode(e.unref(i.default),{variant:"outline",size:"sm",onClick:O},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("◀ 해제",-1)])]),_:1})]),e.createElementVNode("div",ce,[t[21]||(t[21]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-2 px-2"},"매핑된 고객사",-1)),e.createElementVNode("div",fe,[e.createVNode(e.unref(f.default),{ref_key:"mappedGridRef",ref:C,columnDefs:y.value,rowData:$.value,checkbox:""},null,8,["columnDefs","rowData"])])])])]),_:1})])]),_:1},8,["activeTabId"])]))}});exports.default=pe;
|
|
2
|
+
//# sourceMappingURL=ExampleTabMappingPage.vue.cjs.map
|
|
@@ -0,0 +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-4 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-4 p-4\">\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-4\">\n <JFormField\n type=\"combo\"\n label=\"활성여부\"\n v-model=\"masterFilterValues.isActive\"\n :options=\"activeOptions\"\n />\n <JFormField type=\"input\" label=\"검색어\" v-model=\"masterFilterValues.keyword\" />\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 @row-clicked=\"onMasterRowClicked\"\n />\n </div>\n </template>\n\n <!-- 우측: 상세 영역 -->\n <template #right>\n <div\n class=\"h-full flex flex-col gap-4 overflow-y-auto p-4 border-l rounded-lg bg-card\"\n >\n <h3 class=\"text-lg font-semibold mb-2\">\n {{ isMasterNew ? '신규 등록' : '상세 정보' }}\n </h3>\n\n <!-- 2열 그리드: 회원사코드, 회원사명 -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\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\n <!-- 활성여부 -->\n <JFormField\n type=\"checkbox\"\n label=\"활성여부\"\n v-model=\"masterDetail.isActive\"\n inlineLabel=\"활성\"\n />\n\n <div class=\"flex justify-end gap-2 mt-4\">\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 </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-4 p-4\">\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-4\">\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 <!-- 하단: 매핑 영역 (미매핑 - 버튼 - 매핑) -->\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 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 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 } 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 { field: 'memberId', headerName: '회원사코드', width: 150 },\n { field: 'memberName', headerName: '회원사명', flex: 1 },\n {\n field: 'isActive',\n headerName: '활성',\n width: 100,\n cellRenderer: (params: any) => (params.value === 'Y' ? '✓' : ''),\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","_hoisted_6","_toDisplayString","_hoisted_7","_hoisted_8","_createBlock","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17"],"mappings":"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"}
|