refactor: replace Vuex with Pinia

This commit is contained in:
Aqr-K
2025-02-24 19:26:56 +08:00
parent 87239994ae
commit 721d4f7685
23 changed files with 269 additions and 222 deletions

View File

@@ -2,12 +2,13 @@
import { useTheme } from 'vuetify'
import api from '@/api'
import { hexToRgb } from '@layouts/utils'
import { useUserStore } from '@/stores'
const vuetifyTheme = useTheme()
// 从Vuex Store中获取信息
const store = useStore()
const superUser = store.state.auth.superUser
// 用户 Store
const userStore = useUserStore()
const superUser = userStore.superUser
const options = controlledComputed(
() => vuetifyTheme.name.value,

View File

@@ -10,6 +10,7 @@ import { formatSeason } from '@/@core/utils/formatters'
import router from '@/router'
import SubscribeEditDialog from '@/components/dialog/SubscribeEditDialog.vue'
import { isNullOrEmptyObject } from '@/@core/utils'
import { useUserStore } from '@/stores'
// 输入参数
const mediaProps = defineProps({
@@ -22,7 +23,8 @@ const mediaProps = defineProps({
// 从 provide 中获取全局设置
const globalSettings: any = inject('globalSettings')
const store = useStore()
// 用户 Store
const userStore = useUserStore()
// 提示框
const $toast = useToast()
@@ -466,7 +468,7 @@ async function handlePlay() {
async function queryDefaultSubscribeConfig() {
// 非管理员不显示
if (!store.state.auth.superUser) return false
if (!userStore.superUser) return false
try {
let subscribe_config_url = ''
if (mediaProps.type === '电影') subscribe_config_url = 'system/setting/DefaultMovieSubscribeConfig'

View File

@@ -4,13 +4,16 @@ import api from '@/api'
import type { DownloadingInfo } from '@/api/types'
import NoDataFound from '@/components/NoDataFound.vue'
import DownloadingCard from '@/components/cards/DownloadingCard.vue'
import store from '@/store'
import { useUserStore } from '@/stores'
// 定义输入参数
const props = defineProps<{
name: string
}>()
// 用户 Store
const userStore = useUserStore()
// 定时器
let refreshTimer: NodeJS.Timeout | null = null
@@ -42,9 +45,9 @@ function onRefresh() {
// 过滤数据,管理员用户显示全部,非管理员只显示自己的订阅
const filteredDataList = computed(() => {
// 从Vuex Store中获取用户信息
const superUser = store.state.auth.superUser
const userName = store.state.auth.userName
// 从 Store 中获取用户信息
const superUser = userStore.superUser
const userName = userStore.userName
if (superUser) return dataList.value
else return dataList.value.filter(data => data.userid === userName || data.username === userName)
})

View File

@@ -6,13 +6,16 @@ import NoDataFound from '@/components/NoDataFound.vue'
import SubscribeCard from '@/components/cards/SubscribeCard.vue'
import SubscribeEditDialog from '@/components/dialog/SubscribeEditDialog.vue'
import SubscribeHistoryDialog from '@/components/dialog/SubscribeHistoryDialog.vue'
import store from '@/store'
import { useUserStore } from '@/stores'
import { useDisplay } from 'vuetify'
// APP
const display = useDisplay()
const appMode = inject('pwaMode') && display.mdAndDown.value
// 用户 Store
const userStore = useUserStore()
// 输入参数
const props = defineProps({
type: String,
@@ -46,9 +49,9 @@ const displayList = ref<Subscribe[]>([])
// 监听dataList变化同步更新displayList
watch(dataList, () => {
// 从Vuex Store中获取用户信息
const superUser = store.state.auth.superUser
const userName = store.state.auth.userName
// 从 Store 中获取用户信息
const superUser = userStore.superUser
const userName = userStore.userName
if (superUser) displayList.value = dataList.value.filter(data => data.type === props.type)
else displayList.value = dataList.value.filter(data => data.type === props.type && data.username === userName)
// 排序
@@ -163,7 +166,7 @@ onActivated(async () => {
<!-- 底部操作按钮 -->
<div v-if="isRefreshed">
<VFab
v-if="store.state.auth.superUser"
v-if="userStore.superUser"
icon="mdi-clipboard-edit"
location="bottom"
size="x-large"
@@ -174,7 +177,7 @@ onActivated(async () => {
:class="{ 'mb-12': appMode }"
/>
<VFab
v-if="store.state.auth.superUser"
v-if="userStore.superUser"
icon="mdi-history"
color="info"
location="bottom"

View File

@@ -3,16 +3,19 @@ import api from '@/api'
import type { Plugin, Site, Subscribe } from '@/api/types'
import { SystemNavMenus, SettingTabs } from '@/router/menu'
import { NavMenu } from '@/@layouts/types'
import store from '@/store'
import { useUserStore } from '@/stores'
// 路由
const router = useRouter()
// 用户 Store
const userStore = useUserStore()
// 超级用户
const superUser = store.state.auth.superUser
const superUser = userStore.superUser
// 当前用户名
const userName = store.state.auth.userName
const userName = userStore.userName
// 定义事件
const emit = defineEmits(['close'])

View File

@@ -6,7 +6,7 @@ import api from '@/api'
import type { User } from '@/api/types'
import avatar1 from '@images/avatars/avatar-1.png'
import { useDisplay } from 'vuetify'
import store from '@/store'
import { useUserStore } from '@/stores'
// 显示器宽度
const display = useDisplay()
@@ -16,6 +16,9 @@ const isConfirmPasswordVisible = ref(false)
const newPassword = ref('')
const confirmPassword = ref('')
// 用户 Store
const userStore = useUserStore()
// 提示框
const $toast = useToast()
@@ -53,13 +56,7 @@ const accountInfo = ref<User>({
avatar: '',
is_otp: false,
permissions: {},
settings: {
wechat_userid: null,
telegram_userid: null,
slack_userid: null,
vocechat_userid: null,
synologychat_userid: null,
},
settings: {},
})
// 二维码信息
@@ -149,13 +146,13 @@ async function saveAccountInfo() {
if (oldUserName !== currentUserName.value) {
$toast.success(`${oldUserName}】更名【${currentUserName.value}】,用户信息保存成功!`)
// 更新本地用户名显示
store.commit('auth/setUserName', currentUserName.value)
userStore.setUserName(currentUserName.value)
} else {
$toast.success('用户信息保存成功!')
}
// 更新本地头像显示
if (oldAvatar !== currentAvatar.value) {
store.commit('auth/setAvatar', currentAvatar.value)
userStore.setAvatar(currentAvatar.value)
}
} else {
if (oldAvatar !== currentAvatar.value) {
@@ -238,9 +235,9 @@ onMounted(() => {
// 监听 localStorage 中的用户头像变化
watch(
() => store.state.auth.avatar,
() => userStore.avatar,
() => {
currentAvatar.value = store.state.auth.avatar
currentAvatar.value = userStore.avatar
},
)
</script>