This commit is contained in:
2024-02-02 22:31:01 +08:00
parent 06a5f041bf
commit 486ea5013a
77 changed files with 17507 additions and 122 deletions

20
src/store/index.ts Normal file
View File

@@ -0,0 +1,20 @@
import type { App } from 'vue';
import { createPinia } from 'pinia';
// 导入子模块
import useAppStore from './modules/app';
import useUserStore from './modules/user';
// import piniaPersist from 'pinia-plugin-persist-uni';
// 安装pinia状态管理插件
function setupStore(app: App) {
const store = createPinia();
// store.use(piniaPersist);
app.use(store);
}
// 导出模块
export { useAppStore, useUserStore };
export default setupStore;

View File

@@ -0,0 +1,58 @@
import { defineStore } from 'pinia';
import type { AppState } from './types';
const useAppStore = defineStore('app', {
state: (): AppState => ({
systemInfo: {} as UniApp.GetSystemInfoResult,
}),
getters: {
getSystemInfo(): UniApp.GetSystemInfoResult {
return this.systemInfo;
},
},
actions: {
setSystemInfo(info: UniApp.GetSystemInfoResult) {
this.systemInfo = info;
},
initSystemInfo() {
uni.getSystemInfo({
success: (res: UniApp.GetSystemInfoResult) => {
this.setSystemInfo(res);
},
fail: (err: any) => {
console.error(err);
},
});
},
checkUpdate() {
const updateManager = uni.getUpdateManager();
updateManager.onCheckForUpdate((res: UniApp.OnCheckForUpdateResult) => {
// 请求完新版本信息的回调
console.log(res.hasUpdate);
});
updateManager.onUpdateReady(() => {
uni.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success(res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate();
}
},
});
});
updateManager.onUpdateFailed((res: any) => {
console.error(res);
// 新的版本下载失败
uni.showToast({
title: '更新失败',
icon: 'error',
});
});
},
},
});
export default useAppStore;

View File

@@ -0,0 +1,3 @@
export interface AppState {
systemInfo: UniApp.GetSystemInfoResult;
}

View File

@@ -0,0 +1,82 @@
import { defineStore } from 'pinia';
import type { UserState, providerType } from './types';
import {
getUserProfile,
loginByCode,
login as userLogin,
logout as userLogout,
} from '@/api/user/index';
import { clearToken, setToken } from '@/utils/auth';
import type { LoginParams } from '@/api/user/types';
const useUserStore = defineStore('user', {
state: (): UserState => ({
user_id: '',
user_name: '江阳小道',
avatar: '',
token: '',
}),
getters: {
userInfo(state: UserState): UserState {
return { ...state };
},
},
actions: {
// 设置用户的信息
setInfo(partial: Partial<UserState>) {
this.$patch(partial);
},
// 重置用户信息
resetInfo() {
this.$reset();
},
// 获取用户信息
async info() {
const result = await getUserProfile();
this.setInfo(result);
},
// 异步登录并存储token
login(loginForm: LoginParams) {
return new Promise(async (resolve, reject) => {
try {
const result = await userLogin(loginForm);
const token = result?.token;
if (token) {
setToken(token);
}
resolve(result);
} catch (error) {
reject(error)
}
});
},
// Logout
async logout() {
await userLogout();
this.resetInfo();
clearToken();
},
// 小程序授权登录
authLogin(provider: providerType = 'weixin') {
return new Promise((resolve, reject) => {
uni.login({
provider,
success: async (result: UniApp.LoginRes) => {
if (result.code) {
const res = await loginByCode({ code: result.code });
resolve(res);
} else {
reject(new Error(result.errMsg));
}
},
fail: (err: any) => {
console.error(`login error: ${err}`);
reject(err);
},
});
});
},
},
});
export default useUserStore;

View File

@@ -0,0 +1,16 @@
export type RoleType = '' | '*' | 'user';
export interface UserState {
user_id?: string;
user_name?: string;
avatar?: string;
token?: string;
}
export type providerType =
| 'weixin'
| 'qq'
| 'sinaweibo'
| 'xiaomi'
| 'apple'
| 'univerify'
| undefined;