101 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <transition name="modal-fade">
 | 
						|
    <main class="modal-backdrop">
 | 
						|
      <section class="modal">
 | 
						|
        <header class="modal-header" v-if="headerText">
 | 
						|
          {{headerText}}
 | 
						|
        </header>
 | 
						|
        <section class="modal-body">
 | 
						|
          <p>
 | 
						|
            {{modalText}}
 | 
						|
          </p>
 | 
						|
          <section class="button-container">
 | 
						|
            <button v-for="(button, index) in buttons" :key="index" @click="modalButtonClicked(button.action)" class="vin-button">
 | 
						|
              {{button.text}}
 | 
						|
            </button>
 | 
						|
          </section>
 | 
						|
        </section>
 | 
						|
      </section>
 | 
						|
    </main>
 | 
						|
  </transition>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
export default {
 | 
						|
  props: {
 | 
						|
    headerText: {
 | 
						|
      type: String,
 | 
						|
      required: false
 | 
						|
    },
 | 
						|
    modalText: {
 | 
						|
      type: String,
 | 
						|
      required: true
 | 
						|
    },
 | 
						|
    buttons: {
 | 
						|
      type: Array,
 | 
						|
      required: true
 | 
						|
    },
 | 
						|
  },
 | 
						|
  methods:{
 | 
						|
    modalButtonClicked(action){
 | 
						|
      this.$emit('click', action)
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
</script>
 | 
						|
 | 
						|
<style lang="scss" scoped>
 | 
						|
@import "../styles/global.scss";
 | 
						|
 | 
						|
.modal-fade-enter,
 | 
						|
.modal-fade-leave-active {
 | 
						|
  opacity: 0;
 | 
						|
}
 | 
						|
 | 
						|
.modal-fade-enter-active,
 | 
						|
.modal-fade-leave-active {
 | 
						|
  transition: opacity .5s ease
 | 
						|
}
 | 
						|
 | 
						|
.modal-backdrop {
 | 
						|
  position: fixed;
 | 
						|
  top: 0;
 | 
						|
  bottom: 0;
 | 
						|
  left: 0;
 | 
						|
  right: 0;
 | 
						|
  background-color: rgba(0, 0, 0, 0.3);
 | 
						|
  display: flex;
 | 
						|
  justify-content: center;
 | 
						|
  align-items: center;
 | 
						|
  z-index: 1;
 | 
						|
  width: 100vw;
 | 
						|
  height: 100vh;
 | 
						|
}
 | 
						|
 | 
						|
.modal {
 | 
						|
  background: #FFFFFF;
 | 
						|
  -webkit-box-shadow: 0px 0px 22px 1px rgba(0, 0, 0, 0.65);
 | 
						|
  -moz-box-shadow: 0px 0px 22px 1px rgba(0, 0, 0, 0.65);
 | 
						|
  box-shadow: 0px 0px 22px 1px rgba(0, 0, 0, 0.65);
 | 
						|
  overflow-x: auto;
 | 
						|
  display: flex;
 | 
						|
  flex-direction: column;
 | 
						|
}
 | 
						|
 | 
						|
.modal-header {
 | 
						|
  padding: 15px;
 | 
						|
  display: flex;
 | 
						|
}
 | 
						|
 | 
						|
.modal-header {
 | 
						|
  border-bottom: 1px solid #eeeeee;
 | 
						|
  color: #4AAE9B;
 | 
						|
  justify-content: space-between;
 | 
						|
}
 | 
						|
 | 
						|
.modal-body {
 | 
						|
  position: relative;
 | 
						|
  padding: 20px 10px;
 | 
						|
}
 | 
						|
 | 
						|
</style> |