message.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. },
  38. previewSystemMessage: state => { // 消息通知页面 系统通知预览文字
  39. if (state.system.length) { // 如果有未读消息,显示未读的系统消息
  40. return `${state.system[0].title} ${state.system[0].message}`
  41. } else if (state.systemLocal.length) { // 如果没有未读消息,显示本地的系统消息
  42. return `${state.systemLocal[0].title} ${state.systemLocal[0].message}`
  43. } else {
  44. return '暂无消息'
  45. }
  46. },
  47. },
  48. mutations: {
  49. readMessage(state, payload) { // 将某条订单消息标记为已读(标记本地消息状态)
  50. if (payload.type === 2) {
  51. const item = deepClone(state.myOrderLocal[payload.index])
  52. item.readed = true
  53. Vue.set(state.myOrderLocal, payload.index, item)
  54. uni.setStorageSync('myOrderLocal', JSON.stringify(state.myOrderLocal)) // 缓存消息
  55. } else if (payload.type === 3) {
  56. const item = deepClone(state.downOrderLocal[payload.index])
  57. item.readed = true
  58. Vue.set(state.downOrderLocal, payload.index, item)
  59. uni.setStorageSync('downOrderLocal', JSON.stringify(state.downOrderLocal)) // 缓存消息
  60. }
  61. },
  62. setStorage(state, index) { // 批量设置消息已读(清除服务器未读消息队列)
  63. if (index === 1) {
  64. state.systemLocal = [...state.system, ...state.systemLocal] // 将未读消息放入已读消息列表
  65. state.system = [] // 将未读消息清空
  66. uni.setStorageSync('systemLocal', JSON.stringify(state.systemLocal)) // 缓存消息
  67. this.commit('message/setTabbarNum') // 设置 tabbar 数字
  68. } else if (index === 2) {
  69. state.myOrderLocal = [...state.myOrder, ...state.myOrderLocal] // 将未读消息放入已读消息列表
  70. state.myOrder = [] // 将未读消息清空
  71. uni.setStorageSync('myOrderLocal', JSON.stringify(state.myOrderLocal)) // 缓存消息
  72. this.commit('message/setTabbarNum') // 设置 tabbar 数字
  73. } else if (index === 3) {
  74. state.downOrderLocal = [...state.downOrder, ...state.downOrderLocal] // 将未读消息放入已读消息列表
  75. state.downOrder = [] // 将未读消息清空
  76. uni.setStorageSync('downOrderLocal', JSON.stringify(state.downOrderLocal)) // 缓存消息
  77. this.commit('message/setTabbarNum') // 设置 tabbar 数字
  78. }
  79. },
  80. clearStorage(state) { // 清除缓存
  81. state.systemLocal = []
  82. state.myOrderLocal = []
  83. state.downOrderLocal = []
  84. uni.removeStorageSync('systemLocal')
  85. uni.removeStorageSync('myOrderLocal')
  86. uni.removeStorageSync('downOrderLocal')
  87. },
  88. setMessage(state, payload) { // 获取未读消息
  89. state.system = payload[0]
  90. state.myOrder = payload[1]
  91. state.downOrder = payload[2]
  92. },
  93. // setTabbarNum() { // 更新 tabbar 数字
  94. // if (this.getters['message/messageNum']) {
  95. // uni.setTabBarBadge({ index: 3, text: this.getters['message/messageNum'] + '' })
  96. // } else {
  97. // uni.removeTabBarBadge({ index: 3 })
  98. // }
  99. // }
  100. },
  101. actions: {
  102. getMessage ({ commit, getters }) { //获取 app 消息通知
  103. _API_AppMessage().then(res => { // 发送获取系统消息网络请求
  104. if (res.code === 200) {
  105. commit('setMessage', [res.data.system, res.data.myOrder, res.data.downOrder]) //将获取到的用户微信信息存在 store 里
  106. uni.vibrateLong() // 震动提醒
  107. uni.setTabBarBadge({ index: 3, text: String(getters.messageNum) }) // 设置 tabbar 数字提醒
  108. }
  109. })
  110. }
  111. }
  112. }