invite.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <template>
  2. <view class="main">
  3. <view class="item_job" v-for="(item, index) in list" :key="index" @click="go('/pages/job/detail?id=' + item.positionId)">
  4. <view class="top">
  5. <view class="title omit">{{ item.title }}</view>
  6. <view class="salary">{{ item.salary }}¥</view>
  7. </view>
  8. <view class="bot bt">
  9. <view class="address omit">您好,有一份兼职等你加入!</view>
  10. <view class="distance">{{ item.createTime }}</view>
  11. </view>
  12. <view class="flex">
  13. <view class="f br agree" @click.stop="agree(item, 1)" v-if="item.isAccept == 0 && item.isExpire == 0">同意</view>
  14. <view class="f danger" @click.stop="agree(item, 2)" v-if="item.isAccept == 0 && item.isExpire == 0">拒绝</view>
  15. <view class="f danger" v-if="item.isAccept == 2 && item.isExpire == 0">已拒绝</view>
  16. <view class="f br agree" v-if="item.isAccept == 1 && item.isExpire == 0">已同意</view>
  17. <view class="f danger" v-if="item.isAccept == 0 && item.isExpire == 1">超时未操作(已过期)</view>
  18. </view>
  19. <view class="bz cen" v-if="item.isExpire == 0 && item.isAccept == 0 && item.countdown">剩余:{{ item.countdown }}</view>
  20. </view>
  21. <view class="loading" v-if="loadMore"><u-loadmore :status="loadMore ? 'loading' : 'nomore'" /></view>
  22. <u-empty v-if="!loadMore && list.length == 0"></u-empty>
  23. </view>
  24. </template>
  25. <script>
  26. export default {
  27. data() {
  28. return {
  29. list: [],
  30. param: { pageNum: 1, pageSize: 10, state: 1, type: 1 },
  31. loadMore: true
  32. };
  33. },
  34. onLoad(e) {
  35. this.getData();
  36. },
  37. methods: {
  38. getData() {
  39. this.http.request({
  40. url: '/app/deliver/user/list',
  41. data: this.param,
  42. loading: 'false',
  43. success: (res) => {
  44. this.loadMore = res.data.pages > this.param.pageNum ? true : false;
  45. res.data.rows.forEach((item) => {
  46. if (item.isAccept == 0 && item.isExpire == 0) {
  47. const endTime = new Date(item.auditTime);
  48. endTime.setHours(endTime.getHours() + 1);
  49. item.countdown = '';
  50. item.timer = null;
  51. item.timer = this.util.startCountdown(endTime, (countdown) => {
  52. item.countdown = countdown;
  53. if (countdown == '已超时') {
  54. item.isExpire = 1;
  55. }
  56. });
  57. }
  58. item.createTime = uni.$u.timeFrom(Date.parse(item.createTime));
  59. this.list.push(item);
  60. });
  61. }
  62. });
  63. },
  64. go(url) {
  65. uni.navigateTo({ url: url });
  66. },
  67. navigation(item) {
  68. wx.openLocation({
  69. latitude: Number(item.latitude),
  70. longitude: Number(item.longitude),
  71. scale: 18, // 缩放比例
  72. success: (res) => {
  73. console.log('导航成功');
  74. },
  75. fail: (res) => {
  76. console.error('导航失败', res);
  77. }
  78. });
  79. },
  80. agree(item, isAccept) {
  81. uni.showModal({
  82. title: '提示',
  83. content: isAccept == 1 ? '确定同意接受这个兼职工作' : '确定拒绝该邀请',
  84. success: (res) => {
  85. if (res.confirm) {
  86. this.http.request({
  87. url: '/app/deliver/agree',
  88. data: { id: item.id, isAccept: isAccept },
  89. method: 'POST',
  90. success: (res) => {
  91. uni.showToast({ title: '操作成功' });
  92. item.isAccept = isAccept;
  93. clearInterval(item.timer);
  94. }
  95. });
  96. }
  97. }
  98. });
  99. },
  100. //刷新数据
  101. refresh() {
  102. this.loadMore = true;
  103. this.param.pageNum = 1;
  104. this.list.forEach((item) => clearInterval(item.timer));
  105. this.list = [];
  106. this.getData();
  107. }
  108. },
  109. //下拉刷新
  110. onPullDownRefresh() {
  111. setTimeout(() => {
  112. this.refresh();
  113. uni.stopPullDownRefresh();
  114. }, 1000);
  115. },
  116. //上拉加载
  117. onReachBottom() {
  118. if (this.loadMore) {
  119. this.param.pageNum++;
  120. this.getData();
  121. }
  122. },
  123. destroyed() {
  124. this.list.forEach((item) => clearInterval(item.timer));
  125. }
  126. };
  127. </script>
  128. <style lang="scss"></style>