user.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import { defineStore } from "pinia";
  2. import verConfig from "../ver.config";
  3. import { LOGIN, GET_USERINFO, USER_STATICS, USERS_AUTH, USER_LOGOUT } from "@/api";
  4. import { Toast, uniappStorage, removeStorage, setStorage, getStorage } from '@/utils'
  5. import { useTabbarStore } from "./tabbar"
  6. import { useSocketStore } from "./socket"
  7. import { useMessageStore } from "./message"
  8. import { useShopStore } from "./shop"
  9. const state = () => ({
  10. getLoadingNum: 0,
  11. theme: verConfig.theme,
  12. userInfo: getStorage(verConfig.infoName) || {},
  13. token: getStorage(verConfig.tokenName) || '',
  14. statics: {},
  15. auth_id: ''
  16. })
  17. export const useUserStore = defineStore('user', {
  18. state,
  19. // persist: {
  20. // enabled: true,
  21. // strategies: [{
  22. // key: verConfig.infoName,
  23. // storage: uniappStorage,
  24. // paths: ['userInfo']
  25. // }, {
  26. // key: verConfig.tokenName,
  27. // storage: uniappStorage,
  28. // paths: ['token']
  29. // }]
  30. // },
  31. getters: {
  32. getNum() {
  33. return this.getLoadingNum;
  34. },
  35. getTheme() {
  36. return this.theme
  37. },
  38. getuserInfo() {
  39. return this.userInfo
  40. },
  41. getToken() {
  42. return this.token
  43. },
  44. getStatics() {
  45. return this.statics
  46. },
  47. getAuthId() {
  48. return this.auth_id
  49. }
  50. },
  51. actions: {
  52. login(params, isLogin = false) {
  53. return new Promise(async (resolve, reject) => {
  54. const useSocket = useSocketStore()
  55. try {
  56. LOGIN(params).then(res => {
  57. this.userInfo = res.data;
  58. this.token = res.data.token;
  59. setStorage(verConfig.tokenName, res.data.token);
  60. setStorage(verConfig.infoName, res.data);
  61. this.setAuth({ id: res.data.id, socket_id: useSocket.socketId });
  62. const useTabbar = useTabbarStore();
  63. Toast(res.msg, 1000).then(() => {
  64. if (!isLogin) {
  65. let timer = setTimeout(() => {
  66. const backUrl = getStorage('beforeLoginPage');
  67. if (backUrl) {
  68. removeStorage('beforeLoginPage');
  69. const arr = ["/pages/index/index", "/pages/shop/cart", "/pages/community/index", "/pages/order/index", "/pages/user/index", "/pages/chat/index"];
  70. const hasAny = arr.some(s => backUrl.includes(s));
  71. if (hasAny) {
  72. uni.switchTab({ url: backUrl });
  73. } else {
  74. uni.redirectTo({ url: backUrl });
  75. }
  76. } else {
  77. uni.switchTab({ url: '/pages/index/index' });
  78. useTabbar.getPageCur('index');
  79. }
  80. // uni.switchTab({ url: '/pages/index/index' });
  81. // useTabbar.getPageCur('index');
  82. clearTimeout(timer)
  83. }, 1000)
  84. }
  85. })
  86. resolve(res)
  87. }).catch(err => {
  88. Toast(err.msg)
  89. reject(err);
  90. })
  91. } catch (error) {
  92. reject(error)
  93. }
  94. })
  95. },
  96. getUserInfo(params = {}, other = {}) {
  97. try {
  98. GET_USERINFO(params, other).then(res => {
  99. this.userInfo = res.data;
  100. this.token = res.data.token;
  101. setStorage(verConfig.tokenName, res.data.token);
  102. setStorage(verConfig.infoName, res.data);
  103. })
  104. } catch (error) { }
  105. },
  106. setAuth({ id, socket_id }) {
  107. return new Promise(async (resolve, reject) => {
  108. const useSocket = useSocketStore()
  109. const useMessage = useMessageStore()
  110. try {
  111. const channel_name = `private-user-${id}`;
  112. const res = await USERS_AUTH({
  113. channel_name,
  114. socket_id,
  115. last_time: {
  116. service: getStorage("serviceChannel") ? getStorage("serviceChannel") : 0,
  117. notice: getStorage("noticeChannel") ? getStorage("noticeChannel") : 0,
  118. }
  119. })
  120. useSocket.send({
  121. event: "pusher:subscribe",
  122. data: res.data
  123. })
  124. for (let key in res.data.unread) {
  125. useMessage.updateGlobalMapUnreadCount(`${key}Channel`, res.data.unread[key])
  126. }
  127. useMessage.getTotalUnreadCount()
  128. resolve(res)
  129. } catch (error) {
  130. reject(error)
  131. }
  132. })
  133. },
  134. setTheme(_theme_) {
  135. this.theme = _theme_;
  136. },
  137. setloadingNum(_num_) {
  138. this.getLoadingNum = _num_;
  139. },
  140. loginOut(flag = false) {
  141. const useMessage = useMessageStore()
  142. const useShop = useShopStore()
  143. removeStorage(verConfig.infoName);
  144. removeStorage(verConfig.tokenName);
  145. USER_LOGOUT();
  146. useShop.setCartNum(0);
  147. useMessage.resetAllGlobalUnreadCount();
  148. // #ifdef APP-PLUS
  149. plus.runtime.setBadgeNumber(0);
  150. // #endif
  151. if (!flag) {
  152. uni.reLaunch({ url: '/pages/login/login' });
  153. }
  154. },
  155. async setStatics() {
  156. try {
  157. const res = await USER_STATICS();
  158. this.statics = res.data
  159. } catch (error) { }
  160. },
  161. setUserInfo(_userInfo_) {
  162. this.userInfo = _userInfo_;
  163. this.token = _userInfo_.token;
  164. setStorage(verConfig.tokenName, _userInfo_.token);
  165. setStorage(verConfig.infoName, _userInfo_);
  166. },
  167. setInitId(_auth_id) {
  168. this.auth_id = _auth_id
  169. }
  170. }
  171. })