提交 62ecdbc8 authored 作者: 王鹏飞's avatar 王鹏飞

bug fixes

上级 49106656
...@@ -3,18 +3,18 @@ ...@@ -3,18 +3,18 @@
<nav class="nav"> <nav class="nav">
<el-menu :default-active="defaultActive" :router="true"> <el-menu :default-active="defaultActive" :router="true">
<template v-for="item in menuList"> <template v-for="item in menuList">
<el-submenu :index="item.path" :key="item.path" v-if="item.children" v-has="item.tag"> <el-submenu :index="item.path" :key="item.path" v-if="item.children" v-permission="item.tag">
<template #title><i :class="item.icon"></i>{{ item.name }}</template> <template #title><i :class="item.icon"></i>{{ item.name }}</template>
<el-menu-item <el-menu-item
:index="subitem.path" :index="subitem.path"
v-for="subitem in item.children" v-for="subitem in item.children"
:key="subitem.path" :key="subitem.path"
v-has="subitem.tag" v-permission="subitem.tag"
> >
{{ subitem.name }} {{ subitem.name }}
</el-menu-item> </el-menu-item>
</el-submenu> </el-submenu>
<el-menu-item :index="item.path" :key="item.path" v-has="item.tag" v-else> <el-menu-item :index="item.path" :key="item.path" v-permission="item.tag" v-else>
<i :class="item.icon"></i>{{ item.name }} <i :class="item.icon"></i>{{ item.name }}
</el-menu-item> </el-menu-item>
</template> </template>
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
> >
</template> </template>
<template #footer> <template #footer>
<div v-if="tabActive === '0'" v-has="'menu_lobby_multi_pass'"> <div v-if="tabActive === '0'" v-permission="'menu_lobby_multi_pass'">
已选中 {{ multipleSelection.length }} 已选中 {{ multipleSelection.length }}
<el-button style="margin-left: 15px" size="mini" :disabled="!multipleSelection.length" @click="fetchMultiPass" <el-button style="margin-left: 15px" size="mini" :disabled="!multipleSelection.length" @click="fetchMultiPass"
>一键通过</el-button >一键通过</el-button
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<router-link <router-link
:to="{ path: '/school/cert/details', query: { id: row.student_id, name: row.personal_name } }" :to="{ path: '/school/cert/details', query: { id: row.student_id, name: row.personal_name } }"
v-has="'menu_certificate_view'" v-permission="'menu_certificate_view'"
> >
<el-button type="primary" size="mini" plain>查看</el-button> <el-button type="primary" size="mini" plain>查看</el-button>
</router-link> </router-link>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<!-- 学员 --> <!-- 学员 -->
<app-list v-bind="tableOptions" ref="list"> <app-list v-bind="tableOptions" ref="list">
<template #header-aside> <template #header-aside>
<el-button type="primary" icon="el-icon-plus" @click="addStudent" v-has="'menu_class_add_student'" <el-button type="primary" icon="el-icon-plus" @click="addStudent" v-permission="'menu_class_add_student'"
>添加</el-button >添加</el-button
> >
<el-button <el-button
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
icon="el-icon-upload2" icon="el-icon-upload2"
style="margin-left: 20px" style="margin-left: 20px"
@click="importStudent" @click="importStudent"
v-has="'menu_class_import_student'" v-permission="'menu_class_import_student'"
>导入</el-button >导入</el-button
> >
</template> </template>
......
<template> <template>
<app-list v-bind="tableOptions" ref="list"> <app-list v-bind="tableOptions" ref="list">
<template #header-aside> <template #header-aside>
<el-button type="primary" icon="el-icon-plus" @click="addTeacher" v-has="'menu_class_add_teacher'" <el-button type="primary" icon="el-icon-plus" @click="addTeacher" v-permission="'menu_class_add_teacher'"
>添加</el-button >添加</el-button
> >
</template> </template>
......
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
<app-card> <app-card>
<app-list v-bind="tableOptions" ref="list"> <app-list v-bind="tableOptions" ref="list">
<template #header-aside> <template #header-aside>
<el-button type="primary" icon="el-icon-plus" @click="onCreate" v-has="'menu_class_add'">新建</el-button> <el-button type="primary" icon="el-icon-plus" @click="onCreate" v-permission="'menu_class_add'">新建</el-button>
</template> </template>
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<router-link :to="{ path: 'class/view', query: { id: row.id } }" v-has="'menu_class_view'"> <router-link :to="{ path: 'class/view', query: { id: row.id } }" v-permission="'menu_class_view'">
<el-button type="primary" style="margin-left: 10px" size="mini" plain>管理</el-button> <el-button type="primary" style="margin-left: 10px" size="mini" plain>管理</el-button>
</router-link> </router-link>
<router-link :to="{ path: 'class/update', query: { id: row.id } }" v-has="'menu_class_update'"> <router-link :to="{ path: 'class/update', query: { id: row.id } }" v-permission="'menu_class_update'">
<el-button type="success" style="margin-left: 10px" size="mini" plain>更新</el-button> <el-button type="success" style="margin-left: 10px" size="mini" plain>更新</el-button>
</router-link> </router-link>
<el-button <el-button
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
size="mini" size="mini"
plain plain
@click="onRemove(row)" @click="onRemove(row)"
v-has="'menu_class_delete'" v-permission="'menu_class_delete'"
>删除</el-button >删除</el-button
> >
</template> </template>
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
</template> </template>
<div class="item" v-for="(it, idx) in item.children" :key="idx"> <div class="item" v-for="(it, idx) in item.children" :key="idx">
<template v-if="it.type === 2"> <template v-if="it.type === 2">
<i class="el-icon-video-play" @click="fetchVideoUrl(it)" v-has="'menu_course_video'"></i> <i class="el-icon-video-play" @click="fetchVideoUrl(it)" v-permission="'menu_course_video'"></i>
</template> </template>
<p> <p>
<span @click="fetchVideoUrl(it)">{{ it.name }}</span> <span @click="fetchVideoUrl(it)">{{ it.name }}</span>
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
</el-popover> </el-popover>
</template> </template>
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<router-link :to="{ path: '/school/course/details', query: { id: row.id } }" v-has="'menu_course_view'"> <router-link :to="{ path: '/school/course/details', query: { id: row.id } }" v-permission="'menu_course_view'">
<el-button type="primary" size="mini" plain>查看</el-button> <el-button type="primary" size="mini" plain>查看</el-button>
</router-link> </router-link>
<el-button @click="handleUpdate(row)" type="success" size="mini" plain style="margin-left: 10px" <el-button @click="handleUpdate(row)" type="success" size="mini" plain style="margin-left: 10px"
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<router-link <router-link
:to="{ path: '/school/exam/details', query: { id: row.id, title: row.paper_title } }" :to="{ path: '/school/exam/details', query: { id: row.id, title: row.paper_title } }"
v-has="'menu_examination_sheet_list'" v-permission="'menu_examination_sheet_list'"
> >
<el-button type="primary" size="mini" plain>查看</el-button> <el-button type="primary" size="mini" plain>查看</el-button>
</router-link> </router-link>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</el-upload> </el-upload>
<div style="margin-bottom: 10px; text-align: center"> <div style="margin-bottom: 10px; text-align: center">
导入模板下载:<a 导入模板下载:<a
href="https://webapp-pub.ezijing.com/website/prod/fd-admin/%E4%BA%BA%E5%91%98%E6%A8%A1%E6%9D%BF.xlsx" href="https://webapp-pub.ezijing.com/x-training-new/%E5%AD%A6%E5%91%98%E6%A8%A1%E6%9D%BF.xlsx"
download="人员模板" download="人员模板"
><el-button type="text">person_import.xlsx</el-button></a ><el-button type="text">person_import.xlsx</el-button></a
> >
......
...@@ -3,7 +3,12 @@ ...@@ -3,7 +3,12 @@
<app-list v-bind="tableOptions" ref="list"> <app-list v-bind="tableOptions" ref="list">
<template> <template>
<el-row style="margin-bottom: 20px"> <el-row style="margin-bottom: 20px">
<el-button type="primary" icon="el-icon-plus" size="mini" @click="add" v-has="'menu_school_students_add'" <el-button
type="primary"
icon="el-icon-plus"
size="mini"
@click="add"
v-permission="'menu_school_students_add'"
>新建</el-button >新建</el-button
> >
<el-button <el-button
...@@ -12,7 +17,7 @@ ...@@ -12,7 +17,7 @@
style="margin-left: 20px" style="margin-left: 20px"
@click="imports" @click="imports"
size="mini" size="mini"
v-has="'menu_school_students_import'" v-permission="'menu_school_students_import'"
>导入</el-button >导入</el-button
> >
<!-- <el-button type="primary" icon="el-icon-download" style="margin-left: 20px" @click="downLoad" size="mini">下载</el-button> --> <!-- <el-button type="primary" icon="el-icon-download" style="margin-left: 20px" @click="downLoad" size="mini">下载</el-button> -->
...@@ -22,10 +27,13 @@ ...@@ -22,10 +27,13 @@
<router-link :to="{ path: 'student/process', query: { id: row.id } }"> <router-link :to="{ path: 'student/process', query: { id: row.id } }">
<el-button type="warning" size="mini" plain>学习进度</el-button> <el-button type="warning" size="mini" plain>学习进度</el-button>
</router-link> </router-link>
<router-link :to="{ path: 'student/view', query: { id: row.id } }" v-has="'menu_school_students_view'"> <router-link :to="{ path: 'student/view', query: { id: row.id } }" v-permission="'menu_school_students_view'">
<el-button type="primary" style="margin-left: 10px" size="mini" plain>查看</el-button> <el-button type="primary" style="margin-left: 10px" size="mini" plain>查看</el-button>
</router-link> </router-link>
<router-link :to="{ path: 'student/update', query: { id: row.id } }" v-has="'menu_school_students_update'"> <router-link
:to="{ path: 'student/update', query: { id: row.id } }"
v-permission="'menu_school_students_update'"
>
<el-button type="success" style="margin-left: 10px" size="mini" plain>更新</el-button> <el-button type="success" style="margin-left: 10px" size="mini" plain>更新</el-button>
</router-link> </router-link>
<el-button <el-button
...@@ -34,7 +42,7 @@ ...@@ -34,7 +42,7 @@
style="margin-left: 10px" style="margin-left: 10px"
size="mini" size="mini"
plain plain
v-has="'menu_school_student_delete'" v-permission="'menu_school_student_delete'"
>删除</el-button >删除</el-button
> >
</template> </template>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</el-upload> </el-upload>
<div style="margin-bottom: 10px; text-align: center"> <div style="margin-bottom: 10px; text-align: center">
导入模板下载:<a 导入模板下载:<a
href="https://webapp-pub.ezijing.com/website/prod/fd-admin/%E6%95%99%E5%B7%A5%E6%A8%A1%E6%9D%BF.xlsx" href="https://webapp-pub.ezijing.com/x-training-new/%E8%80%81%E5%B8%88%E6%A8%A1%E6%9D%BF.xlsx"
download="教工模板" download="教工模板"
><el-button type="text">teacher_import.xlsx</el-button></a ><el-button type="text">teacher_import.xlsx</el-button></a
> >
......
...@@ -3,7 +3,12 @@ ...@@ -3,7 +3,12 @@
<app-list v-bind="tableOptions" ref="list"> <app-list v-bind="tableOptions" ref="list">
<template> <template>
<el-row style="margin-bottom: 20px"> <el-row style="margin-bottom: 20px">
<el-button type="primary" icon="el-icon-plus" @click="add" size="mini" v-has="'menu_school_teacher_add'" <el-button
type="primary"
icon="el-icon-plus"
@click="add"
size="mini"
v-permission="'menu_school_teacher_add'"
>新建</el-button >新建</el-button
> >
<el-button <el-button
...@@ -12,16 +17,19 @@ ...@@ -12,16 +17,19 @@
style="margin-left: 20px" style="margin-left: 20px"
@click="imports" @click="imports"
size="mini" size="mini"
v-has="'menu_school_teacher_import'" v-permission="'menu_school_teacher_import'"
>导入</el-button >导入</el-button
> >
</el-row> </el-row>
</template> </template>
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<router-link :to="{ path: 'teacher/view', query: { id: row.id } }" v-has="'menu_school_teacher_view'"> <router-link :to="{ path: 'teacher/view', query: { id: row.id } }" v-permission="'menu_school_teacher_view'">
<el-button type="primary" size="mini" plain>查看</el-button> <el-button type="primary" size="mini" plain>查看</el-button>
</router-link> </router-link>
<router-link :to="{ path: 'teacher/update', query: { id: row.id } }" v-has="'menu_school_teacher_update'"> <router-link
:to="{ path: 'teacher/update', query: { id: row.id } }"
v-permission="'menu_school_teacher_update'"
>
<el-button type="success" style="margin-left: 10px" size="mini" plain>更新</el-button> <el-button type="success" style="margin-left: 10px" size="mini" plain>更新</el-button>
</router-link> </router-link>
<el-button <el-button
...@@ -30,7 +38,7 @@ ...@@ -30,7 +38,7 @@
size="mini" size="mini"
plain plain
@click="onRemove(row)" @click="onRemove(row)"
v-has="'menu_school_teacher_delete'" v-permission="'menu_school_teacher_delete'"
>删除</el-button >删除</el-button
> >
</template> </template>
......
...@@ -38,7 +38,8 @@ const store = new Vuex.Store({ ...@@ -38,7 +38,8 @@ const store = new Vuex.Store({
return response return response
}) })
}, },
async checkLogin({ commit }) { async checkLogin({ commit, dispatch }) {
await dispatch('getPermissions')
const isLogin = await getUser() const isLogin = await getUser()
.then(response => { .then(response => {
if (response.code === 0) { if (response.code === 0) {
...@@ -56,8 +57,8 @@ const store = new Vuex.Store({ ...@@ -56,8 +57,8 @@ const store = new Vuex.Store({
return isLogin return isLogin
}, },
// 获取所有权限列表 // 获取所有权限列表
getPermissions({ commit }) { async getPermissions({ commit }) {
getPermissions().then(res => { await getPermissions().then(res => {
if (res.data && res.data.items) { if (res.data && res.data.items) {
commit('setPermissions', res.data.items) commit('setPermissions', res.data.items)
} }
...@@ -84,7 +85,5 @@ const store = new Vuex.Store({ ...@@ -84,7 +85,5 @@ const store = new Vuex.Store({
}) })
// 设置项目配置 // 设置项目配置
store.dispatch('setAppConfig') store.dispatch('setAppConfig')
// 获取权限
store.dispatch('getPermissions')
export default store export default store
...@@ -68,7 +68,7 @@ httpRequest.interceptors.response.use( ...@@ -68,7 +68,7 @@ httpRequest.interceptors.response.use(
if (error.response) { if (error.response) {
const { status, message } = error.response.data const { status, message } = error.response.data
if (status === 401 || status === 402) { if (status === 401 || status === 402) {
router.push('/401') router.replace('/401')
} }
// 未登录 // 未登录
if (status === 403) { if (status === 403) {
......
...@@ -27,8 +27,8 @@ export default async function (to, from, next) { ...@@ -27,8 +27,8 @@ export default async function (to, from, next) {
} }
const isLogin = store.state.user.id || (await store.dispatch('checkLogin')) const isLogin = store.state.user.id || (await store.dispatch('checkLogin'))
if (!isLogin) { if (!isLogin) {
// window.location.href = `${import.meta.env.VITE_LOGIN_URL}?rd=${encodeURIComponent(window.location.href)}` window.location.href = `${import.meta.env.VITE_LOGIN_URL}?rd=${encodeURIComponent(window.location.href)}`
// return return
} }
next() next()
......
import store from '@/store' import store from '@/store'
function checkPermission(el, binding) {
const { value } = binding
if (!value) return
const permissions = store.state.permissions || []
let hasPermission = false
if (Array.isArray(value)) {
hasPermission = permissions.some(item => value.includes(item.tag))
} else {
hasPermission = !!permissions.find(item => item.tag === value)
}
if (!hasPermission) {
el.parentNode && el.parentNode.removeChild(el)
}
}
// 判断是否有权限 // 判断是否有权限
export default Vue => { export default Vue => {
Vue.directive('has', { Vue.directive('permission', { inserted: checkPermission, update: checkPermission })
inserted: function (el, binding) {
if (!binding.value) return
const permissions = store.state.permissions || []
const hasPermission = !!permissions.find(item => item.tag === binding.value)
if (!hasPermission) {
el.parentNode && el.parentNode.removeChild(el)
}
}
})
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论