message.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import Vue from 'vue'
  2. import { _API_AppMessage } from '@/apis/app.js'
  3. import { deepClone } from '@/common/util/index.js'
  4. const getPreviewText = item => {
  5. let status;
  6. switch (+item.status) {
  7. case 0: status = "下单"; break;
  8. case 1: status = "发货"; break;
  9. case 2: status = "收货"; break;
  10. }
  11. return `恭喜您!您有一份价值 ${item.goodList.reduce((t, e) => t + (+e.num * +e.price), 0)} 元的订单已经${status}成功!`
  12. }
  13. export default {
  14. namespaced: true,
  15. state: {
  16. system: [], // 未读消息列表
  17. myOrder: [], // 未读消息列表
  18. downOrder: [], // 未读消息列表
  19. systemLocal: uni.getStorageSync('systemLocal') ? JSON.parse(uni.getStorageSync('systemLocal')) : [], // 从本地存储中读取以缓存的消息
  20. myOrderLocal: uni.getStorageSync('myOrderLocal') ? JSON.parse(uni.getStorageSync('myOrderLocal')) : [], // 从本地存储中读取以缓存的消息
  21. downOrderLocal: uni.getStorageSync('downOrderLocal') ? JSON.parse(uni.getStorageSync('downOrderLocal')) : [], // 从本地存储中读取以缓存的消息
  22. },
  23. getters: {
  24. messageNum: state => { // 计算未读消息数量
  25. return state.system.length + state.myOrder.length + state.downOrder.length
  26. },
  27. systemMessageNum: state => { // 计算未读系统消息数量
  28. return state.system.length
  29. },
  30. orderMessageNum: state => { // 计算未读订单消息数量
  31. return state.myOrder.length + state.downOrder.length
  32. },
  33. downOrderMessageNum: state => { // 计算未读下级订单消息数量
  34. return state.downOrder.length
  35. },
  36. previewOrderMessage: state => { // 消息通知页面 订单通知预览文字
  37. if (state.myOrder.length) { // 如果有未读消息,显示未读消息
  38. return getPreviewText(state.myOrder[0])
  39. } else if (state.downOrder.length) {
  40. return '恭喜您!您有一份新的下级订单等待确认!'
  41. } else if (state.myOrderLocal.length) { // 如果没有未读消息,显示本地消息
  42. return getPreviewText(state.myOrderLocal[0])
  43. } else if (state.downOrderLocal.length) {
  44. return '恭喜您!您有一份新的下级订单等待确认!'
  45. } else {
  46. return '暂无消息'
  47. }
  48. },
  49. previewSystemMessage: state => { // 消息通知页面 系统通知预览文字
  50. if (state.system.length) { // 如果有未读消息,显示未读的系统消息
  51. return `${state.system[0].title} ${state.system[0].message}`
  52. } else if (state.systemLocal.length) { // 如果没有未读消息,显示本地的系统消息
  53. return `${state.systemLocal[0].title} ${state.systemLocal[0].message}`
  54. } else {
  55. return '暂无消息'
  56. }
  57. },
  58. },
  59. mutations: {
  60. readMessage(state, payload) { // 将某条订单消息标记为已读(标记本地消息状态)
  61. if (payload.type === 2) {
  62. const item = deepClone(state.myOrderLocal[payload.index])
  63. item.readed = true
  64. Vue.set(state.myOrderLocal, payload.index, item)
  65. uni.setStorageSync('myOrderLocal', JSON.stringify(state.myOrderLocal)) // 缓存消息
  66. } else if (payload.type === 3) {
  67. const item = deepClone(state.downOrderLocal[payload.index])
  68. item.readed = true
  69. Vue.set(state.downOrderLocal, payload.index, item)
  70. uni.setStorageSync('downOrderLocal', JSON.stringify(state.downOrderLocal)) // 缓存消息
  71. }
  72. },
  73. setStorage(state, index) { // 批量设置消息已读(清除服务器未读消息队列)
  74. if (index === 1) {
  75. state.systemLocal = [...state.system, ...state.systemLocal] // 将未读消息放入已读消息列表
  76. state.system = [] // 将未读消息清空
  77. uni.setStorageSync('systemLocal', JSON.stringify(state.systemLocal)) // 缓存消息
  78. this.commit('message/setTabbarNum') // 设置 tabbar 数字
  79. } else if (index === 2) {
  80. state.myOrderLocal = [...state.myOrder, ...state.myOrderLocal] // 将未读消息放入已读消息列表
  81. state.myOrder = [] // 将未读消息清空
  82. uni.setStorageSync('myOrderLocal', JSON.stringify(state.myOrderLocal)) // 缓存消息
  83. this.commit('message/setTabbarNum') // 设置 tabbar 数字
  84. } else if (index === 3) {
  85. state.downOrderLocal = [...state.downOrder, ...state.downOrderLocal] // 将未读消息放入已读消息列表
  86. state.downOrder = [] // 将未读消息清空
  87. uni.setStorageSync('downOrderLocal', JSON.stringify(state.downOrderLocal)) // 缓存消息
  88. this.commit('message/setTabbarNum') // 设置 tabbar 数字
  89. }
  90. },
  91. clearStorage(state) { // 清除缓存
  92. state.systemLocal = []
  93. state.myOrderLocal = []
  94. state.downOrderLocal = []
  95. uni.removeStorageSync('systemLocal')
  96. uni.removeStorageSync('myOrderLocal')
  97. uni.removeStorageSync('downOrderLocal')
  98. },
  99. setMessage(state, payload) { // 获取未读消息
  100. state.system = payload[0]
  101. state.myOrder = payload[1]
  102. state.downOrder = payload[2]
  103. },
  104. setTabbarNum() { // 更新 tabbar 数字
  105. if (this.getters['message/messageNum']) {
  106. uni.setTabBarBadge({ index: 3, text: this.getters['message/messageNum'] + '' })
  107. } else {
  108. uni.removeTabBarBadge({ index: 3 })
  109. }
  110. }
  111. },
  112. actions: {
  113. getMessage ({ commit, getters }) { //获取 app 消息通知
  114. _API_AppMessage().then(res => { // 发送获取系统消息网络请求
  115. if (res.code === 200) {
  116. commit('setMessage', [res.data.system, res.data.myOrder, res.data.downOrder]) //将获取到的用户微信信息存在 store 里
  117. uni.vibrateLong() // 震动提醒
  118. uni.setTabBarBadge({ index: 3, text: String(getters.messageNum) }) // 设置 tabbar 数字提醒
  119. }
  120. })
  121. }
  122. }
  123. }