user.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. import storage from "@/utils/storage";
  2. import { getToken, setToken, removeToken } from "@/utils/auth";
  3. import { defineStore } from "pinia";
  4. // 接口引用
  5. import { login, logout, getInfo, getMobileTenantConfig, getCodeImg } from "@/api/login";
  6. import { getUserProfile, appAdd, appDel } from "@/api/system/user";
  7. import { phoneVerify } from "@/api/common/index.js";
  8. // 组件引用
  9. import modal from "@/plugins/modal.plugins.js";
  10. const useStores = defineStore("useStores", {
  11. state: () => ({
  12. token: getToken(),
  13. name: storage.get("name"),//用户名称
  14. nickName: storage.get("nickName"),//用户昵称
  15. phonenumber: storage.get("phonenumber"),//用户手机号
  16. avatar: storage.get("avatar"),
  17. roles: storage.get("roles"),
  18. permissions: storage.get("permissions"),
  19. loginTitle: storage.get("loginTitle"),
  20. loginBottomTitle: storage.get("loginBottomTitle"),
  21. loginBg: storage.get("loginBg"),
  22. loginLogo: storage.get("loginLogo"),
  23. tenantId: storage.get("tenantId"),
  24. user: {},
  25. userArr: {},
  26. postGroup: "", //岗位
  27. roleGroup: "", //角色
  28. codeTime: 0,//验证码倒计时
  29. codeTimeInterval: null,//验证码倒计时定时器
  30. }),
  31. persist: {
  32. // 自定义数据持久化方式
  33. // key: 'store-key', 指定key进行存储,此时非key的值不会持久化,刷新就会丢失
  34. storage: window ? window.localStorage : uni.setStorageSync(), // 指定换成地址
  35. // paths: ['nested.data'],// 指定需要持久化的state的路径名称
  36. beforeRestore: (context) => {
  37. // console.log("Before" + context);
  38. },
  39. afterRestore: (context) => {
  40. // console.log("After" + context);
  41. },
  42. },
  43. actions: {
  44. // 登录
  45. Login(data) {
  46. // const modal = inject("$modal");
  47. return new Promise((resolve, reject) => {
  48. login(data)
  49. .then((res) => {
  50. this.SET_TOKEN(res.data.access_token)
  51. setToken(res.data.access_token);
  52. this.codeTime = 0
  53. resolve();
  54. })
  55. .catch((error) => {
  56. modal.closeLoading();
  57. modal.msg(error);
  58. reject(error);
  59. });
  60. });
  61. },
  62. //获取登录页数据
  63. GetMobileTenantConfig(params) {
  64. getMobileTenantConfig(params).then((res) => {
  65. if (res.data.length > 0) {
  66. let data = res.data[0];
  67. this.SET_LOGINMOBILELIST({
  68. loginTitle: data.loginTitle,
  69. loginBottomTitle: data.loginFooter,
  70. loginBg: data.loginBackUrl,
  71. loginLogo: data.loginLogo,
  72. tenantId: data.tenantId,
  73. })
  74. }
  75. });
  76. },
  77. // 获取用户信息
  78. getUser() {
  79. getUserProfile().then((response) => {
  80. this.user = response.data.user;
  81. this.userArr = JSON.parse(JSON.stringify(response.data.user));
  82. this.postGroup = response.postGroup;
  83. this.roleGroup = response.roleGroup;
  84. });
  85. },
  86. // 获取用户信息
  87. GetInfo() {
  88. return new Promise((resolve, reject) => {
  89. getInfo()
  90. .then((res) => {
  91. var data = res.data;
  92. if (data.roles && data.roles.length > 0) {
  93. this.SET_ROLES(data.roles);
  94. this.SET_PERMISSIONS(data.permissions);
  95. } else {
  96. this.SET_ROLES(["ROLE_DEFAULT"]);
  97. }
  98. this.SET_NAME(data.user.userName);
  99. this.SET_NICKNAME(data.user.nickName);
  100. this.SET_PHONE(data.user.phonenumber);
  101. this.SET_AVATAR(data.user.avatar);
  102. resolve(res);
  103. })
  104. .catch((error) => {
  105. modal.msgError(error);
  106. reject(error);
  107. });
  108. });
  109. },
  110. /**
  111. * @获取手机验证码
  112. * @param { 手机号 } phone
  113. * @param { 成功 } success
  114. * @param { 失败 } error
  115. */
  116. GetCodeImg({ phone, success, error }) {
  117. if (!phone) {
  118. modal.msg("请输入手机号");
  119. return;
  120. }
  121. if (!/^1(?:3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8\d|9\d)\d{8}$/.test(phone)) {
  122. modal.msg("请输入正确的手机号");
  123. return;
  124. }
  125. if (this.codeTime > 0) {
  126. modal.msg("不能重复获取");
  127. return;
  128. } else {
  129. modal.loading("加载中");
  130. getCodeImg({
  131. phone: phone,
  132. }).then((res) => {
  133. if (res.status === "SUCCESS") {
  134. success(res)
  135. modal.closeLoading();
  136. } else {
  137. error(res)
  138. }
  139. });
  140. this.codeTime = 60;
  141. this.SetInterval("codeTime");
  142. }
  143. },
  144. // 手机验证码倒计时定时器
  145. SetInterval(key) {
  146. if (this.codeTimeInterval) {
  147. clearInterval(this.codeTimeInterval);
  148. }
  149. this.codeTimeInterval = setInterval(() => {
  150. this[key]--;
  151. if (this[key] < 1) {
  152. clearInterval(this.codeTimeInterval);
  153. this[key] = 0;
  154. }
  155. }, 1000);
  156. },
  157. /**
  158. * @手机验证码校验
  159. * @param { 数据 } data
  160. * @param { 成功 } success
  161. * @param { 失败 } error
  162. */
  163. PhoneVerify({ data, success, error }) {
  164. if (!data.phone) {
  165. modal.msg("请输入手机号");
  166. return;
  167. }
  168. if (!/^1(?:3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8\d|9\d)\d{8}$/.test(data.phone)) {
  169. modal.msg("请输入正确的手机号");
  170. return;
  171. }
  172. if (!data.verify) {
  173. modal.msg("请输入验证码");
  174. return;
  175. }
  176. phoneVerify({
  177. phone: data.phone,
  178. verify: data.verify,
  179. }).then((res) => {
  180. if (res.status === "SUCCESS") {
  181. success(res)
  182. } else {
  183. error(res)
  184. }
  185. modal.closeLoading();
  186. });
  187. },
  188. /**
  189. * @注册
  190. * @param { 数据 } data
  191. * @param { 成功 } success
  192. * @param { 失败 } error
  193. */
  194. UserAdd({ data, success, error }) {
  195. if (!data.nickName) {
  196. modal.showToast("昵称不能为空");
  197. return;
  198. }
  199. if (!data.newPassword) {
  200. modal.showToast("新密码不能为空");
  201. return;
  202. }
  203. if (data.newPassword.length < 6 && data.newPassword.length > 20) {
  204. modal.showToast("长度在 6 到 20 个字符");
  205. return;
  206. }
  207. if (!data.confirmPassword) {
  208. modal.showToast("确认密码不能为空");
  209. return;
  210. }
  211. if (data.confirmPassword != data.newPassword) {
  212. modal.showToast("两次输入的密码不一致");
  213. return;
  214. }
  215. modal.loading("加载中");
  216. appAdd({
  217. tenantId: this.tenantId,
  218. nickName: data.nickName,
  219. phonenumber: data.phone,
  220. userName: data.phone,
  221. status: "0",
  222. password: data.newPassword,
  223. }).then((res) => {
  224. if (res.status === "SUCCESS") {
  225. success(res)
  226. modal.closeLoading();
  227. }
  228. })
  229. },
  230. UserDel({ data, success, error }) {
  231. modal.loading("加载中");
  232. appDel(data).then((res) => {
  233. if (res.status === "SUCCESS") {
  234. success(res)
  235. modal.closeLoading();
  236. }
  237. })
  238. },
  239. // 退出系统
  240. LogOut() {
  241. return new Promise((resolve, reject) => {
  242. logout()
  243. .then(() => {
  244. this.SET_TOKEN("");//清空token
  245. this.SET_ROLES([]);
  246. this.SET_PERMISSIONS([]);
  247. this.SET_LOGINMOBILELIST({
  248. loginTitle: "",
  249. loginBottomTitle: "",
  250. loginBg: "",
  251. loginLogo: "",
  252. tenantId: "",
  253. });//清空登录页数据
  254. removeToken();
  255. storage.clean();
  256. resolve();
  257. })
  258. .catch((error) => {
  259. modal.msgError(error);
  260. reject(error);
  261. });
  262. });
  263. },
  264. SET_TOKEN(token) {
  265. this.token = token;
  266. },
  267. SET_NAME(name) {
  268. this.name = name;
  269. storage.set("name", name);
  270. },
  271. SET_NICKNAME(nickName) {
  272. this.nickName = nickName;
  273. storage.set("nickName", nickName);
  274. },
  275. SET_PHONE(phonenumber) {
  276. this.phonenumber = phonenumber;
  277. storage.set("phonenumber", phonenumber);
  278. },
  279. SET_AVATAR(avatar) {
  280. this.avatar = avatar;
  281. storage.set("avatar", avatar);
  282. },
  283. SET_ROLES(roles) {
  284. this.roles = roles;
  285. storage.set("roles", roles);
  286. },
  287. SET_PERMISSIONS(permissions) {
  288. this.permissions = permissions;
  289. storage.set("permissions", permissions);
  290. },
  291. SET_LOGINMOBILELIST(loginMobileList) {
  292. //title
  293. this.loginTitle = loginMobileList.loginTitle
  294. storage.set("loginTitle", loginMobileList.loginTitle);
  295. //bottomTitle
  296. this.loginBottomTitle = loginMobileList.loginBottomTitle
  297. storage.set("loginBottomTitle", loginMobileList.loginBottomTitle);
  298. //bg
  299. this.loginBg = loginMobileList.loginBg
  300. storage.set("loginBg", loginMobileList.loginBg);
  301. //logo
  302. this.loginLogo = loginMobileList.loginLogo
  303. storage.set("loginLogo", loginMobileList.loginLogo);
  304. //tenantId
  305. this.tenantId = loginMobileList.tenantId
  306. storage.set("tenantId", loginMobileList.tenantId);
  307. }
  308. },
  309. });
  310. export default useStores;