選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

user.js 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. import {
  2. setItem,
  3. removeItem,
  4. StorageKeys,
  5. getItem
  6. } from "@/utils/storage";
  7. import {
  8. defineStore
  9. } from "pinia";
  10. import {
  11. requestNew
  12. } from "@/utils/network/request";
  13. import {
  14. appId,
  15. getToken,
  16. wechatAppID,
  17. getOpenId,logout
  18. } from "@/utils/network/api";
  19. import {
  20. stringToJson
  21. } from "@/utils/network/encryption";
  22. import {
  23. confirm,
  24. msg,
  25. navTo
  26. } from "@/utils/utils";
  27. export const useUserStore = defineStore("userStore", {
  28. state: () => ({
  29. //访问令牌
  30. access_token: "",
  31. //openId
  32. openId: "",
  33. userInfo: '',
  34. isNewLogin: true,
  35. }),
  36. getters: {
  37. },
  38. actions: {
  39. setIsNewLogin (value) {
  40. this.isNewLogin = value
  41. },
  42. //设置用户token
  43. saveToken(token) {
  44. this.access_token = token;
  45. setItem(StorageKeys.Token, token);
  46. },
  47. saveUserInfo(userInfo) {
  48. this.userInfo = userInfo;
  49. setItem('userInfo', userInfo);
  50. },
  51. //设置openId
  52. saveOpenId(openId) {
  53. this.openId = openId;
  54. setItem(StorageKeys.OpenId, openId);
  55. },
  56. removeRefreshKey (refreshKey) {
  57. if (refreshKey) {
  58. let index = this.isRefreshListKey.findIndex(refreshKey)
  59. this.isRefreshListKey.slice(index, 1)
  60. }
  61. },
  62. /*根据登录code获取token信息*/
  63. fetchToken(code) {
  64. if(getItem("wxOpenid")){
  65. const options = {
  66. type: 2,
  67. data: {
  68. deviceId: "",
  69. code: code,
  70. loginSource: getItem("loginSource"),
  71. wxOpenid: getItem("wxOpenid"),
  72. zfbOpenId: getItem("zfbOpenId"),
  73. zfbUserId: getItem("zfbUserId"),
  74. mpOpenid:getItem('mpOpenId')//用户在微信公众号的唯一身份标识openid
  75. },
  76. method: "POST",
  77. showLoading: false,
  78. };
  79. return new Promise(async (resolve, reject) => {
  80. const res = await requestNew(getToken, options);
  81. const data = res;
  82. console.log("fetchToken", options)
  83. this.saveToken(data.accessToken);
  84. this.saveOpenId(data.openId);
  85. console.log('输出内容', data.openId)
  86. resolve(data);
  87. }).catch((error) => {
  88. reject(error);
  89. });
  90. }else{
  91. var that=this
  92. // 如果没有wxOpenid重新获取
  93. //获取微信小程序openid
  94. // #ifdef MP-WEIXIN
  95. uni.login({
  96. provider: "weixin",
  97. success: function(e) {
  98. console.log("jsCode",e)
  99. const options = {
  100. type: 2,
  101. data: {
  102. "jsCode": e.code
  103. },
  104. method: "POST",
  105. };
  106. // #ifdef MP-WEIXIN
  107. requestNew(getOpenId, options).then((res) => {
  108. const result =res;
  109. console.log("getOpenId===",result)
  110. setItem("wxOpenid", result.openid);
  111. const options = {
  112. type: 2,
  113. data: {
  114. deviceId: "",
  115. code: code,
  116. loginSource: getItem("loginSource"),
  117. wxOpenid: getItem("wxOpenid"),
  118. zfbOpenId: getItem("zfbOpenId"),
  119. zfbUserId: getItem("zfbUserId"),
  120. mpOpenid:getItem('mpOpenId')//用户在微信公众号的唯一身份标识openid
  121. },
  122. method: "POST",
  123. showLoading: false,
  124. };
  125. return new Promise(async (resolve, reject) => {
  126. const res = await requestNew(getToken, options);
  127. const data = res;
  128. console.log("fetchToken", options)
  129. that.saveToken(data.accessToken);
  130. that.saveOpenId(data.openId);
  131. console.log('输出内容', data.openId)
  132. resolve(data);
  133. }).catch((error) => {
  134. reject(error);
  135. });
  136. });
  137. // #endif
  138. },
  139. });
  140. // #endif
  141. }
  142. },
  143. /*退出登录*/
  144. loginOutNoConfirm() {
  145. msg("退出登录成功!");
  146. // //把state中的值恢复成默认值
  147. this.$reset();
  148. // //移除本地缓存
  149. removeItem(StorageKeys.Token);
  150. removeItem(StorageKeys.OpenId);
  151. uni.$emit('loginOut');
  152. uni.navigateTo({
  153. url: "/login/login"
  154. });
  155. },
  156. /*退出登录请求*/
  157. logoutRequest() {
  158. const options = {
  159. type: 2,
  160. data: {
  161. openId: getItem(StorageKeys.OpenId),
  162. },
  163. method: "POST",
  164. showLoading: true,
  165. };
  166. requestNew(logout, options).then((res) => {
  167. this.loginOutNoConfirm()
  168. })
  169. },
  170. /*退出登录*/
  171. loginOut() {
  172. confirm(
  173. "确定要退出登录吗?",
  174. () => {
  175. this.logoutRequest();
  176. },
  177. "提示",
  178. true
  179. );
  180. },
  181. },
  182. });