From 78a9096e16ae5353bf2cec2f5ebaefc5e49d0d1c Mon Sep 17 00:00:00 2001 From: 龚焕茏 <2842157468@qq.com> Date: 星期四, 16 五月 2024 18:11:19 +0800 Subject: [PATCH] feat:部门管理员功能权限控制 --- src/api/department.js | 2 + src/views/exam/paper/list.vue | 8 +++- src/views/answer/sheetStatistics.vue | 12 ++++-- src/views/exam/personalRandomTemplate/edit.vue | 13 ++++++ src/api/dashboard.js | 3 - src/router.js | 40 +++++++++++++++++++ src/views/exam/paper/edit.vue | 12 ++++++ src/views/user/student/edit.vue | 16 ++++++-- 8 files changed, 92 insertions(+), 14 deletions(-) diff --git a/src/api/dashboard.js b/src/api/dashboard.js index 40292f8..bbd6429 100644 --- a/src/api/dashboard.js +++ b/src/api/dashboard.js @@ -2,8 +2,7 @@ export default { index: () => post('/api/admin/dashboard/index'), - getData: query => get('/api/admin/examPaperAnswer/statistic', query), - getData: query => get('/api/admin/examPaperAnswer/statistic', query), + getData: query => post('/api/admin/examPaperAnswer/statistic', query), examPaperList: query => get('/api/admin/exam/paper/list', query), page: query => post('/api/admin/examPaperAnswer/page', query) } diff --git a/src/api/department.js b/src/api/department.js index cd3e8ec..35f9158 100644 --- a/src/api/department.js +++ b/src/api/department.js @@ -12,6 +12,8 @@ addData: query => post('/api/admin/department/add', query), // 鑾峰彇閮ㄩ棬鐢ㄦ埛涓嬫媺鍒楄〃 getDeptUserList: id => get('/api/admin/department/' + id + '/user-list'), + // 鑾峰彇褰撳墠鐢ㄦ埛绠$悊鐨勯儴闂� + getDeptAdmins: id => get('/api/admin/department/getDeptAdmins'), // 淇敼閮ㄩ棬绠$悊鍛� updateDeptAdmin: data => post('/api/admin/department/update-admin', data) } diff --git a/src/router.js b/src/router.js index f6a77e5..23690a2 100644 --- a/src/router.js +++ b/src/router.js @@ -463,6 +463,24 @@ ] }, { + path: '/user', + component: Layout, + name: 'UserPage', + meta: { + title: '鐢ㄦ埛绠$悊', + icon: 'users' + }, + alwaysShow: true, + children: [ + { + path: 'student/list', + component: () => import('@/views/user/student/list'), + name: 'UserStudentPageList', + meta: { title: '瀛︾敓鍒楄〃', noCache: true } + }, + ] + }, + { path: '/exam', component: Layout, name: 'ExamPage', @@ -470,7 +488,21 @@ title: '鍗烽绠$悊', icon: 'exam' }, + alwaysShow: true, children: [ + { + path: 'paper/list', + component: () => import('@/views/exam/paper/list'), + name: 'ExamPaperPageList', + meta: { title: '璇曞嵎鍒楄〃', noCache: true } + }, + { + path: 'paper/edit', + component: () => import('@/views/exam/paper/edit'), + name: 'ExamPaperEdit', + meta: { title: '璇曞嵎缂栬緫', noCache: true, activeMenu: '/exam/paper/list' }, + hidden: true + }, { path: 'personalRandomTemplate/list', component: () => import('@/views/exam/personalRandomTemplate/list'), @@ -515,7 +547,13 @@ name: 'AnswerPageList', meta: { title: '鎴愮哗缁熻璇︽儏', noCache: true, activeMenu: '/exam/gradeDetails/list' }, hidden: true - } + }, + { + path: 'sheetStatistics', + component: () => import('@/views/answer/sheetStatistics.vue'), + name: 'AnswerPageList', + meta: { title: '绛斿嵎缁熻', noCache: true } + }, ] }, { diff --git a/src/views/answer/sheetStatistics.vue b/src/views/answer/sheetStatistics.vue index b83fdfb..3ceb157 100644 --- a/src/views/answer/sheetStatistics.vue +++ b/src/views/answer/sheetStatistics.vue @@ -6,8 +6,8 @@ <el-option v-for="item in examPaperList" :key="item.id" :value="item.id" :label="item.name" /> </el-select> </el-form-item> - <el-form-item label="閮ㄩ棬锛�" v-if="true"> - <el-select v-model="queryParam.departmentId" filterable placeholder="閮ㄩ棬" clearable> + <el-form-item label="閮ㄩ棬锛�" v-if="admin"> + <el-select v-model="queryParam.departmentId" multiple filterable placeholder="閮ㄩ棬" clearable> <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value" /> </el-select> </el-form-item> @@ -83,11 +83,15 @@ chartLoading3: false, queryParam: { examPaperId: '', - departmentId: '' - } + departmentId: [] + }, + admin: true }; }, mounted() { + if (sessionStorage.getItem('deptAdmin') == 1) { + this.admin = false; + } ageChart = echarts.init(this.$refs.ageChart); scroeChart = echarts.init(this.$refs.scoreChart); peopleChart = echarts.init(this.$refs.peopleChart); diff --git a/src/views/exam/paper/edit.vue b/src/views/exam/paper/edit.vue index ed5dbd1..b6542b6 100644 --- a/src/views/exam/paper/edit.vue +++ b/src/views/exam/paper/edit.vue @@ -12,6 +12,11 @@ :label="item.name+' '"></el-option> </el-select> </el-form-item> + <el-form-item label="閮ㄩ棬锛�" prop="deptId" required> + <el-select v-model="form.deptId" collapse-tags placeholder="閮ㄩ棬"> + <el-option v-for="item in depts" :key="item.id" :value="item.id" :label="item.name"></el-option> + </el-select> + </el-form-item> <el-form-item label="璇曞嵎绫诲瀷锛�" prop="paperType" required> <el-select v-model="form.paperType" placeholder="璇曞嵎绫诲瀷" @visible-change="subjectIdEvent"> <el-option v-for="item in paperTypeEnum" :key="item.key" :value="item.key" :label="item.value" ></el-option> @@ -135,6 +140,7 @@ components: { Pagination, QuestionShow }, data () { return { + depts: [], props: { multiple: true // lazy: true, @@ -177,6 +183,9 @@ ], subjectId: [ { required: true, message: '璇烽�夋嫨璇剧洰', trigger: 'change' } + ], + deptId: [ + { required: true, message: '璇烽�夋嫨閮ㄩ棬', trigger: 'change' } ], paperType: [ { required: true, message: '璇烽�夋嫨璇曞嵎绫诲瀷', trigger: 'change' } @@ -225,6 +234,9 @@ _this.options = res.response.map(x=>{return{value:x.department.id,label:x.department.name,children:x.userList.map(xx=>{return{value: xx.id,label: xx.realName}})}}) }) + departmentApi.getDeptAdmins().then(res => { + this.depts = res.response + }) }, methods: { handleChange(val){ diff --git a/src/views/exam/paper/list.vue b/src/views/exam/paper/list.vue index c8a00de..a4d2e75 100644 --- a/src/views/exam/paper/list.vue +++ b/src/views/exam/paper/list.vue @@ -3,8 +3,8 @@ <el-form :model="queryParam" ref="queryForm" :inline="true"> <el-form-item label="閮ㄩ棬锛�"> - <el-select v-model="queryParam.level" placeholder="閮ㄩ棬" @change="levelChange" clearable> - <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option> + <el-select v-model="queryParam.level" clearable placeholder="閮ㄩ棬"> + <el-option v-for="item in depts" :key="item.id" :value="item.id" :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="璇剧洰锛�" > @@ -68,6 +68,7 @@ components: { Pagination }, data () { return { + depts: [], form: { menuIds: [], userIds: [], @@ -103,6 +104,9 @@ this.search() this.queryParam.subjectId = null this.subjectFilter = this.subjects + departmentApi.getDeptAdmins().then(res => { + this.depts = res.response + }) }, methods: { handleExport(row){ diff --git a/src/views/exam/personalRandomTemplate/edit.vue b/src/views/exam/personalRandomTemplate/edit.vue index 3009191..b662d7b 100644 --- a/src/views/exam/personalRandomTemplate/edit.vue +++ b/src/views/exam/personalRandomTemplate/edit.vue @@ -16,6 +16,11 @@ :label="item.name+' '"></el-option> </el-select> </el-form-item> + <el-form-item label="閮ㄩ棬锛�" prop="deptId" required> + <el-select v-model="form.deptId" collapse-tags placeholder="閮ㄩ棬"> + <el-option v-for="item in depts" :key="item.id" :value="item.id" :label="item.name"></el-option> + </el-select> + </el-form-item> <el-form-item label="璇曞嵎绫诲瀷锛�" prop="paperType" required > <el-select v-model="form.paperType" placeholder="璇曞嵎绫诲瀷" @visible-change="subjectIdEvent" disabled> <el-option v-for="item in paperTypeEnum" :key="item.key" :value="item.key" :label="item.value" ></el-option> @@ -157,6 +162,7 @@ // }) // } }, + depts: [], options: [], optionsData:[], departCascaderProps:{ @@ -180,9 +186,11 @@ subjectFilter: null, formLoading: false, rules: { - subjectId: [ { required: true, message: '璇烽�夋嫨璇剧洰', trigger: 'change' } + ], + deptId: [ + { required: true, message: '璇烽�夋嫨閮ㄩ棬', trigger: 'change' } ], paperType: [ { required: true, message: '璇烽�夋嫨璇曞嵎绫诲瀷', trigger: 'change' } @@ -216,6 +224,9 @@ console.log(res) this.subjectFilter = res.response }) + departmentApi.getDeptAdmins().then(res => { + this.depts = res.response + }) }, async mounted () { diff --git a/src/views/user/student/edit.vue b/src/views/user/student/edit.vue index 864743b..4d97bbb 100644 --- a/src/views/user/student/edit.vue +++ b/src/views/user/student/edit.vue @@ -26,8 +26,8 @@ <el-input v-model="form.phone"></el-input> </el-form-item> <el-form-item label="閮ㄩ棬锛�" prop="deptIds" required> - <el-select v-model="form.deptIds" multiple collapse-tags placeholder="閮ㄩ棬"> - <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option> + <el-select v-model="form.deptIds" collapse-tags placeholder="閮ㄩ棬"> + <el-option v-for="item in depts" :key="item.id" :value="item.id" :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="鏍囩锛�" prop="tagIds"> @@ -51,10 +51,12 @@ <script> import { mapGetters, mapState, mapActions } from 'vuex' import userApi from '@/api/user' +import departmentApi from '@/api/department' export default { data () { return { + depts: [], tags: [], value2:[], form: { @@ -68,7 +70,7 @@ sex: '', birthDay: null, phone: null, - deptIds: [], + deptIds: '', tagIds: [] }, formLoading: false, @@ -90,7 +92,8 @@ }, created () { this.getTags(); - + this.getDepts(); + console.log(this.levelEnum) let id = this.$route.query.id let _this = this @@ -119,6 +122,11 @@ this.tags = data.response }) }, + getDepts () { + departmentApi.getDeptAdmins().then(res => { + this.depts = res.response + }) + }, submitForm () { console.log("this.form", this.form) let _this = this -- Gitblit v1.8.0