index.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <template>
  2. <view class="i-h-v100 i-w-v100">
  3. <!-- 背景图片 -->
  4. <view class="i-pst-f i-z-index01">
  5. <image class="i-h-v100 i-w-v100" mode="scaleToFill" src="/static/image/homeBg.png"></image>
  6. </view>
  7. <!-- 内页按钮 -->
  8. <pageButton :buttonData="buttonData" :isShow="showModel != 'default'" :nowTitle="nowTitle"
  9. :pageStatus="pageStatus" @backEvent="backEvent" @tolastEvent="tolastEvent"></pageButton>
  10. <!-- 导航 -->
  11. <homeList :list="list" :isShow="showModel === 'default'" :pageStatus="pageStatus" :title="title" @customEvent="homeListEvent"
  12. @clearCacheEvent="clearCache">
  13. </homeList>
  14. <!-- 详情 -->
  15. <homeDetails :itemInfo="detail_info" :isShow="showModel === 'model_detail'" :pageStatus="pageStatus">
  16. </homeDetails>
  17. <!-- 列表 -->
  18. <listModel :list="detail_list" :isShow="showModel === 'model_list'" :pageStatus="pageStatus"
  19. :styleType="style_type" @toDetailEvent="toDetailEvent"></listModel>
  20. <!-- 名校列表 -->
  21. <schoolRank :list="rank_list" :schoolList="schoolList" :isShow="showModel === 'model_rank'" :pageStatus="pageStatus"
  22. @toDetailEvent="toDetailEvent"></schoolRank>
  23. </view>
  24. </template>
  25. <script>
  26. import data from '@/custom/data.js'
  27. export default {
  28. data() {
  29. return {
  30. // 后台设置的title
  31. title: ['金东方电子宣传册', '副标题'],
  32. buttonData: {
  33. lastpage: ['default'],
  34. lastpageIndex: 0 // 页面计数器
  35. },
  36. lastpageTitle: 'default',
  37. nowTitle: '',
  38. showModel: 'default',
  39. pageStatus: 1, //页面状态 1=进入,2=常态,3=退出
  40. homeAnimation: {},
  41. list: [], // 导航信息
  42. rank_list:[], // 名校排名列表
  43. schoolList:[],
  44. detail_list: [], // 列表信息
  45. detail_info: {
  46. img: '', // 详情信息
  47. },
  48. style_type: 1,
  49. timeStr:''
  50. }
  51. },
  52. onLoad() {
  53. // 加载字体
  54. uni.iCommon.getFontFamily()
  55. // 获取数据
  56. this.get_data()
  57. },
  58. onShow() {
  59. // 显示时检查后台数据是否刷新
  60. this.checkDataUpdate()
  61. },
  62. watch: {
  63. showModel(newVal) {
  64. // 回到首页重置返回按钮路径
  65. if (newVal == 'default') {
  66. this.buttonData.lastpage.splice(0, this.buttonData.lastpage.length)
  67. this.buttonData.lastpage.push('default')
  68. this.checkDataUpdate()
  69. } else if (this.buttonData.lastpage.length === this.buttonData.lastpageIndex) {
  70. // 进入内页
  71. this.buttonData.lastpage.push(newVal)
  72. }
  73. },
  74. list(newVal){
  75. if(uni.getStorageSync('school')){
  76. this.schoolList = uni.getStorageSync('school')
  77. }else{
  78. newVal[5].list.forEach((item, index) => {
  79. this.schoolList.push(item.list)
  80. });
  81. uni.getStorageSync('school',this.schoolList)
  82. }
  83. }
  84. },
  85. methods: {
  86. // 检查获取更新数据
  87. checkDataUpdate(){
  88. data.check_data_update(this)
  89. },
  90. // 执行各组件动画
  91. Animation_Controls(model_type) {
  92. this.pageStatus = 3
  93. setTimeout(() => {
  94. // 导航切换状态2 进入切换页
  95. // this.pageStatus = 2
  96. // 导航切换状态3 常态化切换页
  97. this.pageStatus = 1
  98. this.showModel = model_type
  99. setTimeout(() => {
  100. // this.pageStatus = 2
  101. }, 400)
  102. }, 300)
  103. },
  104. // 获取数据
  105. get_data() {
  106. data.get_home_list(this)
  107. },
  108. // 清除缓存并重新获取数据
  109. clearCache(e) {
  110. uni.removeStorageSync('list')
  111. console.log('已清除缓存')
  112. // 清空原有数据
  113. this.list = []
  114. this.detail_info = {}
  115. this.title = []
  116. // 重新获取数据
  117. this.get_data()
  118. },
  119. // list导航组件传递
  120. homeListEvent(e) {
  121. this.buttonData.lastpageIndex = 1 //页面计数器
  122. if (e.model_type != undefined) {
  123. // 按钮组件title
  124. this.nowTitle = e.title
  125. this.lastpageTitle = e.title
  126. // 当前显示组件
  127. this.detail_list = e.list
  128. this.style_type = e.style_type
  129. this.rank_list = e.list
  130. if (e.model_type === 'model_detail') {
  131. this.detail_info.img = e.list[0].inner_img
  132. }
  133. this.Animation_Controls(e.model_type) // 执行动画
  134. }
  135. },
  136. // 按钮组件回到首页传递
  137. backEvent() {
  138. this.Animation_Controls('default')
  139. },
  140. // 按钮组件返回上一页
  141. tolastEvent() {
  142. // 返回到首页
  143. if (this.buttonData.lastpage.length === 2) {
  144. // this.pageStatus = 2
  145. this.buttonData.lastpage = ['default']
  146. this.Animation_Controls(this.buttonData.lastpage[0])
  147. } else {
  148. // 返回上一页
  149. // this.pageStatus = 3
  150. this.buttonData.lastpageIndex -= 1
  151. this.buttonData.lastpage.pop()
  152. this.nowTitle = this.lastpageTitle
  153. this.Animation_Controls(this.buttonData.lastpage[1])
  154. }
  155. },
  156. // 内页传递(到3级页面)
  157. toDetailEvent(item) {
  158. // console.log(item)
  159. // this.pageStatus = 5
  160. this.buttonData.lastpageIndex += 1
  161. setTimeout(()=>{
  162. this.nowTitle = item.title
  163. },400)
  164. this.Animation_Controls('model_detail')
  165. this.detail_info.img = item.inner_img
  166. console.log(item.inner_img)
  167. }
  168. },
  169. }
  170. </script>
  171. <style>
  172. /* rem基准大小 */
  173. html {
  174. font-size: 9px;
  175. }
  176. </style>