user.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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. is_seller: getStorage('is_seller') || 0
  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.is_seller
  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. setStorage('is_seller', res.data.is_seller);
  66. this.setAuth({ id: res.data.id, socket_id: useSocket.socketId });
  67. const useTabbar = useTabbarStore();
  68. Toast(res.msg, 1000).then(() => {
  69. if (!isLogin) {
  70. let timer = setTimeout(() => {
  71. const backUrl = getStorage('beforeLoginPage');
  72. if (backUrl) {
  73. removeStorage('beforeLoginPage');
  74. const arr = ["/pages/index/index", "/pages/shop/cart", "/pages/community/index", "/pages/order/index", "/pages/user/index", "/pages/chat/index"];
  75. const hasAny = arr.some(s => backUrl.includes(s));
  76. if (hasAny) {
  77. uni.switchTab({ url: backUrl });
  78. } else {
  79. uni.redirectTo({ url: backUrl });
  80. }
  81. } else {
  82. uni.switchTab({ url: '/pages/index/index' });
  83. useTabbar.getPageCur('index');
  84. }
  85. // uni.switchTab({ url: '/pages/index/index' });
  86. // useTabbar.getPageCur('index');
  87. clearTimeout(timer)
  88. }, 1000)
  89. }
  90. })
  91. resolve(res)
  92. }).catch(err => {
  93. Toast(err.msg)
  94. reject(err);
  95. })
  96. } catch (error) {
  97. reject(error)
  98. }
  99. })
  100. },
  101. getUserInfo(params = {}, other = {}) {
  102. try {
  103. GET_USERINFO(params, other).then(res => {
  104. this.userInfo = res.data;
  105. this.token = res.data.token;
  106. setStorage(verConfig.tokenName, res.data.token);
  107. setStorage(verConfig.infoName, res.data);
  108. setStorage('is_seller', res.data.is_seller);
  109. })
  110. } catch (error) { }
  111. },
  112. setAuth({ id, socket_id }) {
  113. return new Promise(async (resolve, reject) => {
  114. const useSocket = useSocketStore()
  115. const useMessage = useMessageStore()
  116. try {
  117. const channel_name = `private-user-${id}`;
  118. const res = await USERS_AUTH({
  119. channel_name,
  120. socket_id,
  121. last_time: {
  122. service: getStorage("serviceChannel") ? getStorage("serviceChannel") : 0,
  123. notice: getStorage("noticeChannel") ? getStorage("noticeChannel") : 0,
  124. }
  125. })
  126. useSocket.send({
  127. event: "pusher:subscribe",
  128. data: res.data
  129. })
  130. for (let key in res.data.unread) {
  131. useMessage.updateGlobalMapUnreadCount(`${key}Channel`, res.data.unread[key])
  132. }
  133. useMessage.getTotalUnreadCount()
  134. resolve(res)
  135. } catch (error) {
  136. reject(error)
  137. }
  138. })
  139. },
  140. setTheme(_theme_) {
  141. this.theme = _theme_;
  142. },
  143. setloadingNum(_num_) {
  144. this.getLoadingNum = _num_;
  145. },
  146. loginOut(flag = false) {
  147. const useMessage = useMessageStore()
  148. const useShop = useShopStore()
  149. removeStorage(verConfig.infoName);
  150. removeStorage(verConfig.tokenName);
  151. removeStorage('userType'); // 清除用户类型存储
  152. this.userType = 1; // 重置为默认卖家类型
  153. USER_LOGOUT();
  154. useShop.setCartNum(0);
  155. useMessage.resetAllGlobalUnreadCount();
  156. // #ifdef APP-PLUS
  157. plus.runtime.setBadgeNumber(0);
  158. // #endif
  159. if (!flag) {
  160. uni.reLaunch({ url: '/pages/login/login' });
  161. }
  162. },
  163. async setStatics() {
  164. try {
  165. const res = await USER_STATICS();
  166. this.statics = res.data
  167. } catch (error) { }
  168. },
  169. setUserInfo(_userInfo_) {
  170. this.userInfo = _userInfo_;
  171. this.token = _userInfo_.token;
  172. setStorage(verConfig.tokenName, _userInfo_.token);
  173. setStorage(verConfig.infoName, _userInfo_);
  174. },
  175. setInitId(_auth_id) {
  176. this.auth_id = _auth_id
  177. },
  178. // 设置用户类型:1为卖家,0为买家
  179. setUserType(userType) {
  180. this.is_seller = userType;
  181. setStorage('is_seller', userType);
  182. }
  183. }
  184. })