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 + '')
