diff --git a/leave-school-vue/src/mock/class.js b/leave-school-vue/src/mock/class.js
new file mode 100644
index 0000000..01fc0ae
--- /dev/null
+++ b/leave-school-vue/src/mock/class.js
@@ -0,0 +1,88 @@
+import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const clsList = Mock.mock({
+  'list|26': [{
+    'id': '@increment',
+    'nj|1': ['6', '7', '8'],
+    'njmc|1': ['2017', '2018', '2019'],
+    'yx|1-26': 26,
+    'yxmc': '@cword(6, 15)',
+    'zy|27-375': 375,
+    'zymc': '@cword(3, 5)',
+    'bjdm': '@word(5)',
+    'bjmc': '@cword(6, 10)',
+    'sfky|1': ['1', '0'],
+    'sfkymc|1': ['可用', '不可用']
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { yx, zy, bjmc, nj, bjdm, sfky, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const mockList = clsList.filter(item => {
+      if (yx && item.yx + '' !== yx + '') return false
+      if (zy && item.zy !== zy) return false
+      if (bjmc && item.bjmc !== bjmc) return false
+      if (nj && item.nj !== nj) return false
+      if (bjdm && item.bjdm !== bjdm) return false
+      if (sfky && item.sfky !== sfky) 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
+    }
+  },
+  getAllList: config => {
+    return {
+      items: clsList,
+      code: 200
+    }
+  },
+  getItem: config => {
+    const { id } = param2Obj(config.url)
+    const mockList = clsList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const cls = JSON.parse(config.body)
+    if (!cls.id) {
+      cls.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      clsList.unshift(cls)
+    } else {
+      for (let i = 0; i < clsList.length; i++) {
+        if (clsList[i].id + '' === cls.id + '') {
+          clsList.splice(i, 1, cls)
+          break
+        }
+      }
+    }
+    return {
+      item: cls,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const cls = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < clsList.length; i++) {
+      if (clsList[i].id + '' === cls.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      clsList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
