import storage from "@/utils/storage"; import { getToken, setToken, removeToken } from "@/utils/auth"; import { defineStore } from "pinia"; // 接口引用 import { login, logout, getInfo, getMobileTenantConfig, getCodeImg } from "@/api/login"; import { getUserProfile, appAdd, appDel } from "@/api/system/user"; import { phoneVerify } from "@/api/common/index.js"; // 组件引用 import modal from "@/plugins/modal.plugins.js"; const useStores = defineStore("useStores", { state: () => ({ token: getToken(), name: storage.get("name"),//用户名称 nickName: storage.get("nickName"),//用户昵称 phonenumber: storage.get("phonenumber"),//用户手机号 avatar: storage.get("avatar"), roles: storage.get("roles"), permissions: storage.get("permissions"), loginTitle: storage.get("loginTitle"), loginBottomTitle: storage.get("loginBottomTitle"), loginBg: storage.get("loginBg"), loginLogo: storage.get("loginLogo"), tenantId: storage.get("tenantId"), user: {}, userArr: {}, postGroup: "", //岗位 roleGroup: "", //角色 codeTime: 0,//验证码倒计时 codeTimeInterval: null,//验证码倒计时定时器 }), persist: { // 自定义数据持久化方式 // key: 'store-key', 指定key进行存储,此时非key的值不会持久化,刷新就会丢失 storage: window ? window.localStorage : uni.setStorageSync(), // 指定换成地址 // paths: ['nested.data'],// 指定需要持久化的state的路径名称 beforeRestore: (context) => { // console.log("Before" + context); }, afterRestore: (context) => { // console.log("After" + context); }, }, actions: { // 登录 Login(data) { // const modal = inject("$modal"); return new Promise((resolve, reject) => { login(data) .then((res) => { this.SET_TOKEN(res.data.access_token) setToken(res.data.access_token); this.codeTime = 0 resolve(); }) .catch((error) => { modal.closeLoading(); modal.msg(error); reject(error); }); }); }, //获取登录页数据 GetMobileTenantConfig(params) { getMobileTenantConfig(params).then((res) => { if (res.data.length > 0) { let data = res.data[0]; this.SET_LOGINMOBILELIST({ loginTitle: data.loginTitle, loginBottomTitle: data.loginFooter, loginBg: data.loginBackUrl, loginLogo: data.loginLogo, tenantId: data.tenantId, }) } }); }, // 获取用户信息 getUser() { getUserProfile().then((response) => { this.user = response.data.user; this.userArr = JSON.parse(JSON.stringify(response.data.user)); this.postGroup = response.postGroup; this.roleGroup = response.roleGroup; }); }, // 获取用户信息 GetInfo() { return new Promise((resolve, reject) => { getInfo() .then((res) => { var data = res.data; if (data.roles && data.roles.length > 0) { this.SET_ROLES(data.roles); this.SET_PERMISSIONS(data.permissions); } else { this.SET_ROLES(["ROLE_DEFAULT"]); } this.SET_NAME(data.user.userName); this.SET_NICKNAME(data.user.nickName); this.SET_PHONE(data.user.phonenumber); this.SET_AVATAR(data.user.avatar); resolve(res); }) .catch((error) => { modal.msgError(error); reject(error); }); }); }, /** * @获取手机验证码 * @param { 手机号 } phone * @param { 成功 } success * @param { 失败 } error */ GetCodeImg({ phone, success, error }) { if (!phone) { modal.msg("请输入手机号"); return; } if (!/^1(?:3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8\d|9\d)\d{8}$/.test(phone)) { modal.msg("请输入正确的手机号"); return; } if (this.codeTime > 0) { modal.msg("不能重复获取"); return; } else { modal.loading("加载中"); getCodeImg({ phone: phone, }).then((res) => { if (res.status === "SUCCESS") { success(res) modal.closeLoading(); } else { error(res) } }); this.codeTime = 60; this.SetInterval("codeTime"); } }, // 手机验证码倒计时定时器 SetInterval(key) { if (this.codeTimeInterval) { clearInterval(this.codeTimeInterval); } this.codeTimeInterval = setInterval(() => { this[key]--; if (this[key] < 1) { clearInterval(this.codeTimeInterval); this[key] = 0; } }, 1000); }, /** * @手机验证码校验 * @param { 数据 } data * @param { 成功 } success * @param { 失败 } error */ PhoneVerify({ data, success, error }) { if (!data.phone) { modal.msg("请输入手机号"); return; } 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)) { modal.msg("请输入正确的手机号"); return; } if (!data.verify) { modal.msg("请输入验证码"); return; } phoneVerify({ phone: data.phone, verify: data.verify, }).then((res) => { if (res.status === "SUCCESS") { success(res) } else { error(res) } modal.closeLoading(); }); }, /** * @注册 * @param { 数据 } data * @param { 成功 } success * @param { 失败 } error */ UserAdd({ data, success, error }) { if (!data.nickName) { modal.showToast("昵称不能为空"); return; } if (!data.newPassword) { modal.showToast("新密码不能为空"); return; } if (data.newPassword.length < 6 && data.newPassword.length > 20) { modal.showToast("长度在 6 到 20 个字符"); return; } if (!data.confirmPassword) { modal.showToast("确认密码不能为空"); return; } if (data.confirmPassword != data.newPassword) { modal.showToast("两次输入的密码不一致"); return; } modal.loading("加载中"); appAdd({ tenantId: this.tenantId, nickName: data.nickName, phonenumber: data.phone, userName: data.phone, status: "0", password: data.newPassword, }).then((res) => { if (res.status === "SUCCESS") { success(res) modal.closeLoading(); } }) }, UserDel({ data, success, error }) { modal.loading("加载中"); appDel(data).then((res) => { if (res.status === "SUCCESS") { success(res) modal.closeLoading(); } }) }, // 退出系统 LogOut() { return new Promise((resolve, reject) => { logout() .then(() => { this.SET_TOKEN("");//清空token this.SET_ROLES([]); this.SET_PERMISSIONS([]); this.SET_LOGINMOBILELIST({ loginTitle: "", loginBottomTitle: "", loginBg: "", loginLogo: "", tenantId: "", });//清空登录页数据 removeToken(); storage.clean(); resolve(); }) .catch((error) => { modal.msgError(error); reject(error); }); }); }, SET_TOKEN(token) { this.token = token; }, SET_NAME(name) { this.name = name; storage.set("name", name); }, SET_NICKNAME(nickName) { this.nickName = nickName; storage.set("nickName", nickName); }, SET_PHONE(phonenumber) { this.phonenumber = phonenumber; storage.set("phonenumber", phonenumber); }, SET_AVATAR(avatar) { this.avatar = avatar; storage.set("avatar", avatar); }, SET_ROLES(roles) { this.roles = roles; storage.set("roles", roles); }, SET_PERMISSIONS(permissions) { this.permissions = permissions; storage.set("permissions", permissions); }, SET_LOGINMOBILELIST(loginMobileList) { //title this.loginTitle = loginMobileList.loginTitle storage.set("loginTitle", loginMobileList.loginTitle); //bottomTitle this.loginBottomTitle = loginMobileList.loginBottomTitle storage.set("loginBottomTitle", loginMobileList.loginBottomTitle); //bg this.loginBg = loginMobileList.loginBg storage.set("loginBg", loginMobileList.loginBg); //logo this.loginLogo = loginMobileList.loginLogo storage.set("loginLogo", loginMobileList.loginLogo); //tenantId this.tenantId = loginMobileList.tenantId storage.set("tenantId", loginMobileList.tenantId); } }, }); export default useStores;