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

chore: 优化权限

上级 9f2be835
...@@ -3,7 +3,7 @@ import App from './App.vue' ...@@ -3,7 +3,7 @@ import App from './App.vue'
import router from './router' import router from './router'
import store from './store' import store from './store'
import modules from './modules' import modules from './modules'
import directives from '@/utils/directives' import { permissionDirective } from '@/utils/permission'
// 公共css // 公共css
import './assets/css/base.css' import './assets/css/base.css'
...@@ -22,7 +22,7 @@ Vue.component('AppCard', AppCard) ...@@ -22,7 +22,7 @@ Vue.component('AppCard', AppCard)
Vue.component('AppList', AppList) Vue.component('AppList', AppList)
// 注册指令 // 注册指令
Vue.use(directives) Vue.directive('permission', { inserted: permissionDirective, update: permissionDirective })
// 注册模块 // 注册模块
modules({ router, store }) modules({ router, store })
......
...@@ -7,23 +7,19 @@ ...@@ -7,23 +7,19 @@
<template #header-aside> <template #header-aside>
<!-- 选题组卷 --> <!-- 选题组卷 -->
<template v-if="data.paper_type === 1"> <template v-if="data.paper_type === 1">
<el-button type="primary" @click="showSelectQuestion" v-permission="'paper_setu_rules'" <el-button type="primary" @click="showSelectQuestion" v-if="hasUpdate">添加试题</el-button>
>添加试题</el-button
>
<el-button type="primary" :disabled="!multipleSelection.length" @click="handleRemove" <el-button type="primary" :disabled="!multipleSelection.length" @click="handleRemove"
>删除选中试题</el-button >删除选中试题</el-button
> >
</template> </template>
<!-- 自动组卷 --> <!-- 自动组卷 -->
<template v-if="data.paper_type === 2"> <template v-if="data.paper_type === 2">
<el-button type="primary" @click="handleAutoPaper" v-permission="'paper_setu_rules'">自动组卷</el-button> <el-button type="primary" @click="handleAutoPaper" v-if="hasUpdate">自动组卷</el-button>
</template> </template>
<!-- 自由组卷 --> <!-- 自由组卷 -->
<template v-if="data.paper_type === 3"> <template v-if="data.paper_type === 3">
<el-button type="primary" @click="handleAutoPaper" v-permission="'paper_setu_rules'">自动组卷</el-button> <el-button type="primary" @click="handleAutoPaper" v-if="hasUpdate">自动组卷</el-button>
<el-button type="primary" @click="paperVisible = true" v-permission="'paper_setu_rules'" <el-button type="primary" @click="paperVisible = true" v-if="hasUpdate">添加试题</el-button>
>添加试题</el-button
>
<el-button type="primary" :disabled="!multipleSelection.length" @click="handleRemove" <el-button type="primary" :disabled="!multipleSelection.length" @click="handleRemove"
>删除选中试题</el-button >删除选中试题</el-button
> >
...@@ -61,7 +57,7 @@ ...@@ -61,7 +57,7 @@
</template> </template>
<template #footer> <template #footer>
<template v-if="hasSelection"> <template v-if="hasSelection">
<el-button type="primary" @click="handleSubmit" v-permission="'paper_setu_rules'">保存试卷</el-button> <el-button type="primary" @click="handleSubmit" v-if="hasUpdate">保存试卷</el-button>
</template> </template>
</template> </template>
</question-num> </question-num>
...@@ -98,6 +94,8 @@ import AddPaper from './AddPaper.vue' ...@@ -98,6 +94,8 @@ import AddPaper from './AddPaper.vue'
import AutomaticPaper from './AutomaticPaper.vue' import AutomaticPaper from './AutomaticPaper.vue'
import OnceAutomaticPaper from './OnceAutomaticPaper.vue' import OnceAutomaticPaper from './OnceAutomaticPaper.vue'
import { updatePaperRules } from '../api.js' import { updatePaperRules } from '../api.js'
import { checkPermission } from '@/utils/permission'
export default { export default {
props: { props: {
data: { type: Object, default: () => ({}) } data: { type: Object, default: () => ({}) }
...@@ -146,6 +144,11 @@ export default { ...@@ -146,6 +144,11 @@ export default {
// 是否可选 // 是否可选
hasSelection() { hasSelection() {
return [1, 3].includes(this.data.paper_type) return [1, 3].includes(this.data.paper_type)
},
hasUpdate() {
return this.data.permission === 1
? checkPermission('paper_setu_rules')
: checkPermission('paper_setu_rules') && checkPermission('button_question_permission_public')
} }
}, },
methods: { methods: {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<!-- 试卷描述 --> <!-- 试卷描述 -->
<app-card title="试卷信息"> <app-card title="试卷信息">
<template #header-aside> <template #header-aside>
<el-button type="primary" @click="handleUpdate" v-permission="'paper_update'">编辑试卷</el-button> <el-button type="primary" @click="handleUpdate" v-if="hasUpdate">编辑试卷</el-button>
</template> </template>
<el-descriptions :column="2" class="descriptionsCon"> <el-descriptions :column="2" class="descriptionsCon">
<el-descriptions-item label="试卷名称">{{ detail.paper_title }}</el-descriptions-item> <el-descriptions-item label="试卷名称">{{ detail.paper_title }}</el-descriptions-item>
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
import PaperQuestions from '../components/PaperQuestions.vue' import PaperQuestions from '../components/PaperQuestions.vue'
import { getPaper } from '../api.js' import { getPaper } from '../api.js'
import { paperType } from '@/utils/dictionary' import { paperType } from '@/utils/dictionary'
import { checkPermission } from '@/utils/permission'
export default { export default {
props: { id: { type: String } }, props: { id: { type: String } },
...@@ -42,6 +43,13 @@ export default { ...@@ -42,6 +43,13 @@ export default {
detail: { paper_category: {}, questions: [] } detail: { paper_category: {}, questions: [] }
} }
}, },
computed: {
hasUpdate() {
return this.detail.permission === 1
? checkPermission('paper_update')
: checkPermission('paper_update') && checkPermission('button_question_permission_public')
}
},
beforeMount() { beforeMount() {
this.getDetail() this.getDetail()
// 获取试题分类,组卷的时候用,只请求一次 // 获取试题分类,组卷的时候用,只请求一次
......
...@@ -27,13 +27,13 @@ ...@@ -27,13 +27,13 @@
></question-type-treeselect> ></question-type-treeselect>
</template> </template>
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<router-link :to="{ name: 'editPaper', params: { id: row.id } }" target="_blank" v-permission="'paper_update'"> <router-link :to="{ name: 'editPaper', params: { id: row.id } }" target="_blank" v-if="hasUpdate">
<el-button type="text">编辑</el-button> <el-button type="text">编辑</el-button>
</router-link> </router-link>
<router-link :to="{ name: 'viewPaper', params: { id: row.id } }" target="_blank" v-permission="'paper_detail'"> <router-link :to="{ name: 'viewPaper', params: { id: row.id } }" target="_blank" v-permission="'paper_detail'">
<el-button type="text">查看详情</el-button> <el-button type="text">查看详情</el-button>
</router-link> </router-link>
<el-button type="text" @click="handleDelete(row)" v-permission="'paper_batch_delete'">删除</el-button> <el-button type="text" @click="handleDelete(row)" v-if="hasDelete">删除</el-button>
</template> </template>
</app-list> </app-list>
</app-card> </app-card>
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
import { getPaperList, batchDeletePaper } from '../api' import { getPaperList, batchDeletePaper } from '../api'
import QuestionTypeTreeselect from '@/components/base/QuestionTypeTreeselect.vue' import QuestionTypeTreeselect from '@/components/base/QuestionTypeTreeselect.vue'
import { paperType, paperTypeList } from '@/utils/dictionary' import { paperType, paperTypeList } from '@/utils/dictionary'
import { checkPermission } from '@/utils/permission'
export default { export default {
components: { QuestionTypeTreeselect }, components: { QuestionTypeTreeselect },
data() { data() {
...@@ -130,6 +130,16 @@ export default { ...@@ -130,6 +130,16 @@ export default {
{ label: '操作', slots: 'table-x', align: 'right', width: 150 } { label: '操作', slots: 'table-x', align: 'right', width: 150 }
] ]
} }
},
hasUpdate() {
return this.permission === 1
? checkPermission('paper_update')
: checkPermission('paper_update') && checkPermission('button_question_permission_public')
},
hasDelete() {
return this.permission === 1
? checkPermission('paper_batch_delete')
: checkPermission('paper_batch_delete') && checkPermission('button_question_permission_public')
} }
}, },
methods: { methods: {
......
...@@ -160,11 +160,11 @@ export default { ...@@ -160,11 +160,11 @@ export default {
callback() callback()
} }
} }
const permission = parseInt(this.$route.query.permission) || 1 // const permission = parseInt(this.$route.query.permission) || 1
return { return {
paperTypeList, paperTypeList,
form: { form: {
permission, permission: 1,
paper_title: '', // 试卷名称 paper_title: '', // 试卷名称
paper_uses: 1, // 试卷用途 paper_uses: 1, // 试卷用途
paper_labels: '', // 标签 paper_labels: '', // 标签
......
import store from '@/store'
// 判断是否有权限
export function checkPermission(value) {
if (!value) return
const permissions = store.state.permissions || []
console.log(JSON.stringify(permissions))
if (Array.isArray(value)) {
return permissions.some(item => value.includes(item.tag))
} else {
return !!permissions.find(item => item.tag === value)
}
}
// 权限指令
export function permissionDirective(el, binding) {
const { value } = binding
if (!value) return
console.log(value)
if (!checkPermission(value)) {
el.parentNode && el.parentNode.removeChild(el)
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论