diff --git a/leave-school-vue/src/mock/leavestudent.js b/leave-school-vue/src/mock/leavestudent.js
index 906337e..17eefb4 100644
--- a/leave-school-vue/src/mock/leavestudent.js
+++ b/leave-school-vue/src/mock/leavestudent.js
@@ -1,42 +1,84 @@
 import Mock from 'mockjs'
 import { param2Obj } from '@/utils'
+import dept from './department'
 
 const clsList = Mock.mock({
   'list|26': [{
     'id': '@increment',
-    'hjmc|1': ['后勤处', '财务处', '学生处'],
-    'xh': '@word(8)',
-    'xm': '@cword(2, 3)',
-    'yx|1': ['教育学院', '经管学院', '人文学院', '数学学院', '计算机学院', '电子学院', '电气学院', '生命科学院'],
-    'yxid|1': ['1', '2', '3', '4', '5', '6', '7', '8'],
-    'zy': '@cword(6, 7)',
-    'bj': '@cword(6, 7)',
-    'shzt|1': ['待审核', '审核通过', '审核不通过'],
-    'shyj': '@cword(6, 10)',
-    'shztcode|1': ['1', '2', '3']
+    'node|1': ['后勤处', '财务处', '学生处'],
+    'studentNumber': '@word(8)',
+    'name': '@cword(2, 3)',
+    'department|1': ['教育学院', '经管学院', '人文学院', '数学学院', '计算机学院', '电子学院', '电气学院', '生命科学院'],
+    'major': '@cword(6, 7)',
+    'clazz': '@cword(6, 7)',
+    'auditResult|1': ['待审核', '审核通过', '审核不通过'],
+    'auditOpinion': '@cword(6, 10)',
+    'rownum': '@id',
+    'leaveSchoolBatch': '@cword(6, 7)',
+    'studentType': '@cword(6, 7)',
+    'leaveSchoolType': '@cword(6, 7)',
+    'graduateYear': '@cword(6, 7)',
+    'graduateMonth': '@cword(6, 7)'
   }]
 }).list
 
+const leaveSchoolBatchList = Mock.mock(
+  [{
+    'value': '2018',
+    'label': '2018年'
+  },
+  {
+    'value': '2017',
+    'label': '2017年'
+  },
+  {
+    'value': '2016',
+    'label': '2016年'
+  }]
+)
+const studentTypeList = Mock.mock(
+  [{
+    'value': '1',
+    'label': '研究生'
+  },
+  {
+    'value': '2',
+    'label': '本专科生'
+  }]
+)
+const leaveSchoolTypeList = Mock.mock(
+  [{
+    'value': '1',
+    'label': '毕业离校'
+  },
+  {
+    'value': '2',
+    'label': '其他'
+  }]
+)
 export default{
   getList: config => {
-    const { xh, xm, pcmc, xslb, bynf, byyf, yx, zy, sex, shhj, shzt, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const { studentNumber, name, department, major, clazz, leaveSchoolBatch, studentType, leaveSchoolType, graduateYear, graduateMonth, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
     const mockList = clsList.filter(item => {
-      if (pcmc && item.pcmc && item.pcmc + '' !== pcmc + '') return false
-      if (xslb && item.xslb && item.xslb !== xslb) return false
-      if (bynf && item.bynf && item.bynf !== bynf) return false
-      if (byyf && item.byyf && item.byyf !== byyf) return false
-      if (yx && item.yxid && item.yxid !== yx) return false
-      if (zy && item.zy && item.zy !== zy) return false
-      if (sex && item.sex && item.sex !== sex) return false
-      if (shhj && item.shhj && item.shhj !== shhj) return false
-      if (shzt && item.shztcode && item.shztcode !== shzt) return false
-      if (xh && item.xh && item.xh !== xh) return false
-      if (xm && item.xm && item.xm !== xm) return false
+      if (studentNumber && item.studentNumber && item.studentNumber !== studentNumber) return false
+      if (name && item.name && item.name !== name) return false
+      if (department && item.department && item.department !== department) return false
+      if (major && item.major && item.major !== major) return false
+      if (clazz && item.clazz && item.clazz !== clazz) return false
+      if (leaveSchoolBatch && item.leaveSchoolBatch && item.leaveSchoolBatch !== leaveSchoolBatch) return false
+      if (studentType && item.studentType && item.studentType !== studentType) return false
+      if (leaveSchoolType && item.leaveSchoolType && item.leaveSchoolType !== leaveSchoolType) return false
+      if (graduateYear && item.graduateYear && item.graduateYear !== graduateYear) return false
+      if (graduateMonth && item.graduateMonth && item.graduateMonth !== graduateMonth) return false
       return true
     })
 
     const pageList = mockList.filter((item, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1))
     return {
+      departmentList: dept.getDeptList().items,
+      leaveSchoolTypeList: leaveSchoolTypeList,
+      studentTypeList: studentTypeList,
+      leaveSchoolBatchList: leaveSchoolBatchList,
       items: pageList,
       recordCount: mockList.length,
       code: 200
