更新
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref } from 'vue'
|
||||
import config from '@/config'
|
||||
|
||||
export const useAppStore = defineStore('app', () => {
|
||||
// State
|
||||
const sidebarCollapsed = ref(false)
|
||||
const device = ref('unknown')
|
||||
const language = ref('zh-CN')
|
||||
const theme = ref('light')
|
||||
const settings = ref(null)
|
||||
|
||||
// Actions
|
||||
|
||||
/**
|
||||
* 设置侧边栏折叠状态
|
||||
* @param {boolean} collapsed
|
||||
*/
|
||||
function setSidebarCollapsed(collapsed) {
|
||||
sidebarCollapsed.value = collapsed
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换侧边栏
|
||||
*/
|
||||
function toggleSidebar() {
|
||||
sidebarCollapsed.value = !sidebarCollapsed.value
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置设备类型
|
||||
* @param {string} type - 'h5' | 'app' | 'mp-weixin' | 'mp-alipay' | 'mp-baidu' | 'mp-toutiao' | 'mp-qq' | 'mp-ks' | 'mp-jd'
|
||||
*/
|
||||
function setDevice(type) {
|
||||
device.value = type
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置语言
|
||||
* @param {string} lang
|
||||
*/
|
||||
function setLanguage(lang) {
|
||||
language.value = lang
|
||||
uni.setStorageSync('app_language', lang)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置主题
|
||||
* @param {string} mode - 'light' | 'dark'
|
||||
*/
|
||||
function setTheme(mode) {
|
||||
theme.value = mode
|
||||
uni.setStorageSync('app_theme', mode)
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换主题
|
||||
*/
|
||||
function toggleTheme() {
|
||||
const newTheme = theme.value === 'light' ? 'dark' : 'light'
|
||||
setTheme(newTheme)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置应用配置
|
||||
* @param {object} data
|
||||
*/
|
||||
function setSettings(data) {
|
||||
settings.value = data
|
||||
uni.setStorageSync(config.storage.settings, JSON.stringify(data))
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新设置
|
||||
* @param {object} data
|
||||
*/
|
||||
function updateSettings(data) {
|
||||
settings.value = {
|
||||
...settings.value,
|
||||
...data
|
||||
}
|
||||
uni.setStorageSync(config.storage.settings, JSON.stringify(settings.value))
|
||||
}
|
||||
|
||||
/**
|
||||
* 从本地存储初始化
|
||||
*/
|
||||
function initFromStorage() {
|
||||
// 获取语言设置
|
||||
const savedLanguage = uni.getStorageSync('app_language')
|
||||
if (savedLanguage) {
|
||||
language.value = savedLanguage
|
||||
}
|
||||
|
||||
// 获取主题设置
|
||||
const savedTheme = uni.getStorageSync('app_theme')
|
||||
if (savedTheme) {
|
||||
theme.value = savedTheme
|
||||
}
|
||||
|
||||
// 获取应用设置
|
||||
const savedSettings = uni.getStorageSync(config.storage.settings)
|
||||
if (savedSettings) {
|
||||
try {
|
||||
settings.value = JSON.parse(savedSettings)
|
||||
} catch (e) {
|
||||
console.error('解析应用设置失败:', e)
|
||||
settings.value = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除设置
|
||||
*/
|
||||
function clearSettings() {
|
||||
language.value = 'zh-CN'
|
||||
theme.value = 'light'
|
||||
settings.value = null
|
||||
|
||||
// 清除本地存储
|
||||
uni.removeStorageSync('app_language')
|
||||
uni.removeStorageSync('app_theme')
|
||||
uni.removeStorageSync(config.storage.settings)
|
||||
}
|
||||
|
||||
return {
|
||||
// State
|
||||
sidebarCollapsed,
|
||||
device,
|
||||
language,
|
||||
theme,
|
||||
settings,
|
||||
|
||||
// Actions
|
||||
setSidebarCollapsed,
|
||||
toggleSidebar,
|
||||
setDevice,
|
||||
setLanguage,
|
||||
setTheme,
|
||||
toggleTheme,
|
||||
setSettings,
|
||||
updateSettings,
|
||||
initFromStorage,
|
||||
clearSettings
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,11 @@
|
||||
// Store 入口文件
|
||||
import { createPinia } from 'pinia'
|
||||
|
||||
// 导出所有 store
|
||||
export { useUserStore } from './user'
|
||||
export { useAppStore } from './app'
|
||||
|
||||
// 创建 pinia 实例
|
||||
const pinia = createPinia()
|
||||
|
||||
export default pinia
|
||||
@@ -0,0 +1,142 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
import config from '@/config'
|
||||
|
||||
export const useUserStore = defineStore('user', () => {
|
||||
// State
|
||||
const token = ref('')
|
||||
const refreshToken = ref('')
|
||||
const userInfo = ref(null)
|
||||
|
||||
// Getters
|
||||
const isLoggedIn = computed(() => !!token.value)
|
||||
const userName = computed(() => userInfo.value?.name || '')
|
||||
const userAvatar = computed(() => userInfo.value?.avatar || '')
|
||||
const userId = computed(() => userInfo.value?.id || '')
|
||||
|
||||
// Actions
|
||||
|
||||
/**
|
||||
* 设置 Token
|
||||
* @param {string} newToken
|
||||
*/
|
||||
function setToken(newToken) {
|
||||
token.value = newToken
|
||||
uni.setStorageSync(config.storage.token, newToken)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置刷新 Token
|
||||
* @param {string} newRefreshToken
|
||||
*/
|
||||
function setRefreshToken(newRefreshToken) {
|
||||
refreshToken.value = newRefreshToken
|
||||
uni.setStorageSync('app_refresh_token', newRefreshToken)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置用户信息
|
||||
* @param {object} info
|
||||
*/
|
||||
function setUserInfo(info) {
|
||||
userInfo.value = info
|
||||
uni.setStorageSync(config.storage.userInfo, JSON.stringify(info))
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
* @returns {object|null}
|
||||
*/
|
||||
function getUserInfo() {
|
||||
return userInfo.value
|
||||
}
|
||||
|
||||
/**
|
||||
* 从本地存储初始化
|
||||
*/
|
||||
function initFromStorage() {
|
||||
// 获取 Token
|
||||
const savedToken = uni.getStorageSync(config.storage.token)
|
||||
if (savedToken) {
|
||||
token.value = savedToken
|
||||
}
|
||||
|
||||
// 获取刷新 Token
|
||||
const savedRefreshToken = uni.getStorageSync('app_refresh_token')
|
||||
if (savedRefreshToken) {
|
||||
refreshToken.value = savedRefreshToken
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
const savedUserInfo = uni.getStorageSync(config.storage.userInfo)
|
||||
if (savedUserInfo) {
|
||||
try {
|
||||
userInfo.value = JSON.parse(savedUserInfo)
|
||||
} catch (e) {
|
||||
console.error('解析用户信息失败:', e)
|
||||
userInfo.value = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除用户数据
|
||||
*/
|
||||
function clearUserData() {
|
||||
token.value = ''
|
||||
refreshToken.value = ''
|
||||
userInfo.value = null
|
||||
|
||||
// 清除本地存储
|
||||
uni.removeStorageSync(config.storage.token)
|
||||
uni.removeStorageSync('app_refresh_token')
|
||||
uni.removeStorageSync(config.storage.userInfo)
|
||||
}
|
||||
|
||||
/**
|
||||
* 登出
|
||||
*/
|
||||
function logout() {
|
||||
clearUserData()
|
||||
|
||||
// 跳转到登录页
|
||||
uni.reLaunch({
|
||||
url: '/pages/login/index'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户信息
|
||||
* @param {object} data
|
||||
*/
|
||||
function updateUserInfo(data) {
|
||||
userInfo.value = {
|
||||
...userInfo.value,
|
||||
...data
|
||||
}
|
||||
uni.setStorageSync(config.storage.userInfo, JSON.stringify(userInfo.value))
|
||||
}
|
||||
|
||||
return {
|
||||
// State
|
||||
token,
|
||||
refreshToken,
|
||||
userInfo,
|
||||
|
||||
// Getters
|
||||
isLoggedIn,
|
||||
userName,
|
||||
userAvatar,
|
||||
userId,
|
||||
|
||||
// Actions
|
||||
setToken,
|
||||
setRefreshToken,
|
||||
setUserInfo,
|
||||
getUserInfo,
|
||||
initFromStorage,
|
||||
clearUserData,
|
||||
logout,
|
||||
updateUserInfo
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user