Appearance
Modal
VmModal
모달은 팝업 프로그램을 화면에 팝업 형태로 열고 닫는 처리를 한다.
<template>에서 VmModal의 내부에 팝업 프로그램 코드를 작성한다.VmModal에는 ref="vmModalRef"로 template-ref 변수를 선언한다.
<script>에서 const vmModalRef = ref<InstanceType<typeof VmModal>>()로 선언한다.
팝업을 열고 닫는 함수 open과 close를 작성한다.
팝업 프로그램
팝업의 공통사항
팝업 프로그램의 파일명은 반드시
Popup.vue로 끝나도록 한다.팝업은 최상단 헤더에 왼쪽에는 팝업 타이틀, 오른쪽에는 닫기 버튼(X 아이콘)이 배치된다.
팝업의 최하단 푸터에 조회, 저장 등의 기능 버튼을 배치한다.
PopupSetting- 모든 팝업 프로그램은 타이틀,
VmPopup에서 사용할 값, 크기 등의 설정을 한다. <script setup>에는 팝업 프로그램 로직을 작성하고PopupSetting은 새로운<script lang="ts">에 작성하고defineComponent에 설정한다.setupDynamicComponent.ts에서 PopupSetting에 컴포넌트이름을popupName으로 입력하고usePopupSettingMap()으로 등록한다.VmPopup에서usePopupSettingMap()으로 꺼내서 해당 팝업의 조회기능을 처리한다.
- 모든 팝업 프로그램은 타이틀,
사이즈
- 팝업의 가로와 세로 사이즈는 모든 내용을 스크롤 없이 표시할 수 있도록 한다.
- 가로 사이즈는 기본값이
auto로VmModal내부의 내용에 맞춰서 자동으로 맞춰지도록 한다. - 세로 사이즈는 기본값이
90%로 그리드가 있으면 최대 높이로 늘어 나도록 한다. 그리드가 없고 세로 사이즈가 고정적이면PopupSetting에height를 설정한다.
팝업 사용
- 팝업 작성 순서
template
- 팝업 프로그램의 내용을
VmModal컴포넌트로 감싼다.ref="vmModalRef"를 설정한다. - 팝업의 상단 좌측에 위치할 제목을
#header-title의slot으로 작성한다. - 팝업의 하단 우측에 위치할 버튼을
#footer의slot으로 작성한다.
- 팝업 프로그램의 내용을
script
VmModal에 사용할 ref 변수는 이름이vmModalRef으로 한다.ref()의 타입은InstanceType<typeof VmModal>으로 한다.- 팝업 프로그램의
open함수에서는VmModal의open함수를 호출하면서 반환한다. - 팝업 프로그램의 값을
적용시키는 함수에서VmModal의close함수에 결과를 파라미터로하여 호출한다. </script>바로위에 타입 선언 없이defineExpose({open})만 추가한다.
SamplePopup.vue
<template>
<VmModal ref="vmModalRef">
<template #header-title>{{ popupSetting.title }}</template>
<template #footer>
<VmButtonQuery @click="query">조회</VmButtonQuery>
<VmButton @click="apply">확인</VmButton>
</template>
팝업 프로그램
</VmModal>
</template>
<!--
<script setup> can be used alongside normal <script>.
A normal <script> may be needed in cases where we need to:
* Declare options that cannot be expressed in <script setup>,
for example inheritAttrs or custom options enabled via plugins.
* Declaring named exports.
* Run side effects or create objects that should only execute once.
-->
<script lang="ts">
// @ts-ignore
import { defineComponent } from 'vue'
// 현재 파일과 VmPopup에서 사용할 수 있게 팝업세팅 설정
const popupSetting: PopupSetting = {
title: '샘플_사용자조회',
url: '/userSearchPopupSample/query',
code: 'userId',
name: 'userNm',
width: '800px'
}
export default defineComponent({
popupSetting,
})
</script>
<script setup lang="ts">
import { VmModal } from '@/core'
const vmModalRef = ref<InstanceType<typeof VmModal>>()
function open(param?: any) {
return vmModalRef.value?.open()
}
defineExpose({open})
</script>
팝업 프로그램의 사용
공통팝업 화면에 코드와 이름이 노출되는 팝업은 VmPopup을 이용한다.
해당 프로그램에서만 사용되는 팝업은화면에 노출되지 않는 팝업은template최하단에VmModalComp로 작성 해두고script에서open한다. popupOpen함수는async/await패턴으로 작성해서 팝업이 닫히면 결과 처리를 하도록 한다.
<template>
<VmModalComp SamplePopup ref="samplePopupRef"/>
</template>
<script>
import { VmModalComp } from '@/core'
const samplePopupRef = ref<InstanceType<typeof VmModalComp>>()
async function popupOpen() {
const popupParam = {
}
const popupResult = await samplePopupRef.value?.open(popupParam)
console.log(popupResult)
}
</script>