公共服务平台-权限路由

This commit is contained in:
lSun 2025-09-18 17:18:52 +08:00
parent 74ff8affe5
commit 65661a2647
6 changed files with 118 additions and 4 deletions

View File

@ -1,7 +1,7 @@
import router from '@/router' import router from '@/router'
import { MessageBox } from 'element-ui' import { MessageBox } from 'element-ui'
import { login, logout, getInfo } from '@/api/login' import { login, logout, getInfo } from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth' import { getToken, setToken, removeToken,setPermissions,removePermissions, } from '@/utils/auth'
import { isHttp, isEmpty } from '@/utils/validate' import { isHttp, isEmpty } from '@/utils/validate'
import defAva from '@/assets/images/profile.jpg' import defAva from '@/assets/images/profile.jpg'
import { encryptWithSM4 } from '@/utils/sm' import { encryptWithSM4 } from '@/utils/sm'
@ -55,6 +55,7 @@ const user = {
login(username, password, code, uuid, loginType) login(username, password, code, uuid, loginType)
.then((res) => { .then((res) => {
setToken(res.token) setToken(res.token)
setPermissions(res.authorities)
commit('SET_TOKEN', res.token) commit('SET_TOKEN', res.token)
resolve() resolve()
}) })
@ -142,6 +143,7 @@ const user = {
commit('SET_ROLES', []) commit('SET_ROLES', [])
commit('SET_PERMISSIONS', []) commit('SET_PERMISSIONS', [])
removeToken() removeToken()
removePermissions()
resolve() resolve()
}) })
.catch((error) => { .catch((error) => {
@ -155,6 +157,7 @@ const user = {
return new Promise((resolve) => { return new Promise((resolve) => {
commit('SET_TOKEN', '') commit('SET_TOKEN', '')
removeToken() removeToken()
removePermissions()
resolve() resolve()
}) })
}, },

View File

@ -2,6 +2,8 @@ import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token' const TokenKey = 'Admin-Token'
const Permissions = '0'
export function getToken() { export function getToken() {
return Cookies.get(TokenKey) return Cookies.get(TokenKey)
} }
@ -13,3 +15,16 @@ export function setToken(token) {
export function removeToken() { export function removeToken() {
return Cookies.remove(TokenKey) return Cookies.remove(TokenKey)
} }
export function getPermissions() {
return Cookies.get(Permissions)
}
export function setPermissions(permissions) {
return Cookies.set(Permissions, permissions)
}
export function removePermissions() {
return Cookies.remove(Permissions)
}

View File

@ -49,6 +49,7 @@
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import {getPermissions} from "../../../utils/auth";
export default { export default {
name: 'NavBar', name: 'NavBar',
props: { props: {
@ -100,6 +101,7 @@ export default {
activeNav: 'ProductCenter', // activeNav: 'ProductCenter', //
userAvatarUrl: this.userAvatar, userAvatarUrl: this.userAvatar,
internalSearchKeyword: this.searchKeyword, internalSearchKeyword: this.searchKeyword,
permissions:getPermissions(),
navItems: [ navItems: [
{ {
label: '产品中心', label: '产品中心',
@ -147,7 +149,13 @@ export default {
// //
handleLogoClick() { handleLogoClick() {
if(this.permissions.includes(2) ){
this.$router.push('/') this.$router.push('/')
}else{
//
this.$message.error('没有后台权限,请联系管理员')
}
}, },
logout() { logout() {

View File

@ -1,10 +1,32 @@
<template> </template> <template> </template>
<script> <script>
import { getPermissions } from "@/utils/auth"
export default { export default {
name: 'PublicService_1', name: 'PublicService_1',
mounted() { mounted() {
this.$router.push('/publicService/productCenter') const permissions = getPermissions();
//
if (permissions) {
//
const permissionArray = permissions.toString().split(',').map(Number);
// 1
if (permissionArray.includes(1)) {
this.$router.push('/publicService/productCenter');
return;
}
// 2
if (permissionArray.includes(2)) {
this.$router.push('/');
return;
}
}
//
this.$message.error('没有后台权限,请联系管理员');
// this.$router.push('/publicService/productCenter')
}, },
} }
</script> </script>

View File

@ -96,6 +96,7 @@ import {getMaterialListAPI} from '@/api/publicService/proMaterials'
import { encryptCBCTime } from '@/utils/aes' import { encryptCBCTime } from '@/utils/aes'
import useBase64 from '@/utils/base64Utils.js' import useBase64 from '@/utils/base64Utils.js'
import axios from 'axios' import axios from 'axios'
import { getToken } from '@/utils/auth'
export default { export default {
name: 'ProMaterials', name: 'ProMaterials',
@ -105,6 +106,7 @@ export default {
dicts: ['tb_product_type'], dicts: ['tb_product_type'],
data() { data() {
return { return {
downloading: false, //
iframeUrl: '', iframeUrl: '',
activeTypeValue: 'all', // activeTypeValue: 'all', //
leftMenuList: [ leftMenuList: [
@ -185,13 +187,31 @@ export default {
// //
// //
async handleDownload(service) { async handleDownload(service) {
//
if (this.downloading) {
this.$message.warning('文件正在下载中,请稍候...');
return;
}
try { try {
this.downloading = true;
const loading = this.$loading({
lock: true,
text: '文件下载中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
const response = await axios({ const response = await axios({
method: 'get', method: 'get',
url: process.env.VUE_APP_BASE_API + '/system/files/download', url: process.env.VUE_APP_BASE_API + '/system/files/download',
params: { params: {
filePath: service.fileDownloadPath filePath: service.fileDownloadPath
}, },
headers: {
'Authorization': 'Bearer ' + getToken() // token
},
responseType: 'blob' // blob responseType: 'blob' // blob
}); });
@ -205,8 +225,11 @@ export default {
link.remove(); link.remove();
window.URL.revokeObjectURL(url); // URL window.URL.revokeObjectURL(url); // URL
loading.close();
this.downloading = false;
this.$message.success('下载成功'); this.$message.success('下载成功');
} catch (error) { } catch (error) {
this.downloading = false;
this.$message.error('下载失败'); this.$message.error('下载失败');
} }
}, },

View File

@ -158,6 +158,15 @@
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" /> <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="账号权限" prop="permissions">
<el-checkbox-group v-model="form.permissions">
<el-checkbox label="大屏"></el-checkbox>
<el-checkbox label="后台"></el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -243,7 +252,9 @@ export default {
// //
roleOptions: [], roleOptions: [],
// //
form: {}, form: {
permissions: ['大屏']
},
defaultProps: { defaultProps: {
children: "children", children: "children",
label: "label" label: "label"
@ -307,6 +318,9 @@ export default {
], ],
roleIds: [ roleIds: [
{ required: true, message: '角色不能为空', trigger: 'blur' } { required: true, message: '角色不能为空', trigger: 'blur' }
],
permissions: [
{ type: 'array', required: true, message: '请至少选择一个权限', trigger: 'blur' }
] ]
}, },
} }
@ -442,7 +456,8 @@ export default {
status: "0", status: "0",
remark: undefined, remark: undefined,
postIds: [], postIds: [],
roleIds: [] roleIds: [],
permissions: ['大屏']
} }
this.resetForm("form") this.resetForm("form")
}, },
@ -506,6 +521,21 @@ export default {
this.roleOptions = response.roles this.roleOptions = response.roles
this.$set(this.form, "postIds", Number(response.postIds)) this.$set(this.form, "postIds", Number(response.postIds))
this.$set(this.form, "roleIds", Number(response.roleIds)) this.$set(this.form, "roleIds", Number(response.roleIds))
//
// 12
const permissions = [];
if (response.data.permissions) {
const permissionArray = response.data.permissions.split(',').map(Number);
if (permissionArray.includes(1)) { //
permissions.push('大屏');
}
if (permissionArray.includes(2)) { //
permissions.push('后台');
}
}
this.$set(this.form, "permissions", permissions);
this.open = true this.open = true
this.title = "修改用户" this.title = "修改用户"
this.form.password = "" this.form.password = ""
@ -550,6 +580,19 @@ export default {
this.form.postIds = Array.isArray(this.form.postIds) ? this.form.postIds : [this.form.postIds]; this.form.postIds = Array.isArray(this.form.postIds) ? this.form.postIds : [this.form.postIds];
this.form.roleIds = Array.isArray(this.form.roleIds) ? this.form.roleIds : [this.form.roleIds]; this.form.roleIds = Array.isArray(this.form.roleIds) ? this.form.roleIds : [this.form.roleIds];
//
// 12
const permissionValues = [];
if (this.form.permissions && this.form.permissions.includes('大屏')) {
permissionValues.push(1); //
}
if (this.form.permissions && this.form.permissions.includes('后台')) {
permissionValues.push(2); //
}
//
this.form.permissions = permissionValues.join(',');
if (this.form.userId != undefined) { if (this.form.userId != undefined) {
updateUser(this.form).then(response => { updateUser(this.form).then(response => {
this.$modal.msgSuccess("修改成功") this.$modal.msgSuccess("修改成功")