video-header.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <template>
  2. <div class="video-header">
  3. <div class="fixed-box">
  4. <div class="header-content">
  5. <div class="left">
  6. <img class="logo" @click="toUrl('home')" v-if="basicSet.set" :src="basicSet.set.logo_src" alt="">
  7. </div>
  8. <div class="middle" v-if="showTab">
  9. <div class="item" :class="{active : videoActiveType == 'default'}" @click="toChooseCate('default')"><i class="iconfont icon-fontclass-qidong"></i> <span class="type-name">全部</span></div>
  10. <div class="item" :class="{active : videoActiveType == 'recommend'}" @click="toChooseCate('recommend')" v-if="videoBasicSet.is_show_recommend && videoBasicSet.is_show_recommend == 1"><i class="iconfont icon-fontclass-tuijian1"></i> <span class="type-name">推荐</span></div>
  11. <div class="item" :class="{active : videoActiveType == 'follow'}" @click="toChooseCate('follow')" v-if="videoBasicSet.is_show_own_follow && videoBasicSet.is_show_own_follow == 1"><i class="iconfont icon-fontclass-guanzhu1"></i> <span class="type-name">关注</span></div>
  12. </div>
  13. <div class="right">
  14. <el-button size="small" class="btn-login btn-default" v-if="showPublish" @click="getPermission"><i class="iconfont icon-life-game-plus"></i><span>发布</span>
  15. </el-button>
  16. <el-button size="small" plain class="btn-video" @click="toUrl('videoList')"><span>视频列表</span>
  17. </el-button>
  18. <el-button size="small" class="btn-login btn-default" v-if="!basicSet.is_login"
  19. @click="toUrl('login',{select: '1'})"><span>登录</span>
  20. </el-button>
  21. <div class="member-box" v-if="basicSet.is_login">
  22. <img :src="basicSet.user_info ? basicSet.user_info.avatar : ''" alt="">
  23. <p>{{basicSet.user_info ? basicSet.user_info.nickname : ''}}</p>
  24. </div>
  25. </div>
  26. </div>
  27. </div>
  28. </div>
  29. </template>
  30. <script>
  31. import {mapState} from 'vuex'
  32. export default {
  33. name: "VHeader",
  34. props: {
  35. showTab: {
  36. type: Boolean,
  37. default: false
  38. },
  39. showPublish: {
  40. type: Boolean,
  41. default: false
  42. }
  43. },
  44. data() {
  45. return {
  46. }
  47. },
  48. computed: {
  49. ...mapState(['basicSet', 'videoBasicSet', 'videoActiveType']),
  50. },
  51. mounted() {},
  52. methods: {
  53. getPermission() {
  54. this.fun.$get("plugin.video-share.frontend.permission.verify").then(res => {
  55. if (res.result == 1) {
  56. if (res.data.ret) {
  57. this.toUrl('releaseVideo')
  58. }else {
  59. this.$message.error(res.msg);
  60. }
  61. } else {
  62. this.$message.error(res.msg);
  63. }
  64. });
  65. },
  66. toUrl(url, params, query) {
  67. if (url == 'login') {
  68. sessionStorage.setItem("yz_redirect", document.location.href);
  69. }
  70. this.$router.push(this.fun.getUrl(url, params, query));
  71. },
  72. toChooseCate(code) {
  73. this.$store.commit('setVideoActiveType', code);
  74. this.$router.push(this.fun.getUrl("videoDetail", {}, { activeType: code}));
  75. },
  76. }
  77. };
  78. </script>
  79. <style lang="scss" rel="stylesheet/scss" scoped>
  80. .video-header {
  81. min-width: 1200px;
  82. height: 60px;
  83. padding: 4px;
  84. box-sizing: border-box;
  85. }
  86. .fixed-box {
  87. z-index: 999;
  88. position: fixed;
  89. top: 0;
  90. left: 0;
  91. width: 100%;
  92. background-color: #ffffff;
  93. }
  94. .header-content {
  95. padding: 0 30px;
  96. height: 60px;
  97. margin: 0 auto;
  98. display: flex;
  99. justify-content: space-between;
  100. align-items: center;
  101. .left {
  102. display: flex;
  103. align-items: center;
  104. position: relative;
  105. .logo {
  106. cursor: pointer;
  107. width: 220px;
  108. height: 32px;
  109. }
  110. }
  111. .middle {
  112. display: flex;
  113. font-size: 16px;
  114. color: #333333;
  115. .item {
  116. margin: 0 15px;
  117. cursor: pointer;
  118. }
  119. .iconfont {
  120. font-size: 18px;
  121. color: #838382;
  122. }
  123. .active {
  124. color: #ec544a;
  125. .iconfont {
  126. color: #ec544a;
  127. }
  128. }
  129. }
  130. .right {
  131. display: flex;
  132. align-items: center;
  133. .btn-default {
  134. border: none;
  135. color: #ffffff;
  136. }
  137. .iconfont {
  138. font-size: 12px;
  139. }
  140. .btn-login {
  141. background-color: #3a75f4;
  142. }
  143. .btn-video {
  144. margin-right: 20px;
  145. color: var(--color);
  146. border: 1px solid var(--color);
  147. }
  148. }
  149. }
  150. .member-box {
  151. display: flex;
  152. align-items: center;
  153. img {
  154. margin-right: 6px;
  155. width: 28px;
  156. height: 28px;
  157. border-radius: 50%;
  158. }
  159. p {
  160. font-weight: bold;
  161. }
  162. }
  163. </style>