index.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <template>
  2. <div :class="mobile ? 'mobileMain' : ''" :style="{marginTop: mainMarginTop, marginBottom: mobile ? '0px' : '30px !important'}">
  3. <div v-if="!mobile" class="personal-container">
  4. <div class="personal-main">
  5. <!-- 个人信息框 -->
  6. <div class="personal-info-container">
  7. <div class="personal-user">
  8. <div class="personal-user-avatar">
  9. <img class="personal-user-avatar-img" src="https://iph.href.lu/200x200?fg=666666&bg=cccccc" />
  10. <span class="personal-user-tag"></span>
  11. </div>
  12. <div class="personal-user-info">
  13. <div class="personal-user-name">
  14. <span class="name-cotent">陈世杰jackey(web前端工程师)</span>
  15. <LevelTag :level="2"></LevelTag>
  16. </div>
  17. <div class="personal-user-text">2天前在线 · 431浏览</div>
  18. <div class="personal-user-text">2022年2月加入</div>
  19. </div>
  20. </div>
  21. <div class="personal-user-follow">
  22. <p class="personal-report"><a href="">举报</a></p>
  23. <div class="personal-share-area">
  24. <span class="personal-share-btn"></span>
  25. <span class="personal-share-btn"></span>
  26. </div>
  27. <div class="personal-follow-btn">
  28. 关注
  29. </div>
  30. </div>
  31. </div>
  32. <!-- 内容tab -->
  33. <div class="personal-content-container">
  34. <div class="personal-content-tab">
  35. <!-- tab框 -->
  36. <div v-for="item in tabs" @click="tabSelected = item.id" :key="item.id" class="personal-tab-item" :class="{'cur':tabSelected == item.id}">
  37. {{item.label}} {{item.count}}
  38. </div>
  39. </div>
  40. <div class="personal-content-main">
  41. <!-- 列表内容 -->
  42. </div>
  43. </div>
  44. </div>
  45. <div class="personal-side">
  46. <div class="personal-page-link">
  47. <span>Ta的开发工作主页</span>
  48. <span class="arrow"></span>
  49. </div>
  50. <div class="personal-follow-info">
  51. <div class="personal-follow-item">
  52. <span class="personal-follow-label">关注了</span>
  53. <span class="personal-follow-count">5</span>
  54. </div>
  55. <div class="personal-follow-item">
  56. <span class="personal-follow-label">关注者</span>
  57. <span class="personal-follow-count">5</span>
  58. </div>
  59. </div>
  60. <div class="personal-ad-container">
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. </template>
  66. <script>
  67. import {
  68. mapState
  69. } from "vuex"
  70. import qs from "qs"
  71. import LevelTag from "@/components/level-tag.vue";
  72. export default {
  73. name: 'PersonalIndex',
  74. components:{
  75. LevelTag
  76. },
  77. data() {
  78. return {
  79. baseUrl: '',
  80. mobile: false,
  81. // firstLoad: true,
  82. isWeixinApp: true,
  83. tabSelected:1,
  84. tabs:[
  85. {
  86. id:1,
  87. label: "动态",
  88. count:10
  89. },
  90. {
  91. id:2,
  92. label: "点赞",
  93. count:10
  94. },
  95. {
  96. id:3,
  97. label: "文章",
  98. count:10
  99. },
  100. {
  101. id:4,
  102. label: "视频课程",
  103. count:10
  104. }
  105. ]
  106. }
  107. },
  108. head() {
  109. const {
  110. title = "",
  111. keyword = "",
  112. description = "",
  113. h1 = "",
  114. canonical = "",
  115. metaLocation
  116. } = this.head || {}
  117. let obj = {
  118. title: title,
  119. meta: [{
  120. name: "keywords",
  121. content: keyword
  122. }, {
  123. name: "description",
  124. content: description
  125. }, {
  126. name: "h1",
  127. content: h1
  128. }],
  129. link: [{
  130. rel: "canonical",
  131. href: canonical
  132. }]
  133. }
  134. if (metaLocation) {
  135. obj.meta.push({
  136. name: "location",
  137. content: metaLocation
  138. })
  139. }
  140. return obj
  141. },
  142. computed: {
  143. ...mapState(["deviceType"]),
  144. showWxHeader() {
  145. return !this.deviceType.app && !this.isWeixinApp &&
  146. (this.deviceType.android || this.deviceType.ios)
  147. },
  148. mainMarginTop() {
  149. if (this.mobile && this.showWxHeader) {
  150. return '64px !important'
  151. } else if (this.mobile) {
  152. return '0px !important'
  153. } else {
  154. return '20px !important'
  155. }
  156. },
  157. },
  158. mounted() {
  159. this.baseUrl = this.$store.state.domainConfig.siteUrl
  160. this.isWeixinApp = navigator.userAgent.indexOf("miniProgram") > -1
  161. },
  162. methods: {
  163. }
  164. }
  165. </script>
  166. <style lang="scss">
  167. @import "@/assets/css/frontend/personal.scss";
  168. </style>