videoBar.vue 3.24 KB
<template>
  <div v-if="barType === 1" class="video-bar">
    <van-row>
      <van-col span="12" @click="goToDetail(item, $router)">
        <van-image v-if="item.avatar" round width="2rem" height="2rem" style="vertical-align: middle;"
          :src="item.avatar" />&nbsp;
        <van-image v-else round width="2rem" height="2rem" style="vertical-align: middle;" :src="icon_avatar" />&nbsp;
        <span style="font-size: 1.05rem;vertical-align: middle;">{{ item.name }}</span>
      </van-col>
      <van-col span="12">
        <div style="padding: 0.25rem; padding-top: 0.75rem; text-align: right;">
          <span @click="setComment(item, $router)">
            <van-icon :name="icon_liuyan" size="1.2rem" style="vertical-align: bottom;" />
            {{ item.comment_num }}
          </span>
          &nbsp;&nbsp;&nbsp;
          <span @click="handleAction('like', detail.id)">
            <van-icon v-if="!detail.is_like" :name="icon_dianzan1" size="1.2rem" style="vertical-align: bottom;" />
            <van-icon v-else :name="icon_dianzan2" size="1.2rem" style="vertical-align: bottom;" />
            {{ detail.like_num }}
          </span>
        </div>
      </van-col>
    </van-row>
  </div>
  <div v-if="barType === 2" class="video-bar">
    <van-row style="text-align: center;">
      <van-col span="7">
        <span style="color: #777777;">
          {{ item.play_num }}次播放
        </span>
      </van-col>
      <van-col span="1" style="color: #EEEDED;">
        |
      </van-col>
      <van-col span="8">
        <span @click="handleAction('favor', detail.id)">
          <van-icon v-if="!detail.is_favor" :name="icon_shoucang1" size="1.2rem" style="vertical-align: bottom;" />
          <van-icon v-else :name="icon_shoucang2" size="1.2rem" style="vertical-align: bottom;" />
          {{ detail.favor_num }}
        </span>
      </van-col>
      <van-col span="1" style="color: #EEEDED;">
        |
      </van-col>
      <van-col span="7">
        <span @click="handleAction('like', detail.id)">
          <van-icon v-if="!detail.is_like" :name="icon_dianzan1" size="1.2rem" style="vertical-align: bottom;" />
          <van-icon v-else :name="icon_dianzan2" size="1.2rem" style="vertical-align: bottom;" />
          {{ detail.like_num }}
        </span>
      </van-col>
    </van-row>
  </div>
</template>

<script setup>
import { icon_shoucang1, icon_shoucang2, icon_dianzan1, icon_dianzan2, icon_liuyan, icon_avatar } from '@/utils/generateIcons.js'

import { ref } from 'vue';
import { goToDetail, setComment, prodAction } from './methods';
import _ from 'lodash';
import { prodInfoAPI } from '@/api/C/prod.js'

const props = defineProps({
  item: Object,
  barType: Number
});

const detail = ref({});
detail.value = _.cloneDeep(props.item);

const handleAction = async (type, id) => {
  if (await prodAction(type, id)) {
    getProductDetail(type, id)
  }
}

// 查询作品详情
async function getProductDetail(action_type, prod_id) {
  const { data } = await prodInfoAPI({ prod_id });
  // 更新详情显示
  detail.value[`is_${action_type}`] = data[`is_${action_type}`];
  detail.value[`${action_type}_num`] = data[`${action_type}_num`];
}

</script>

<style lang="less" scoped>
.video-bar {
  color: #713610; 
  padding: 1rem; 
  padding-bottom: 0.5rem;
}
</style>