<template>
  <view class="u-notice" @tap="clickHandler">
    <slot name="icon">
      <view class="u-notice__left-icon" v-if="icon">
        <u-icon :name="icon" :color="color" size="19"></u-icon>
      </view>
    </slot>
    <swiper :disable-touch="disableTouch" :vertical="step ? false : true" circular :interval="duration" :autoplay="true" class="u-notice__swiper" @change="noticeChange">
      <swiper-item v-for="(item, index) in text" :key="index" class="u-notice__swiper__item">
        <text class="u-notice__swiper__item__text u-line-1" :style="[textStyle]">{{ item }}</text>
      </swiper-item>
    </swiper>
    <view class="u-notice__right-icon" v-if="['link', 'closable'].includes(mode)">
      <u-icon v-if="mode === 'link'" name="arrow-right" :size="17" :color="color"></u-icon>
      <u-icon v-if="mode === 'closable'" name="close" :size="16" :color="color" @click="close"></u-icon>
    </view>
  </view>
</template>

<script>
import props from './props.js';
/**
 * ColumnNotice 滚动通知中的垂直滚动 内部组件
 * @description 该组件用于滚动通告场景，是其中的垂直滚动方式
 * @tutorial https://www.uviewui.com/components/noticeBar.html
 * @property {Array}			text 			显示的内容，字符串
 * @property {String}			icon 			是否显示左侧的音量图标 （ 默认 'volume' ）
 * @property {String}			mode 			通告模式，link-显示右箭头，closable-显示右侧关闭图标
 * @property {String}			color 			文字颜色，各图标也会使用文字颜色 （ 默认 '#f9ae3d' ）
 * @property {String}			bgColor 		背景颜色 （ 默认 '#fdf6ec' ）
 * @property {String | Number}	fontSize		字体大小，单位px  （ 默认 14 ）
 * @property {String | Number}	speed			水平滚动时的滚动速度，即每秒滚动多少px(rpx)，这有利于控制文字无论多少时，都能有一个恒定的速度 （ 默认 80 ）
 * @property {Boolean}			step			direction = row时，是否使用步进形式滚动 （ 默认 false ）
 * @property {String | Number}	duration		滚动一个周期的时间长，单位ms （ 默认 1500 ）
 * @property {Boolean}			disableTouch	是否禁止用手滑动切换   目前HX2.6.11，只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 （ 默认 true ）
 * @example
 */
export default {
  mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
  watch: {
    text: {
      immediate: true,
      handler (newValue, oldValue) {
        if (!uni.$u.test.array(newValue)) {
          uni.$u.error('noticebar组件direction为column时，要求text参数为数组形式')
        }
      }
    }
  },
  computed: {
    // 文字内容的样式
    textStyle () {
      let style = {}
      style.color = this.color
      style.fontSize = uni.$u.addUnit(this.fontSize)
      return style
    },
    // 垂直或者水平滚动
    vertical () {
      if (this.mode == 'horizontal') return false
      else return true
    },
  },
  data () {
    return {
      index: 0
    }
  },
  methods: {
    noticeChange (e) {
      this.index = e.detail.current
    },
    // 点击通告栏
    clickHandler () {
      this.$emit('click', this.index)
    },
    // 点击关闭按钮
    close () {
      this.$emit('close')
    }
  }
};
</script>

<style lang="scss" scoped>
@import "../../libs/css/components.scss";

.u-notice {
  @include flex;
  align-items: center;
  justify-content: space-between;

  &__left-icon {
    align-items: center;
    margin-right: 5px;
  }

  &__right-icon {
    margin-left: 5px;
    align-items: center;
  }

  &__swiper {
    height: 16px;
    @include flex;
    align-items: center;
    flex: 1;

    &__item {
      @include flex;
      align-items: center;
      overflow: hidden;

      &__text {
        font-size: 14px;
        color: $u-warning;
      }
    }
  }
}
</style>
