article-footer.vue 2.54 KB
<template>
  <div class="article-footer-wrapper layout-footer-wrap" :style="actionBarStyle">
    <slot name="fab"></slot>
    <div class="footer-wrapper-content">
      <slot name="before"></slot>
      <div class="tool-bar">
        <WidgetIconBtn ref="favIcon" class="item" type="fav" :pos-id="sceneId" :text="praiseCount" :articleId="articleId" :option="optionPraise" :share="share"></WidgetIconBtn>
        <WidgetIconBtn class="item" type="star" :pos-id="sceneId" :text="favoriteCount" :articleId="articleId" :option="optionFav" :share="share"></WidgetIconBtn>
        <WidgetIconBtn class="item" type="msg" :text="commentCount" :option="optionComment" :share="share" @click="onComment"></WidgetIconBtn>
      </div>
      <slot name="after">
        <div class="close ml20" @click="onClose">收起</div>
      </slot>
    </div>
  </div>
</template>

<script>
import {mapState} from 'vuex';
import YAS from 'utils/yas-constants';

export default {
  name: 'ArticleFooter',
  props: ['favoriteCount', 'praiseCount', 'commentCount', 'hasFavor', 'hasPraise', 'articleId', 'share'],
  data() {
    return {
      optionComment: {
        emitName: 'click',
        canSelect: false
      },
      sceneId: YAS.scene.newsDetail
    };
  },
  computed: {
    ...mapState(['yoho']),
    actionBarStyle() {
      if (this.yoho.window.actionBarHeight) {
        return {
          paddingBottom: this.yoho.window.actionBarHeight + 'px'
        };
      }

      return {};
    },
    optionPraise() {
      return {
        selected: this.hasPraise === 'Y'
      };
    },
    optionFav() {
      return {
        selected: this.hasFavor === 'Y'
      };
    }
  },
  methods: {
    onComment() {
      this.$emit('on-comment-click');
    },
    onClose() {
      this.$emit('on-close');
    },
    onPraise() {
      if (this.hasPraise !== 'Y') {
        this.$refs.favIcon.onClick();
      }
    },
  },
};
</script>

<style lang="scss" scoped>

.article-footer-wrapper {
  border-top: 1px solid #f0f0f0;
  background-color: white;
  position: relative;

  &.disable:after {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 3;
  }

  .footer-wrapper-content {
    display: flex;
    height: 100px;
  }
}

.tool-bar {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: space-around;

  /deep/ .icon-btn-text {
    width: 0;
  }
}

.close {
  width: 200px;
  color: white;
  font-size: 32px;
  line-height: 100px;
  font-weight: 300;
  background-color: #d0021b;
  text-align: center;
}

.ml20 {
  margin-left: 20px;
}

</style>