# bio_frontend ## NUXT 3 (VUE 3) 환경 - data-list 와 dataList는 동일 변수명으로 인식 - compnenets 아래의 .vue는 자동 인식(template 내부에서만, 별도 script에서 필요시 선언 필요) # 구성 요소 ## components 구성 ### 폴더 구조 ``` components/ ├── base/ // 기본 UI 요소 (접두사 없이 사용) │ ├── button/ │ │ ├── CommonButton.vue │ │ └── PermissionButton.vue │ ├── grid/ │ │ └── ToastGrid.vue │ ├── info/ │ │ └── PageDescription.vue │ ├── loading/ │ │ └── GlobalLoading.vue │ └── popup/ │ └── CommonPopup.vue ├── layout/ // 레이아웃 요소 (접두사 없이 사용) │ ├── navigation/ │ │ ├── AppHeader.vue │ │ ├── SubMenuBar.vue │ │ └── TabBar.vue │ └── wrapper/ │ ├── ContentsWrapper.vue │ └── PopupWrapper.vue └── domain/ // 도메인별 기능 컴포넌트 (@domain/ 접두사 사용) └── culture-graph/ ├── BatchGraph.vue ├── BatchTabs.vue └── CustomContextMenu.vue ``` ### 자동 임포트 설정 (nuxt.config.ts) ```typescript components: [ { path: "~/components/base", pathPrefix: false }, // @base/ 접두사 제거 { path: "~/components/layout", pathPrefix: false }, // @layout/ 접두사 제거 { path: "~/components/domain", pathPrefix: true }, // @domain/ 접두사 유지 ], ``` ### 컴포넌트 사용법 - **base/**, **layout/** 폴더의 컴포넌트\*\*: 접두사 없이 직접 사용 ```vue ``` - **domain/** 폴더의 컴포넌트: `@domain/` 접두사 사용 ```vue ``` ## page 구성 ``` pages // 단일 화면(비 탭 요소) |- popup // 팝업 요소 |- [tabId] // 탭 요소 |- admin // 관리자 페이지 ``` # page(페이지) 생성 요소 ## 공통 페이지 구성 ``` ``` ## Toast(Tui) Grid 사용법 한글 설명: https://github.com/nhn/tui.grid/blob/master/packages/toast-ui.grid/docs/v4.0-migration-guide-kor.md ### 기본 설정 ``` ``` ## tree data ``` ``` ## 팝업 구성 ``` ┌─────────────────────────────┐ │ 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 }} ×
```