吉光研途前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

210 lines
4.1 KiB

3 months ago
1 month ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
3 months ago
1 month ago
2 months ago
1 month ago
3 months ago
1 month ago
2 months ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
3 months ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
3 months ago
1 month ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
3 months ago
1 month ago
1 month ago
3 months ago
1 month ago
3 months ago
3 months ago
  1. <template>
  2. <view class="page__view">
  3. <view class="bg">
  4. <image class="img" :src="configList.page_index_bg" mode="widthFix"></image>
  5. <image class="bg-logo" src="@/static/image/bg-icon.png" mode="widthFix"></image>
  6. </view>
  7. <view class="main">
  8. <view class="flex section header" :style="style">
  9. <view>
  10. <view class="title">{{ configList.page_serve_title }}</view>
  11. <view class="desc">{{ configList.page_serve_desc }}</view>
  12. </view>
  13. </view>
  14. <!-- 搜索栏 -->
  15. <view class="section search">
  16. <uv-search v-model="keyword" :showAction="false" placeholder="输入关键词搜索" placeholderColor="#B2B2B2" bgColor="#FFFFFF" @custom="search" @search="search">
  17. <template #prefix>
  18. <view class="flex search-icon">
  19. <image class="img" src="@/static/image/icon-search.png" mode="widthFix"></image>
  20. </view>
  21. </template>
  22. </uv-search>
  23. </view>
  24. <view class="list">
  25. <view class="list-item" v-for="item in list" :key="item.id" >
  26. <serveModuleCard :data="item"></serveModuleCard>
  27. </view>
  28. </view>
  29. <tabber select="serve" />
  30. </view>
  31. </view>
  32. </template>
  33. <script>
  34. import utils from '@/utils/utils'
  35. import mixinsList from '@/mixins/list.js'
  36. import tabber from '@/components/base/tabbar.vue'
  37. import serveModuleCard from '@/components/serve/serveModuleCard.vue'
  38. export default {
  39. mixins: [mixinsList],
  40. components: {
  41. serveModuleCard,
  42. tabber,
  43. },
  44. data() {
  45. return {
  46. keyword: '',
  47. queryParams: {
  48. pageNo: 1,
  49. pageSize: 10,
  50. pid: '0',
  51. },
  52. mixinsListApi: 'queryCategoryServiceModuleList',
  53. firstCategoryList: [],
  54. style: '',
  55. }
  56. },
  57. onLoad() {
  58. this.style = `padding-top: calc(${utils.getNavHeight()}px - 16rpx)`
  59. this.getData()
  60. },
  61. methods: {
  62. search() {
  63. uni.navigateTo({
  64. url: `/pages_order/serve/search?search=${this.keyword}`
  65. })
  66. },
  67. },
  68. }
  69. </script>
  70. <style scoped lang="scss">
  71. .page__view {
  72. /deep/ .tabbar-box {
  73. height: 0;
  74. padding: 0;
  75. }
  76. }
  77. .header {
  78. padding-top: calc(var(--status-bar-height) + 120rpx);
  79. justify-content: space-between;
  80. align-items: flex-start;
  81. .title {
  82. font-size: 44rpx;
  83. font-weight: 700;
  84. color: #6851A7;
  85. }
  86. .desc {
  87. font-size: 22rpx;
  88. font-weight: 600;
  89. color: #808080;
  90. }
  91. .icon {
  92. margin-top: 16rpx;
  93. width: 62rpx;
  94. height: 62rpx;
  95. border: 2rpx solid #A3A2C5;
  96. border-radius: 50%;
  97. overflow: hidden;
  98. box-sizing: border-box;
  99. .img {
  100. width: 50rpx;
  101. height: auto;
  102. }
  103. }
  104. }
  105. .bg {
  106. width: 100vw;
  107. height: auto;
  108. .img {
  109. width: 100%;
  110. height: auto;
  111. }
  112. &-logo {
  113. position: absolute;
  114. top: 0;
  115. right: 0;
  116. width: 342rpx;
  117. height: auto;
  118. opacity: 0.3;
  119. }
  120. }
  121. .main {
  122. position: absolute;
  123. top: 0;
  124. left: 0;
  125. width: 100vw;
  126. padding-bottom: 182rpx;
  127. box-sizing: border-box;
  128. }
  129. .section {
  130. margin: 0 38rpx 24rpx 38rpx;
  131. }
  132. .search {
  133. width: calc(100% - 38rpx * 2);
  134. height: 48rpx;
  135. background-color: #FFFFFF;
  136. border-radius: 37rpx;
  137. box-sizing: border-box;
  138. display: flex;
  139. align-items: center;
  140. overflow: hidden;
  141. box-shadow: 2rpx 2rpx 9rpx 0 rgba($color: #C5C5C5, $alpha: 0.75);
  142. /deep/ .uv-search__content {
  143. padding: 0;
  144. border: none;
  145. }
  146. /deep/ .uv-search__content__input {
  147. margin-left: 18rpx;
  148. }
  149. &-icon {
  150. padding: 18rpx 10rpx 18rpx 18rpx;
  151. background: rgba($color: #E8DBF3, $alpha: 0.8);
  152. .img {
  153. width: 30rpx;
  154. height: auto;
  155. }
  156. }
  157. }
  158. .swiper {
  159. border-radius: 10rpx;
  160. overflow: hidden;
  161. /deep/ .uv-swiper-indicator__wrapper__dot {
  162. width: 25rpx;
  163. height: 5rpx;
  164. border-radius: 4rpx;
  165. margin: 0 4rpx;
  166. }
  167. /deep/ .uv-swiper-indicator__wrapper__dot--active {
  168. width: 25rpx;
  169. }
  170. }
  171. .list {
  172. padding: 0 38rpx;
  173. &-item {
  174. & + & {
  175. margin-top: 26rpx;
  176. }
  177. }
  178. }
  179. </style>