user.js 5.7 KB

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