index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. <template>
  2. <!-- 头部 -->
  3. <templateHead v-if="skinId<=4"></templateHead>
  4. <!-- 皮肤5头部 -->
  5. <templateHead5 v-if="skinId==5"></templateHead5>
  6. <!-- 皮肤6头部 -->
  7. <templateHead6 v-if="skinId==6"></templateHead6>
  8. <!-- 皮肤7头部 -->
  9. <templateHead7 v-if="skinId==7"></templateHead7>
  10. <!-- 菜单 -->
  11. <templateMenu v-if="skinId<=4"></templateMenu>
  12. <!-- 皮肤5菜单 -->
  13. <templateMenu5 v-if="skinId>=5"></templateMenu5>
  14. <!-- 内容 -->
  15. <div v-for="(item,index) in templateData" :key="index">
  16. <!--1.广告通栏-->
  17. <div v-if="item.sectorName=='adSector'">
  18. <templateAd :skinId="skinId" :adData="adData" :adTag="item.ad.ad_tag"></templateAd>
  19. </div>
  20. <!--2.头条通栏 data返回值错误 没有依照level字段返回 而是返回了政策法规-->
  21. <div v-if="item.sectorName=='headLineSector'">
  22. <templateHeadline :skinId="skinId" :templateData="item.componentList"></templateHeadline>
  23. </div>
  24. <!--3.轮播图通栏 data返回值错误 没有依照level字段返回 而是返回了政策法规-->
  25. <div v-if="item.sectorName=='bannerSector'">
  26. <templateBanner :skinId="skinId" :templateData="item.componentList"></templateBanner>
  27. </div>
  28. <!--3.1 轮播图通栏 皮肤5-->
  29. <div v-if="item.sectorName=='bannerSectorMerge'">
  30. <templateBannerMerge :skinId="skinId" :templateData="item.componentList"></templateBannerMerge>
  31. </div>
  32. <!--4.静态外链通栏-->
  33. <div v-if="item.sectorName=='linkSector'">
  34. <templateStaticLink :skinId="skinId"></templateStaticLink>
  35. </div>
  36. <!-- 4.1 静态外链通栏 皮肤5-->
  37. <div v-if="item.sectorName=='linkCxfwSector'">
  38. <templateLinkCxfwSector :skinId="skinId"></templateLinkCxfwSector>
  39. </div>
  40. <!--5.图文组合1 标题字段缺少is_url / children_count-->
  41. <div v-if="item.sectorName=='manyPictureSector'">
  42. <templateNewSector1 :skinId="skinId" :templateData="item.componentList"></templateNewSector1>
  43. </div>
  44. <!--6.图文组合2 标题字段缺少is_url / children_count-->
  45. <div v-if="item.sectorName=='commentSector'">
  46. <templateNewSector2 :skinId="skinId" :templateData="item.componentList"></templateNewSector2>
  47. </div>
  48. <!--7.图文组合3 标题字段缺少is_url / children_count-->
  49. <div v-if="item.sectorName=='listSector'">
  50. <templateNewSector3 :skinId="skinId" :templateData="item.componentList"></templateNewSector3>
  51. </div>
  52. <!--8.图文混合模块 标题字段缺少is_url / children_count-->
  53. <div v-if="item.sectorName=='onlyImgSector'">
  54. <templateNewAndAd :skinId="skinId" :templateData="item.componentList" :adData="adData" :adTag="item.ad.ad_tag"></templateNewAndAd>
  55. </div>
  56. <!-- 9.带有一个选项卡的新闻通栏 -->
  57. <div v-if="item.sectorName=='newsTabsSector'">
  58. <templateNewsTabSector :skinId="skinId" :templateData="item.componentList"></templateNewsTabSector>
  59. </div>
  60. <!-- 10.选项卡资讯带两个广告-->
  61. <div v-if="item.sectorName=='newsTabsAdSector'">
  62. <templateNewsTabsAdSector :skinId="skinId" :templateData="item.componentList" :adData="item.ad"></templateNewsTabsAdSector>
  63. </div>
  64. <!-- 11.带有行业聚焦标题的新闻通栏-->
  65. <div v-if="item.sectorName=='NewsHyjjSector'">
  66. <templateNewsHyjjSector :skinId="skinId" :templateData="item.componentList"></templateNewsHyjjSector>
  67. </div>
  68. <!-- 12.文字新闻通栏-->
  69. <div v-if="item.sectorName=='newsTextSector'">
  70. <templateNewsTextSector :skinId="skinId" :templateData="item.componentList"></templateNewsTextSector>
  71. </div>
  72. <!-- 13.两个选项卡文字新闻通栏-->
  73. <div v-if="item.sectorName=='newsTabsTextSector'">
  74. <templateNewsTabsTextSector :skinId="skinId" :templateData="item.componentList"></templateNewsTabsTextSector>
  75. </div>
  76. <!-- 14.所有图片新闻通栏-->
  77. <div v-if="item.sectorName=='newsAllPictureSector'">
  78. <templateNewsAllPictureSector :skinId="skinId" :templateData="item.componentList"></templateNewsAllPictureSector>
  79. </div>
  80. <!-- 15.皮肤6 带标题带选项卡图文组合1 -->
  81. <div v-if="item.sectorName=='newsTextTabsSector'">
  82. <templateNewsTextTabsSector :skinId="skinId" :templateData="item.componentList"></templateNewsTextTabsSector>
  83. </div>
  84. <!-- 16.皮肤6 选项卡图文组合通栏1 -->
  85. <div v-if="item.sectorName=='TabsTextPhotoSector'">
  86. <templateTabsTextPhotoSector :skinId="skinId" :templateData="item.componentList"></templateTabsTextPhotoSector>
  87. </div>
  88. <!-- 17.皮肤6 带标题带选项卡图文组合2 -->
  89. <div v-if="item.sectorName=='newsTitleTabsSector'">
  90. <templateNewsTitleTabsSector :skinId="skinId" :templateData="item.componentList"></templateNewsTitleTabsSector>
  91. </div>
  92. <!-- 18.皮肤6 选项卡图文组合通栏2 -->
  93. <div v-if="item.sectorName=='TabsTextPhotoTwo'">
  94. <templateTabsTextPhotoTwo :skinId="skinId" :templateData="item.componentList"></templateTabsTextPhotoTwo>
  95. </div>
  96. <!-- 19.皮肤6 纯图片选项卡通栏 -->
  97. <div v-if="item.sectorName=='photoTabsSector'">
  98. <templatePhotoTabsSector :skinId="skinId" :templateData="item.componentList"></templatePhotoTabsSector>
  99. </div>
  100. <!-- 20.皮肤8 轮播图通栏 -->
  101. <div v-if="item.sectorName=='bigBannerSectorMerge'">
  102. <templateBigBannerSectorMerge :skinId="skinId" :templateData="item.componentList"></templateBigBannerSectorMerge>
  103. </div>
  104. <!-- 21.皮肤7 带选项卡图文组合 -->
  105. <div v-if="item.sectorName=='newsTextTabsImgSector'">
  106. <templateNewsTextTabsImgSector :skinId="skinId" :templateData="item.componentList"></templateNewsTextTabsImgSector>
  107. </div>
  108. <!-- 22.皮肤7 行业聚焦 -->
  109. <div v-if="item.sectorName=='skinSevenNewsHyjjSector'">
  110. <templateSkinSevenNewsHyjjSector :skinId="skinId" :templateData="item.componentList"></templateSkinSevenNewsHyjjSector>
  111. </div>
  112. <!-- 24.皮肤7 外链面板-带查询服务标题 -->
  113. <div v-if="item.sectorName=='biglinkCxfwSector'">
  114. <templateBiglinkCxfwSector :skinId="skinId" :templateData="item.componentList"></templateBiglinkCxfwSector>
  115. </div>
  116. <!-- 23.皮肤7 选项卡图片文字混合通栏 -->
  117. <div v-if="item.sectorName=='mixTabSector'">
  118. <templateMixTabSector :skinId="skinId" :templateData="item.componentList"></templateMixTabSector>
  119. </div>
  120. </div>
  121. <!-- 底部 -->
  122. <templateFoot v-if="skinId<=4"></templateFoot>
  123. <!-- 皮肤5底部 -->
  124. <templateFoot1 v-if="skinId==5||skinId==6"></templateFoot1>
  125. <!-- 皮肤7底部 -->
  126. <templateFoot2 v-if="skinId==7"></templateFoot2>
  127. </template>
  128. <script setup lang="ts">
  129. import type { IWebSiteBase } from '@/utils/dataInterface'
  130. //0.加载全局模板组件 start---------------------------------------->
  131. //0.1 全局通栏
  132. import templateHead from '@/components/template/sector/head/1200x200/1.vue'
  133. import templateHead5 from '@/components/template/sector/head/1200x250/1.vue'
  134. import templateHead6 from '@/components/template/sector/head/1200x250/6.vue'
  135. import templateHead7 from '@/components/template/sector/head/1200x250/7.vue'
  136. import templateMenu from '@/components/template/sector/menu/1200x130/1.vue'
  137. import templateMenu5 from '@/components/template/sector/menu/1200x187/1.vue'
  138. import templateFoot from '@/components/template/sector/foot/1200x580/1.vue'
  139. import templateFoot1 from '@/components/template/sector/foot/1200x680/1.vue'
  140. import templateFoot2 from '@/components/template/sector/foot/1200x700/1.vue'
  141. //0.2 局部通栏
  142. //0.2.1 广告组件
  143. import templateAd from '@/components/template/sector/body/ad/1200x90/1.vue'
  144. //0.2.2 网站头条
  145. import templateHeadline from '@/components/template/sector/body/index/headLine/1200x140/1.vue'
  146. //0.2.3 轮播图
  147. import templateBanner from '@/components/template/sector/body/index/banner/1200x410/1.vue'
  148. //0.2.3.1 轮播图通栏
  149. import templateBannerMerge from '@/components/template/sector/body/index/banner/1200x410/2.vue'
  150. //0.2.4 静态外链通栏
  151. import templateStaticLink from '@/components/template/sector/body/index/link/1200x230/1.vue'
  152. //0.2.5.1 静态外链通栏 皮肤5
  153. import templateLinkCxfwSector from '@/components/template/sector/body/index/link/1200x250/1.vue'
  154. //0.2.5 图文组合1
  155. import templateNewSector1 from '@/components/template/sector/body/index/list/1200x470/1.vue'
  156. //0.2.6 图文组合2
  157. import templateNewSector2 from '@/components/template/sector/body/index/list/1200x470/2.vue'
  158. //0.2.7 图文组合3
  159. import templateNewSector3 from '@/components/template/sector/body/index/list/1200x980/1.vue'
  160. //0.2.8 图文与广告组合
  161. import templateNewAndAd from '@/components/template/sector/body/index/list/1200x480/1.vue'
  162. //0.2.9 带有选项卡的新闻通栏
  163. import templateNewsTabSector from '@/components/template/sector/body/index/list/1200x350/1.vue'
  164. // 0.2.10 选项卡资讯带两个广告
  165. import templateNewsTabsAdSector from '@/components/template/sector/body/index/list/1200x370/1.vue'
  166. //0.2.11 带有行业聚焦标题的新闻通栏
  167. import templateNewsHyjjSector from '@/components/template/sector/body/index/list/1200x530/1.vue'
  168. //0.2.12 文字新闻通栏
  169. import templateNewsTextSector from '@/components/template/sector/body/index/list/1200x401/1.vue'
  170. //0.2.13 两个选项卡文字新闻通栏
  171. import templateNewsTabsTextSector from '@/components/template/sector/body/index/list/1200x250/1.vue'
  172. //0.2.14 所有图片新闻通栏
  173. import templateNewsAllPictureSector from '@/components/template/sector/body/index/list/1200x380/1.vue'
  174. //0.2.15 皮肤6 带标题带选项卡图文组合1
  175. import templateNewsTextTabsSector from '~/components/template/sector/body/index/list/1200x430/6/1.vue'
  176. //0.2.16 皮肤6 带标题带选项卡图文组合选项卡图文组合通栏
  177. import templateTabsTextPhotoSector from '~/components/template/sector/body/index/list/1200x480/6/1.vue'
  178. //0.2.17 皮肤6 带标题带选项卡图文组合2
  179. import templateNewsTitleTabsSector from '@/components/template/sector/body/index/list/1200x540/1.vue'
  180. //0.2.18 皮肤6 选项卡图文组合通栏2
  181. import templateTabsTextPhotoTwo from '~/components/template/sector/body/index/list/1200x480/6/2.vue'
  182. //0.2.19 皮肤6 纯图片选项卡通栏
  183. import templatePhotoTabsSector from '~/components/template/sector/body/index/list/1200x430/6/2.vue'
  184. //0.2.19 皮肤7 轮播图通栏
  185. import templateBigBannerSectorMerge from '@/components/template/sector/body/index/banner/1200x480/1.vue'
  186. //0.2.20 皮肤7 选项卡图片文字混合通栏
  187. import templateMixTabSector from '@/components/template/sector/body/index/list/1200x430/7/1.vue'
  188. //0.2.21 皮肤7 外链面板-带查询服务标题
  189. import templateBiglinkCxfwSector from '@/components/template/sector/body/index/link/1200x320/1.vue'
  190. //02.22 皮肤7 图文混合行业聚焦通栏
  191. import templateSkinSevenNewsHyjjSector from '@/components/template/sector/body/index/list/1200x720/1.vue'
  192. //0.2.23 皮肤7 带选项卡图文组合
  193. import templateNewsTextTabsImgSector from '@/components/template/sector/body/index/list/1200x1150/1.vue'
  194. //0.加载全局模板组件 end---------------------------------------->
  195. //1.获得基本信息单元 start---------------------------------------->
  196. //1.1获得页面依赖
  197. import { ref,onMounted } from 'vue';
  198. //1.2获得pinia源
  199. import { useTemplateBaseStore } from '@/stores/templateBase'
  200. const templateBaseStore:any = useTemplateBaseStore()
  201. //1.3获得该页的皮肤id - 在每个组件中也是同样的获得方法
  202. const skinId = ref<number>(0)
  203. const websiteId = ref<number>(0)
  204. //1.4获得站点基本信息
  205. try {
  206. const responseStatus:any = await requestDataPromise('/web/getWebsiteAllinfo', {
  207. method: 'GET',
  208. query: {
  209. 'link_textnum':24,
  210. 'link_imgnum':18,
  211. 'link_footnum':4
  212. },
  213. });
  214. if (responseStatus.code == 200) {
  215. if(responseStatus.data.website_foot.foot_info.status == 1){
  216. //网站模板已停用,直接转入404页面
  217. navigateTo('/error?findPage=index')
  218. }else{
  219. //0.3.1设置站点基本信息
  220. templateBaseStore.setWebSiteInfo(responseStatus.data as IWebSiteBase)
  221. websiteId.value = responseStatus.data.website_head.id;//获得网站id
  222. //0.3.2设置皮肤id
  223. skinId.value = templateBaseStore.webSiteInfo.website_foot.foot_info.template_id;
  224. console.log("当前的网站id:"+responseStatus.data.website_head.id)
  225. //0.3.3设置seo信息
  226. let seoTitle = templateBaseStore.webSiteInfo.website_head.title;
  227. let seoDescription = templateBaseStore.webSiteInfo.website_head.description;
  228. let seoKeywords = templateBaseStore.webSiteInfo.website_head.keywords;
  229. let seoSuffix = templateBaseStore.webSiteInfo.website_head.suffix;
  230. let seoName = templateBaseStore.webSiteInfo.website_head.website_name;
  231. useHead({
  232. title: seoTitle + "_" + seoSuffix,
  233. meta: [
  234. { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
  235. { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
  236. ]
  237. });
  238. }
  239. }else if(responseStatus.code == 0){
  240. navigateTo('/error?findPage=index')
  241. }
  242. } catch (error) {
  243. navigateTo('/error?findPage=index')
  244. }
  245. //1.获得基本信息单元 end---------------------------------------->
  246. //2.页面数据 start---------------------------------------->
  247. //2.1获得页面数据
  248. const templateData = ref<any[]>([])
  249. const adData = ref<any[]>([]);
  250. try {
  251. const response = await requestDataPromise('/client/indexData', {
  252. method: 'POST',
  253. body: {
  254. 'website_id':websiteId.value,
  255. 'getpage':'index'
  256. },
  257. });
  258. console.log('获得页面数据:',response.data.template.index)
  259. if(response.code == 200){
  260. //页面数据
  261. templateData.value = response.data.template.index;
  262. //是否启用搜索功能
  263. templateBaseStore.setIsSearch(response.data.isSearch)
  264. //广告数据
  265. adData.value.push(response.data.ad.top)
  266. for(let item of response.data.ad.index){
  267. adData.value.push(item)
  268. }
  269. templateBaseStore.setAdList(adData.value)
  270. }else if(response.code == 0){
  271. //第一种情况,code为0 跳转到404
  272. navigateTo('/error?findPage=index')
  273. }
  274. }catch (error) {
  275. //第二种情况,服务器无响应 跳转到404
  276. navigateTo('/error?findPage=index')
  277. }
  278. //2.页面数据 end---------------------------------------->
  279. //3.响应式 start ---------------------------------------->
  280. // onMounted(() => {
  281. // //监听窗口大小
  282. // window.addEventListener('resize', () => {
  283. // if(window.innerWidth < 1200){
  284. // console.log('展示移动端!')
  285. // }else{
  286. // console.log('展示PC端!')
  287. // }
  288. // })
  289. // })
  290. //3.响应式 end---------------------------------------->
  291. </script>
  292. <style lang="less" scoped>
  293. @import url('@/assets/css/index.less');
  294. </style>