<template>
  <view class="uni-section">
    <view class="uni-section-header" @click="onClick">
      <view class="uni-section-header__decoration" v-if="type" :class="type"/>
      <slot v-else name="decoration"></slot>

      <view class="uni-section-header__content">
        <text :style="{'font-size':titleFontSize,'color':titleColor}" class="uni-section__content-title"
              :class="{'distraction':!subTitle}">{{ title }}
        </text>
        <text v-if="subTitle" :style="{'font-size':subTitleFontSize,'color':subTitleColor}"
              class="uni-section-header__content-sub">{{ subTitle }}
        </text>
      </view>

      <view class="uni-section-header__slot-right">
        <slot name="right"></slot>
      </view>
    </view>

    <view class="uni-section-content" :style="{padding: _padding}">
      <slot/>
    </view>
  </view>
</template>

<script>

/**
 * Section 标题栏
 * @description 标题栏
 * @property {String} type = [line|circle|square] 标题装饰类型
 *  @value line 竖线
 *  @value circle 圆形
 *  @value square 正方形
 * @property {String} title 主标题
 * @property {String} titleFontSize 主标题字体大小
 * @property {String} titleColor 主标题字体颜色
 * @property {String} subTitle 副标题
 * @property {String} subTitleFontSize 副标题字体大小
 * @property {String} subTitleColor 副标题字体颜色
 * @property {String} padding 默认插槽 padding
 */

export default {
  name: 'UniSection',
  emits: ['click'],
  props: {
    type: {
      type: String,
      default: ''
    },
    title: {
      type: String,
      required: true,
      default: ''
    },
    titleFontSize: {
      type: String,
      default: '14px'
    },
    titleColor: {
      type: String,
      default: '#333'
    },
    subTitle: {
      type: String,
      default: ''
    },
    subTitleFontSize: {
      type: String,
      default: '12px'
    },
    subTitleColor: {
      type: String,
      default: '#999'
    },
    padding: {
      type: [Boolean, String],
      default: false
    }
  },
  computed: {
    _padding() {
      if (typeof this.padding === 'string') {
        return this.padding
      }

      return this.padding ? '10px' : ''
    }
  },
  watch: {
    title(newVal) {
      if (uni.report && newVal !== '') {
        uni.report('title', newVal)
      }
    }
  },
  methods: {
    onClick() {
      this.$emit('click')
    }
  }
}
</script>
<style lang="scss">
$uni-primary: #2979ff !default;

.uni-section {
  background-color: #fff;

  .uni-section-header {
    position: relative;
    /* #ifndef APP-NVUE */
    display: flex;
    /* #endif */
    flex-direction: row;
    align-items: center;
    padding: 12px 10px;
    font-weight: normal;

    &__decoration {
      margin-right: 6px;
      background-color: $uni-primary;

      &.line {
        width: 4px;
        height: 12px;
        border-radius: 10px;
      }

      &.circle {
        width: 8px;
        height: 8px;
        border-top-right-radius: 50px;
        border-top-left-radius: 50px;
        border-bottom-left-radius: 50px;
        border-bottom-right-radius: 50px;
      }

      &.square {
        width: 8px;
        height: 8px;
      }
    }

    &__content {
      /* #ifndef APP-NVUE */
      display: flex;
      /* #endif */
      flex-direction: column;
      flex: 1;
      color: #333;

      .distraction {
        flex-direction: row;
        align-items: center;
      }

      &-sub {
        margin-top: 2px;
      }
    }

    &__slot-right {
      font-size: 14px;
    }
  }

  .uni-section-content {
    font-size: 14px;
  }
}
</style>
