详情小程序
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.

204 lines
5.3 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <template>
  2. <view>
  3. <!-- 头部搜索框 -->
  4. <view class="head-bar">
  5. <view class="lf-flex search" @click="$url('/pages/userList/userList?name=搜索')">
  6. <text class="lf-iconfont icon-linedesign-12 lf-font-30 lf-m-l-20"></text>
  7. <view class="lf-m-l-10 lf-font-24">搜索</view>
  8. </view>
  9. <!-- <view class="botton" @click="$url('/pages/signIn/signIn')">签到</view> -->
  10. </view>
  11. <!-- 上墙部分 -->
  12. <view class="up-the-wall">
  13. <view class="lf-row-between">
  14. <view class="lf-font-32 lf-color-black">最新上墙</view>
  15. <!-- <view class="lf-color-999" @click="$url('/pages/wallMember/wallMember')">
  16. <text class="lf-font-28">查看全部</text>
  17. <text class="lf-iconfont icon-xiangyou"></text>
  18. </view> -->
  19. </view>
  20. <scroll-view class="scroll-bar" :scroll-x="true">
  21. <view class="lf-flex">
  22. <!-- <view class="user-item" @click="$url('/pages/upTheWall/upTheWall')">
  23. <lf-image class="add-icon" src="../../static/images/add_icon.png"></lf-image>
  24. <view class="lf-m-t-12 lf-color-555 lf-font-24 lf-line-1">我要上墙</view>
  25. </view> -->
  26. <view class="user-item" v-for="(item, index) in members_wall" :key="item.id" @click="$url('/pages/my/memberDetails?id='+ item.number)">
  27. <image class="avatar" :src="item.user.avatar"></image>
  28. <view class="lf-m-t-12 lf-color-555 lf-font-24 lf-line-1">编号{{ item.number }}</view>
  29. </view>
  30. </view>
  31. </scroll-view>
  32. </view>
  33. <self-line />
  34. <!-- 推荐单身 -->
  35. <view>
  36. <view class="lf-row-between lf-p-30 lf-p-32 lf-p-b-20">
  37. <view class="lf-font-32 lf-color-black">推荐单身</view>
  38. <view class="lf-color-999" @click="$url('/pages/userList/userList?name=最新')">
  39. <text class="lf-font-28">最新</text>
  40. <text class="lf-iconfont icon-xiangyou"></text>
  41. </view>
  42. </view>
  43. <lf-user-list :list='members'></lf-user-list>
  44. </view>
  45. <!-- 加载 -->
  46. <view class="loading-more">
  47. <text :class="{'loading-more-text': loading_class}">{{ loading_text }}</text>
  48. </view>
  49. <!-- 回到顶部 -->
  50. <u-back-top :scrollTop="pageScrollTop"></u-back-top>
  51. </view>
  52. </template>
  53. <script>
  54. import lfUserList from '@/components/lf-userList/lf-userList.vue';
  55. export default {
  56. components: { lfUserList },
  57. data() {
  58. return {
  59. members_wall: [],
  60. members: [],
  61. page: 1,
  62. page_size: 10,
  63. isPage: true,
  64. loading_text: '正在加载中',
  65. loading_class: true
  66. }
  67. },
  68. onLoad(){
  69. // #ifdef H5
  70. this.href_str = JSON.stringify(location.href);
  71. let options = this.strToObj();
  72. if(options.code){
  73. this.login(options.code)
  74. }else if(this.$isRight(uni.getStorageSync('user_info'))){
  75. this.getMembersWall();
  76. this.getMembers();
  77. }
  78. // #endif
  79. },
  80. methods: {
  81. strToObj(){
  82. let val = this.href_str;
  83. let obj = {};
  84. if(!val) return obj;
  85. if(val.indexOf('?') < 0) return obj;
  86. let indexA = val.indexOf('?') + 1;
  87. let str = val.substr(indexA);
  88. str = str.substr(0, str.length - 1);
  89. let indexB = str.indexOf('#');
  90. if(indexB >= 0){
  91. str = str.substr(0, indexB);
  92. }
  93. let arr = str.split('&');
  94. arr.map(item => {
  95. let a = item.split('=');
  96. obj[a[0]] = a[1];
  97. });
  98. return obj;
  99. },
  100. login(code){
  101. this.$http(this.API.API_OFFICIAL_LOGIN, {
  102. code: code,
  103. scopes: 'snsapi_userinfo'
  104. }).then(res => {
  105. uni.setStorageSync('user_info', res?.data?.user);
  106. var url = window.location.href; //获取当前页面的url
  107. if(url.indexOf("?")!=-1){ //判断是否存在参数
  108. url = url.replace(/(\?|#)[^'"]*/, ''); //去除参数
  109. window.history.pushState({}, 0, url);
  110. }
  111. this.getMembersWall();
  112. this.getMembers();
  113. }).catch(err => {
  114. console.log(err)
  115. })
  116. },
  117. getMembers(){
  118. this.$http(this.API.API_MEMBERS_ALL, {
  119. page: this.page,
  120. pagesize: this.page_size
  121. }).then(res => {
  122. let members = res.data.members.data || [];
  123. let isPage = this.$isRight(res.data.members.next_page_url);
  124. this.isPage = isPage;
  125. if(!isPage){
  126. this.loading_class = false;
  127. this.loading_text = '已加载全部数据~';
  128. }
  129. this.members = members;
  130. })
  131. },
  132. getMembersWall(){
  133. this.$http(this.API.API_MEMBERS_WALL, {
  134. page: 1,
  135. pagesize: 12
  136. }).then(res => {
  137. this.members_wall = res.data.members_wall.data || [];
  138. })
  139. }
  140. }
  141. }
  142. </script>
  143. <style lang="scss" scoped>
  144. .head-bar{
  145. width: 750rpx;
  146. height: max-content;
  147. padding: 21rpx 32rpx;
  148. display: flex;
  149. justify-content: space-between;
  150. box-sizing: border-box;
  151. .search{
  152. // width: 530rpx;
  153. width: 100%;
  154. height: 62rpx;
  155. background: #F7F7F7;
  156. border-radius: 32rpx;
  157. color: #999999;
  158. }
  159. .botton{
  160. width: 140rpx;
  161. height: 62rpx;
  162. background: #F7F7F7;
  163. border-radius: 32rpx;
  164. text-align: center;
  165. line-height: 62rpx;
  166. color: #222222;
  167. }
  168. }
  169. .up-the-wall{
  170. width: 750rpx;
  171. height: max-content;
  172. padding: 21rpx 32rpx 0;
  173. .scroll-bar{
  174. width: 100%;
  175. height: 164rpx;
  176. padding: 30rpx 0;
  177. .user-item{
  178. width: 136rpx;
  179. margin-right: 40rpx;
  180. display: flex;
  181. justify-content: center;
  182. flex-wrap: wrap;
  183. &:last-child{
  184. margin-right: 0rpx;
  185. }
  186. }
  187. .add-icon{
  188. width: 110rpx;
  189. height: 110rpx;
  190. border-radius: 50%;
  191. }
  192. .avatar{
  193. width: 110rpx;
  194. height: 110rpx;
  195. border: 5rpx solid #E21196;
  196. border-radius: 50%;
  197. box-sizing: border-box;
  198. }
  199. }
  200. }
  201. </style>