message.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <template>
  2. <view class="total-page page-env-20 page-box scroll_content">
  3. <Nav :title="'消息'" :genre="1" :fixedHeight="50"></Nav>
  4. <view class="task-tabs" :style="{top:`${$tools.topHeight()}px`}">
  5. <z-tabs ref="tabs" :list="tabsList" :active-style="{color:'#10B261',fontWeight:'bold',fontSize:'30rpx'}"
  6. :bar-style="{background:'#10B261'}" :inactive-style="{fontWeight:'bold',fontSize:'28rpx'}"
  7. :current="current" :bar-animate-mode="'worm'" @change="tabsChange" />
  8. </view>
  9. <EnScroll ref="scroll" class="main" @onRefresh="onRefresh" @onScrollBottom="onScrollBottom">
  10. <view class="m-t20" v-if="list.length <=0">
  11. <Enblank :message="'暂无消息'" >
  12. </Enblank>
  13. </view>
  14. <view class="m-lr20 page-env-160">
  15. <view class="row-c page-box-bg-fff m-t20 r-30 p-30 box-shadow-197" @click.stop="goToInfo(index)" v-for="(item,index) in list"
  16. :key="index">
  17. <image class="wh-80" :src="getLeftImg(item.type)" mode=""></image>
  18. <view class="flex m-l20">
  19. <view class="row-justify-sb center flex">
  20. <text class="text-color-333 sys-weight-400 size-30"> {{item.title}}</text>
  21. <image class="wh-30 m-l16" style="margin-top: 4rpx;" src="/static/img/task/task-phone.png"
  22. mode=""></image>
  23. </view>
  24. <view class="row-justify-sb center m-t10">
  25. <text class="size-26 text-color-666"> {{item.content}}</text>
  26. <text class="size-24 text-color-999">{{item.created_date}}</text>
  27. </view>
  28. </view>
  29. </view>
  30. </view>
  31. <!-- <view class="placeholder sys-list-background-color" style="height: 60rpx;" v-if="is_bottom"></view> -->
  32. </EnScroll>
  33. </view>
  34. </template>
  35. <script>
  36. // 任务列表
  37. import TaskItem from "@/common/task/task-item.vue";
  38. import {getNotices, setRead} from "@/api/news";
  39. import tools from "@/service/tools";
  40. export default {
  41. components: {
  42. TaskItem
  43. },
  44. data() {
  45. return {
  46. current: 0,
  47. tabsList: [{
  48. name: '全部(0)',
  49. // 可以禁用某个item
  50. is_dot: false,
  51. dot_color: 'red',
  52. disabled: false
  53. }, {
  54. name: '未读(0)',
  55. // 可以禁用某个item
  56. is_dot: true,
  57. dot_color: 'red',
  58. disabled: false
  59. }, {
  60. name: '已读',
  61. // 可以禁用某个item
  62. is_dot: false,
  63. dot_color: '',
  64. disabled: false
  65. }],
  66. leftImg: ['task-house', 'task-house','task-business', 'task-repayment'],
  67. iconList: ['task-audit', 'task-do', 'task-stay'],
  68. list:[],
  69. page:1,
  70. isEnd:false,
  71. }
  72. },
  73. watch: {
  74. },
  75. mounted() {
  76. this.startNotices();
  77. },
  78. methods: {
  79. goToInfo(index) {
  80. let item=this.list[index];
  81. if(item.type===1){
  82. this.list[index].is_read=1;
  83. //跳转详情
  84. uni.navigateTo({
  85. url: 'pages/notice/module/notice-info?id='+item.id
  86. });
  87. }else {
  88. this.setRead(index);
  89. //调用已读
  90. if(item.type===2){
  91. if(item.relevance_id<=0){
  92. tools.error('任务信息异常')
  93. return false;
  94. }
  95. //任务详情
  96. uni.navigateTo({
  97. url: '/page_task/task_details/task_details?id='+item.relevance_id
  98. });
  99. }else {
  100. //领取列表
  101. uni.navigateTo({
  102. url: '/page_task/gain_task/gain_task'
  103. });
  104. }
  105. }
  106. },
  107. setRead(index){
  108. setRead({'id':this.list[index].id}).then((res)=>{
  109. if(res.code===1){
  110. this.list[index].is_read=1;
  111. }
  112. })
  113. },
  114. startNotices(){
  115. this.list=[];
  116. this.page=1;
  117. this.isEnd=false;
  118. this.getNotices();
  119. },
  120. getNotices(){
  121. if(this.isEnd){
  122. return ;
  123. }
  124. getNotices({'page':this.page,'type':this.current}).then((res)=>{
  125. if(res.code===1){
  126. if(res.data.items.length<=0){
  127. this.isEnd=true;
  128. }else {
  129. this.tabsList[0].name='全部('+res.data.total+')'
  130. this.tabsList[1].name='未读('+res.data.unreadNum+')'
  131. res.data.items.forEach((item)=>{
  132. item.is_del=false;
  133. this.list.push(item)
  134. })
  135. // this.list.push(...res.data)
  136. }
  137. ++this.page;
  138. }
  139. })
  140. },
  141. tabsChange(index) {
  142. this.current = index;
  143. },
  144. getLeftImg(index) {
  145. return `/static/img/task/${this.leftImg[index]}.png`
  146. },
  147. // 下拉刷新
  148. onRefresh() {
  149. uni.showLoading({
  150. title: '数据加载中'
  151. })
  152. this.startNotices()
  153. setTimeout(() => {
  154. // uni.showToast({
  155. // title: '加载完成',
  156. // icon: 'none'
  157. // })
  158. this.$refs.scroll.onEndPulling()
  159. }, 1000)
  160. console.log("下拉刷新");
  161. },
  162. // 滚动到底部
  163. onScrollBottom() {
  164. uni.showLoading({
  165. title: '数据加载中'
  166. })
  167. this.getNotices()
  168. setTimeout(() => {
  169. uni.showToast({
  170. title: '加载完成',
  171. icon: 'none'
  172. })
  173. }, 1000)
  174. console.log("到底部了");
  175. },
  176. },
  177. }
  178. </script>
  179. <style lang="scss" scoped>
  180. </style>