article.vue 3.9 KB

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