base.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import { MessageNum } from 'API/crm/message'
  2. import { QueryUnreadCount } from 'API/admin'
  3. import { WaitingQueryOaExamineList } from 'API/oa/examine.js'
  4. import { compareObj } from '@/utils/lib.js'
  5. const state = {
  6. statusMap: {
  7. 0: {status: 0, label: '待审核', color: '#ffc539', bg: 'rgba(255,197,57,0.1)', icon: 'wk-time'},
  8. 1: {status: 1, label: '审核通过', color: '#20b559', bg: 'rgba(32,181,89,0.1)', icon: 'wk-check-fill'},
  9. 2: {status: 2, label: '审核拒绝', color: '#f95a5a', bg: 'rgba(249,90,90,0.1)', icon: 'wk-close-fill'},
  10. 3: {status: 3, label: '审核中', color: '#398dff', bg: 'rgba(57,141,255,0.1)', icon: 'wk-time'},
  11. 4: {status: 4, label: '已撤回', color: '#999', bg: 'rgba(153,153,153,0.1)', icon: 'wk-reset'},
  12. 5: {status: 5, label: '未提交', color: '#d9d9d9', bg: 'rgba(217,217,217,0.1)', icon: 'wk-time'},
  13. 6: {status: 6, label: '创建', color: '#2362FB', bg: 'rgba(35,98,251,0.1)', icon: 'wk-plus'},
  14. 7: {status: 7, label: '已删除', color: '#bfbfbf', bg: 'rgba(35,98,251,0.1)', icon: 'wk-invalid'},
  15. 8: {status: 8, label: '已作废', color: '#bfbfbf', bg: 'rgba(191,191,191,0.1)', icon: 'wk-invalid'},
  16. 10: {status: 10, label: '正常', color: '#20b559', bg: 'rgba(32,181,89,0.1)', icon: 'wk-check-fill'}
  17. },
  18. auditType: {
  19. 1: '负责人主管',
  20. 2: '{length}人或签',
  21. 3: '{length}人会签',
  22. 4: '上一级审批人主管'
  23. },
  24. backlogTotal: 0, // 待办事项总数
  25. backlogDetail: {}, // 待办事项数量明细
  26. backlogLoadingFlag: false // 待办事项加载标志
  27. }
  28. const getters = {
  29. calcStatus: state => status => state.statusMap[status] || {},
  30. calcAuditType: state => status => state.auditType[status],
  31. backlogTotal: state => state.backlogTotal,
  32. backlogDetail: state => state.backlogDetail,
  33. }
  34. let heartbeatTimer = null
  35. let duration = 10 * 60 * 1000 // 待办事项心跳间隔
  36. const actions = {
  37. startHeartbeat({dispatch, state}) {
  38. const token = uni.getStorageSync('token') || null
  39. if (!token) {
  40. dispatch('stopHeartbeat')
  41. } else {
  42. dispatch('getBacklogTotal')
  43. }
  44. },
  45. getBacklogTotal({ commit, dispatch, state }) {
  46. // 判断是否正在加载,节流
  47. if (state.backlogLoadingFlag) return;
  48. commit('SET_BACKLOG_LOADING_FLAG', true)
  49. // 清除上一个定时器
  50. if (heartbeatTimer) {
  51. clearTimeout(heartbeatTimer)
  52. heartbeatTimer = null
  53. }
  54. // 判断是否有token
  55. if (!uni.getStorageSync('token')) {
  56. commit('SET_BACKLOG_TOTAL', 0)
  57. commit('SET_BACKLOG_LOADING_FLAG')
  58. commit('SET_BACKLOG_DETAIL', {})
  59. return
  60. }
  61. Promise.all([
  62. MessageNum(),
  63. QueryUnreadCount(),
  64. WaitingQueryOaExamineList({
  65. limit: 1,
  66. page: 1,
  67. status: 1
  68. })
  69. ]).then(resArr => {
  70. const res = { ...resArr[0], ...resArr[1] }
  71. res.examineNum = resArr[2].totalRow
  72. dispatch('setBacklogNum', res)
  73. dispatch('nextHeartbeat')
  74. }).catch(() => {
  75. dispatch('nextHeartbeat')
  76. })
  77. },
  78. setBacklogNum({ commit, state }, data) {
  79. const backlogKeys = [
  80. 'todayCustomer',
  81. 'followLeads',
  82. 'followCustomer',
  83. 'putInPoolRemind',
  84. 'endContract',
  85. 'checkContract',
  86. 'checkReceivables',
  87. 'remindReceivablesPlan',
  88. 'todayLeads',
  89. 'todayBusiness',
  90. 'examineNum'
  91. ]
  92. const messageKeys = [
  93. 'announceCount',
  94. 'logCount',
  95. 'examineCount',
  96. 'taskCount',
  97. 'crmCount',
  98. 'eventCount'
  99. // 'knowledgeCount'
  100. ]
  101. const res = {
  102. backlogDetail: {},
  103. backlogNum: 0,
  104. messageDetail: {},
  105. messageNum: 0
  106. }
  107. backlogKeys.forEach(key => {
  108. if (data.hasOwnProperty(key)) {
  109. res.backlogDetail[key] = Number(data[key]) || 0
  110. res.backlogNum += res.backlogDetail[key]
  111. } else {
  112. res.backlogDetail[key] = 0
  113. }
  114. })
  115. messageKeys.forEach(key => {
  116. if (data.hasOwnProperty(key)) {
  117. res.messageDetail[key] = Number(data[key]) || 0
  118. res.messageNum += res.messageDetail[key]
  119. } else {
  120. res.messageDetail[key] = 0
  121. }
  122. })
  123. commit('SET_BACKLOG_TOTAL', res.backlogNum + res.messageNum)
  124. commit('SET_BACKLOG_DETAIL', res)
  125. },
  126. nextHeartbeat({ commit, dispatch }) {
  127. commit('SET_BACKLOG_LOADING_FLAG')
  128. if (heartbeatTimer) {
  129. clearTimeout(heartbeatTimer)
  130. }
  131. heartbeatTimer = null
  132. heartbeatTimer = setTimeout(() => {
  133. dispatch('startHeartbeat')
  134. }, duration)
  135. },
  136. stopHeartbeat({ commit }) {
  137. if (heartbeatTimer) {
  138. clearTimeout(heartbeatTimer)
  139. heartbeatTimer = null
  140. }
  141. commit('SET_BACKLOG_TOTAL', 0)
  142. commit('SET_BACKLOG_LOADING_FLAG')
  143. commit('SET_BACKLOG_DETAIL', {})
  144. }
  145. }
  146. const mutations = {
  147. SET_BACKLOG_LOADING_FLAG(state, flag = false) {
  148. state.backlogLoadingFlag = flag
  149. },
  150. SET_BACKLOG_TOTAL(state, num) {
  151. state.backlogTotal = num
  152. },
  153. SET_BACKLOG_DETAIL(state, data = {}) {
  154. state.backlogDetail = data
  155. }
  156. }
  157. export default {
  158. namespaced: true,
  159. state,
  160. getters,
  161. actions,
  162. mutations
  163. }