showSolicitude.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <template>
  2. <view class="">
  3. <!-- <view class="showSolicitude-top">
  4. <view class="status-bar" :style="{'height': statusBarHeight + 'px'}" />
  5. <view class="top-advertising">
  6. <text class="btns" @click.stop="home.init(1)">常规版</text>
  7. </view>
  8. </view> -->
  9. <view class="page-content">
  10. <view class="common-service">
  11. <view class="common-service-title">
  12. 常用服务
  13. </view>
  14. <view class="common-service-box">
  15. <block v-for="item in kongLimList" :key="item.id">
  16. <view class="common-service-item" @click.stop="openKongKim(item)">
  17. <image :src="$getImgPath(item.icon)" mode="aspectFit"></image>
  18. <text>{{item.name}}</text>
  19. </view>
  20. </block>
  21. </view>
  22. </view>
  23. <!-- 救助服务 -->
  24. <view class="service-type salvation-service" v-if="helpService">
  25. <view class="service-title">
  26. {{ helpService.themeVo.themeName }}
  27. </view>
  28. <view class="service-info">
  29. <block v-for="item in helpService.themeModuleVoList">
  30. <view class="service-item" @click.stop="openKongKim(item)">
  31. <image class="service-img" :src="$getImgPath(item.moduleImage)" mode="aspectFit"></image>
  32. </view>
  33. </block>
  34. </view>
  35. </view>
  36. <!-- 社会服务 -->
  37. <view class="service-type society-service" v-if="societyService">
  38. <view class="service-title">
  39. {{ societyService.themeVo.themeName }}
  40. </view>
  41. <view class="service-info">
  42. <block v-for="item in societyService.themeModuleVoList">
  43. <view class="service-item" @click.stop="openKongKim(item)">
  44. <image class="service-img" :src="$getImgPath(item.moduleImage)" mode="aspectFit"></image>
  45. </view>
  46. </block>
  47. </view>
  48. </view>
  49. <!-- 健康服务 -->
  50. <view class="service-type fitness-service" v-if="healthService">
  51. <view class="service-title">
  52. {{ healthService.themeVo.themeName }}
  53. </view>
  54. <view class="service-info">
  55. <block v-for="item in healthService.themeModuleVoList">
  56. <view class="service-item" @click.stop="openKongKim(item)">
  57. <image class="service-img" :src="$getImgPath(item.moduleImage)" mode="aspectFit"></image>
  58. </view>
  59. </block>
  60. </view>
  61. </view>
  62. </view>
  63. </view>
  64. </template>
  65. <script>
  66. import {
  67. getAPPList,
  68. getThemeModule
  69. } from "@/api/government.js"
  70. import Mixin from "./module/Mixin.js";
  71. export default {
  72. mixins: [Mixin],
  73. inject: ["home"],
  74. data() {
  75. return {
  76. kongLimList: [],
  77. helpService: null,
  78. societyService: null,
  79. healthService: null,
  80. }
  81. },
  82. mounted() {
  83. this.getKongKim()
  84. this.initPage()
  85. },
  86. methods: {
  87. getKongKim() {
  88. getAPPList(this.$keys.GH_KONGKIM).then(res => {
  89. this.kongLimList = res.data || []
  90. })
  91. },
  92. openKongKim(item) {
  93. this.$openPage(item)
  94. },
  95. initPage() {
  96. // 获取 聚合
  97. // GA_JZ_SERVICE: "gams_001", // 救助服务
  98. // GA_SH_SERVICE: "gams_002", // 社会服务
  99. // GA_JK_SERVICE: "gams_003", // 健康服务
  100. const keys = [this.$keys.GA_JZ_SERVICE, this.$keys.GA_SH_SERVICE, this.$keys.GA_JK_SERVICE]
  101. keys.forEach(el => {
  102. getThemeModule(el).then(res => {
  103. const {
  104. themeVo,
  105. themeModuleVoList
  106. } = res.data || {};
  107. if (!themeVo || !themeModuleVoList || !themeModuleVoList.length === 0) {
  108. throw new Error()
  109. } else {
  110. this.setService(res.data, el, keys)
  111. }
  112. }).catch(err => {
  113. this.setService(null, el, keys)
  114. })
  115. })
  116. },
  117. setService(data, key, keys) {
  118. switch (key) {
  119. case keys[0]:
  120. // 救助服务
  121. this.helpService = data || null
  122. break;
  123. case keys[1]:
  124. // 社会服务
  125. this.societyService = data || null
  126. break;
  127. case keys[2]:
  128. // 健康服务
  129. this.healthService = data || null
  130. break;
  131. }
  132. },
  133. }
  134. }
  135. </script>
  136. <style lang="scss" scoped>
  137. .showSolicitude-top {
  138. background-color: skyblue;
  139. .top-advertising {
  140. width: 100%;
  141. height: 300rpx;
  142. }
  143. }
  144. .page-content {
  145. position: relative;
  146. padding: $zw-padding;
  147. margin-top: -140rpx;
  148. .common-service {
  149. width: 100%;
  150. background: #ffffff;
  151. border-radius: 16rpx;
  152. .common-service-title {
  153. font-size: 54rpx;
  154. font-weight: bold;
  155. padding: 30rpx 30rpx 27rpx;
  156. border-bottom: 1rpx solid #e6e6e6;
  157. }
  158. .common-service-box {
  159. width: 100%;
  160. display: flex;
  161. flex-wrap: wrap;
  162. flex-direction: row;
  163. justify-content: space-between;
  164. padding: 62rpx 0;
  165. .common-service-item {
  166. width: 50%;
  167. text-align: center;
  168. padding: 20rpx;
  169. image {
  170. display: block;
  171. margin: 0 auto 35rpx;
  172. width: 160rpx;
  173. height: 160rpx;
  174. }
  175. text {
  176. color: #1A1A1A;
  177. font-size: 44rpx;
  178. font-weight: bold;
  179. line-height: 2;
  180. }
  181. }
  182. }
  183. }
  184. .service-type {
  185. margin-top: $zw-gap;
  186. width: 100%;
  187. // border-width: 6rpx;
  188. // border-style: solid;
  189. border-radius: 16rpx;
  190. background-color: #fff;
  191. .service-title {
  192. color: #1A1A1A;
  193. width: 100%;
  194. font-size: 54rpx;
  195. font-weight: bold;
  196. padding: 30rpx 30rpx 27rpx;
  197. border-bottom: 1rpx solid #e6e6e6;
  198. ;
  199. }
  200. .service-info {
  201. width: 100%;
  202. display: flex;
  203. justify-content: space-between;
  204. align-items: stretch;
  205. padding: 30rpx;
  206. .service-item {
  207. .service-img {
  208. width: 296rpx;
  209. height: 166rpx;
  210. vertical-align: middle;
  211. }
  212. // .service-text {
  213. // overflow: hidden;
  214. // text-overflow: ellipsis;
  215. // white-space: nowrap;
  216. // padding-right: 30rpx;
  217. // font-size: 38rpx;
  218. // }
  219. // .service-btn {
  220. // flex-shrink: 0;
  221. // width: 110rpx;
  222. // height: 50rpx;
  223. // font-size: 32rpx;
  224. // text-align: center;
  225. // border-radius: 30rpx;
  226. // color: #fff;
  227. // }
  228. }
  229. }
  230. }
  231. // .salvation-service {
  232. // border-color: greenyellow;
  233. // .service-title {
  234. // background-color: greenyellow;
  235. // }
  236. // .service-btn {
  237. // background-color: greenyellow;
  238. // }
  239. // }
  240. // .society-service {
  241. // border-color: skyblue;
  242. // .service-title {
  243. // background-color: skyblue;
  244. // }
  245. // .service-btn {
  246. // background-color: skyblue;
  247. // }
  248. // }
  249. // .fitness-service {
  250. // border-color: rebeccapurple;
  251. // .service-title {
  252. // background-color: rebeccapurple;
  253. // }
  254. // .service-btn {
  255. // background-color: rebeccapurple;
  256. // }
  257. // }
  258. }
  259. .btns {
  260. display: inline-block;
  261. width: 150rpx;
  262. height: 150rpx;
  263. text-align: center;
  264. line-height: 150rpx;
  265. border-radius: 50%;
  266. background-color: #edc68d;
  267. font-size: 30rpx;
  268. font-weight: bold;
  269. }
  270. </style>