# 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 }}
   × 
```