index.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. const requestParams = ref({})//active类型
  12. const pageStatus = ref(false)
  13. let paramsData = reactive({
  14. params:{
  15. categoryid: 0,
  16. pageNum:1,
  17. pageSize:100,
  18. order:"sortindex",
  19. active:true
  20. },
  21. index:"",
  22. sub:0
  23. })
  24. let oldCategoryId= ref()
  25. //类型切换
  26. function facilityClick(item:any){
  27. //防抖
  28. if(item.id != oldCategoryId.value){
  29. requestParams.value = item
  30. paramsData = {
  31. params:{
  32. categoryid: item.id,
  33. pageNum:1,
  34. pageSize:10,
  35. order:"sortindex",
  36. active:true
  37. },
  38. index:store.state.currentPagePath,
  39. sub:store.state.sub
  40. }
  41. oldCategoryId.value = item.id
  42. store.dispatch('getPageData',paramsData)
  43. }
  44. }
  45. //详情页
  46. function details(item:any){
  47. let params = {
  48. path: `/services_Read`,
  49. query: {
  50. categoryid: item.categoryid,
  51. id: item.id,
  52. isUrlId: 1
  53. }
  54. }
  55. store.commit("setRoute",params)
  56. router.push(params)
  57. globalThis.scrollTo(0, 0)
  58. }
  59. //分页
  60. function handleCurrentChange(val:number){
  61. paramsData.params.pageNum = val
  62. store.dispatch('getPageData',paramsData).then(()=>{
  63. // globalThis.scrollTo({
  64. // top: 0,
  65. // behavior: "smooth"
  66. // })
  67. })
  68. }
  69. setTimeout(()=>{
  70. pageStatus.value = true
  71. })
  72. return { store, facilityClick, handleCurrentChange, details, pageStatus }
  73. },
  74. components:{
  75. banner,
  76. pagination
  77. },
  78. asyncData({ store,route } :any){
  79. let params = reactive(route.value) //路由参数
  80. //获取菜单列表
  81. return store.dispatch('getMenuList',params).then(()=>{
  82. const data = store.state.menuList
  83. let paramsData = reactive({
  84. params:{
  85. categoryid: 0,
  86. pageNum:1,
  87. pageSize:100,
  88. order:"sortindex",
  89. },
  90. index:"",
  91. sub:0
  92. })//页面主题内容请求参数
  93. let str = ref("")
  94. if(params.path.indexOf("_")>-1){
  95. str.value = params.path.split("_")[0]
  96. }
  97. for(let i=0;i<data.length;i++){
  98. //主页数据初始化
  99. if(!data[i].sname && params.path == data[i].path || data[i].path == str.value){
  100. paramsData = {
  101. params:{
  102. categoryid: data[i].id,
  103. pageNum:1,
  104. pageSize:100,
  105. order:"sortindex",
  106. },
  107. index:params.path,
  108. sub:i
  109. }
  110. if(!params.query?.categoryid){
  111. paramsData.params.categoryid = data[i].children[0].id
  112. }else{
  113. paramsData.params.categoryid = params.query.categoryid
  114. }
  115. return store.dispatch('getPageData',paramsData).then(()=>{
  116. store.commit("setColumnTypes",store.state.menuList[store.state.sub].children)
  117. })
  118. }
  119. }
  120. })
  121. }
  122. })
  123. </script>
  124. <template>
  125. <div class="pageContain">
  126. <section class="common-bradcrumb-section">
  127. <banner />
  128. <section class="product-grid-section " style="text-align: center;position:absolute;bottom:0" :style="{'width': '100%'}" >
  129. <ul class="cannot_selected tabs_selected" >
  130. <a v-for="(item,index) in store.state.columnTypes" :class="item.id == store.state.acitveId ? 'active' : ''"
  131. v-on:mouseover="facilityClick(item)" :style="{'width':(1/store.state.columnTypes.length*100)+'%' }" :key="index">{{item.categoryName}}</a>
  132. </ul>
  133. </section>
  134. </section>
  135. <section class="product-grid-section container pt-20 pb-60 lazyContainer" v-show="pageStatus">
  136. <div class="row pt-80 content" >
  137. <div class="col-md-4 newItemOne " v-for="item in store.state.pageContent" :key="item.id">
  138. <div class="oneInnerBox" @click="details(item)">
  139. <div class="img">
  140. <img v-lazy="item.image" alt="" :data-src="item.image">
  141. </div>
  142. <a class="line-two">{{item.title}}</a>
  143. <span class="line-two">{{item.zhaiyao}}</span>
  144. </div>
  145. </div>
  146. </div>
  147. <pagination :data="store.state.pagination" @pagination="handleCurrentChange" />
  148. </section>
  149. </div>
  150. </template>
  151. <style lang="scss" scoped>
  152. </style>