sign_up_list.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. <template>
  2. <view class="list">
  3. <view class="top">
  4. <view class="search flexB">
  5. <view class="search_con flexB">
  6. <view class="flexS search_inp">
  7. <image src="../../static/imgs/search1.png"></image>
  8. <input type="text" value="" placeholder="请输入代理昵称或手机号查询" v-model="params.search_name" @input="clear" />
  9. </view>
  10. <view class="search_btn" @click="getEnroll">搜索</view>
  11. </view>
  12. </view>
  13. <view class="change flexB">
  14. <view class="flexS left">
  15. <picker :range="state" :value="index" @change="changeState($event)" :range-key="'name'">
  16. <view class="picker flexS">
  17. <view class="picker_state">{{ state[index].name ? state[index].name : '已签到' }}</view>
  18. <view class="state flexC">{{ total ? total : 0 }}</view>
  19. <text class="iconfont iconxiajiantou"></text>
  20. </view>
  21. </picker>
  22. </view>
  23. <view class="right flexS">
  24. <view class="flexCC" @click="sort">
  25. <image src="../../static/imgs/up.png" v-if="sortState"></image>
  26. <image src="../../static/imgs/down.png" v-else></image>
  27. </view>
  28. </view>
  29. </view>
  30. </view>
  31. <view class="scroll">
  32. <scroll-view scroll-y="true" @scrolltolower="more()">
  33. <view class="scroll_con">
  34. <view class="sign_list flexB" v-for="item in signList" :key="item.id" @click="skipDetail(item.user)">
  35. <view class="list_left flexS">
  36. <image :src="item.user.avatar"></image>
  37. <text style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width:555rpx;">{{ item.user.nickname }}</text>
  38. </view>
  39. </view>
  40. </view>
  41. </scroll-view>
  42. </view>
  43. </view>
  44. </template>
  45. <script>
  46. import { getSignDetail } from '../../api/sign.js';
  47. export default {
  48. data() {
  49. return {
  50. state: [
  51. {
  52. id: 1,
  53. name: '有效报名'
  54. },
  55. {
  56. id: 2,
  57. name: '已签到'
  58. },
  59. {
  60. id: 3,
  61. name: '未签到'
  62. },
  63. {
  64. id: 4,
  65. name: '已退款'
  66. }
  67. ],
  68. signList: [], //报名列表
  69. params: {
  70. page_size: 20,
  71. page_index: 1,
  72. type: 2, //1表示有效报名,2表示已签到,3表示未签到,4表示已退款
  73. sort: 'desc', //desc倒序(默认),asc正序
  74. search_name: ''
  75. },
  76. index: '',
  77. sortState: false,
  78. total: '', //总条数
  79. pages: '' //总页数
  80. };
  81. },
  82. onShow() {
  83. this.getEnroll();
  84. },
  85. methods: {
  86. //清除输入内容时重新加载列表
  87. clear(e) {
  88. if (!this.params.search_name) {
  89. this.getEnroll();
  90. }
  91. },
  92. search() {
  93. this.getEnroll();
  94. },
  95. skipDetail(user) {
  96. uni.navigateTo({
  97. url: '../sign_up_detail/sign_up_detail?id=' + user.id + '&sex=' + user.sex + '&phone=' + user.phone + '&avatar=' + user.avatar + '&nickname=' + user.nickname
  98. });
  99. },
  100. sort() {
  101. this.sortState = !this.sortState;
  102. if (this.params.sort == 'desc') {
  103. this.params.sort = 'asc';
  104. this.getEnroll();
  105. return false;
  106. }
  107. if (this.params.sort == 'asc') {
  108. this.params.sort = 'desc';
  109. this.getEnroll();
  110. }
  111. },
  112. /*
  113. * 根据条件筛选列表
  114. */
  115. changeState(e) {
  116. this.index = e.detail.value;
  117. let id = Number(this.index) + 1;
  118. this.params.type = id;
  119. this.getEnroll();
  120. },
  121. getEnroll() {
  122. this.params.page_index = 1;
  123. let { page_size, page_index, type, sort, search_name } = this.params;
  124. getSignDetail({
  125. page_size,
  126. page_index,
  127. type,
  128. sort,
  129. search_name
  130. }).then(res => {
  131. if (res.code == 200) {
  132. this.total = res.data.total;
  133. this.pages = Math.ceil(res.data.total / this.params.page_size);
  134. if (res.data.list.length > 0) {
  135. this.signList = res.data.list;
  136. } else {
  137. wx.showToast({
  138. title: '暂无数据',
  139. icon: 'none'
  140. });
  141. this.signList = '';
  142. }
  143. } else {
  144. uni.showModal({
  145. content: res.message || '请求失败',
  146. showCancel: false
  147. });
  148. }
  149. });
  150. },
  151. //上拉加载更多
  152. more() {
  153. if (this.params.page_index > this.pages) {
  154. uni.showToast({
  155. title: '没有更多啦~',
  156. icon: 'none'
  157. });
  158. return false;
  159. }
  160. this.params.page_index++;
  161. let { page_size, type, sort, search_name, page_index } = this.params;
  162. getSignDetail({
  163. page_size,
  164. page_index,
  165. type,
  166. sort,
  167. search_name
  168. }).then(res => {
  169. if (res.code == 200) {
  170. this.signList = this.signList.concat(res.data.list);
  171. } else {
  172. uni.showModal({
  173. content: res.message || '请求失败',
  174. showCancel: false
  175. });
  176. }
  177. });
  178. }
  179. }
  180. };
  181. </script>
  182. <style>
  183. page {
  184. height: 100%;
  185. width: 100%;
  186. background: #fff;
  187. }
  188. </style>
  189. <style lang="scss">
  190. .list {
  191. width: 100%;
  192. min-height: 100%;
  193. position: relative;
  194. }
  195. .top {
  196. width: 100%;
  197. height: 20vh;
  198. box-sizing: border-box;
  199. background: #f9f9f9;
  200. .search {
  201. width: 100%;
  202. border: 1rpx solid #f9f9f9;
  203. background-color: #fff;
  204. .search_con {
  205. width: 690rpx;
  206. margin: 0 auto;
  207. height: 120rpx;
  208. .search_inp {
  209. width: 580rpx;
  210. height: 72rpx;
  211. background-color: #f9f9f9;
  212. border-radius: 36rpx;
  213. image {
  214. height: 32rpx;
  215. width: 30rpx;
  216. margin: 0 15rpx;
  217. }
  218. }
  219. }
  220. .search_btn {
  221. font-size: 32rpx;
  222. color: #333;
  223. }
  224. }
  225. .change {
  226. background-color: #fff;
  227. height: 100rpx;
  228. margin-bottom: 24rpx;
  229. .left {
  230. width: 90%;
  231. picker {
  232. width: 100%;
  233. .picker {
  234. .picker_state {
  235. padding-left: 25rpx;
  236. height: 100rpx;
  237. width: 100%;
  238. line-height: 100rpx;
  239. }
  240. }
  241. .state {
  242. height: 36rpx;
  243. background-color: #08b25a;
  244. margin: 5rpx 15rpx 0 20rpx;
  245. padding: 0 15rpx;
  246. border-radius: 18rpx;
  247. color: #fff;
  248. font-size: 24rpx;
  249. }
  250. }
  251. }
  252. .right {
  253. view {
  254. width: 100rpx;
  255. height: 99rpx;
  256. image {
  257. width: 24rpx;
  258. height: 34rpx;
  259. vertical-align: middle;
  260. }
  261. }
  262. }
  263. }
  264. }
  265. .scroll {
  266. height: 80vh;
  267. background: #fff;
  268. // margin-top: 20rpx;
  269. // padding-top:120rpx;
  270. scroll-view {
  271. height: 100%;
  272. }
  273. .scroll_con {
  274. // padding-bottom:20rpx;
  275. }
  276. .sign_list {
  277. padding: 0 30rpx;
  278. box-sizing: border-box;
  279. border-bottom: 1rpx solid #f9f9f9;
  280. background: #fff;
  281. height: 120rpx;
  282. .list_left {
  283. image {
  284. height: 88rpx;
  285. width: 88rpx;
  286. border-radius: 50%;
  287. margin-right: 22rpx;
  288. }
  289. view {
  290. text {
  291. font-size: 32rpx;
  292. color: #333;
  293. }
  294. view {
  295. color: #666;
  296. font-size: 28rpx;
  297. margin-top: 15rpx;
  298. }
  299. }
  300. }
  301. .list_right {
  302. font-size: 32rpx;
  303. color: #999;
  304. }
  305. }
  306. }
  307. </style>