detail.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. <template>
  2. <!-- 资讯详情 -->
  3. <div class="news">
  4. <main class="index_main">
  5. <section class="clearfix">
  6. <div class="info_1_left">
  7. <div class="breadcrumb">
  8. <div class="inner">
  9. <span class="location">当前位置 :</span>
  10. <el-breadcrumb :separator-icon="ArrowRight">
  11. <el-breadcrumb-item>
  12. <NuxtLink to="/">首页</NuxtLink>
  13. </el-breadcrumb-item>
  14. <el-breadcrumb-item v-if="p_parent_name != ''">
  15. <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink>
  16. </el-breadcrumb-item>
  17. <el-breadcrumb-item v-if="parent_name != ''">
  18. <NuxtLink :to="`/${targetSegment}/${targetSegment1}/index.html`"> {{ parent_name }}
  19. </NuxtLink>
  20. </el-breadcrumb-item>
  21. <el-breadcrumb-item>{{ navTitle }}</el-breadcrumb-item>
  22. </el-breadcrumb>
  23. </div>
  24. </div>
  25. <h4 class="show_1_h4">{{ newsDetail.title }}</h4>
  26. <div class="show_1_title_box clearfix">
  27. <span class="show_1_title">来源:{{ newsDetail.copyfrom }}</span>
  28. <span class="show_1_title">作者:{{ newsDetail.author }}</span>
  29. <span class="show_1_title">时间:{{ getTime(newsDetail.updated_at, 'year', 1) }}</span>
  30. </div>
  31. <article class="show_1_article" v-html="newsDetail.content">
  32. </article>
  33. <footer class="show_foot" v-if="newsDetail.copyfrom != '本网'">
  34. 原文链接:{{ newsDetail.fromurl }}
  35. <br>
  36. [免责声明]本文来源于网络转载,仅供学习交流使用,不构成商业目的。 版权归原作者所有,如涉及作品内容,版权和其他问题,请在30日与本网联系,我们将第一时间处理。
  37. </footer>
  38. <div v-if="articleChoice">
  39. <HomeSurveyvote></HomeSurveyvote>
  40. </div>
  41. <!-- 推荐阅读 -->
  42. <div class="recommendRead" v-if="newsDetail.commendArticle != false">
  43. <div class="recommendReadTitle">
  44. 推荐阅读
  45. </div>
  46. <div class="recommendReadList">
  47. <div class="recommendReadListTitle" v-for="(item, index) in newsDetail.commendArticle"
  48. :key="item.id">
  49. <a :href="`/${item.alias_pinyin}/${item.id}.html`" v-if="index < 3">
  50. {{ item.title }}
  51. </a>
  52. <span v-if="index < 3">{{ getTime(item.created_at, "month", 1) }}</span>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. <aside class="info_1_aside">
  58. <DetailHotNews></DetailHotNews>
  59. <DetailHotNews2></DetailHotNews2>
  60. </aside>
  61. </section>
  62. </main>
  63. </div>
  64. </template>
  65. <script setup>
  66. //0.页面依赖 start ---------------------------------------->
  67. import { onMounted } from 'vue'
  68. import { ElBreadcrumb, ElBreadcrumbItem, ElRadio, ElRadioGroup, ElCheckbox, ElCheckboxGroup, ElMessage, ElInput } from 'element-plus'
  69. import { ArrowRight } from '@element-plus/icons-vue'
  70. //0.页面依赖 end ---------------------------------------->
  71. //1.获得路由id start ---------------------------------------->
  72. const route = useRoute();
  73. const articleId = parseInt(route.params.id);
  74. const targetSegment = getRoutePath(1);
  75. const targetSegment1 = getRoutePath(2);
  76. const targetSegment2 = getRoutePath(3);
  77. //1.1 获得当前的路由id
  78. let routeId;
  79. let routeType;
  80. let navTitle = ref('')//二级导航标题
  81. let navCid = ref('')//二级导航id
  82. //通过导航路径反向查询导航id
  83. const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
  84. method: 'GET',
  85. query: {
  86. 'pinyin': targetSegment2,
  87. },
  88. });
  89. console.log("getRouteId", getRouteId);
  90. if (getRouteId.code == 200) {
  91. navTitle.value = getRouteId.data.alias
  92. navCid.value = getRouteId.data.category_id
  93. } else {
  94. console.log("获得路由id出错!", getRouteId.message)
  95. }
  96. //1.2 获取二级栏目
  97. let parent_name = ref('');//父级名称
  98. let parent_id = ref('');//父级id
  99. let parent_pinyin = ref('');//父级拼音
  100. const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
  101. method: 'GET',
  102. query: {
  103. 'pinyin': targetSegment1,
  104. },
  105. });
  106. console.log("getRoutePName", getRoutePName);
  107. if (getRoutePName.code == 200) {
  108. routeId = getRoutePName.data.category_id
  109. parent_id.value = getRoutePName.data.category_id
  110. parent_name.value = getRoutePName.data.alias
  111. routeType = getRoutePName.data.type
  112. } else {
  113. console.log("获得路由id出错!", getRoutePName.message)
  114. }
  115. //1.3 获取一级栏目
  116. let p_parent_name = ref('');//父级名称
  117. let p_parent_id = ref('');//父级id
  118. let p_parent_pinyin = ref('');//父级拼音
  119. const getRoutePName_parent = await requestDataPromise('/web/getWebsiteRoute', {
  120. method: 'GET',
  121. query: {
  122. 'pinyin': targetSegment,
  123. },
  124. });
  125. console.log("getRoutePName_parent", getRoutePName_parent);
  126. if (getRoutePName_parent.code == 200) {
  127. p_parent_id.value = getRoutePName_parent.data.category_id
  128. p_parent_name.value = getRoutePName_parent.data.alias
  129. // p_parent_pinyin.value = getRoutePName_parent.data.aLIas_pinyin
  130. } else {
  131. console.log("获得路由id出错!", getRoutePName_parent.message)
  132. }
  133. //1.4 获取某个栏目
  134. const getParentId = await requestDataPromise('/web/getOneWebsiteCategory', {
  135. method: 'GET',
  136. query: {
  137. 'catid': parent_id.value,
  138. },
  139. });
  140. console.log("getParentId", getParentId);
  141. if (getParentId.code == 200) {
  142. parent_pinyin.value = getParentId.data.aLIas_pinyin
  143. } else {
  144. console.log("获得路由id出错!", getParentId.message)
  145. }
  146. //1.获得路由id end ---------------------------------------->
  147. //4.新闻详情 start ---------------------------------------->
  148. //4.1 资讯详情
  149. const newsDetail = ref({})
  150. const routeNewsTtitle = ref("");
  151. //4.2 发布日期
  152. const time = ref("");
  153. //4.3 路径
  154. const routLevelTitle = ref("");
  155. const routLevelId = ref("");
  156. //4.4 是否展示投票
  157. const articleChoice = ref(false);
  158. //4.5 获取详情
  159. async function getPageData() {
  160. const mkdata = await requestDataPromise('/web/selectWebsiteArticleInfo', {
  161. method: 'GET',
  162. query: {
  163. 'articleid': articleId
  164. },
  165. });
  166. console.log('111111111111111', mkdata.data);
  167. if (mkdata.code == 200) {
  168. //判断是否显示投票
  169. if (mkdata.data.is_survey == 1) {
  170. console.log("本篇文章含有投票!")
  171. articleChoice.value = true;
  172. }
  173. //获取内容
  174. newsDetail.value = mkdata.data;
  175. //获取路径
  176. routLevelTitle.value = newsDetail.value.cat_name;
  177. routLevelId.value = newsDetail.value.category_id;
  178. //获取发布时间
  179. time.value = newsDetail.value.updated_at.split(' ')[0];
  180. //修正标题长度
  181. if (newsDetail.value.title.length >= 20) {
  182. routeNewsTtitle.value = newsDetail.value.title.substr(0, 20) + "...";
  183. } else {
  184. routeNewsTtitle.value = newsDetail.value.title
  185. }
  186. } else {
  187. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  188. console.log("错误位置:获取详情内容")
  189. console.log("后端错误反馈:", mkdata.message)
  190. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  191. }
  192. }
  193. getPageData();
  194. //4.新闻详情 end ---------------------------------------->
  195. //5.广告 start ---------------------------------------->
  196. let adImg1 = ref([]);
  197. let adImg2 = ref([]);
  198. onMounted(async () => {
  199. const { $webUrl, $CwebUrl } = useNuxtApp();
  200. //广告1
  201. let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=snscw_detail_0001`
  202. const responseAd1 = await fetch(url, {
  203. headers: {
  204. 'Content-Type': 'application/json',
  205. 'Userurl': $CwebUrl,
  206. 'Origin': $CwebUrl
  207. }
  208. });
  209. const resultAd1 = await responseAd1.json();
  210. adImg1.value = resultAd1.data[0];
  211. //广告2
  212. let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=snscw_detail_0002`
  213. const responseAd2 = await fetch(url2, {
  214. headers: {
  215. 'Content-Type': 'application/json',
  216. 'Userurl': $CwebUrl,
  217. 'Origin': $CwebUrl
  218. }
  219. });
  220. const resultAd2 = await responseAd2.json();
  221. adImg2.value = resultAd2.data[0];
  222. })
  223. //5.广告 end ---------------------------------------->
  224. //6.设置seo信息 start---------------------------------------->
  225. // const setData = await requestDataPromise('/web/selectWebsiteArticleInfo', {
  226. // method: 'GET',
  227. // query: {
  228. // 'articleid': articleId
  229. // },
  230. // });
  231. // if (setData.code == 200) {
  232. // let seoTitle = setData.data.title;
  233. // let seoDescription = setData.data.introduce;
  234. // let seoKeywords = setData.data.keyword;
  235. // let seoSuffix = setData.data.suffix;
  236. // let seoName = setData.data.website_name;
  237. // useSeoMeta({
  238. // title: seoTitle + "_" + seoName + "_" + seoSuffix,
  239. // meta: [
  240. // { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
  241. // { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
  242. // ]
  243. // });
  244. // } else {
  245. // console.log("获取广告数据失败!", setData.message)
  246. // }
  247. //6.设置seo信息 end---------------------------------------->
  248. //8.页面图片放大 start---------------------------------------->
  249. const previewVisible = ref(false)
  250. const selectedImage = ref(' ')
  251. const openPreview = (event) => {
  252. if (event.target.tagName === 'IMG') {
  253. selectedImage.value = event.target.src;
  254. previewVisible.value = true;
  255. }
  256. }
  257. const closePreview = () => {
  258. previewVisible.value = false;
  259. }
  260. //8.页面图片放大 end---------------------------------------->
  261. </script>
  262. <style lang="less" scoped>
  263. @import url('@/assets/css/shop/newsDetail.less');
  264. </style>