{{roles[scope.row.userType].name}} </template> </el-table-column> <el-table-column label="是否有效" width="100"> <template slot-scope="scope"> <el-switch :value="scope.row.active === 1" active-color="#13ce66" inactive-color="#ff4949" @change="stateChanged(scope.row)" >
时间: 2024-04-29 07:20:32 浏览: 202
这是Element UI中的el-table-column组件,用来表示一个表格列,label属性表示列的名称,width属性表示列的宽度。在该组件中包含了一个el-switch组件,用来表示是否有效的状态。:value="scope.row.active === 1"表示将该行数据中的active属性值绑定到el-switch的value上,active-color="#13ce66"表示开启状态的颜色为绿色,inactive-color="#ff4949"表示关闭状态的颜色为红色。@change="stateChanged(scope.row)"表示在切换开关状态时调用Vue实例中的stateChanged函数,并将该行数据作为参数传入该函数。该el-table-column组件使用了slot-scope来获取作用域插槽,使用scope.row来访问当前行的数据。在该列中使用了一个名为roles的数组来存储用户角色信息,通过roles[scope.row.userType].name来获取当前行的用户角色名称。
相关问题
假如 有三账号(user、admin、manager)密码默认是账号字符,首页需要登录才能访问(首页下有四个二级路由页面,分别为 News Admin User Manager ) 默认初始页面为登录页面 登录过后跳转到首页 三个账号有对应的页面(个人页面为首页下的二级页面)同时三个账号权限不同 admin可以访问user与manager的页,而user与manager 只能访问自己对应的页面 则在vue3 如何实现权限登录 <template> <div class="login"> <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" class="demo-ruleForm" :size="formSize" status-icon > <el-form-item> <div class="text"> <h1>奥格森评分系统</h1> </div> </el-form-item> <el-form-item > <el-input v-model="ruleForm.username" placeholder="请输入账号" /> </el-form-item> <el-form-item > <el-input v-model="ruleForm.password" type="password" placeholder="请输入密码" show-password /> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleFormRef)"> Create </el-button> </el-form-item> </el-form> </div> </template> <script setup> </script>
首先,需要在登录后将用户信息保存起来,可以使用 Vuex 或者 localStorage 等方式保存用户信息。然后,在路由配置时,可以使用路由守卫对需要登录才能访问的路由进行判断,并根据用户权限跳转到相应的页面。下面是一个示例代码:
```javascript
import { createRouter, createWebHashHistory } from "vue-router";
const routes = [
{
path: "/login",
name: "Login",
component: () => import("@/views/Login.vue")
},
{
path: "/",
name: "Home",
component: () => import("@/views/Home.vue"),
children: [
{
path: "news",
name: "News",
component: () => import("@/views/News.vue"),
meta: { requiresAuth: true, roles: ["admin", "user", "manager"] }
},
{
path: "admin",
name: "Admin",
component: () => import("@/views/Admin.vue"),
meta: { requiresAuth: true, roles: ["admin"] }
},
{
path: "user",
name: "User",
component: () => import("@/views/User.vue"),
meta: { requiresAuth: true, roles: ["user"] }
},
{
path: "manager",
name: "Manager",
component: () => import("@/views/Manager.vue"),
meta: { requiresAuth: true, roles: ["manager"] }
}
]
}
];
const router = createRouter({
history: createWebHashHistory(),
routes
});
router.beforeEach((to, from, next) => {
const isLoggedIn = localStorage.getItem("isLoggedIn");
const userRole = localStorage.getItem("userRole");
if (to.meta.requiresAuth && !isLoggedIn) {
next({ name: "Login" });
} else if (to.meta.roles && !to.meta.roles.includes(userRole)) {
next({ name: "Home" });
} else {
next();
}
});
export default router;
```
在上面的代码中,定义了四个二级路由,分别为 News、Admin、User、Manager,同时设置了它们需要登录才能访问,并且设置了相应的角色权限。在路由导航守卫 beforeEach 中,对需要登录才能访问的路由进行判断,如果用户未登录,则跳转到登录页面,否则检查用户的角色权限,如果不符合要求,则跳转到首页。同时,在登录成功后,可以保存用户信息到 localStorage 中,以便在刷新页面后仍能保持登录状态。
假如 有三账号(Aokace,Admin,Aokmgr)密码默认是账号+123,首页(“/”)需要登录才能访问(首页下有四个二级页面,分别为 News Aokace Admin Manager ) 默认初始跳到登录页面 登录过后跳转到首页 三个账号有对应的页面(个人页面为首页下的二级页面)同时三个账号权限不同 Aokace可以访问 Admin与Manager的页,而Admin与Manager 只能访问自己对应的页面 则在vue3 如何实现权限登录 <template> <div class="login"> <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" class="demo-ruleForm" :size="formSize" status-icon > <el-form-item> <div class="text"> <h1>奥格森评分系统</h1> </div> </el-form-item> <el-form-item > <el-input v-model="ruleForm.username" placeholder="请输入账号" /> </el-form-item> <el-form-item > <el-input v-model="ruleForm.password" type="password" placeholder="请输入密码" show-password /> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleFormRef)"> Create </el-button> </el-form-item> </el-form> </div> </template> <script setup> </script> 登录接口文件为 ( import system from "@/utils/index"; export const login = (data) =>{ return system({ url:'/login', method:'post', data }) } )
在Vue3中实现权限登录可以通过以下步骤:
1. 在登录成功后,将用户信息存储到localStorage或sessionStorage中,以便在后续的页面中获取用户信息。
2. 在路由配置中设置路由守卫,判断用户是否已经登录以及用户的权限是否满足访问该页面的要求。例如,可以在路由配置中增加一个meta字段用于记录该路由需要的权限信息。
3. 在路由守卫中根据用户信息和路由的meta字段,判断用户是否有权限访问该页面。如果没有权限,则跳转到登录页面或者其他未授权的页面。
下面是一个简单的示例代码:
```
// main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
const app = createApp(App)
app.use(router)
app.mount('#app')
// router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import News from '../views/News.vue'
import Aokace from '../views/Aokace.vue'
import Admin from '../views/Admin.vue'
import Manager from '../views/Manager.vue'
import Login from '../views/Login.vue'
const routes = [
{
path: '/',
name: 'Home',
component: Home,
meta: { requiresAuth: true }
},
{
path: '/news',
name: 'News',
component: News,
meta: { requiresAuth: true }
},
{
path: '/aokace',
name: 'Aokace',
component: Aokace,
meta: { requiresAuth: true, roles: ['Aokace'] }
},
{
path: '/admin',
name: 'Admin',
component: Admin,
meta: { requiresAuth: true, roles: ['Admin'] }
},
{
path: '/manager',
name: 'Manager',
component: Manager,
meta: { requiresAuth: true, roles: ['Manager'] }
},
{
path: '/login',
name: 'Login',
component: Login
}
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
router.beforeEach((to, from, next) => {
const isAuthenticated = localStorage.getItem('isAuthenticated')
const userRole = localStorage.getItem('userRole')
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!isAuthenticated) {
next({ path: '/login' })
} else if (to.meta.roles && !to.meta.roles.includes(userRole)) {
next({ path: '/' })
} else {
next()
}
} else {
next()
}
})
export default router
// Login.vue
<template>
<div class="login">
<el-form
ref="ruleFormRef"
:model="ruleForm"
:rules="rules"
class="demo-ruleForm"
:size="formSize"
status-icon
>
<el-form-item>
<div class="text">
<h1>奥格森评分系统</h1>
</div>
</el-form-item>
<el-form-item>
<el-input v-model="ruleForm.username" placeholder="请输入账号" />
</el-form-item>
<el-form-item>
<el-input
v-model="ruleForm.password"
type="password"
placeholder="请输入密码"
show-password
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm(ruleFormRef)">
登录
</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { login } from '@/api/user'
export default {
name: 'Login',
data() {
return {
ruleForm: {
username: '',
password: ''
},
rules: {
username: [{ required: true, message: '请输入账号', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
}
}
},
methods: {
submitForm(formRef) {
this.$refs[formRef].validate(async valid => {
if (valid) {
try {
const res = await login(this.ruleForm)
localStorage.setItem('isAuthenticated', true)
localStorage.setItem('userRole', res.data.role)
this.$router.push('/')
} catch (error) {
console.log(error)
}
} else {
console.log('error submit!!')
return false
}
})
}
}
}
</script>
```
在上面的代码中,我们定义了5个页面(Home、News、Aokace、Admin、Manager)和一个登录页面(Login)。在路由配置中,我们为需要登录权限的页面(Home、News、Aokace、Admin、Manager)增加了一个meta字段,用于记录该路由需要的权限信息。其中,requiresAuth字段表示该路由是否需要登录权限,roles字段表示该路由需要的用户角色。
在路由守卫中,我们判断用户是否已经登录以及用户的角色是否满足访问该页面的要求。如果用户没有登录,则跳转到登录页面;如果用户已经登录但是角色不满足要求,则跳转到首页或其他未授权的页面。
在登录页面中,我们通过调用login接口实现用户登录,并将用户信息存储到localStorage中。登录成功后,跳转到首页。
阅读全文