diff --git a/README.md b/README.md
index b7c180f..908fa49 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,25 @@
- compnenets 아래의 .vue는 자동 인식(template 내부에서만, 별도 script에서 필요시 선언 필요)
-## 공통 페이지 구성
+# 구성 요소
+## components 구성
+```
+components
+ |- base // 기본 요소(button, input, grid, popup)
+ |- layout // 레이아웃 요소(header, footer, sidebar, wrapper)
+ |- module // 특정 기능 단위(card, form, list)
+ |- pages // 특정 페이지 전용
+```
+## page 구성
+```
+pages // 단일 화면(비 탭 요소)
+|- [tabId] // 탭 요소
+ |- admin // 관리자 페이지
+```
+
+# page(페이지) 생성 요소
+## 공통 페이지 구성
```
@@ -27,6 +44,7 @@
```
+
## Toast(Tui) Grid 사용법
한글 설명: https://github.com/nhn/tui.grid/blob/master/packages/toast-ui.grid/docs/v4.0-migration-guide-kor.md
@@ -185,3 +203,97 @@ const treeColumnOptions = { name: 'name', useCascadingCheckbox: true };
const grid1Ref = ref();
```
+
+## 팝업 구성
+
+```
+┌─────────────────────────────┐
+│ customPopup.vue │
+│ ┌─────────────────────────┐ │
+│ │ poupWrapper.vue │ │
+│ │ ┌─────────────────────┐ │ │
+│ │ │ │ │ │
+│ │ └─────────────────────┘ │ │
+│ └─────────────────────────┘ │
+└─────────────────────────────┘
+
+
+customPopup.vue - 기본 빈 팝업
+poupWrapper.vue - top, middle, bottom으로 구성된 팝업 구조
+
+1. 구조에 따라 customPopup, poupWrapper 기반으로 팝업 생성(/pages/popup/*.vue)
+2. 사용할 페이지에서 생성한 팝업 추가
+```
+
+
+### 팝업 생성
+```
+// examplePopup.vue
+
+
+
+
+
+ 팝업 제목
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### 팝업 사용
+```
+
+
+
+
+
+```
+
+
+## 탭 구성
+```
+// layouts/default.vue
+// stores/tab.ts
+
+import { useTabsStore } from "../stores/tab";
+const tabsStore = useTabsStore();
+
+// 탭추가 (최대 10개)
+tabsStore.addTab();
+
+// 탭 갱신
+tabsStore.updateActiveTab({ label, to, componentName});
+
+// 탭 변경
+tabsStore.setActiveTab(key);
+
+// 탭 생성
+
+ {{ tab.label }}
+ ×
+
+```
\ No newline at end of file
diff --git a/components/AppButton.vue b/components/base/AppButton.vue
similarity index 100%
rename from components/AppButton.vue
rename to components/base/AppButton.vue
diff --git a/components/ToastGrid.vue b/components/base/ToastGrid.vue
similarity index 91%
rename from components/ToastGrid.vue
rename to components/base/ToastGrid.vue
index f53482f..11f3933 100644
--- a/components/ToastGrid.vue
+++ b/components/base/ToastGrid.vue
@@ -11,6 +11,8 @@ interface TreeColumnOptions {
const tuiGridRef = ref();
+const selectionUnit = "row"
+
const props = defineProps<{
data: OptRow[];
// editor: https://github.com/nhn/tui.grid/blob/master/packages/toast-ui.grid/docs/v4.0-migration-guide-kor.md
@@ -43,5 +45,6 @@ function clearGrid() {
:treeColumnOptions="props.treeColumnOptions"
:rowHeaders="props.rowHeaders"
:rowKey="props.rowKey"
+ :selectionUnit="selectionUnit"
/>
diff --git a/components/base/customPopup.vue b/components/base/customPopup.vue
new file mode 100644
index 0000000..5d3f600
--- /dev/null
+++ b/components/base/customPopup.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/components/AppHeader.vue b/components/layout/AppHeader.vue
similarity index 100%
rename from components/AppHeader.vue
rename to components/layout/AppHeader.vue
diff --git a/components/ContentsWrapper.vue b/components/layout/ContentsWrapper.vue
similarity index 100%
rename from components/ContentsWrapper.vue
rename to components/layout/ContentsWrapper.vue
diff --git a/components/layout/PopupWrapper.vue b/components/layout/PopupWrapper.vue
new file mode 100644
index 0000000..a67fdc5
--- /dev/null
+++ b/components/layout/PopupWrapper.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/composables/popupManager.ts b/composables/popupManager.ts
new file mode 100644
index 0000000..49149b0
--- /dev/null
+++ b/composables/popupManager.ts
@@ -0,0 +1,15 @@
+import { ref } from 'vue'
+
+let baseZIndex = 1000;
+
+++baseZIndex;
+
+const currentZ = ref(baseZIndex)
+
+export function usePopupZIndex() {
+ function nextZIndex() {
+ currentZ.value += 1
+ return currentZ.value
+ }
+ return { nextZIndex }
+}
\ No newline at end of file
diff --git a/layouts/default.vue b/layouts/default.vue
index cbe5228..9813f46 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -1,52 +1,95 @@
@@ -85,46 +118,41 @@ onBeforeUnmount(() => {
-
+
diff --git a/pages/[tabId]/sampleList.vue b/pages/[tabId]/sampleList.vue
new file mode 100644
index 0000000..c7b3179
--- /dev/null
+++ b/pages/[tabId]/sampleList.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/tui.vue b/pages/[tabId]/tui.vue
similarity index 94%
rename from pages/tui.vue
rename to pages/[tabId]/tui.vue
index d344eb2..0b1e8b8 100644
--- a/pages/tui.vue
+++ b/pages/[tabId]/tui.vue
@@ -1,5 +1,5 @@