diff --git a/leave-school-vue/src/api/majorreport-api.js b/leave-school-vue/src/api/majorreport-api.js
new file mode 100644
index 0000000..536cb1c
--- /dev/null
+++ b/leave-school-vue/src/api/majorreport-api.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/api/statistical/majorreport/list-api',
+    method: 'get',
+    params
+  })
+}
diff --git a/leave-school-vue/src/icons/svg/majorreport.svg b/leave-school-vue/src/icons/svg/majorreport.svg
new file mode 100644
index 0000000..0447c16
--- /dev/null
+++ b/leave-school-vue/src/icons/svg/majorreport.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1535340722952" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1573" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M906.230186 217.618135 755.262939 217.618135c6.059172-8.192683 10.155513-18.348196 10.155513-29.783815L765.418452 69.04042c0-26.199517-19.030919-47.534628-42.499542-47.534628L489.256771 21.505792c-23.468622 0-42.499542 21.249771-42.499542 47.534628l227.176265 0c23.468622 0 42.499542 21.249771 42.499542 47.534628l0 118.793899c0 26.199517-19.030919 47.534628-42.499542 47.534628L667.36228 282.903575 667.36228 164.109676c0-26.199517-19.030919-47.534628-42.499542-47.534628L391.2006 116.575048c-23.468622 0-42.499542 21.249771-42.499542 47.534628L348.701058 217.618135 109.833153 217.618135C49.156096 217.618135 0 265.323444 0 324.12301l0 558.723894c0 58.884907 49.156096 106.504875 109.833153 106.504875l796.397033 0c60.677056 0 109.833153-47.705309 109.833153-106.504875L1016.063339 324.12301C1016.148679 265.323444 966.907242 217.618135 906.230186 217.618135zM554.456871 808.344695c0 0-47.705309 50.948246-215.655305 51.204267l0 0c-0.170681 0-0.341362 0-0.512043 0s-0.341362 0-0.597383 0l0 0c-168.035336-0.256021-215.655305-51.204267-215.655305-51.204267s-9.984832-99.848321 82.694891-150.711226l68.528377-28.162347c0 0 9.984832-9.984832 11.43562-23.297941l-0.512043-9.387449c-16.129344-10.582215-28.162347-26.540878-35.842987-45.230436C225.213434 550.957913 224.786732 497.108092 236.222352 491.219602 232.211351 447.354613 232.467372 372.08434 337.180098 370.974915c0 0 0-0.170681 0-0.170681 0.426702 0 0.682724 0.08534 1.024085 0.08534S338.801567 370.804234 339.228269 370.804234c0 0 0 0.170681 0 0.170681 104.627386 1.109426 104.968747 76.379698 100.957746 120.244687 11.43562 5.80315 11.008917 59.738312-12.118343 60.335695-7.68064 18.689557-19.713643 34.648221-35.842987 45.230436l-0.512043 9.387449c1.450788 13.39845 11.43562 23.297941 11.43562 23.297941l68.528377 28.162347C564.356363 708.496375 554.456871 808.344695 554.456871 808.344695zM903.755313 761.23677 704.144012 761.23677c-20.311026 0-36.781732-15.958663-36.781732-35.672306 0-19.628302 16.470706-35.672306 36.781732-35.672306l199.611301 0c20.311026 0 36.781732 15.958663 36.781732 35.672306C940.537045 745.278107 924.066339 761.23677 903.755313 761.23677zM903.755313 615.304609 679.651304 615.304609c-20.311026 0-36.781732-15.958663-36.781732-35.672306 0-19.628302 16.470706-35.672306 36.781732-35.672306l224.104009 0c20.311026 0 36.781732 15.958663 36.781732 35.672306C940.537045 599.431286 924.066339 615.304609 903.755313 615.304609zM903.755313 472.786066 581.595133 472.786066c-20.311026 0-36.781732-15.958663-36.781732-35.586966 0-19.713643 16.470706-35.672306 36.781732-35.672306l322.16018 0c20.311026 0 36.781732 15.958663 36.781732 35.672306C940.537045 456.912743 924.066339 472.786066 903.755313 472.786066z" p-id="1574" fill="#bfcbd9"></path></svg>
\ No newline at end of file
diff --git a/leave-school-vue/src/mock/index.js b/leave-school-vue/src/mock/index.js
index 475cf75..06d547e 100644
--- a/leave-school-vue/src/mock/index.js
+++ b/leave-school-vue/src/mock/index.js
@@ -17,6 +17,7 @@
 import leavestudentApi from './leavestudent'
 import nodereportApi from './nodereport'
 import deptreportApi from './deptreport'
+import majorreportApi from './majorreport'
 
 import leaveschoolnodeApi from './leaveschoolnode'
 
@@ -111,6 +112,9 @@
 // 院系统计报表查询
 Mock.mock(/\/api\/statistical\/deptreport\/list-api/, 'get', deptreportApi.getList)
 
+// 专业统计报表查询
+Mock.mock(/\/api\/statistical\/majorreport\/list-api/, 'get', majorreportApi.getList)
+
 // 离校环节管理
 Mock.mock(/\/api\/procedures\/node\/list-api/, 'get', leaveschoolnodeApi.getList)
 Mock.mock(/\/api\/procedures\/node\/create-node/, 'post', leaveschoolnodeApi.createData)
diff --git a/leave-school-vue/src/mock/majorreport.js b/leave-school-vue/src/mock/majorreport.js
new file mode 100644
index 0000000..ad2be90
--- /dev/null
+++ b/leave-school-vue/src/mock/majorreport.js
@@ -0,0 +1,39 @@
+import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const recordList = Mock.mock({
+  'list|4': [{
+    'id': '@increment',
+    'zy|1': ['市场营销', '人力资源管理', '自动化'],
+    'zyid|1': [27, 28, 29],
+    'zylx|1-1000': 100,
+    'bzylx|1-1000': 100
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { pcmc, yx, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const mockList = recordList.filter(item => {
+      if (pcmc && item.pcmc + '' !== pcmc + '') return false
+      if (yx && item.yx && item.yx + '' !== yx + '') return false
+      return true
+    })
+
+    const pageList = mockList.filter((item, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1))
+    return {
+      items: pageList,
+      recordCount: mockList.length,
+      code: 200
+    }
+  },
+  getLeaveAuditResult: config => {
+    return {
+      data: {
+        zylx: 100,
+        bzylx: 200
+      },
+      code: 200
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/menulist.js b/leave-school-vue/src/mock/menulist.js
index 4e0c3fa..a854108 100644
--- a/leave-school-vue/src/mock/menulist.js
+++ b/leave-school-vue/src/mock/menulist.js
@@ -161,6 +161,12 @@
         hidden: true,
         resource: '/views/statistical/deptsectionrep/index',
         meta: { title: '院系各部门统计报表', icon: 'deptsectionrep' }
+      },
+      {
+        path: 'majorreport',
+        code: 'majorreport',
+        resource: '/views/statistical/majorreport/index',
+        meta: { title: '专业统计报表查询', icon: 'majorreport' }
       }
     ]
   }
diff --git a/leave-school-vue/src/views/statistical/deptreport/index.vue b/leave-school-vue/src/views/statistical/deptreport/index.vue
index 27932a2..f69e393 100644
--- a/leave-school-vue/src/views/statistical/deptreport/index.vue
+++ b/leave-school-vue/src/views/statistical/deptreport/index.vue
@@ -62,11 +62,6 @@
       tableheight: 500,
       year: (new Date()).getFullYear() + 2,
       pcmcList: [],
-      yxList: [],
-      zyList: [],
-      xbList: [],
-      xslbList: [],
-      jbxx: {},
       queryparam: {}
     }
   },
@@ -127,7 +122,7 @@
         myChart.on('click', function(params) {
           that.listQuery.yx = option.xAxis.yxiddata[params.seriesIndex]
           // 命名的路由
-          that.$router.push({ name: 'deptsectionrep', params: that.listQuery })
+          that.$router.push({ name: 'deptsectionrep', params: Object.assign({}, that.listQuery) })
         })
       })
     },
diff --git a/leave-school-vue/src/views/statistical/deptsectionrep/index.vue b/leave-school-vue/src/views/statistical/deptsectionrep/index.vue
index 97a015e..6484d3c 100644
--- a/leave-school-vue/src/views/statistical/deptsectionrep/index.vue
+++ b/leave-school-vue/src/views/statistical/deptsectionrep/index.vue
@@ -151,12 +151,6 @@
     initZyList() {
       getZyListByYx({ yx: this.listQuery.yx }).then(response => {
         this.zyList = response.items
-        // TODO 坑，this.listQuery.zy == null 直接赋值，专业下拉框选择出bug，无法选择，原因未知
-        for (const attr in this.listQuery) {
-          if (attr === 'zy') {
-            this.listQuery['zy'] = null
-          }
-        }
       })
     },
     initBmList() {
diff --git a/leave-school-vue/src/views/statistical/majorreport/index.vue b/leave-school-vue/src/views/statistical/majorreport/index.vue
new file mode 100644
index 0000000..460e312
--- /dev/null
+++ b/leave-school-vue/src/views/statistical/majorreport/index.vue
@@ -0,0 +1,172 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-row :gutter="20">
+        <el-col :span="4">
+          <el-select clearable class="filter-item" v-model="listQuery.pcmc" placeholder="批次名称">
+          </el-select>
+        </el-col>
+        <el-col :span="4">
+          <el-select clearable class="filter-item" v-model="listQuery.yx" placeholder="院系">
+            <el-option v-for="item in  yxList" :key="item.id" :label="item.dwmc" :value="item.id">
+            </el-option>
+          </el-select>
+        </el-col>
+        <el-col :span="8">
+          <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查询</el-button>
+          <el-button class="filter-item" style="margin-left: 10px;" @click="handleReset" type="primary" icon="el-icon-edit">重置</el-button>
+        </el-col>
+      </el-row>
+    </div>
+    <el-table :data="items" v-loading="listLoading" element-loading-text="Loading" border fit highlight-current-row>
+      <el-table-column align="center" type="index" label='序号' width="95">
+      </el-table-column>
+      <el-table-column label="专业" align="center">
+        <template slot-scope="scope">
+          {{scope.row.zy}}
+        </template>
+      </el-table-column>
+      <el-table-column label="准予离校" align="center">
+        <template slot-scope="scope">
+          {{scope.row.zylx}}
+        </template>
+      </el-table-column>
+      <el-table-column label="不准予离校" align="center">
+        <template slot-scope="scope">
+          {{scope.row.bzylx}}
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-col :span="24">
+      <el-card>
+        <div id="myChart" :style="{width: '100%', height: '300px'}"></div>
+      </el-card>
+    </el-col>
+    <el-dialog title="详情" :visible.sync="dialogFormVisible" width="80%" top="2vh">
+      <audit-student-list :tableheight="tableheight" :queryparam="queryparam"></audit-student-list>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getList } from '@/api/majorreport-api'
+import { getDeptList } from '@/api/department-api'
+import waves from '@/directive/waves' // 水波纹指令
+import { resetForm } from '@/utils'
+import { crudPageList } from '@/utils/crud'
+import mixindata from '@/utils/crud'
+import AuditStudentList from '@/components/AuditStudentList'
+
+export default {
+  name: 'class',
+  components: { AuditStudentList },
+  directives: {
+    waves
+  },
+  mixins: [mixindata],
+  data() {
+    return {
+      tableheight: 500,
+      year: (new Date()).getFullYear() + 2,
+      pcmcList: [],
+      yxList: [],
+      queryparam: {}
+    }
+  },
+  created() {
+    this.initYxList()
+    this.handlePageList()
+    this.tableheight = window.innerHeight - 320
+  },
+  methods: {
+    drawLine() {
+      const that = this
+      this.$nextTick(function() {
+        const xdata = []
+        const zyiddata = []
+        const zylxdata = []
+        const bzylxdata = []
+        for (const item of this.items) {
+          xdata.push(item.zy)
+          zyiddata.push(item.zyid)
+          zylxdata.push(item.zylx)
+          bzylxdata.push(item.bzylx)
+        }
+        // 基于准备好的dom，初始化echarts实例
+        const myChart = window.echarts.init(document.getElementById('myChart'))
+        // 绘制图表
+        const option = {
+          tooltip: {
+            trigger: 'axis'
+          },
+          toolbox: {
+            feature: {
+              saveAsImage: {}
+            }
+          },
+          xAxis: {
+            type: 'category',
+            data: xdata,
+            zyiddata: zyiddata
+          },
+          yAxis: {
+            type: 'value'
+          },
+          legend: {
+            data: ['准予离校', '不准予离校']
+          },
+          series: [
+            {
+              name: '准予离校',
+              type: 'bar',
+              data: zylxdata
+            },
+            {
+              name: '不准予离校',
+              type: 'bar',
+              data: bzylxdata
+            }]
+        }
+        myChart.setOption(option)
+        myChart.on('click', function(params) {
+          that.listQuery.zy = option.xAxis.zyiddata[params.seriesIndex]
+          // 命名的路由
+          // params不能直接传递that.listQuery，否则跳转页面的级联下拉框有bug，无法选择，可传递复制对象
+          that.$router.push({ name: 'deptsectionrep', params: Object.assign({}, that.listQuery) })
+        })
+      })
+    },
+    initYxList() {
+      getDeptList().then(response => {
+        this.yxList = response.items
+      })
+    },
+    handlePageList() {
+      crudPageList(this, getList, this.drawLine)
+    },
+    handleReset() {
+      resetForm(this.listQuery)
+    },
+    handleFilter() {
+      this.listQuery.pageIndex = 1
+      this.handlePageList()
+    },
+    showDetail(hjid, shzt) {
+      this.listQuery['hjid'] = hjid
+      this.listQuery['shzt'] = shzt
+      this.queryparam = Object.assign({}, this.listQuery)
+      this.dialogFormVisible = true
+    }
+  }
+}
+</script>
+<style scoped>
+.app-container a {
+    color: #00a4f4;
+    text-decoration: none;
+}
+.el-card {
+  margin: 5px;
+}
+</style>
+
