index.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <script lang="ts">
  2. import { ref, reactive, defineComponent } from 'vue'
  3. import { useStore } from 'vuex'
  4. import { useRouter } from "vue-router";
  5. import banner from '@/components/layout/banner.vue'
  6. import pagination from '@/components/layout/pagination.vue'
  7. export default defineComponent({
  8. setup(){
  9. const store = useStore()
  10. const router = useRouter()
  11. let requestParams:any = reactive({})//active类型
  12. let paramsData = reactive({
  13. params:{
  14. categoryid: 0,
  15. pageNum:1,
  16. pageSize:store.state.pagination.size,
  17. order:"sortindex",
  18. acitve:true
  19. },
  20. index:"",
  21. sub:0
  22. })
  23. const pageStatus = ref(false)
  24. let oldCategoryId= ref(store.state.columnTypes[0].id)
  25. const columnActive=ref({})
  26. var columnOne= store.state.columnTypes.filter((item:any) => {
  27. return item.id == store.state.acitveId;
  28. });
  29. columnActive.value=columnOne[0]
  30. //类型切换
  31. function facilityClick(item:any){
  32. columnActive.value=item
  33. //防抖
  34. if(item.id != oldCategoryId.value){
  35. requestParams = item;
  36. paramsData.params.categoryid = item.id;
  37. paramsData.index = store.state.currentPagePath
  38. paramsData.sub = store.state.sub
  39. store.state.acitveId
  40. // paramsData = {
  41. // params:{
  42. // categoryid: item.id,
  43. // pageNum:1,
  44. // pageSize:30,
  45. // order:"sortindex",
  46. // acitve:true,
  47. // },
  48. // index:store.state.currentPagePath,
  49. // sub:store.state.sub
  50. // }
  51. oldCategoryId.value = item.id
  52. store.dispatch('getPageData',paramsData)
  53. }
  54. }
  55. //详情页
  56. function details(item:any){
  57. let params = {
  58. path: `/job_Read`,
  59. query: {
  60. categoryid: item.categoryid,
  61. id: item.id,
  62. isUrlId: 1
  63. }
  64. }
  65. store.commit("setRoute",params)
  66. router.push(params)
  67. }
  68. //分页
  69. function handleCurrentChange(val:number){
  70. paramsData.params.categoryid = store.state.acitveId
  71. paramsData.params.pageNum = val
  72. store.dispatch('getPageData',paramsData)
  73. }
  74. setTimeout(()=>{
  75. pageStatus.value = true
  76. },300)
  77. return { store, facilityClick, handleCurrentChange, details, pageStatus,columnActive }
  78. },
  79. components:{
  80. banner,
  81. pagination
  82. },
  83. asyncData({ store,route } :any){
  84. let params = reactive(route.value) //路由参数
  85. //获取菜单列表
  86. return store.dispatch('getMenuList',params).then(()=>{
  87. const data = reactive(store.state.menuList)
  88. let paramsData:any = reactive({})//页面主题内容请求参数
  89. let str = ref("")
  90. if(params.path.indexOf("_")>-1){
  91. str.value = params.path.split("_")[0]
  92. }
  93. for(let i=0;i<data.length;i++){
  94. if(!data[i].sname && params.path == data[i].path || data[i].path == str.value){
  95. paramsData = {
  96. params:{
  97. categoryid: data[i].id,
  98. pageNum:1,
  99. pageSize:store.state.pagination.size,
  100. // order:"sortindex",
  101. },
  102. index:params.path,
  103. sub:i
  104. }
  105. if(!params.query?.categoryid){
  106. paramsData.params.categoryid = data[i].children[0].id
  107. }else{
  108. paramsData.params.categoryid = params.query.categoryid
  109. }
  110. return store.dispatch('getPageData',paramsData).then(()=>{
  111. store.commit("setColumnTypes",store.state.menuList[store.state.sub].children)
  112. })
  113. }
  114. }
  115. })
  116. }
  117. })
  118. </script>
  119. <template>
  120. <div class="pageContain">
  121. <section class="common-bradcrumb-section">
  122. <banner />
  123. </section>
  124. <section class="news-content-section pt-70" >
  125. <div class="container">
  126. <div style="display:flex" class="job-box">
  127. <div class=" news-left-list">
  128. <div class="title">热门岗位</div>
  129. <ul>
  130. <li v-for="(item,index) in store.state.columnTypes" :key="index" style="display:flex">
  131. <img src="@/assets/img/news/arrow.svg" alt="" :style="{'opacity':item.id == store.state.acitveId?'1':'0'}" style="width:12px;margin-right:5px">
  132. <div :class="item.id == store.state.acitveId ? 'active' : ''" v-on:mouseover="facilityClick(item)">{{item.categoryName}} </div>
  133. </li>
  134. </ul>
  135. </div>
  136. <div class="news-right-list" >
  137. <div class="title" v-if="columnActive.categoryName">{{columnActive.categoryName}}</div>
  138. <ul>
  139. <li class="" v-for="(item,index) in store.state.pageContent" :key="index" v-show="pageStatus">
  140. <div @click="details(item)">
  141. <a class="newsTitleLeft"><span style="width: 8px;height: 8px;background: #B7B7B7;border-radius: 50%;margin-right:30px"></span>{{item.title}}</a>
  142. <span class="timeRight" >{{ item.createdate.substring(0, 10) }}</span>
  143. </div>
  144. </li>
  145. </ul>
  146. <pagination :data="store.state.pagination" @pagination="handleCurrentChange" />
  147. </div>
  148. </div>
  149. </div>
  150. </section>
  151. <br>
  152. <br>
  153. <!-- <section style=" background:#F7F7F7">
  154. <div class="container">
  155. <div class="row newTypeBox">
  156. <div class="col-lg-6 col-md-6" v-for="(item,index) in store.state.columnTypes" :key="index">
  157. <div class="titleOne" :class="item.id == store.state.acitveId ? 'active' : ''" v-on:mouseover="facilityClick(item)">{{item.categoryName}} </div>
  158. </div>
  159. </div>
  160. </div>
  161. </section> -->
  162. <!-- <section class="news-content-section pt-70" v-show="pageStatus">
  163. <div class="container">
  164. <div class="row">
  165. <div class="col-lg-12 col-md-12 content">
  166. <ul>
  167. <div class="row">
  168. <div class="col-md-4 newItemOne lazyContainer" v-for="(item,index) in store.state.pageContent" :key="index" >
  169. <div class="oneInnerBox" @click="details(item)">
  170. <div class="img" style="overflow:hidden">
  171. <el-image :src="item.image" alt="" :data-src="item.image" fit="contain" style="display:block" />
  172. </div>
  173. <a class="line-two">{{item.title}}</a>
  174. <span>{{ item.createdate }}</span>
  175. </div>
  176. </div>
  177. </div>
  178. </ul>
  179. <pagination :data="store.state.pagination" @pagination="handleCurrentChange" />
  180. </div>
  181. </div>
  182. </div>
  183. </section> -->
  184. </div>
  185. </template>
  186. <style lang="scss" scoped>
  187. </style>