龚焕茏
2024-05-16 78a9096e16ae5353bf2cec2f5ebaefc5e49d0d1c
feat:部门管理员功能权限控制
8个文件已修改
106 ■■■■ 已修改文件
src/api/dashboard.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/department.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/answer/sheetStatistics.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/paper/edit.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/paper/list.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/personalRandomTemplate/edit.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/user/student/edit.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)
}
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)
}
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 }
      },
    ]
  },
  {
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);
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){
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){
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 () {
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