info.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <template>
  2. <ErrorPage404 v-if="!isExist"></ErrorPage404>
  3. <div v-else :style="{ marginTop: mainMarginTop, width: '100%' }">
  4. <div class="dynamic-info-wrapper-mobile" v-if="isInit">
  5. <div class="dynamic-info-main">
  6. <div class="dynamic-info-user">
  7. <div class="dynamic-info-user-avatar">
  8. <img :src="user_info.icon_url || ''" />
  9. </div>
  10. <div class="dynamic-info-user-info">
  11. <div class="dynamic-info-user-nickname">
  12. <span>{{ user_info.nickname }}</span>
  13. <LevelTag :level="user_info.freework_level"></LevelTag>
  14. </div>
  15. <div class="dynamic-info-user-title">
  16. <span>{{ user_info.tag[0] ? user_info.tag[0].name : "" }}</span>
  17. <span>{{
  18. user_info.tag[1] ? "· " + user_info.tag[1].name : ""
  19. }}</span>
  20. </div>
  21. </div>
  22. <!-- <div class="dynamic-info-user-menu"></div> -->
  23. </div>
  24. <div class="dynamic-info-content">
  25. {{ dynamicDetail.title }}
  26. </div>
  27. <div class="dynamic-info-type-area">
  28. <div class="dynamic-info-type"># {{ dynamicDetail.type_text }}</div>
  29. </div>
  30. <div class="dynamic-info-img-list" v-if="dynamicDetail.img.length > 0">
  31. <div
  32. class="dynamic-info-img-item"
  33. v-for="item in dynamicDetail.img"
  34. :key="item.img"
  35. :style="{
  36. 'background-image': 'url(' + item.img + ')'
  37. }"
  38. >
  39. <!-- <img :src="" /> -->
  40. </div>
  41. </div>
  42. <!-- 根据type去显示 -->
  43. <!--
  44. @click="gotoPage(resources.resources_url)"
  45. -->
  46. <div
  47. v-if="dynamicDetail.type != 2"
  48. class="dynamic-info-resources-link"
  49. @click="gotoDownload"
  50. >
  51. <div class="dynamic-info-resources-img">
  52. <img :src="resources.resources_img" />
  53. </div>
  54. <div class="dynamic-info-resources-title">
  55. {{ resources.resources_title }}
  56. </div>
  57. </div>
  58. <!--
  59. @click="gotoPage(resources.resources_url)"
  60. -->
  61. <div v-else class="dynamic-info-resources-area" @click="gotoDownload">
  62. <div class="resources-top">
  63. <div class="resources-title">{{ resources.resources_title }}</div>
  64. <div class="resources-price">{{ resources.resources_price }}</div>
  65. </div>
  66. <div class="resource-tag">
  67. <div
  68. v-for="item in resources.resources_tag"
  69. :key="item"
  70. class="resources-tag-item"
  71. >
  72. {{ item.name }}
  73. </div>
  74. </div>
  75. <div class="resource-company">
  76. <div class="resource-company-img">
  77. <img :src="user_info.icon_url || ''" />
  78. </div>
  79. <div class="resource-company-name">
  80. {{ resources.resources_form }}
  81. </div>
  82. </div>
  83. </div>
  84. <div class="dynamic-info-like">
  85. <div
  86. class="dynamic-info-like-item dynamic-info-like-count"
  87. @click="gotoDownload"
  88. >
  89. {{ dynamicDetail.z_num }}
  90. </div>
  91. <div
  92. class="dynamic-info-like-item dynamic-info-comment-count"
  93. @click="gotoDownload"
  94. >
  95. {{ dynamicDetail.c_num }}
  96. </div>
  97. </div>
  98. </div>
  99. <!-- <div class="dynamic-comment-main">
  100. <div class="dynamic-comment-title">评论</div>
  101. <ul class="dynamic-comment-list">
  102. <li class="dynamic-comment-item">
  103. <div class="dynamic-comment-avatar">
  104. <img src="https://iph.href.lu/100x100?fg=666666&bg=cccccc" />
  105. </div>
  106. <div class="dynamic-comment-info">
  107. <div class="dynamic-comment-item-top">
  108. <div class="dynamic-comment-nickname">Keimi</div>
  109. <div class="dynamic-comment-time">2020-03-12</div>
  110. <div class="dynamic-comment-more"></div>
  111. </div>
  112. <div class="dynamic-comment-content">
  113. 我还在很愉快 期待下次合作
  114. </div>
  115. </div>
  116. </li>
  117. <li class="dynamic-comment-item">
  118. <div class="dynamic-comment-avatar">
  119. <img src="https://iph.href.lu/100x100?fg=666666&bg=cccccc" />
  120. </div>
  121. <div class="dynamic-comment-info">
  122. <div class="dynamic-comment-item-top">
  123. <div class="dynamic-comment-nickname">Keimi</div>
  124. <div class="dynamic-comment-time">2020-03-12</div>
  125. <div class="dynamic-comment-more"></div>
  126. </div>
  127. <div class="dynamic-comment-content">
  128. 我还在很愉快 期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作期待下次合作
  129. </div>
  130. </div>
  131. </li>
  132. <li class="dynamic-comment-item">
  133. <div class="dynamic-comment-avatar">
  134. <img src="https://iph.href.lu/100x100?fg=666666&bg=cccccc" />
  135. </div>
  136. <div class="dynamic-comment-info">
  137. <div class="dynamic-comment-item-top">
  138. <div class="dynamic-comment-nickname">Keimi</div>
  139. <div class="dynamic-comment-time">2020-03-12</div>
  140. <div class="dynamic-comment-more"></div>
  141. </div>
  142. <div class="dynamic-comment-content">
  143. 我还在很愉快 期待下次合作
  144. </div>
  145. </div>
  146. </li>
  147. </ul>
  148. </div> -->
  149. </div>
  150. <div class="dynamic-bottom">
  151. <div class="dynamic-bottom-btn" @click="gotoDownload"></div>
  152. </div>
  153. </div>
  154. </template>
  155. <script>
  156. import { mapState } from "vuex";
  157. import DynamicInfoData from "@/components/dynamic/DynamicInfo.js";
  158. import qs from "qs";
  159. import ErrorPage404 from "@/components/error_page/404.vue";
  160. import LevelTag from "@/components/level-tag.vue";
  161. export default {
  162. name: "DynamicDetail",
  163. layout: "noheader",
  164. data() {
  165. return {
  166. baseUrl: "",
  167. isWeixinApp: true,
  168. isExist: true,
  169. dynamicDetail: {},
  170. user_info: {},
  171. resources: {},
  172. isInit: false
  173. };
  174. },
  175. components: {
  176. ErrorPage404,
  177. LevelTag
  178. },
  179. head() {
  180. const {
  181. title = "",
  182. keyword = "",
  183. description = "",
  184. h1 = "",
  185. canonical = "",
  186. metaLocation
  187. } = this.head || {};
  188. let obj = {
  189. title: title,
  190. meta: [
  191. {
  192. name: "keywords",
  193. content: keyword
  194. },
  195. {
  196. name: "description",
  197. content: description
  198. },
  199. {
  200. name: "h1",
  201. content: h1
  202. },
  203. {
  204. name: "viewport",
  205. content: "width=device-width, initial-scale=1.0, viewport-fit=cover"
  206. }
  207. ],
  208. link: [
  209. {
  210. rel: "canonical",
  211. href: canonical
  212. }
  213. ]
  214. };
  215. if (metaLocation) {
  216. obj.meta.push({
  217. name: "location",
  218. content: metaLocation
  219. });
  220. }
  221. return obj;
  222. },
  223. computed: {
  224. ...mapState(["deviceType"]),
  225. showWxHeader() {
  226. return (
  227. !this.deviceType.app &&
  228. !this.isWeixinApp &&
  229. (this.deviceType.android || this.deviceType.ios)
  230. );
  231. },
  232. mainMarginTop() {
  233. if (this.mobile && this.showWxHeader) {
  234. return "0 !important";
  235. } else if (this.mobile) {
  236. return "0px !important";
  237. } else {
  238. return "20px !important";
  239. }
  240. }
  241. },
  242. // async asyncData({
  243. // ...params
  244. // }) {
  245. // let dynamicInfoData = new DynamicInfoData(params)
  246. // let ans = await dynamicInfoData.dealData()
  247. // return {
  248. // ...ans
  249. // }
  250. // },
  251. mounted() {
  252. const self = this;
  253. this.isWeixinApp = navigator.userAgent.indexOf("miniProgram") > -1;
  254. this.fetchData();
  255. },
  256. methods: {
  257. async fetchData() {
  258. // console.log(this)
  259. if (!this.$route.params.id) {
  260. this.isExist = false;
  261. return;
  262. }
  263. let dynamicId = this.$route.params.id;
  264. let res = await this.$axios.$post("/uapi/dynamic/get_dynamic_detail", {
  265. dynamic_id: dynamicId
  266. });
  267. this.isInit = true;
  268. // let dynamicDetail = {};
  269. if (Number(res.status) === 1) {
  270. let dynamicList = res.data.list;
  271. this.dynamicDetail = {
  272. ...dynamicList[0]
  273. };
  274. this.user_info = {
  275. ...dynamicList[0].user_info
  276. };
  277. this.resources = {
  278. ...dynamicList[0].resources
  279. };
  280. } else {
  281. this.isExist = false;
  282. }
  283. },
  284. gotoPage(url) {
  285. location.href = url;
  286. },
  287. gotoDownload() {
  288. location.href = "https://a.app.qq.com/o/simple.jsp?pkgname=com.proginn";
  289. }
  290. }
  291. };
  292. </script>
  293. <style lang="scss" scoped>
  294. @import "@/assets/css/dynamic/info.scss";
  295. </style>
  296. <style lang="scss">
  297. strong {
  298. font-weight: bold !important;
  299. }
  300. em {
  301. font-style: italic !important;
  302. }
  303. </style>