diff --git a/leave-school-vue/src/mock/department.js b/leave-school-vue/src/mock/department.js
index 98ef5b3..d37068e 100644
--- a/leave-school-vue/src/mock/department.js
+++ b/leave-school-vue/src/mock/department.js
@@ -1,48 +1,48 @@
 import Mock from 'mockjs'
 import { param2Obj, parseTime } from '@/utils'
+import dic from './dictionary'
 
 const deptList = Mock.mock({
   'list|26': [{
     'id': '@increment',
-    'dwdm': '000@id',
-    'dwmc|1': ['教育学院', '经管学院', '人文学院', '数学学院', '计算机学院', '电子学院', '电气学院', '生命科学院'],
-    'dwjc': '@cword(3, 5)',
-    'dwywmc': '@word(6, 10)',
-    'sfqy|1': ['启用', '未启用'],
-    'sfqycode|1': ['1', '0'],
-    'lbm|1': ['院系', '部门'],
-    'lbmid|1': ['1', '2'],
-    'cjsj': '@Date'
+    'code': '000@id',
+    'name|1': ['教育学院', '经管学院', '人文学院', '数学学院', '计算机学院', '电子学院', '电气学院', '生命科学院'],
+    'abbreviation': '@cword(3, 5)',
+    'enName': '@word(6, 10)',
+    'enable|1': ['启用', '未启用'],
+    'classCode|1': ['院系', '部门'],
+    'createDate': '@Date'
   }]
 }).list
 
 export default{
-  getList: config => {
-    const { dwdm, dwmc, sfqy, lbm, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+  getPage: config => {
+    const { code, name, enable, classCode, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
     const mockList = deptList.filter(item => {
-      if (dwdm && item.dwdm !== dwdm) return false
-      if (dwmc && item.dwmc !== dwmc) return false
-      if (sfqy && item.sfqycode !== sfqy) return false
-      if (lbm && item.lbmid !== lbm) return false
+      if (code && item.code !== code) return false
+      if (name && item.name !== name) return false
+      if (enable && item.enable !== enable) return false
+      if (classCode && item.classCode !== classCode) return false
       return true
     })
 
     const pageList = mockList.filter((item, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1))
     return {
+      classCodeList: dic.getDicList({ type: 'classCode' }).items,
       items: pageList,
       recordCount: mockList.length,
       code: 200
     }
   },
   getDeptList: config => {
-    const mockList = deptList.filter(item => item.lbm === '院系')
+    const mockList = deptList.filter(item => item.classCode === '院系')
     return {
       items: mockList,
       code: 200
     }
   },
   getSectionList: config => {
-    const mockList = deptList.filter(item => item.lbm === '部门')
+    const mockList = deptList.filter(item => item.classCode === '部门')
     return {
       items: mockList,
       code: 200
diff --git a/leave-school-vue/src/mock/dictionary.js b/leave-school-vue/src/mock/dictionary.js
index 10aa7c3..c8cf08b 100644
--- a/leave-school-vue/src/mock/dictionary.js
+++ b/leave-school-vue/src/mock/dictionary.js
@@ -13,12 +13,12 @@
 }]
 const dicList = [{
   'id': '1',
-  'type': 'lbm',
+  'type': 'classCode',
   'name': '院系'
 },
 {
   'id': '2',
-  'type': 'lbm',
+  'type': 'classCode',
   'name': '部门'
 },
 {
@@ -172,9 +172,15 @@
     }
   },
   getDicList: config => {
-    const { type } = param2Obj(config.url)
+    let dictype = ''
+    if (config.type) {
+      dictype = config.type
+    } else {
+      const { type } = param2Obj(config.url)
+      dictype = type
+    }
     const mockList = dicList.filter(item => {
-      if (type && item.type !== type) return false
+      if (dictype && item.type !== dictype) return false
       return true
     })
 
diff --git a/leave-school-vue/src/mock/index.js b/leave-school-vue/src/mock/index.js
index 49bf902..93e2e55 100644
--- a/leave-school-vue/src/mock/index.js
+++ b/leave-school-vue/src/mock/index.js
@@ -42,7 +42,7 @@
 Mock.mock(/\/api\/system\/menu\/list/, 'get', menulistApi.getMenuList)
 
 // 院系部门管理
-Mock.mock(/\/api\/system\/department\/list-api/, 'get', departmentApi.getList)
+Mock.mock(/\/api\/system\/department\/page-api/, 'get', departmentApi.getPage)
 Mock.mock(/\/api\/system\/department\/dept-list/, 'get', departmentApi.getDeptList)
 Mock.mock(/\/api\/system\/department\/section-list/, 'get', departmentApi.getSectionList)
 Mock.mock(/\/api\/system\/department\/create-department/, 'post', departmentApi.createData)
@@ -71,6 +71,7 @@
 Mock.mock(/\/api\/system\/schoolyear\/get-item/, 'get', schoolyearApi.getItem)
 
 // 名单同步接口设置
+Mock.mock(/\/api\/system\/rostersyncinterface\/page-api/, 'get', rostersyncinterfaceApi.getPage)
 Mock.mock(/\/api\/system\/rostersyncinterface\/list-api/, 'get', rostersyncinterfaceApi.getList)
 Mock.mock(/\/api\/system\/rostersyncinterface\/create-rostersyncinterface/, 'post', rostersyncinterfaceApi.createData)
 Mock.mock(/\/api\/system\/rostersyncinterface\/delete-rostersyncinterface/, 'delete', rostersyncinterfaceApi.deleteData)
diff --git a/leave-school-vue/src/mock/leaveschoolnode.js b/leave-school-vue/src/mock/leaveschoolnode.js
index 10c7257..aba104c 100644
--- a/leave-school-vue/src/mock/leaveschoolnode.js
+++ b/leave-school-vue/src/mock/leaveschoolnode.js
@@ -4,7 +4,7 @@
   {
     'id': '26',
     'name': '后勤处',
-    'department': { 'id': '2', 'dwmc': '后勤处' },
+    'department': { 'id': '2', 'name': '后勤处' },
     'contact': '张三',
     'phoneNumber': '021-65431991',
     'scope': { 'id': '27', 'name': '全校范围' },
@@ -17,7 +17,7 @@
   {
     'id': '27',
     'name': '财务处',
-    'department': { 'id': '3', 'dwmc': '财务处' },
+    'department': { 'id': '3', 'name': '财务处' },
     'contact': '李四',
     'phoneNumber': '021-65431921',
     'scope': { 'id': '27', 'name': '全校范围' },
@@ -30,7 +30,7 @@
   {
     'id': '28',
     'name': '图书馆',
-    'department': { 'id': '4', 'dwmc': '图书馆' },
+    'department': { 'id': '4', 'name': '图书馆' },
     'contact': '王五',
     'phoneNumber': '021-65431931',
     'scope': { 'id': '27', 'name': '全校范围' },
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
diff --git a/leave-school-vue/src/mock/menulist.js b/leave-school-vue/src/mock/menulist.js
index 63c1ca7..df7bae5 100644
--- a/leave-school-vue/src/mock/menulist.js
+++ b/leave-school-vue/src/mock/menulist.js
@@ -126,10 +126,10 @@
         meta: { title: '离校批次管理', icon: 'batch' }
       },
       {
-        path: 'manifest',
-        code: 'manifest',
-        resource: '/views/procedures/manifest/index',
-        meta: { title: '离校名单管理', icon: 'manifest' }
+        path: 'leavestudent',
+        code: 'leavestudent',
+        resource: '/views/procedures/leavestudent/index',
+        meta: { title: '离校名单管理', icon: 'leavestudent' }
       },
       {
         path: 'batchaudit',
diff --git a/leave-school-vue/src/mock/rostersyncinterface.js b/leave-school-vue/src/mock/rostersyncinterface.js
index 3a7259c..eb46aa1 100644
--- a/leave-school-vue/src/mock/rostersyncinterface.js
+++ b/leave-school-vue/src/mock/rostersyncinterface.js
@@ -4,23 +4,21 @@
 const rostersyncinterfaceList = Mock.mock({
   'list|50': [{
     'id': '@increment',
-    'dm': '@word(4)',
-    'mc': '@cword(6, 15)',
-    'tj': '@word(15)',
-    'px': '@word(15)',
-    'gglx': '@word(15)'
+    'code': '@word(4)',
+    'name': '@cword(6, 15)',
+    'sql': '@word(15)',
+    'sort': '@word(15)'
   }]
 }).list
 
 export default{
-  getList: config => {
-    const { dm, mc, tj, px, gglx, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+  getPage: config => {
+    const { code, name, sql, sort, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
     const mockList = rostersyncinterfaceList.filter(item => {
-      if (dm && item.dm !== dm) return false
-      if (mc && item.mc !== mc) return false
-      if (tj && item.tj !== tj) return false
-      if (px && item.px !== px) return false
-      if (gglx && item.gglx !== gglx) return false
+      if (code && item.code !== code) return false
+      if (name && item.name !== name) return false
+      if (sql && item.sql !== sql) return false
+      if (sort && item.sort !== sort) return false
       return true
     })
 
@@ -31,6 +29,12 @@
       code: 200
     }
   },
+  getList: config => {
+    return {
+      items: rostersyncinterfaceList,
+      code: 200
+    }
+  },
   getItem: config => {
     const { id } = param2Obj(config.url)
     const mockList = rostersyncinterfaceList.filter(item => item.id + '' === id + '')
diff --git a/leave-school-vue/src/mock/schoolyear.js b/leave-school-vue/src/mock/schoolyear.js
index 7e37aa9..ec57537 100644
--- a/leave-school-vue/src/mock/schoolyear.js
+++ b/leave-school-vue/src/mock/schoolyear.js
@@ -4,17 +4,17 @@
 const schoolyearList = Mock.mock({
   'list|26': [{
     'id': '@increment',
-    'xndm|1': ['2016', '2017', '2018'],
-    'xnmc': '@xndm@cword(6, 15)'
+    'code|1': ['2016', '2017', '2018'],
+    'name': '@code@cword(6, 15)'
   }]
 }).list
 
 export default{
   getList: config => {
-    const { xndm, xnmc, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const { code, name, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
     const mockList = schoolyearList.filter(item => {
-      if (xndm && item.xndm !== xndm) return false
-      if (xnmc && item.xnmc !== xnmc) return false
+      if (code && item.code !== code) return false
+      if (name && item.name !== name) return false
       return true
     })
 
