[폴더, 파일 구조 정리]
This commit is contained in:
		
							
								
								
									
										78
									
								
								components/layout/wrapper/PopupWrapper.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								components/layout/wrapper/PopupWrapper.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <CommonPopup v-model:show="show">
 | 
			
		||||
    <div class="popup-content" :style="{ width, height }">
 | 
			
		||||
      <!-- Top -->
 | 
			
		||||
      <div class="popup-top">
 | 
			
		||||
        <slot name="top"></slot>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <!-- Middle -->
 | 
			
		||||
      <div class="popup-middle">
 | 
			
		||||
        <slot name="middle"></slot>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <!-- Bottom -->
 | 
			
		||||
      <div class="popup-bottom">
 | 
			
		||||
        <button class="popup-close" @click="show = false">닫기</button>
 | 
			
		||||
        <slot name="bottom"></slot>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </CommonPopup>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
defineProps<{
 | 
			
		||||
  width?: string;
 | 
			
		||||
  height?: string;
 | 
			
		||||
}>();
 | 
			
		||||
 | 
			
		||||
// defineModel + 기본값 지정
 | 
			
		||||
const show = defineModel("show", { type: Boolean, default: false });
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
.popup-content {
 | 
			
		||||
  background: white;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
  border-radius: 8px;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
.popup-top {
 | 
			
		||||
  padding: 10px 20px;
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
  background: #f0f0f0;
 | 
			
		||||
  border-bottom: 1px solid #ddd;
 | 
			
		||||
}
 | 
			
		||||
.popup-middle {
 | 
			
		||||
  flex: 1;
 | 
			
		||||
  padding: 20px;
 | 
			
		||||
  overflow-y: auto;
 | 
			
		||||
}
 | 
			
		||||
.popup-bottom {
 | 
			
		||||
  padding: 10px 20px;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: center; /* 중앙 정렬 */
 | 
			
		||||
  gap: 10px;
 | 
			
		||||
  background: #f9f9f9;
 | 
			
		||||
  border-top: 1px solid #ddd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ⭐️ bottom 슬롯 버튼 공통 스타일 */
 | 
			
		||||
.popup-bottom ::v-deep(button) {
 | 
			
		||||
  padding: 8px 16px;
 | 
			
		||||
  border: none;
 | 
			
		||||
  border-radius: 6px;
 | 
			
		||||
  background: #007bff;
 | 
			
		||||
  color: white;
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.popup-bottom ::v-deep(button:hover) {
 | 
			
		||||
  background: #0056b3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.popup-close {
 | 
			
		||||
  background: #ddd !important;
 | 
			
		||||
  color: black !important;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
		Reference in New Issue
	
	Block a user