message-detail.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <!-- tabbar消息详情 -->
  2. <template>
  3. <view>
  4. <mescroll-body ref="mescrollRef" @init="mescrollInit" top="0" :down="downOption" @down="downCallback"
  5. :up="upOption" @up="upCallback">
  6. <block v-for="(item,index) in dataList" :key="index">
  7. <msg-list :item='item' :index="index" @clickMsgItem='clickMsgItem'></msg-list>
  8. </block>
  9. </mescroll-body>
  10. </view>
  11. </template>
  12. <script>
  13. import msgList from "@/components/message/msg-list.vue";
  14. import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
  15. import mescrollBody from "@/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.vue";
  16. import { getMyCrmMsgList,doRead,setAllRead } from "@/api/message.js";
  17. export default {
  18. mixins: [MescrollMixin], // 注意此处还需使用MescrollMoreItemMixin (必须写在MescrollMixin后面)
  19. components: {
  20. mescrollBody,
  21. msgList
  22. },
  23. data() {
  24. return {
  25. downOption: {
  26. auto: true // 不自动加载 (mixin已处理第一个tab触发downCallback)
  27. },
  28. upOption: {
  29. auto: false, // 不自动加载
  30. page: {
  31. num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
  32. size: 10 // 每页数据的数量
  33. },
  34. noMoreSize: 1, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
  35. empty: {
  36. tip: '~ 暂无数据 ~' // 提示
  37. // btnText: '去看看'
  38. }
  39. },
  40. itemData: {},
  41. dataList: [
  42. // {"content":"明天上午8点电话预约","un_read_count":0,"scene_name":"客户消息","create_time":"2022-12-03 09:48"},
  43. // {"content":"明天上午8点电话预约","un_read_count":0,"scene_name":"客户消息","create_time":"2022-12-03 09:48"},
  44. // {"content":"明天上午8点电话预约","un_read_count":0,"scene_name":"客户消息","create_time":"2022-12-03 09:48"}
  45. ],
  46. ids: [],
  47. index:-1,
  48. }
  49. },
  50. onLoad() {
  51. this.itemData = this.$Route.query.itemData;
  52. this.index=this.$Route.query.index;
  53. this.doReadAct();
  54. },
  55. methods: {
  56. clickMsgItem(index) {
  57. this.msgTypeFilter(index)
  58. },
  59. msgTypeFilter(index) {
  60. switch (this.itemData.msgType) {
  61. case 1: //客户消息
  62. let data=this.dataList[index];
  63. this.$Router.push({
  64. name: 'mycustomerDtl',
  65. params: {
  66. cId:data.objId,
  67. customerUserId:data.companyUserId,
  68. isMyCts:true
  69. }
  70. });
  71. break;
  72. case 2: //日程消息
  73. // let obj_djhd = {
  74. // id: this.listData[index].business_id
  75. // }
  76. // this.$Router.push({
  77. // name: "activityDetail",
  78. // params: obj_djhd
  79. // })
  80. break;
  81. case 3: //回款消息
  82. break;
  83. case 4: //党费缴纳
  84. break;
  85. case 5: //组织动态
  86. break;
  87. case 6: //在线投票
  88. let obj_zxtp = {
  89. id: this.listData[index].business_id
  90. }
  91. try {
  92. uni.navigateTo({
  93. url: "/pages/vote/voteDetail?" + this.param(obj_zxtp)
  94. })
  95. } catch (er) {
  96. //TODO handle the exception
  97. this.$navTo.push("/pages/vote/voteDetail", obj_zxtp)
  98. }
  99. break;
  100. default: //未知消息
  101. break;
  102. }
  103. },
  104. param(data) {
  105. let url = "";
  106. for (var k in data) {
  107. let value = data[k] !== undefined ? data[k] : "";
  108. url += "&" + k + "=" + encodeURIComponent(value);
  109. }
  110. return url ? url.substring(1) : "";
  111. },
  112. /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
  113. upCallback(page) {
  114. getMyCrmMsgList(this.itemData.msgType,page.num).then(res => {
  115. if(res.code==200){
  116. setTimeout(()=>{
  117. this.mescroll.endByPage(res.data.list.length, res.data.pages);
  118. if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
  119. this.dataList=this.dataList.concat(res.data.list); //追加新数据
  120. },100);
  121. }
  122. },
  123. rej => {}
  124. ).catch(()=>{
  125. //联网失败, 结束加载
  126. this.mescroll.endErr();
  127. });
  128. },
  129. //批量已读
  130. batchRead(index) {
  131. let item=this.dataList[index];
  132. uni.showLoading({title:""});
  133. let that=this;
  134. doRead(item.msgType).then(res => {
  135. if(res.code==200){
  136. uni.showToast({ title: "操作成功" });
  137. item.isRead=1;
  138. that.dataList.splice(index,1,item);//删除
  139. }else{
  140. uni.showToast({title: res.msg,icon:"none"});
  141. }
  142. },
  143. rej => {}
  144. ).catch(()=>{
  145. });
  146. },
  147. getMyCrmMsgList(){
  148. getMyCrmMsgList(page.num).then(res => {
  149. if(res.code==200){
  150. setTimeout(()=>{
  151. this.mescroll.endByPage(res.data.list.length, res.data.pages);
  152. if(page.num == 1) this.dataList = []; //如果是第一页需手动制空列表
  153. this.dataList=this.dataList.concat(res.data.list); //追加新数据
  154. },100);
  155. }
  156. },
  157. rej => {}
  158. ).catch(()=>{
  159. //联网失败, 结束加载
  160. this.mescroll.endErr();
  161. });
  162. },
  163. doReadAct(){
  164. doRead(this.itemData.msgType).then(res => {
  165. if(res.code==200){
  166. uni.$emit('refreshMessage', this.index);
  167. }else{
  168. uni.showToast({title: res.msg,icon:"none"});
  169. }
  170. },
  171. rej => {}
  172. ).catch(()=>{
  173. });
  174. },
  175. }
  176. }
  177. </script>
  178. <style lang="scss">
  179. page {
  180. background-color: #F5F6F7;
  181. }
  182. </style>