user.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. import { getUserInfo, setWxAuthUserInfo, getThirdInfo, createAccount, changePhone } from '@/api/user.js';
  2. import store from '@/store';
  3. import config from '@/config';
  4. import { login, getCompanyByPhone, refreshToken, getUserControlSpace } from '@/api/user.js';
  5. import utils from '@/common/utils.js';
  6. // 定时检查用户信息并且续约-进入页面默认传0
  7. function checkHasUserInfo() {
  8. let timer = setTimeout(() => {
  9. let token = store.state.user.token
  10. let tokenInfo = store.state.user.tokenInfo;
  11. let expireTime = tokenInfo.expireTime;
  12. let refreshTokenExpireTime = tokenInfo.refreshTokenExpireTime;
  13. let nowtime = utils.getTimeStamp();
  14. let refreshTokenValue = tokenInfo && tokenInfo.refreshToken ? tokenInfo.refreshToken : '';
  15. if (token && refreshTokenValue && expireTime && refreshTokenExpireTime >= nowtime) { // 过期可续约
  16. let minute = (parseInt(expireTime - nowtime) / 1000 / 60);
  17. console.log(minute);
  18. if (minute < 20) {
  19. refreshTokenPage().then(() => {
  20. clearTimeout(timer);
  21. checkHasUserInfo(600000);
  22. });
  23. } else {
  24. clearTimeout(timer);
  25. checkHasUserInfo(600000);
  26. }
  27. } else {
  28. clearTimeout(timer);
  29. checkHasUserInfo(600000);
  30. }
  31. }, 600000)
  32. }
  33. // 登录
  34. function wxLogin (type) {
  35. console.log("执行了登录")
  36. // type=1 如果type未激活和作废不需要跳转到登录页面
  37. return new Promise((resolve, reject) => {
  38. wx.login({
  39. success (wxLoginRes) {
  40. const jsCode = wxLoginRes.code;
  41. console.log(utils)
  42. const appId = utils.getAppId();
  43. if (jsCode) {
  44. let params = {
  45. "appId": appId,
  46. "wxCode": jsCode
  47. }
  48. login(params).then(res => {
  49. if (res.result == 'success') {
  50. let data = res.data || []
  51. let tokenInfo = {
  52. expireTime: data.expireTime,
  53. startTime: data.startTime,
  54. refreshTokenExpireTime: data.refreshTokenExpireTime,
  55. refreshToken: data.refreshToken
  56. };
  57. store.commit('setToken', data.token);
  58. store.commit('setActivated', data.isActivated);
  59. store.commit('setTokenInfo', tokenInfo);
  60. if (data.isActivated && data.isActivated == 1) {
  61. store.commit('setUserInfo', data.tokenUser);
  62. // store.commit('setProjectId', data.tokenUser.projectId);
  63. } else {
  64. if (!type) {
  65. refreshLogin()
  66. }
  67. store.commit('setUserInfo', {});
  68. }
  69. resolve(data)
  70. } else {
  71. reject('login接口返回fail');
  72. }
  73. })
  74. } else {
  75. wx.showToast({
  76. title: `网络异常, 请稍后重试`,
  77. icon: 'none',
  78. duration: 5e3
  79. });
  80. reject('wx.login接口返回code为空');
  81. }
  82. },
  83. fail(res) {
  84. reject(res);
  85. wx.showToast({
  86. title: `网络异常, 请稍后重试`,
  87. icon: 'none',
  88. duration: 5e3
  89. });
  90. }
  91. });
  92. });
  93. }
  94. // 获取租户信息
  95. function getCompanyDataByPhone() {
  96. return new Promise((resolve, reject) => {
  97. let userInfo = store.state.user.userInfo;
  98. let userPhone = userInfo.phone || wx.getStorageSync('userPhone');
  99. let params = {
  100. phone: userPhone
  101. }
  102. if (userPhone) {
  103. getCompanyByPhone(params).then(res => {
  104. let data = res.data || []
  105. resolve(data)
  106. }).catch(() => {
  107. reject({
  108. mesg: '获取租户数据异常'
  109. })
  110. })
  111. } else {
  112. reject({
  113. mesg: '无法获取手机号信息,跳转到首页'
  114. })
  115. }
  116. });
  117. }
  118. // 登录续约
  119. function refreshTokenPage() {
  120. return new Promise((resolve, reject) => {
  121. let storeTokenInfo = store.state.user.tokenInfo
  122. let refreshTokenValue = storeTokenInfo && storeTokenInfo.refreshToken ? storeTokenInfo.refreshToken : '';
  123. refreshToken(refreshTokenValue).then(res => {
  124. if (res.result == 'success') {
  125. let data = res.data || []
  126. let tokenInfo = {
  127. expireTime: data.expireTime,
  128. startTime: data.startTime,
  129. refreshTokenExpireTime: data.refreshTokenExpireTime,
  130. refreshToken: data.refreshToken
  131. };
  132. console.log(data);
  133. store.commit('setToken', data.token);
  134. store.commit('setActivated', data.isActivated);
  135. store.commit('setTokenInfo', tokenInfo);
  136. if (data.isActivated && data.isActivated == 1) {
  137. store.commit('setUserInfo', data.tokenUser);
  138. resolve(data)
  139. } else {
  140. store.commit('clearToken', '');
  141. // 去登录页面
  142. refreshLogin()
  143. resolve(data)
  144. }
  145. } else {
  146. store.commit('clearToken', '');
  147. refreshHome();
  148. reject("续约失败!")
  149. }
  150. }).catch(() => {
  151. store.commit('clearToken', '');
  152. refreshHome();
  153. reject("续约失败!")
  154. })
  155. })
  156. }
  157. // 刷新首页
  158. function refreshHome() {
  159. // wx.redirectTo({ url: '/pages/index' });
  160. wx.redirectTo({ url: '/packagesEnv/pages/home/index' });
  161. }
  162. function refreshLogin() {
  163. wx.redirectTo({ url: '/pages/index' });
  164. // wx.redirectTo({ url: '/packagesEnv/pages/home/index' });
  165. }
  166. // 检查用户是否有空间控制权限
  167. function checkUserControl() {
  168. return new Promise((resolve, reject) => {
  169. let userInfo = store.state.user.userInfo;
  170. if (userInfo && userInfo.userId) {
  171. let params = {
  172. "criteria": {
  173. "projectId": userInfo.projectId,
  174. "companyId": userInfo.companyId,
  175. "userCode": userInfo.userId
  176. }
  177. }
  178. getUserControlSpace(params).then(res => {
  179. // console.log("返回用户权限数据")
  180. // console.log(res)
  181. if (res.result == 'success') {
  182. let data = res.data || {}
  183. if (data && JSON.stringify(data) != '{}') {
  184. if (data.isControlSpace !== 1) {
  185. resolve(data)
  186. } else {
  187. reject("租户下无可控空间");
  188. refreshHome();
  189. }
  190. } else { // 如果无权限和楼层数据返回跳转到首页,不让点击
  191. reject("获取租户权限接口失败");
  192. refreshHome();
  193. }
  194. } else {
  195. reject("获取租户权限接口失败");
  196. refreshHome();
  197. }
  198. }).catch((error) => { // 如果无权限和楼层数据返回跳转到首页,不让点击
  199. reject("获取租户权限接口失败");
  200. refreshHome();
  201. })
  202. } else {
  203. reject("用户未登录");
  204. }
  205. })
  206. }
  207. // 登录续约逻辑-待处理
  208. function checkLoginNew() {
  209. return new Promise((resolve, reject) => {
  210. let token = store.state.user.token;
  211. let storeTokenInfo = store.state.user.tokenInfo
  212. let refreshToken = storeTokenInfo && storeTokenInfo.refreshToken ? storeTokenInfo.refreshToken : '';
  213. console.log("执行checkLoginNew--", token, refreshToken);
  214. console.log("执行checkLoginNew--");
  215. if (!token || !refreshToken) {
  216. wxLogin().then((res) => {
  217. resolve(res)
  218. }).catch((error) => {
  219. reject("登录失败!");
  220. });
  221. } else {
  222. let flag = checkTokenIsValid();
  223. console.log("flag==", flag);
  224. if (flag == 1) { // 续约
  225. refreshTokenPage().then(res => {
  226. resolve(res)
  227. }).catch((error) => {
  228. reject("续约失败!");
  229. });
  230. } else if (flag == 2) { // 重新登录
  231. wxLogin().then((res) => {
  232. resolve(res)
  233. }).catch((error) => {
  234. reject("登录失败!");
  235. });
  236. } else if (flag == 3) { // 未过期
  237. resolve({
  238. isActivated: store.state.user.isActivated
  239. })
  240. }
  241. }
  242. })
  243. }
  244. // 判断token是否过期
  245. function checkTokenIsValid() {
  246. let flag = 1
  247. let tokenInfo = store.state.user.tokenInfo;
  248. let expireTime = tokenInfo.expireTime;
  249. let refreshTokenExpireTime = tokenInfo.refreshTokenExpireTime;
  250. let nowtime = utils.getTimeStamp();
  251. if (expireTime && expireTime <= nowtime && refreshTokenExpireTime >= nowtime) { // 过期可续约
  252. flag = 1
  253. } else if (expireTime && expireTime >= nowtime) { //未过期
  254. let minute = (parseInt(expireTime - nowtime) / 1000 / 60)
  255. if (minute <= 20) {
  256. flag = 1
  257. } else {
  258. flag = 3
  259. }
  260. }
  261. else { // 需要重新登录
  262. flag = 2
  263. }
  264. return flag;
  265. }
  266. // 本地保存用户头像
  267. function setAvatar(avatar) {
  268. wx.setStorageSync('avatarBase64', avatar);
  269. }
  270. // 获取头像
  271. function getAvatar() {
  272. return wx.getStorageSync('avatarBase64');
  273. }
  274. // 清楚数据
  275. function clearAvatar() {
  276. wx.removeStorage('avatarBase64');
  277. }
  278. export {
  279. checkHasUserInfo,
  280. wxLogin,
  281. setAvatar,
  282. getAvatar,
  283. checkLoginNew,
  284. checkTokenIsValid,
  285. getCompanyDataByPhone,
  286. checkUserControl,
  287. refreshTokenPage
  288. }