article.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <!-- 文章总页面 -->
  2. <template>
  3. <div>
  4. <SldHomeTopSearch />
  5. <NavTopBar/>
  6. <NavCatHeader />
  7. <div class="article_line"></div>
  8. <div class="headPath">
  9. <el-breadcrumb
  10. separator-class="el-icon-arrow-right"
  11. style="line-height: 40px; margin-bottom: 5px"
  12. >
  13. <el-breadcrumb-item :to="{ path: '/' }">{{ L["首页"] }}</el-breadcrumb-item>
  14. <el-breadcrumb-item>{{ L["文章"] }}</el-breadcrumb-item>
  15. <el-breadcrumb-item v-if="data.categoryId">{{ data.title }}</el-breadcrumb-item>
  16. </el-breadcrumb>
  17. </div>
  18. <div class="article_wrap">
  19. <div class="nav">
  20. <div class="article_container">
  21. <template v-if="!data.categoryId && data.cate.length == 0 && !data.show">
  22. <SldCommonEmpty totalWidth="1200" :tip="L['暂无文章数据']" />
  23. </template>
  24. <template v-else>
  25. <ArticleLeft
  26. @seeDetail="seeDetail"
  27. @settitle="setTitle"
  28. @getArticalDetail="getArticalDetail"
  29. >
  30. </ArticleLeft>
  31. <ArticleRight
  32. ref="mychild"
  33. :cate="data.cate"
  34. :title="data.title"
  35. ></ArticleRight>
  36. </template>
  37. </div>
  38. </div>
  39. </div>
  40. </div>
  41. </template>
  42. <script setup>
  43. import { ElBreadcrumb, ElBreadcrumbItem } from "element-plus";
  44. import { useRoute } from "vue-router";
  45. import { getCurLanguage } from '@/composables/common.js';
  46. useHead({
  47. title: 'Service Center',
  48. meta: [
  49. {
  50. name: "description",
  51. content: 'Service Center',
  52. },
  53. {
  54. name: "keywords",
  55. content: 'Service Center',
  56. },
  57. ],
  58. });
  59. const L = getCurLanguage();
  60. const router = useRouter()
  61. const poxy = getCurrentInstance(); //获取组件上下文对象
  62. const { proxy } = getCurrentInstance();
  63. const route = useRoute();
  64. const mychild = ref(null); //获取dom的ref,名字同名
  65. const data = reactive({
  66. //基本数据
  67. cate: "",
  68. allCategory: "",
  69. title: "",
  70. categoryId: route.query.categoryId,
  71. show: false,
  72. });
  73. //通过articleId获取文章详情
  74. const seeDetail = (articleId) => {
  75. poxy.refs.mychild.getContent(articleId);
  76. };
  77. //设置文章标题
  78. const setTitle = (val) => {
  79. data.title = val;
  80. };
  81. //通过categoryId获取文章列表
  82. const getArticalDetail = (title, categoryId, state) => {
  83. const params = {};
  84. params.size = 10000;
  85. params.categoryId = categoryId;
  86. get("v3/cms/front/article/articleList", params).then((res) => {
  87. if (res.state == 200) {
  88. data.cate = res.data;
  89. data.title = title;
  90. poxy.refs.mychild.childMethod();
  91. if (state) {
  92. data.show = true;
  93. } else {
  94. data.show = false;
  95. }
  96. }
  97. });
  98. };
  99. //文章列表初始化
  100. const getInfo = () => {
  101. const params = {};
  102. params.size = 10000;
  103. params.categoryId = route.query.categoryId;
  104. get("v3/cms/front/article/articleList", params).then((res) => {
  105. if (res.state == 200) {
  106. data.cate = res.data;
  107. }
  108. });
  109. };
  110. onMounted(() => {
  111. getInfo();
  112. setTimeout(() => {
  113. sldStatEvent({ behaviorType: 'pv',pageUrl: defaultUrl + router.currentRoute.value.path, referrerPageUrl: apiUrl });
  114. }, 3000)
  115. });
  116. watchEffect(() => {
  117. data.categoryId = route.query.categoryId;
  118. });
  119. </script>
  120. <style lang="scss" scoped>
  121. @import "@/assets/style/theme.scss";
  122. .article_line {
  123. border-top: 2px solid $colorMain;
  124. }
  125. .headPath {
  126. width: 1200px;
  127. margin: 0 auto;
  128. }
  129. .article_wrap {
  130. background-image: url("/article/bg.png");
  131. padding-top: 10px;
  132. padding-bottom: 50px;
  133. height: 100%;
  134. /* // width: 1200px;
  135. // border-top:3px solid #358EFF; */
  136. background-repeat: no-repeat;
  137. background-position: top top;
  138. background-size: cover;
  139. }
  140. .nav {
  141. // display: flex;
  142. width: 1200px;
  143. margin: 0 auto;
  144. .article_container {
  145. position: relative;
  146. display: block;
  147. overflow: hidden;
  148. }
  149. }
  150. .sld_common_empty {
  151. padding-top: 160px !important;
  152. background-color: #ffffff;
  153. }
  154. </style>