diff --git a/leave-school-vue/src/views/statistical/deptreport/index.vue b/leave-school-vue/src/views/statistical/deptreport/index.vue
new file mode 100644
index 0000000..27932a2
--- /dev/null
+++ b/leave-school-vue/src/views/statistical/deptreport/index.vue
@@ -0,0 +1,162 @@
+<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="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.yx}}
+        </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/deptreport-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: [],
+      zyList: [],
+      xbList: [],
+      xslbList: [],
+      jbxx: {},
+      queryparam: {}
+    }
+  },
+  created() {
+    this.handlePageList()
+    this.tableheight = window.innerHeight - 320
+  },
+  methods: {
+    drawLine() {
+      const that = this
+      this.$nextTick(function() {
+        const xdata = []
+        const yxiddata = []
+        const zylxdata = []
+        const bzylxdata = []
+        for (const item of this.items) {
+          xdata.push(item.yx)
+          yxiddata.push(item.yxid)
+          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,
+            yxiddata: yxiddata
+          },
+          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.yx = option.xAxis.yxiddata[params.seriesIndex]
+          // 命名的路由
+          that.$router.push({ name: 'deptsectionrep', params: that.listQuery })
+        })
+      })
+    },
+    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>
+
diff --git a/leave-school-vue/src/views/statistical/deptsectionrep/index.vue b/leave-school-vue/src/views/statistical/deptsectionrep/index.vue
new file mode 100644
index 0000000..97a015e
--- /dev/null
+++ b/leave-school-vue/src/views/statistical/deptsectionrep/index.vue
@@ -0,0 +1,195 @@
+<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 @change="initZyList" 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="4">
+          <el-select clearable class="filter-item" v-model="listQuery.zy" placeholder="专业">
+            <el-option v-for="item in  zyList" :key="item.id" :label="item.zymc" :value="item.id">
+            </el-option>
+          </el-select>
+        </el-col>
+        <el-col :span="4">
+          <el-select clearable class="filter-item" v-model="listQuery.bm" placeholder="部门">
+            <el-option v-for="item in  bmList" :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-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/nodereport-api'
+import { getDeptList, getSectionList } from '@/api/department-api'
+import { getZyListByYx } from '@/api/major-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,
+      pcmcList: [],
+      yxList: [],
+      zyList: [],
+      bmList: [],
+      queryparam: {}
+    }
+  },
+  created() {
+    this.listQuery = this.$route.params
+    this.initYxList()
+    this.initZyList()
+    this.initBmList()
+    this.handlePageList()
+    this.tableheight = window.innerHeight - 320
+  },
+  methods: {
+    drawLine() {
+      this.$nextTick(function() {
+        const xdata = []
+        const xiddata = []
+        const tgdata = []
+        const btgdata = []
+        const dshdata = []
+        for (const item of this.items) {
+          xdata.push(item.hjmc)
+          xiddata.push(item.hjid)
+          tgdata.push(item.shtg)
+          btgdata.push(item.shbtg)
+          dshdata.push(item.dsh)
+        }
+        // 基于准备好的dom，初始化echarts实例
+        const myChart = window.echarts.init(document.getElementById('myChart'))
+        // 绘制图表
+        const option = {
+          tooltip: {
+            trigger: 'axis'
+          },
+          toolbox: {
+            feature: {
+              saveAsImage: {}
+            }
+          },
+          xAxis: {
+            type: 'category',
+            data: xdata,
+            xiddata: xiddata
+          },
+          yAxis: {
+            type: 'value'
+          },
+          legend: {
+            data: ['通过', '不通过', '待审核']
+          },
+          series: [
+            {
+              name: '通过',
+              type: 'bar',
+              data: tgdata,
+              shzt: 1
+            },
+            {
+              name: '不通过',
+              type: 'bar',
+              data: btgdata,
+              shzt: 2
+            },
+            {
+              name: '待审核',
+              type: 'bar',
+              data: dshdata,
+              shzt: 3
+            }]
+        }
+        myChart.setOption(option)
+        const that = this
+        myChart.on('click', function(params) {
+          const hjid = option.xAxis.xiddata[params.dataIndex]
+          const shzt = option.series[params.seriesIndex].shzt
+          that.showDetail(hjid, shzt)
+        })
+      })
+    },
+    initYxList() {
+      getDeptList().then(response => {
+        this.yxList = response.items
+      })
+    },
+    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() {
+      getSectionList().then(response => {
+        this.bmList = 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>
+
diff --git a/leave-school-vue/src/views/statistical/handling/index.vue b/leave-school-vue/src/views/statistical/handling/index.vue
index bcd7d34..936f769 100644
--- a/leave-school-vue/src/views/statistical/handling/index.vue
+++ b/leave-school-vue/src/views/statistical/handling/index.vue
@@ -189,7 +189,7 @@
 import { getBjListByZy } from '@/api/class-api'
 import { getList } from '@/api/handling-api'
 import { getDicList } from '@/api/dictionary-api'
-import { getAllList as getAllDeptList } from '@/api/department-api'
+import { getDeptList as getAllDeptList } from '@/api/department-api'
 import { getZyListByYx } from '@/api/major-api'
 import waves from '@/directive/waves' // 水波纹指令
 import { resetForm } from '@/utils'
diff --git a/leave-school-vue/src/views/statistical/nodereport/index.vue b/leave-school-vue/src/views/statistical/nodereport/index.vue
index 803b19f..9081c35 100644
--- a/leave-school-vue/src/views/statistical/nodereport/index.vue
+++ b/leave-school-vue/src/views/statistical/nodereport/index.vue
@@ -85,7 +85,7 @@
     </el-col>
     <el-col :span="24">
       <el-card>
-        <div id="myChart4" :style="{width: '100%', height: '300px'}"></div>
+        <div id="zylxChart" :style="{width: '100%', height: '300px'}"></div>
       </el-card>
     </el-col>
     <el-dialog title="详情" :visible.sync="dialogFormVisible" width="80%" top="2vh">
@@ -97,7 +97,7 @@
 <script>
 import { getList, getLeaveAuditResult } from '@/api/nodereport-api'
 import { getDicList } from '@/api/dictionary-api'
-import { getAllList as getAllDeptList } from '@/api/department-api'
+import { getDeptList as getAllDeptList } from '@/api/department-api'
 import { getZyListByYx } from '@/api/major-api'
 import waves from '@/directive/waves' // 水波纹指令
 import { resetForm } from '@/utils'
@@ -151,6 +151,11 @@
               trigger: 'item',
               formatter: '{a} <br/>{b} : {c} ({d}%)'
             },
+            toolbox: {
+              feature: {
+                saveAsImage: {}
+              }
+            },
             legend: {
               orient: 'vertical',
               left: 'left',
@@ -187,7 +192,7 @@
         const zylx = response.data.zylx || 0
         const bzylx = response.data.bzylx || 0
         // 基于准备好的dom，初始化echarts实例
-        const myChart4 = window.echarts.init(document.getElementById('myChart4'))
+        const zylxChart = window.echarts.init(document.getElementById('zylxChart'))
         // 绘制图表
         const option = {
           title: {
@@ -198,6 +203,11 @@
             trigger: 'item',
             formatter: '{a} <br/>{b} : {c} ({d}%)'
           },
+          toolbox: {
+            feature: {
+              saveAsImage: {}
+            }
+          },
           legend: {
             orient: 'vertical',
             left: 'left',
@@ -223,7 +233,7 @@
             }
           ]
         }
-        myChart4.setOption(option)
+        zylxChart.setOption(option)
       })
     },
     initYxList() {
