Files
MoviePilot-Frontend/src/views/user/UserListView.vue
2025-01-26 22:08:32 +08:00

93 lines
2.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script lang="ts" setup>
import api from '@/api'
import type { User } from '@/api/types'
import { useDisplay } from 'vuetify'
import NoDataFound from '@/components/NoDataFound.vue'
import UserCard from '@/components/cards/UserCard.vue'
import UserAddEditDialog from '@/components/dialog/UserAddEditDialog.vue'
// APP
const display = useDisplay()
const appMode = inject('pwaMode') && display.mdAndDown.value
// 是否刷新过
const isRefreshed = ref(false)
// 是否加载中
const loading = ref(false)
// 新增用户窗口
const addUserDialog = ref(false)
// 所有用户信息
const allUsers = ref<User[]>([])
// 调用API查询所有用户
async function loadAllUsers() {
try {
loading.value = true
const result: User[] = await api.get('/user/')
allUsers.value = result
loading.value = false
isRefreshed.value = true
} catch (error) {
console.log(error)
}
}
// 用户新增完成
const onUserAdd = () => {
addUserDialog.value = false
loadAllUsers()
}
// 加载当前用户数据
onMounted(() => {
loadAllUsers()
})
onActivated(() => {
if (!loading.value) {
loadAllUsers()
}
})
</script>
<template>
<LoadingBanner v-if="!isRefreshed" class="mt-12" />
<div v-if="allUsers.length > 0" class="grid gap-3 grid-user-card">
<UserCard v-for="user in allUsers" :user="user" :users="allUsers" @remove="loadAllUsers" @save="loadAllUsers" />
</div>
<NoDataFound
v-if="allUsers.length === 0 && isRefreshed"
error-code="404"
error-title="没有用户"
error-description="点击右下角按钮添加用户"
/>
<VFab
v-if="isRefreshed"
icon="mdi-plus"
location="bottom"
size="x-large"
fixed
app
appear
@click="addUserDialog = true"
:class="{ 'mb-12': appMode }"
/>
<!-- 弹窗 -->
<UserAddEditDialog
v-if="addUserDialog"
v-model="addUserDialog"
oper="add"
max-width="50rem"
persistent
@save="onUserAdd"
@close="addUserDialog = false"
/>
</template>