<template>
  <view v-if="value" class="tn-modal-class tn-modal">
    <tn-popup
      v-model="value"
      mode="center"
      :popup="false"
      :borderRadius="radius"
      :width="width"
      :zoom="zoom"
      :safeAreaInsetBottom="safeAreaInsetBottom"
      :maskCloseable="maskCloseable"
      :zIndex="zIndex"
      :closeBtn="showCloseBtn"
      @close="close"
    >
      <!-- 内容 -->
      <view
        class="tn-modal__box"
        :class="[
          backgroundColorClass
        ]"
        :style="[boxStyle]"
      >
        <!-- 不是自定义弹框内容 -->
        <view v-if="!custom">
          <view class="tn-modal__box__title" v-if="title && title !== ''">{{ title }}</view>
          <view
            class="tn-modal__box__content"
            :class="[
              fontColorClass,
              contentClass
            ]"
            :style="contentStyle"
          >{{ content }}</view>
          <view v-if="button && button.length" class="tn-modal__box__btn-box" :class="[button.length != 2 ? 'tn-flex-direction-column' : '']">
            <block v-for="(item, index) in button" :key="index">
              <tn-button
                width="100%"
                height="68rpx"
                :fontSize="26"
                :backgroundColor="item.backgroundColor || ''"
                :fontColor="item.fontColor || ''"
                :plain="item.plain || false"
                :shape="item.shape || 'round'"
                :class="[
                  button.length > 2 ? 'tn-margin-bottom' : ''
                ]"
                @click="handleClick(index)"
                :style="{
                  width: button.length != 2 ? '80%' : '46%'
                }"
              >
                {{ item.text }}
              </tn-button>
            </block>
          </view>
        </view>
        <view v-else>
          <slot></slot>
        </view>
      </view>
    </tn-popup>
  </view>
</template>

<script>
  import componentsColorMixin from '../../libs/mixin/components_color.js'
  export default {
    mixins: [componentsColorMixin],
    name: 'tn-modal',
    props: {
      // 显示控制
      value: {
        type: Boolean,
        default: false
      },
      // 弹框宽度
      width: {
        type: String,
        default: '84%'
      },
      // 内边距
      padding: {
        type: String,
        default: ''
      },
      // 圆角
      radius: {
        type: Number,
        default: 12
      },
      // 标题
      title: {
        type: String,
        default: ''
      },
      // 内容
      content: {
        type: String,
        default: ''
      },
      // 按钮内容 设置参数与button组件的参数一致
      // {
      //   text: '确定',
      //   backgroundColor: 'red',
      //   fontColor: 'white',
      //   plain: true,
      //   shape: ''
      // }
      button: {
        type: Array,
        default: () => {
          return []
        }
      },
      safeAreaInsetBottom: {
      	type: Boolean,
      	default: false
      },
      // 点击遮罩是否可以关闭
      maskCloseable: {
        type: Boolean,
        default: true
      },
      // 是否显示右上角关闭按钮
      showCloseBtn: {
        type: Boolean,
        default: false
      },
      // 放大动画
      zoom: {
        type: Boolean,
        default: true
      },
      // 自定义弹框内容
      custom: {
        type: Boolean,
        default: false
      },
      // 弹框的z-index
      zIndex: {
        type: Number,
        default: 0
      }
    },
    computed: {
      boxStyle() {
        let style = {}
        
        if (this.padding) {
          style.padding = this.padding
        }
        if (this.backgroundColorStyle) {
          style.backgroundColor = this.backgroundColorStyle
        }
        
        return style
      },
      contentClass() {
        let clazz = ''
        if (this.title) {
          clazz += ' tn-margin-top'
        } else {
          clazz += ' tn-modal__box__content--no-title'
        }
        
        return clazz
      },
      contentStyle() {
        let style = {}
        
        if (this.fontSize) {
          style.fontSize = this.fontSize + this.fontUnit
        }
        if (this.fontColorStyle) {
          style.color = this.fontColorStyle
        }
        
        return style
      },
    },
    data() {
      return {
        
      }
    },
    methods: {
      // 处理按钮点击事件
      handleClick(index) {
        if (!this.value) return
        this.$emit("click", {
          index: Number(index)
        })
      },
      // 处理关闭事件
      close() {
        this.$emit("cancel")
        this.$emit('input', false)
      }
    }
  }
</script>

<style lang="scss" scoped>
  
  .tn-modal {
    
    &__box {
      position: relative;
      box-sizing: border-box;
      background-color: #FFFFFF;
      padding: 40rpx 64rpx;
      
      &__title {
        text-align: center;
        font-size: 34rpx;
        color: #333;
        padding-top: 20rpx;
        font-weight: bold;
      }
      
      &__content {
        text-align: center;
        padding-bottom: 30rpx;
        color: $tn-font-color;
        font-size: 28rpx;
        
        &--no-title {
          padding-bottom: 0rpx !important;
        }
      }
      
      &__btn-box {
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: space-between;
      }
      
      &__content ~ &__btn-box {
        margin-top: 30rpx;
      }
    }
  }
  
</style>