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>