index.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <template>
  2. <div class="client-newsInfor-page">
  3. <!-- 新闻资讯banner栏 -->
  4. <div class="newsInfor-banner">
  5. <img @click="clickBanner(bannerList[0].url)" :src="bannerList[0].pic" alt="新闻资讯">
  6. </div>
  7. <!-- 新闻资讯 -->
  8. <ul class="platform-menu-ul2 mta-hidden-xs">
  9. <li style="cursor: pointer"
  10. :class="{'active':activeIndex===index}"
  11. @click="btnClick(item,index)"
  12. :key="index"
  13. v-for="(item,index) in newsClassifyData">
  14. {{item.name}}
  15. </li>
  16. </ul>
  17. <ul class="platform-menu-ul mta-hidden-sm">
  18. <li style="cursor: pointer"
  19. :class="{'active':activeIndex===index}"
  20. @click="btnClick(item,index)"
  21. :key="index"
  22. v-for="(item,index) in newsClassifyData">
  23. {{item.name}}
  24. </li>
  25. </ul>
  26. <div class="client-container newsInfor-content-box">
  27. <ul class="newsInfor-content-ul">
  28. <new-list
  29. v-for="(item,index) in newsList"
  30. :newsData="item"
  31. :key="index"></new-list>
  32. </ul>
  33. <div class="client-el-pagination">
  34. <el-pagination
  35. background
  36. small
  37. class="mta-hidden-sm"
  38. layout="prev, pager, next"
  39. @current-change="handleCurrentChange"
  40. :current-page.sync="currentPage"
  41. :page-size="pageSize"
  42. :total="totalLists">
  43. </el-pagination>
  44. <el-pagination
  45. background
  46. class="mta-hidden-xs"
  47. layout="prev, pager, next"
  48. @current-change="handleCurrentChange"
  49. :current-page.sync="currentPage"
  50. :page-size="pageSize"
  51. :total="totalLists">
  52. </el-pagination>
  53. </div>
  54. </div>
  55. </div>
  56. </template>
  57. <script>
  58. import NewList from '~/components/news/NewsList';
  59. const defaultNewsClassifyId = 0;
  60. export default {
  61. name: 'news',
  62. layout: 'templateB',
  63. components: {
  64. NewList
  65. },
  66. async asyncData({ $axios, store }) {
  67. // 设置选中菜单
  68. store.commit('setActiveNav', '/news');
  69. try {
  70. const url = '/home/news/classify/list';
  71. const res = await $axios.post(url);
  72. const { data: { data } } = res;
  73. const url2 = '/home/news/list';
  74. const opt = {
  75. page: 1,
  76. size: 5,
  77. newsClassifyId: data[1].newsClassifyId || defaultNewsClassifyId,
  78. };
  79. const res2 = await $axios.post(url2, opt);
  80. const { data: { data: data2 } } = res2;
  81. let [res1] = await Promise.all([
  82. await $axios.$post(`/home/banner/list`, { 'code': 17 }).then(res => {
  83. return res;
  84. }),
  85. ]);
  86. return {
  87. bannerList: res1.data.data||[],
  88. newsList: data2.data || [],
  89. totalLists: data2.total || defaultNewsClassifyId,
  90. newsClassifyData: data || [],
  91. curNewsClassifyId: data[1].newsClassifyId || defaultNewsClassifyId,
  92. };
  93. } catch (e) {
  94. return {
  95. newsList: [],
  96. totalLists: 0,
  97. newsClassifyData: [],
  98. curNewsClassifyId: defaultNewsClassifyId,
  99. };
  100. }
  101. },
  102. data() {
  103. return {
  104. clicked: 0,
  105. newsClassifyId: null,
  106. homeNewsClassify: [],
  107. totalLists: 0,
  108. currentPage: 1,
  109. pageSize: 5,
  110. // 新闻分类数据
  111. // newsClassifyData: [],
  112. // 新闻数据
  113. newsList: [],
  114. activeIndex: 1,
  115. // banner图
  116. newsInforBannerImg: require(`~/static/images/client/newsInfor/newsInfor-banner-img.png`),
  117. };
  118. },
  119. head(){
  120. return {
  121. title: '线上考试培训行业资讯',
  122. meta: [
  123. {
  124. name: 'keywords',
  125. content: '在线考试系统_在线培训系统'
  126. },
  127. {
  128. name:'description',
  129. content:'在线考试培训行业实时新闻资讯,关注行业动态,努力研发更智能在线考试系统,满足客户需求。'
  130. }
  131. ],
  132. }
  133. },
  134. methods: {
  135. clickBanner(data){
  136. if(data){
  137. window.open(data)
  138. }
  139. },
  140. handleCurrentChange(val) {
  141. this.currentPage = val;
  142. this.getMessage();
  143. },
  144. async getMessage() {
  145. let opt = {
  146. newsClassifyId: this.curNewsClassifyId,
  147. page: this.currentPage,
  148. size: this.pageSize,
  149. };
  150. const url2 = '/home/news/list';
  151. const res2 = await this.$axios.post(url2, opt);
  152. this.newsList = res2.data.data.data;
  153. this.totalLists = res2.data.data.total || defaultNewsClassifyId;
  154. },
  155. btnClick(data, index) {
  156. this.activeIndex = index;
  157. console.log(data);
  158. this.curNewsClassifyId = data.newsClassifyId;
  159. this.currentPage = 1;
  160. this.getMessage();
  161. },
  162. },
  163. mounted() {
  164. }
  165. };
  166. </script>
  167. <style lang="scss" scoped>
  168. .platform-menu-ul2 {
  169. margin: 110px auto 90px;
  170. text-align: center;
  171. display: flex;
  172. justify-content: center;
  173. position: relative;
  174. &:after {
  175. content: '';
  176. position: absolute;
  177. bottom: -28px;
  178. width: 500px;
  179. height: 1px;
  180. background-color: #7CC659;
  181. }
  182. li {
  183. font-size: 30px;
  184. font-weight: 800;
  185. color: #9C9C9C;
  186. margin-right: 190px;
  187. &.active {
  188. color: #333;
  189. position: relative;
  190. &:after {
  191. content: '';
  192. width: 100%;
  193. position: absolute;
  194. bottom: -28px;
  195. left: 0;
  196. height: 3px;
  197. background-color: #00b96b;
  198. }
  199. }
  200. &:last-child {
  201. margin-right: 0;
  202. }
  203. }
  204. @media (max-width: 768px) {
  205. &:after {width: 50%;}
  206. }
  207. }
  208. </style>