Topic.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <template>
  2. <div>
  3. <SldHomeTopSearch />
  4. <NavTopBar/>
  5. <NavCatHeader />
  6. <div class="bottom_line"></div>
  7. <div class="index">
  8. <template v-if="firstLoading">
  9. <div class="skeleton_banner"></div>
  10. <div class="w_sld_react_1210 adv_04_wrap skeleton">
  11. <div class="floor_title">
  12. <h2>
  13. <font>&nbsp;</font>
  14. <span></span>
  15. <font>&nbsp;</font>
  16. </h2>
  17. </div>
  18. <div class="floor_goods">
  19. <div
  20. class="item"
  21. v-for="(item_main, index_main) in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
  22. v-bind:key="index_main"
  23. >
  24. <div class="wrap">
  25. <a href="javascript:void(0)" class="example_text"> </a>
  26. <p class="title">
  27. <a href="javascript:void(0)">{{ item_main }}</a>
  28. </p>
  29. <p class="price"><span></span></p>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. </template>
  35. <SldDiy
  36. v-if="decorateData.data.length"
  37. :decorateData="decorateData"
  38. @adv19="handleAdv19"
  39. />
  40. <!-- 空页面 start-->
  41. <SldCommonEmpty
  42. v-if="!firstLoading && !decorateData.data.length"
  43. totalHeight="900"
  44. paddingTop="250"
  45. :tip="L['我们正在努力装修中,敬请期待~']"
  46. />
  47. <!-- 空页面 end-->
  48. </div>
  49. </div>
  50. </template>
  51. <script setup>
  52. import { useRoute } from "vue-router";
  53. const route = useRoute();
  54. const decorateData = reactive({ data: [] }); //装修数据
  55. const firstLoading = ref(true); //是否第一次加载
  56. const getInitData = async () => {
  57. let params = {};
  58. params.decoType = "topic";
  59. params.decoId = route.query.topicId;
  60. const { data: value, pending: pending, error, refresh } = await useFetchRaw(
  61. apiUrl + "v3/system/front/pcDeco/index",
  62. { params }
  63. );
  64. if (!pending._rawValue) {
  65. firstLoading.value = false;
  66. }
  67. const res = value._rawValue;
  68. if (res.state == 200) {
  69. decorateData.data = JSON.parse(res.data.data.replace(/&quot;/g, '"'));
  70. decorateData.data.map((item) => {
  71. item.json_data = item.json;
  72. if (item.json_data.type == "adv_19") {
  73. item.json_data.data.map((child) => {
  74. child.cur_tab = 0;
  75. });
  76. }
  77. if (item.json_data && item.json_data.type == "main_banner_pc") {
  78. item.json_data.data = item.json_data.info.carousel_info.data.filter((i) => i.imgUrl);
  79. }
  80. });
  81. }
  82. };
  83. getInitData();
  84. </script>
  85. <style lang="scss" scoped>
  86. @import "@/assets/style/decorate.scss";
  87. @import "@/assets/style/theme.scss";
  88. .index {
  89. background: #f8f8f8;
  90. padding-bottom: 10px;
  91. }
  92. .skeleton_banner {
  93. width: 100%;
  94. height: 470px;
  95. background: $colorSkeleton;
  96. margin-bottom: 10px;
  97. }
  98. .skeleton {
  99. &.adv_04_wrap .floor_title h2 span {
  100. background: $colorSkeleton;
  101. display: inline-block;
  102. width: 200px;
  103. }
  104. &.adv_04_wrap .floor_goods .item .wrap .title {
  105. background: $colorSkeleton;
  106. width: 100%;
  107. a {
  108. color: transparent;
  109. }
  110. }
  111. &.adv_04_wrap .floor_goods .item .wrap .price {
  112. width: 100%;
  113. height: 25px;
  114. }
  115. &.adv_04_wrap .floor_goods .item .wrap .price span {
  116. display: inline-block;
  117. width: 70px;
  118. height: 100%;
  119. background: $colorSkeleton;
  120. }
  121. }
  122. </style>