@j-solution/components 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +8 -7
  2. package/assets/jwms-portal-frontend-CwxPfHfa.css +1 -0
  3. package/assets/styles/j-components.css +1 -1
  4. package/assets/styles/themes.css +107 -0
  5. package/components/atoms/JAvatar.vue.cjs +1 -1
  6. package/components/atoms/JAvatar.vue.cjs.map +1 -1
  7. package/components/atoms/JAvatar.vue.js +10 -7
  8. package/components/atoms/JAvatar.vue.js.map +1 -1
  9. package/components/atoms/JBadge.vue.cjs +1 -1
  10. package/components/atoms/JBadge.vue.cjs.map +1 -1
  11. package/components/atoms/JBadge.vue.js +7 -6
  12. package/components/atoms/JBadge.vue.js.map +1 -1
  13. package/components/atoms/JButton.vue.cjs +1 -1
  14. package/components/atoms/JButton.vue.cjs.map +1 -1
  15. package/components/atoms/JButton.vue.js +5 -5
  16. package/components/atoms/JButton.vue.js.map +1 -1
  17. package/components/atoms/JDatepicker.vue.cjs +1 -1
  18. package/components/atoms/JDatepicker.vue.cjs.map +1 -1
  19. package/components/atoms/JDatepicker.vue.js +10 -10
  20. package/components/atoms/JDatepicker.vue.js.map +1 -1
  21. package/components/atoms/JEditor.vue.cjs +1 -1
  22. package/components/atoms/JEditor.vue.js +1 -1
  23. package/components/atoms/JEditor.vue2.cjs +1 -1
  24. package/components/atoms/JEditor.vue2.cjs.map +1 -1
  25. package/components/atoms/JEditor.vue2.js +31 -17
  26. package/components/atoms/JEditor.vue2.js.map +1 -1
  27. package/components/atoms/JGrid.vue.cjs +1 -1
  28. package/components/atoms/JGrid.vue.js +2 -2
  29. package/components/atoms/JGrid.vue2.cjs +1 -1
  30. package/components/atoms/JGrid.vue2.cjs.map +1 -1
  31. package/components/atoms/JGrid.vue2.js +45 -33
  32. package/components/atoms/JGrid.vue2.js.map +1 -1
  33. package/components/atoms/JIcon.vue.cjs +1 -1
  34. package/components/atoms/JIcon.vue.cjs.map +1 -1
  35. package/components/atoms/JIcon.vue.js +14 -13
  36. package/components/atoms/JIcon.vue.js.map +1 -1
  37. package/components/atoms/JKbd.vue.cjs +1 -1
  38. package/components/atoms/JKbd.vue.cjs.map +1 -1
  39. package/components/atoms/JKbd.vue.js +13 -10
  40. package/components/atoms/JKbd.vue.js.map +1 -1
  41. package/components/atoms/JLabel.vue.cjs +1 -1
  42. package/components/atoms/JLabel.vue.cjs.map +1 -1
  43. package/components/atoms/JLabel.vue.js +4 -4
  44. package/components/atoms/JLabel.vue.js.map +1 -1
  45. package/components/atoms/JLink.vue.cjs +1 -1
  46. package/components/atoms/JLink.vue.cjs.map +1 -1
  47. package/components/atoms/JLink.vue.js +5 -5
  48. package/components/atoms/JLink.vue.js.map +1 -1
  49. package/components/atoms/JPreview.vue.cjs +1 -1
  50. package/components/atoms/JPreview.vue.js +2 -2
  51. package/components/atoms/JPreview.vue2.cjs +1 -1
  52. package/components/atoms/JPreview.vue2.cjs.map +1 -1
  53. package/components/atoms/JPreview.vue2.js +33 -20
  54. package/components/atoms/JPreview.vue2.js.map +1 -1
  55. package/components/atoms/JProgress.vue.cjs +1 -1
  56. package/components/atoms/JProgress.vue.cjs.map +1 -1
  57. package/components/atoms/JProgress.vue.js +15 -9
  58. package/components/atoms/JProgress.vue.js.map +1 -1
  59. package/components/atoms/JRadio.vue.cjs +1 -1
  60. package/components/atoms/JRadio.vue.cjs.map +1 -1
  61. package/components/atoms/JRadio.vue.js +1 -1
  62. package/components/atoms/JRadio.vue.js.map +1 -1
  63. package/components/atoms/JSearchCombo.vue.cjs +1 -1
  64. package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
  65. package/components/atoms/JSearchCombo.vue.js +38 -37
  66. package/components/atoms/JSearchCombo.vue.js.map +1 -1
  67. package/components/atoms/JSpinner.vue.cjs +1 -1
  68. package/components/atoms/JSpinner.vue.cjs.map +1 -1
  69. package/components/atoms/JSpinner.vue.js +8 -7
  70. package/components/atoms/JSpinner.vue.js.map +1 -1
  71. package/components/atoms/JSplitter.vue.cjs +1 -1
  72. package/components/atoms/JSplitter.vue.cjs.map +1 -1
  73. package/components/atoms/JSplitter.vue.js +32 -27
  74. package/components/atoms/JSplitter.vue.js.map +1 -1
  75. package/components/atoms/JTooltip.vue.cjs +1 -1
  76. package/components/atoms/JTooltip.vue.cjs.map +1 -1
  77. package/components/atoms/JTooltip.vue.js +18 -15
  78. package/components/atoms/JTooltip.vue.js.map +1 -1
  79. package/components/examples/ExampleCrudPage.vue.cjs +2 -0
  80. package/components/examples/ExampleCrudPage.vue.cjs.map +1 -0
  81. package/components/examples/ExampleCrudPage.vue.js +358 -0
  82. package/components/examples/ExampleCrudPage.vue.js.map +1 -0
  83. package/components/examples/ExampleCrudPage.vue2.cjs +2 -0
  84. package/components/examples/ExampleCrudPage.vue2.cjs.map +1 -0
  85. package/components/examples/ExampleCrudPage.vue2.js +5 -0
  86. package/components/examples/ExampleCrudPage.vue2.js.map +1 -0
  87. package/components/examples/ExampleTabMappingPage.vue.cjs +2 -0
  88. package/components/examples/ExampleTabMappingPage.vue.cjs.map +1 -0
  89. package/components/examples/ExampleTabMappingPage.vue.js +522 -0
  90. package/components/examples/ExampleTabMappingPage.vue.js.map +1 -0
  91. package/components/examples/ExampleTabMappingPage.vue2.cjs +2 -0
  92. package/components/examples/ExampleTabMappingPage.vue2.cjs.map +1 -0
  93. package/components/examples/ExampleTabMappingPage.vue2.js +5 -0
  94. package/components/examples/ExampleTabMappingPage.vue2.js.map +1 -0
  95. package/components/molecules/JBreadcrumb.vue.cjs +1 -1
  96. package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
  97. package/components/molecules/JBreadcrumb.vue.js +3 -3
  98. package/components/molecules/JBreadcrumb.vue.js.map +1 -1
  99. package/components/molecules/JFormField.vue.cjs +1 -1
  100. package/components/molecules/JFormField.vue.cjs.map +1 -1
  101. package/components/molecules/JFormField.vue.js +26 -24
  102. package/components/molecules/JFormField.vue.js.map +1 -1
  103. package/components/molecules/JTabs.vue.cjs +1 -1
  104. package/components/molecules/JTabs.vue.js +1 -1
  105. package/components/molecules/JTabs.vue2.cjs +1 -1
  106. package/components/molecules/JTabs.vue2.cjs.map +1 -1
  107. package/components/molecules/JTabs.vue2.js +7 -7
  108. package/components/molecules/JTabs.vue2.js.map +1 -1
  109. package/components/molecules/JTitlebar.vue.cjs +1 -1
  110. package/components/molecules/JTitlebar.vue.cjs.map +1 -1
  111. package/components/molecules/JTitlebar.vue.js +35 -36
  112. package/components/molecules/JTitlebar.vue.js.map +1 -1
  113. package/components/organisms/JFilterBar.vue.cjs +1 -1
  114. package/components/organisms/JFilterBar.vue.cjs.map +1 -1
  115. package/components/organisms/JFilterBar.vue.js +5 -5
  116. package/components/organisms/JFilterBar.vue.js.map +1 -1
  117. package/components/organisms/JHeader.vue.cjs +1 -1
  118. package/components/organisms/JHeader.vue.cjs.map +1 -1
  119. package/components/organisms/JHeader.vue.js +25 -23
  120. package/components/organisms/JHeader.vue.js.map +1 -1
  121. package/components/organisms/JModal.vue.cjs +1 -1
  122. package/components/organisms/JModal.vue.cjs.map +1 -1
  123. package/components/organisms/JModal.vue.js +30 -27
  124. package/components/organisms/JModal.vue.js.map +1 -1
  125. package/components/organisms/JSidebarAdvanced.vue.cjs +1 -1
  126. package/components/organisms/JSidebarAdvanced.vue.js +7 -7
  127. package/components/organisms/JSidebarAdvanced.vue2.cjs +1 -1
  128. package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -1
  129. package/components/organisms/JSidebarAdvanced.vue2.js +40 -40
  130. package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -1
  131. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs +1 -1
  132. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs.map +1 -1
  133. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js +83 -63
  134. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js.map +1 -1
  135. package/components/organisms/JSidebarSimple.vue.cjs +1 -1
  136. package/components/organisms/JSidebarSimple.vue.js +2 -2
  137. package/components/organisms/JSidebarSimple.vue2.cjs +1 -1
  138. package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -1
  139. package/components/organisms/JSidebarSimple.vue2.js +2 -2
  140. package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
  141. package/components/shadcn/AccordionTrigger.vue.cjs +1 -1
  142. package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
  143. package/components/shadcn/AccordionTrigger.vue.js +3 -3
  144. package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
  145. package/components/shadcn/CardContent.vue.cjs +1 -1
  146. package/components/shadcn/CardContent.vue.cjs.map +1 -1
  147. package/components/shadcn/CardContent.vue.js +1 -1
  148. package/components/shadcn/CardContent.vue.js.map +1 -1
  149. package/components/shadcn/CardDescription.vue.cjs +1 -1
  150. package/components/shadcn/CardDescription.vue.cjs.map +1 -1
  151. package/components/shadcn/CardDescription.vue.js +1 -1
  152. package/components/shadcn/CardDescription.vue.js.map +1 -1
  153. package/components/shadcn/CardFooter.vue.cjs +1 -1
  154. package/components/shadcn/CardFooter.vue.cjs.map +1 -1
  155. package/components/shadcn/CardFooter.vue.js +7 -7
  156. package/components/shadcn/CardFooter.vue.js.map +1 -1
  157. package/components/shadcn/CardHeader.vue.cjs +1 -1
  158. package/components/shadcn/CardHeader.vue.cjs.map +1 -1
  159. package/components/shadcn/CardHeader.vue.js +8 -8
  160. package/components/shadcn/CardHeader.vue.js.map +1 -1
  161. package/components/shadcn/CardTitle.vue.cjs +1 -1
  162. package/components/shadcn/CardTitle.vue.cjs.map +1 -1
  163. package/components/shadcn/CardTitle.vue.js +5 -5
  164. package/components/shadcn/CardTitle.vue.js.map +1 -1
  165. package/components/shadcn/Input.vue.cjs +1 -1
  166. package/components/shadcn/Input.vue.cjs.map +1 -1
  167. package/components/shadcn/Input.vue.js +1 -1
  168. package/components/shadcn/Input.vue.js.map +1 -1
  169. package/components/shadcn/SelectTrigger.vue.cjs +1 -1
  170. package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
  171. package/components/shadcn/SelectTrigger.vue.js +2 -2
  172. package/components/shadcn/SelectTrigger.vue.js.map +1 -1
  173. package/components/shadcn/Switch.vue.cjs +1 -1
  174. package/components/shadcn/Switch.vue.cjs.map +1 -1
  175. package/components/shadcn/Switch.vue.js +2 -2
  176. package/components/shadcn/Switch.vue.js.map +1 -1
  177. package/components/shadcn/TabsList.vue.cjs +1 -1
  178. package/components/shadcn/TabsList.vue.cjs.map +1 -1
  179. package/components/shadcn/TabsList.vue.js +1 -1
  180. package/components/shadcn/TabsList.vue.js.map +1 -1
  181. package/components/shadcn/TabsTrigger.vue.cjs +1 -1
  182. package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
  183. package/components/shadcn/TabsTrigger.vue.js +4 -4
  184. package/components/shadcn/TabsTrigger.vue.js.map +1 -1
  185. package/components/shadcn/Textarea.vue.cjs +1 -1
  186. package/components/shadcn/Textarea.vue.cjs.map +1 -1
  187. package/components/shadcn/Textarea.vue.js +2 -2
  188. package/components/shadcn/Textarea.vue.js.map +1 -1
  189. package/components/shadcn/index.cjs +1 -1
  190. package/components/shadcn/index.cjs.map +1 -1
  191. package/components/shadcn/index.js +8 -7
  192. package/components/shadcn/index.js.map +1 -1
  193. package/index.cjs +1 -1
  194. package/index.js +76 -72
  195. package/package.json +1 -1
  196. package/types/index.d.ts +742 -15
  197. package/assets/jwms-portal-frontend-DntSIcYt.css +0 -1
@@ -0,0 +1,522 @@
1
+ import { defineComponent as oe, ref as r, computed as I, createElementBlock as te, openBlock as R, createVNode as a, unref as t, withCtx as i, createElementVNode as s, createTextVNode as d, createBlock as ae, createCommentVNode as ie } from "vue";
2
+ import b 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
+ import se from "../molecules/JTabs.vue.js";
11
+ /* empty css */
12
+ /* empty css */
13
+ import re from "../molecules/JCard.vue.js";
14
+ import u from "../atoms/JButton.vue.js";
15
+ import "@internationalized/date";
16
+ import "md-editor-v3";
17
+ /* empty css */
18
+ /* empty css */
19
+ import "../shadcn/badge-variants.js";
20
+ /* empty css */
21
+ import "../shadcn/avatar-variants.js";
22
+ import "dompurify";
23
+ /* empty css */
24
+ import y from "../atoms/JGrid.vue.js";
25
+ import A from "../atoms/JSplitter.vue.js";
26
+ import "vue-sonner";
27
+ import ne from "../molecules/JTitlebar.vue.js";
28
+ /* empty css */
29
+ /* empty css */
30
+ import z from "../organisms/JFilterBar.vue.js";
31
+ import "vue-router";
32
+ /* empty css */
33
+ /* empty css */
34
+ const me = { class: "flex flex-col h-full gap-2 bg-background text-foreground" }, de = { 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" }, pe = { class: "h-full overflow-auto bg-background" }, ce = { class: "h-full overflow-y-auto border-l bg-muted/30" }, fe = { class: "grid grid-cols-1 md:grid-cols-2 gap-2 mt-2" }, ve = { class: "grid grid-cols-1 md:grid-cols-2 gap-2 mt-2" }, be = { class: "flex justify-end gap-2" }, ge = { class: "flex flex-col h-full gap-2 p-2" }, ye = { class: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-2" }, we = { class: "h-full overflow-auto bg-background" }, ke = { class: "h-full flex gap-2 overflow-hidden items-stretch p-2 bg-background" }, Ce = { class: "flex-1 flex flex-col overflow-hidden" }, xe = { class: "flex-1 overflow-auto bg-background" }, Ne = { class: "flex flex-col justify-center gap-2 px-2" }, Ve = { class: "flex-1 flex flex-col overflow-hidden" }, _e = { class: "flex-1 overflow-auto bg-background" }, sl = /* @__PURE__ */ oe({
35
+ __name: "ExampleTabMappingPage",
36
+ setup(De, { expose: G }) {
37
+ const w = r("master"), U = [
38
+ { id: "master", label: "회원사 기본정보" },
39
+ { id: "mapping-customer", label: "고객사 매핑" }
40
+ ];
41
+ function $(l) {
42
+ console.log("탭 변경:", l);
43
+ }
44
+ const T = [
45
+ { value: "Y", label: "Y:활성" },
46
+ { value: "N", label: "N:비활성" }
47
+ ], k = r(!1), p = r({
48
+ isActive: "",
49
+ keyword: ""
50
+ }), Y = {
51
+ isActive: {
52
+ label: "활성여부",
53
+ displayValue: (l) => l === "Y" ? "Y:활성" : l === "N" ? "N:비활성" : ""
54
+ },
55
+ keyword: {
56
+ label: "검색어"
57
+ }
58
+ }, C = r([
59
+ { memberId: "M001", memberName: "제이솔루션", isActive: "Y" },
60
+ { memberId: "M002", memberName: "ABC물류", isActive: "Y" },
61
+ { memberId: "M003", memberName: "XYZ유통", isActive: "N" }
62
+ ]), F = r([
63
+ {
64
+ field: "memberId",
65
+ headerName: "회원사코드",
66
+ width: 150,
67
+ enableValue: !0
68
+ // 집계 가능 (count)
69
+ },
70
+ {
71
+ field: "memberName",
72
+ headerName: "회원사명",
73
+ flex: 1,
74
+ enableValue: !0
75
+ // 집계 가능 (count)
76
+ },
77
+ {
78
+ field: "isActive",
79
+ headerName: "활성",
80
+ width: 100,
81
+ cellRenderer: (l) => l.value === "Y" ? "✓" : "",
82
+ enableRowGroup: !0,
83
+ // Row Group으로 사용 가능
84
+ enablePivot: !0
85
+ // Pivot Column으로 사용 가능
86
+ }
87
+ ]), S = [
88
+ {
89
+ icon: "pencil",
90
+ label: "수정",
91
+ tooltip: "편집",
92
+ onClick: (l) => {
93
+ f.value = !1, n.value = {
94
+ memberId: l.memberId,
95
+ memberName: l.memberName,
96
+ isActive: l.isActive
97
+ };
98
+ }
99
+ },
100
+ {
101
+ icon: "trash2",
102
+ label: "삭제",
103
+ tooltip: "삭제",
104
+ styletype: "danger",
105
+ onClick: (l) => {
106
+ confirm(`${l.memberName}을(를) 삭제하시겠습니까?`) && (console.log("회원사 삭제:", l.memberId), alert(`삭제되었습니다: ${l.memberName}`));
107
+ }
108
+ }
109
+ ], x = r(), f = r(!1), n = r({
110
+ memberId: "",
111
+ memberName: "",
112
+ isActive: "Y"
113
+ });
114
+ function B(l) {
115
+ f.value = !1, n.value = {
116
+ memberId: l.data.memberId,
117
+ memberName: l.data.memberName,
118
+ isActive: l.data.isActive
119
+ };
120
+ }
121
+ function P() {
122
+ f.value = !0, n.value = {
123
+ memberId: "",
124
+ memberName: "",
125
+ isActive: "Y"
126
+ };
127
+ }
128
+ function E() {
129
+ console.log("회원사 저장:", n.value), alert(`저장되었습니다: ${n.value.memberName}`);
130
+ }
131
+ function j() {
132
+ confirm(`${n.value.memberName}을(를) 삭제하시겠습니까?`) && (console.log("회원사 삭제:", n.value.memberId), alert(`삭제되었습니다: ${n.value.memberName}`));
133
+ }
134
+ function H() {
135
+ p.value = {
136
+ isActive: "",
137
+ keyword: ""
138
+ };
139
+ }
140
+ function J() {
141
+ console.log("회원사 조회:", p.value);
142
+ }
143
+ function W() {
144
+ alert("회원사 관리 페이지 도움말");
145
+ }
146
+ const N = r(!1), v = r({
147
+ keyword: ""
148
+ }), K = {
149
+ keyword: {
150
+ label: "검색어"
151
+ }
152
+ }, V = r(), _ = r(), D = r(), L = r([
153
+ { field: "memberId", headerName: "회원사코드", width: 150 },
154
+ { field: "memberName", headerName: "회원사명", flex: 1 }
155
+ ]), m = r(""), c = r({
156
+ M001: ["C001", "C002"],
157
+ // 제이솔루션에 매핑된 고객사
158
+ M002: ["C003"],
159
+ // ABC물류에 매핑된 고객사
160
+ M003: []
161
+ // XYZ유통에 매핑된 고객사 없음
162
+ }), h = [
163
+ { code: "C001", name: "고객A" },
164
+ { code: "C002", name: "고객B" },
165
+ { code: "C003", name: "고객C" },
166
+ { code: "C004", name: "고객D" },
167
+ { code: "C005", name: "고객E" }
168
+ ], M = r([
169
+ { field: "code", headerName: "코드", width: 120 },
170
+ { field: "name", headerName: "이름", flex: 1 }
171
+ ]), O = I(() => {
172
+ if (!m.value) return [];
173
+ const l = c.value[m.value] || [];
174
+ return h.filter((e) => !l.includes(e.code));
175
+ }), X = I(() => {
176
+ if (!m.value) return [];
177
+ const l = c.value[m.value] || [];
178
+ return h.filter((e) => l.includes(e.code));
179
+ });
180
+ function Z(l) {
181
+ m.value = l.data.memberId, console.log("선택된 회원사:", l.data.memberName);
182
+ }
183
+ function q() {
184
+ if (!m.value) {
185
+ alert("회원사를 먼저 선택해주세요.");
186
+ return;
187
+ }
188
+ const l = _.value?.getSelectedRows() || [];
189
+ if (l.length === 0) {
190
+ alert("매핑할 고객사를 선택해주세요.");
191
+ return;
192
+ }
193
+ const e = l.map((g) => g.code), o = m.value;
194
+ c.value[o] || (c.value[o] = []), c.value[o].push(...e), console.log("매핑:", e);
195
+ }
196
+ function Q() {
197
+ if (!m.value) {
198
+ alert("회원사를 먼저 선택해주세요.");
199
+ return;
200
+ }
201
+ const l = D.value?.getSelectedRows() || [];
202
+ if (l.length === 0) {
203
+ alert("해제할 고객사를 선택해주세요.");
204
+ return;
205
+ }
206
+ const e = l.map((g) => g.code), o = m.value;
207
+ c.value[o] = (c.value[o] || []).filter(
208
+ (g) => !e.includes(g)
209
+ ), console.log("해제:", e);
210
+ }
211
+ function ee() {
212
+ v.value = {
213
+ keyword: ""
214
+ };
215
+ }
216
+ function le() {
217
+ console.log("매핑 조회:", v.value);
218
+ }
219
+ return G({ masterGridRef: x, mappingMasterGridRef: V }), (l, e) => (R(), te("div", me, [
220
+ a(t(ne), {
221
+ icon: "users",
222
+ title: "회원사 관리",
223
+ description: "회원사 정보 및 고객사 매핑을 관리합니다",
224
+ showHelp: !0,
225
+ onHelp: W
226
+ }),
227
+ a(t(se), {
228
+ activeTabId: w.value,
229
+ "onUpdate:activeTabId": e[10] || (e[10] = (o) => w.value = o),
230
+ tabs: U,
231
+ onTabChange: $
232
+ }, {
233
+ "content-master": i(() => [
234
+ s("div", de, [
235
+ a(t(z), {
236
+ collapsed: k.value,
237
+ "onUpdate:collapsed": e[2] || (e[2] = (o) => k.value = o),
238
+ filterValues: p.value,
239
+ "onUpdate:filterValues": e[3] || (e[3] = (o) => p.value = o),
240
+ filterDisplay: Y,
241
+ collapsible: !0,
242
+ title: "회원사 목록"
243
+ }, {
244
+ actions: i(() => [
245
+ a(t(u), {
246
+ size: "sm",
247
+ variant: "outline",
248
+ onClick: H
249
+ }, {
250
+ default: i(() => [...e[11] || (e[11] = [
251
+ d("초기화", -1)
252
+ ])]),
253
+ _: 1
254
+ }),
255
+ a(t(u), {
256
+ size: "sm",
257
+ styletype: "primary",
258
+ onClick: J
259
+ }, {
260
+ default: i(() => [...e[12] || (e[12] = [
261
+ d("조회", -1)
262
+ ])]),
263
+ _: 1
264
+ }),
265
+ a(t(u), {
266
+ size: "sm",
267
+ styletype: "primary",
268
+ onClick: P
269
+ }, {
270
+ default: i(() => [...e[13] || (e[13] = [
271
+ d("신규", -1)
272
+ ])]),
273
+ _: 1
274
+ })
275
+ ]),
276
+ filters: i(() => [
277
+ s("div", ue, [
278
+ a(t(b), {
279
+ type: "combo",
280
+ label: "활성여부",
281
+ modelValue: p.value.isActive,
282
+ "onUpdate:modelValue": e[0] || (e[0] = (o) => p.value.isActive = o),
283
+ options: T,
284
+ orientation: "horizontal",
285
+ labelWidth: "30%"
286
+ }, null, 8, ["modelValue"]),
287
+ a(t(b), {
288
+ type: "input",
289
+ label: "검색어",
290
+ modelValue: p.value.keyword,
291
+ "onUpdate:modelValue": e[1] || (e[1] = (o) => p.value.keyword = o),
292
+ orientation: "horizontal",
293
+ labelWidth: "30%"
294
+ }, null, 8, ["modelValue"])
295
+ ])
296
+ ]),
297
+ _: 1
298
+ }, 8, ["collapsed", "filterValues"]),
299
+ a(t(A), {
300
+ direction: "horizontal",
301
+ "default-size": 60,
302
+ "min-size": 30,
303
+ "second-min-size": 20,
304
+ "second-max-size": 60,
305
+ gap: 2,
306
+ class: "flex-1"
307
+ }, {
308
+ left: i(() => [
309
+ s("div", pe, [
310
+ a(t(y), {
311
+ ref_key: "masterGridRef",
312
+ ref: x,
313
+ columnDefs: F.value,
314
+ rowData: C.value,
315
+ "action-buttons": S,
316
+ enableGrouping: !0,
317
+ enablePivot: !0,
318
+ enableColumnsToolPanel: !0,
319
+ rowGroupPanelShow: "always",
320
+ pivotPanelShow: "always",
321
+ groupDefaultExpanded: 1,
322
+ compactFooter: !0,
323
+ onRowClicked: B
324
+ }, null, 8, ["columnDefs", "rowData"])
325
+ ])
326
+ ]),
327
+ right: i(() => [
328
+ s("div", ce, [
329
+ a(t(re), {
330
+ class: "h-full",
331
+ title: f.value ? "신규 등록" : "상세 정보"
332
+ }, {
333
+ footer: i(() => [
334
+ s("div", be, [
335
+ a(t(u), {
336
+ styletype: "primary",
337
+ size: "sm",
338
+ onClick: E
339
+ }, {
340
+ default: i(() => [...e[14] || (e[14] = [
341
+ d("저장", -1)
342
+ ])]),
343
+ _: 1
344
+ }),
345
+ f.value ? ie("", !0) : (R(), ae(t(u), {
346
+ key: 0,
347
+ variant: "outline",
348
+ size: "sm",
349
+ onClick: j
350
+ }, {
351
+ default: i(() => [...e[15] || (e[15] = [
352
+ d("삭제", -1)
353
+ ])]),
354
+ _: 1
355
+ }))
356
+ ])
357
+ ]),
358
+ default: i(() => [
359
+ s("div", fe, [
360
+ a(t(b), {
361
+ type: "input",
362
+ label: "회원사코드",
363
+ modelValue: n.value.memberId,
364
+ "onUpdate:modelValue": e[4] || (e[4] = (o) => n.value.memberId = o),
365
+ readonly: !f.value,
366
+ placeholder: "회원사 코드"
367
+ }, null, 8, ["modelValue", "readonly"]),
368
+ a(t(b), {
369
+ type: "input",
370
+ label: "회원사명",
371
+ modelValue: n.value.memberName,
372
+ "onUpdate:modelValue": e[5] || (e[5] = (o) => n.value.memberName = o),
373
+ placeholder: "회원사 이름"
374
+ }, null, 8, ["modelValue"])
375
+ ]),
376
+ s("div", ve, [
377
+ a(t(b), {
378
+ type: "checkbox",
379
+ label: "활성여부",
380
+ modelValue: n.value.isActive,
381
+ "onUpdate:modelValue": e[6] || (e[6] = (o) => n.value.isActive = o),
382
+ inlineLabel: "활성"
383
+ }, null, 8, ["modelValue"])
384
+ ])
385
+ ]),
386
+ _: 1
387
+ }, 8, ["title"])
388
+ ])
389
+ ]),
390
+ _: 1
391
+ })
392
+ ])
393
+ ]),
394
+ "content-mapping-customer": i(() => [
395
+ s("div", ge, [
396
+ a(t(z), {
397
+ collapsed: N.value,
398
+ "onUpdate:collapsed": e[8] || (e[8] = (o) => N.value = o),
399
+ filterValues: v.value,
400
+ "onUpdate:filterValues": e[9] || (e[9] = (o) => v.value = o),
401
+ filterDisplay: K,
402
+ collapsible: !0,
403
+ title: "회원사별 고객사 매핑"
404
+ }, {
405
+ actions: i(() => [
406
+ a(t(u), {
407
+ size: "sm",
408
+ variant: "outline",
409
+ onClick: ee
410
+ }, {
411
+ default: i(() => [...e[16] || (e[16] = [
412
+ d("초기화", -1)
413
+ ])]),
414
+ _: 1
415
+ }),
416
+ a(t(u), {
417
+ size: "sm",
418
+ styletype: "primary",
419
+ onClick: le
420
+ }, {
421
+ default: i(() => [...e[17] || (e[17] = [
422
+ d("조회", -1)
423
+ ])]),
424
+ _: 1
425
+ })
426
+ ]),
427
+ filters: i(() => [
428
+ s("div", ye, [
429
+ a(t(b), {
430
+ type: "input",
431
+ label: "검색어",
432
+ modelValue: v.value.keyword,
433
+ "onUpdate:modelValue": e[7] || (e[7] = (o) => v.value.keyword = o)
434
+ }, null, 8, ["modelValue"])
435
+ ])
436
+ ]),
437
+ _: 1
438
+ }, 8, ["collapsed", "filterValues"]),
439
+ a(t(A), {
440
+ direction: "vertical",
441
+ "default-size": 30,
442
+ "min-size": 20,
443
+ "second-min-size": 40,
444
+ gap: 2,
445
+ class: "flex-1"
446
+ }, {
447
+ top: i(() => [
448
+ s("div", we, [
449
+ a(t(y), {
450
+ ref_key: "mappingMasterGridRef",
451
+ ref: V,
452
+ columnDefs: L.value,
453
+ rowData: C.value,
454
+ onRowClicked: Z
455
+ }, null, 8, ["columnDefs", "rowData"])
456
+ ])
457
+ ]),
458
+ bottom: i(() => [
459
+ s("div", ke, [
460
+ s("div", Ce, [
461
+ e[18] || (e[18] = s("h4", { class: "text-sm font-semibold mb-2 px-2" }, "미매핑 고객사", -1)),
462
+ s("div", xe, [
463
+ a(t(y), {
464
+ ref_key: "unmappedGridRef",
465
+ ref: _,
466
+ columnDefs: M.value,
467
+ rowData: O.value,
468
+ pagination: !1,
469
+ checkbox: ""
470
+ }, null, 8, ["columnDefs", "rowData"])
471
+ ])
472
+ ]),
473
+ s("div", Ne, [
474
+ a(t(u), {
475
+ styletype: "primary",
476
+ size: "sm",
477
+ onClick: q
478
+ }, {
479
+ default: i(() => [...e[19] || (e[19] = [
480
+ d("매핑 ▶", -1)
481
+ ])]),
482
+ _: 1
483
+ }),
484
+ a(t(u), {
485
+ variant: "outline",
486
+ size: "sm",
487
+ onClick: Q
488
+ }, {
489
+ default: i(() => [...e[20] || (e[20] = [
490
+ d("◀ 해제", -1)
491
+ ])]),
492
+ _: 1
493
+ })
494
+ ]),
495
+ s("div", Ve, [
496
+ e[21] || (e[21] = s("h4", { class: "text-sm font-semibold mb-2 px-2" }, "매핑된 고객사", -1)),
497
+ s("div", _e, [
498
+ a(t(y), {
499
+ ref_key: "mappedGridRef",
500
+ ref: D,
501
+ columnDefs: M.value,
502
+ rowData: X.value,
503
+ pagination: !1,
504
+ checkbox: ""
505
+ }, null, 8, ["columnDefs", "rowData"])
506
+ ])
507
+ ])
508
+ ])
509
+ ]),
510
+ _: 1
511
+ })
512
+ ])
513
+ ]),
514
+ _: 1
515
+ }, 8, ["activeTabId"])
516
+ ]));
517
+ }
518
+ });
519
+ export {
520
+ sl as default
521
+ };
522
+ //# sourceMappingURL=ExampleTabMappingPage.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExampleTabMappingPage.vue.js","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":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./ExampleTabMappingPage.vue.cjs");exports.default=e.default;
2
+ //# sourceMappingURL=ExampleTabMappingPage.vue2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExampleTabMappingPage.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import f from "./ExampleTabMappingPage.vue.js";
2
+ export {
3
+ f as default
4
+ };
5
+ //# sourceMappingURL=ExampleTabMappingPage.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExampleTabMappingPage.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),c=require("../atoms/JIcon.vue.cjs"),k=require("../atoms/JLink.vue.cjs"),u=require("../../lib/utils.cjs"),C={class:"flex items-center gap-2 list-none p-0 m-0"},g={key:1},_=e.defineComponent({__name:"JBreadcrumb",props:{items:{},separator:{default:"/"},styletype:{default:"default"},class:{}},emits:["itemClick"],setup(o,{emit:p}){const r=o,d=p,i={default:{containerClass:"flex items-center gap-2 px-4 py-2",itemClass:"text-sm text-muted-foreground hover:text-foreground transition-colors",separatorClass:"text-muted-foreground/50 text-sm",lastItemClass:"text-foreground font-medium"},minimal:{containerClass:"flex items-center gap-1.5 px-2 py-1",itemClass:"text-xs text-muted-foreground hover:text-foreground transition-colors",separatorClass:"text-muted-foreground/40 text-xs",lastItemClass:"text-foreground font-medium"}},s=e.computed(()=>i[r.styletype]??i.default),f=(l,m)=>{l.onClick?.(),d("itemClick",l,m)},n=l=>l===r.items.length-1;return(l,m)=>(e.openBlock(),e.createElementBlock("nav",{class:e.normalizeClass(e.unref(u.cn)(s.value.containerClass,r.class)),"aria-label":"브레드크럼 네비게이션"},[e.createElementVNode("ol",C,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.items,(t,a)=>(e.openBlock(),e.createElementBlock("li",{key:a,class:"flex items-center gap-2"},[n(a)||!t.href&&!t.onClick?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(e.unref(u.cn)(s.value.itemClass,s.value.lastItemClass,n(a)&&"cursor-default"))},[t.icon?(e.openBlock(),e.createBlock(c.default,{key:0,name:t.icon,size:"sm",class:"mr-1"},null,8,["name"])):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(t.label),1)],2)):(e.openBlock(),e.createBlock(k.default,{key:1,href:t.href,class:e.normalizeClass(e.unref(u.cn)(s.value.itemClass)),onClick:B=>f(t,a)},{default:e.withCtx(()=>[t.icon?(e.openBlock(),e.createBlock(c.default,{key:0,name:t.icon,size:"sm",class:"mr-1"},null,8,["name"])):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(t.label),1)]),_:2},1032,["href","class","onClick"])),n(a)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:2,class:e.normalizeClass(s.value.separatorClass),"aria-hidden":"true"},[o.separator==="chevron"?(e.openBlock(),e.createBlock(c.default,{key:0,name:"chevronRight",size:"sm"})):(e.openBlock(),e.createElementBlock("span",g,e.toDisplayString(o.separator),1))],2))]))),128))])],2))}});exports.default=_;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),c=require("../atoms/JIcon.vue.cjs"),k=require("../atoms/JLink.vue.cjs"),u=require("../../lib/utils.cjs"),C={class:"flex items-center gap-2 list-none p-0 m-0"},g={key:1},x=e.defineComponent({__name:"JBreadcrumb",props:{items:{},separator:{default:"/"},styletype:{default:"default"},class:{}},emits:["itemClick"],setup(o,{emit:p}){const r=o,d=p,i={default:{containerClass:"flex items-center gap-2 px-4 py-1.5",itemClass:"text-xs text-muted-foreground hover:text-foreground transition-colors",separatorClass:"text-muted-foreground/50 text-xs",lastItemClass:"text-foreground font-medium"},minimal:{containerClass:"flex items-center gap-1.5 px-2 py-1",itemClass:"text-xs text-muted-foreground hover:text-foreground transition-colors",separatorClass:"text-muted-foreground/40 text-xs",lastItemClass:"text-foreground font-medium"}},s=e.computed(()=>i[r.styletype]??i.default),f=(l,m)=>{l.onClick?.(),d("itemClick",l,m)},n=l=>l===r.items.length-1;return(l,m)=>(e.openBlock(),e.createElementBlock("nav",{class:e.normalizeClass(e.unref(u.cn)(s.value.containerClass,r.class)),"aria-label":"브레드크럼 네비게이션"},[e.createElementVNode("ol",C,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.items,(t,a)=>(e.openBlock(),e.createElementBlock("li",{key:a,class:"flex items-center gap-2"},[n(a)||!t.href&&!t.onClick?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(e.unref(u.cn)(s.value.itemClass,s.value.lastItemClass,n(a)&&"cursor-default"))},[t.icon?(e.openBlock(),e.createBlock(c.default,{key:0,name:t.icon,size:"sm",class:"mr-1"},null,8,["name"])):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(t.label),1)],2)):(e.openBlock(),e.createBlock(k.default,{key:1,href:t.href,class:e.normalizeClass(e.unref(u.cn)(s.value.itemClass)),onClick:_=>f(t,a)},{default:e.withCtx(()=>[t.icon?(e.openBlock(),e.createBlock(c.default,{key:0,name:t.icon,size:"sm",class:"mr-1"},null,8,["name"])):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(t.label),1)]),_:2},1032,["href","class","onClick"])),n(a)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:2,class:e.normalizeClass(s.value.separatorClass),"aria-hidden":"true"},[o.separator==="chevron"?(e.openBlock(),e.createBlock(c.default,{key:0,name:"chevronRight",size:"sm"})):(e.openBlock(),e.createElementBlock("span",g,e.toDisplayString(o.separator),1))],2))]))),128))])],2))}});exports.default=x;
2
2
  //# sourceMappingURL=JBreadcrumb.vue.cjs.map