4.3 KiB
4.3 KiB
bio_frontend
NUXT 3 (VUE 3) 환경
- data-list 와 dataList는 동일 변수명으로 인식
- compnenets 아래의 .vue는 자동 인식(template 내부에서만, 별도 script에서 필요시 선언 필요)
공통 페이지 구성
<template>
<ContentsWrapper> <!-- wrapper(title) 추가 -->
<template #actions> <!--title 우측 버튼 설정-->
<button>추가</button>
<button>저장</button>
</template>
<!--메인 콘텐츠 영역-->
<input type="text" >
<!--메인 콘텐츠 영역-->
</ContentsWrapper>
</template>
<script setup lang="ts">
// title(wrapper) 설정
definePageMeta({
title: '리소스 관리'
})
</script>
Toast(Tui) Grid 사용법
한글 설명: https://github.com/nhn/tui.grid/blob/master/packages/toast-ui.grid/docs/v4.0-migration-guide-kor.md
기본 설정
<template>
<button @click="onAddClick">추가</button>
<button @click="onUpdateClick">저장</button>
<!-- toast Grid 필수값 ref, data, columns(header) -->
<ToastGrid
ref="grid1Ref"
:data="data"
:columns="colDefs"
/>
</template>
<script setup lang="ts">
// 컬럼 항목 리스트
// composables폴더 아래에 생성
// 위 한글 성명 참조하여 생성
import {colDefs} from '../../composables/grids/resourceGrid'
// 데이터 항목
const data = [{}]
// ref 설정
// api : https://nhn.github.io/tui.grid/latest/Grid
const grid1Ref = ref();
onMounted(async () => {
await nextTick() // DOM 및 컴포넌트 렌더링 완료 대기
grid1Ref.value?.api()?.setBodyHeight('700') // ref api를 통해서 높이 지정
})
let no = 1;
// 항목 추가 버튼
function onAddClick() {
grid1Ref.value?.api()?.appendRow({'no': no}); // ref api를 통해서 항목 추가
++no;
}
// 저장 버튼
function onUpdateClick() {
//grid1Ref.value?.clearGrid();
const chageList = grid1Ref.value?.api()?.getModifiedRows(); // ref api를 통해서 변경점 읽어오기
console.log(changeList);
}
</script>
tree data
<template>
<ToastGrid
ref="grid1Ref"
:data="data"
:columns="columns"
:treeColumnOptions="treeColumnOptions"
/>
</template>
<script setup lang="ts">
// data 설정시 _children: 항목으로 구성
const data = [
{
id: 549731,
name: 'Beautiful Lies',
price: 10000,
downloadCount: 1000,
listenCount: 5000,
_attributes: {
expanded: true,
},
_children: [
{
id: 491379,
name: 'Chaos And The Calm',
artist: 'James Bay',
grade: '5',
price: 12000,
downloadCount: 1000,
listenCount: 5000
},
{
id: 450720,
name: "I'm Not The Only One",
artist: 'Sam Smith',
release: '2014.09.15',
type: 'Single',
grade: '4',
price: 8000,
downloadCount: 1000,
listenCount: 5000,
_attributes: {
expanded: true,
},
_children: [
{
id: 587871,
name: 'This Is Acting',
artist: 'Sia',
release: '2016.10.22',
type: 'EP',
typeCode: '2',
genre: 'Pop',
_attributes: {
expanded: true,
},
_children: [
{
id: 490500,
name: 'Blue Skies',
release: '2015.03.18',
artist: 'Lenka',
type: 'Single',
typeCode: '3',
},
{
id: 317659,
name: "I Won't Give Up",
artist: 'Jason Mraz',
release: '2012.01.03',
type: 'Single',
typeCode: '3',
},
],
},
],
},
],
},
{
id: 436461,
name: 'X',
artist: 'Ed Sheeran',
release: '2014.06.24',
type: 'Deluxe',
typeCode: '1',
},
];
const columns = [
{ header: 'Name', name: 'name', width: 300 },
{ header: 'Artist', name: 'artist' },
{ header: 'Type', name: 'type' },
{ header: 'Release', name: 'release' },
{ header: 'Genre', name: 'genre' },
];
// tree column 설정
const treeColumnOptions = { name: 'name', useCascadingCheckbox: true };
const grid1Ref = ref();
</script>