diff --git a/leave-school-vue/src/mock/departmentleader.js b/leave-school-vue/src/mock/departmentleader.js
new file mode 100644
index 0000000..e9fe93e
--- /dev/null
+++ b/leave-school-vue/src/mock/departmentleader.js
@@ -0,0 +1,77 @@
+import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const departmentleaderList = Mock.mock({
+  'list|50': [{
+    'gh': '@increment',
+    'xm': '@cword(2, 3)',
+    'yx': '@cword(6, 15)',
+    'xb|1': ['男', '女'],
+    'zzmm|1': ['党员', '共青团员', '群众'],
+    'lxdh': '@word',
+    'sfzr|1': ['是', '否']
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { gh, xm, yx, zzmm, xb, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const mockList = departmentleaderList.filter(item => {
+      if (gh && item.gh + '' !== gh + '') return false
+      if (xm && item.xm !== xm) return false
+      if (yx && item.yx !== yx) return false
+      if (zzmm && item.zzmm !== zzmm) return false
+      if (xb && item.xb !== xb) 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
+    }
+  },
+  getItem: config => {
+    const { id } = param2Obj(config.url)
+    const mockList = departmentleaderList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const departmentleader = JSON.parse(config.body)
+    if (!departmentleader.id) {
+      departmentleader.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      departmentleaderList.unshift(departmentleader)
+    } else {
+      for (let i = 0; i < departmentleaderList.length; i++) {
+        if (departmentleaderList[i].id + '' === departmentleader.id + '') {
+          departmentleaderList.splice(i, 1, departmentleader)
+          break
+        }
+      }
+    }
+    return {
+      item: departmentleader,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const departmentleader = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < departmentleaderList.length; i++) {
+      if (departmentleaderList[i].id + '' === departmentleader.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      departmentleaderList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
