diff --git a/leave-school-vue/src/mock/auditscope.js b/leave-school-vue/src/mock/auditscope.js
new file mode 100644
index 0000000..b1f233c
--- /dev/null
+++ b/leave-school-vue/src/mock/auditscope.js
@@ -0,0 +1,69 @@
+import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const auditscopeList = Mock.mock({
+  'list|50': [{
+    'id': '@increment',
+    'fwkzmc': '@cword(6, 15)',
+    'fwkzsxl': '@word(15)'
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { fwkzmc, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const mockList = auditscopeList.filter(item => {
+      if (fwkzmc && item.fwkzmc !== fwkzmc) 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 = auditscopeList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const auditscope = JSON.parse(config.body)
+    if (!auditscope.id) {
+      auditscope.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      auditscopeList.unshift(auditscope)
+    } else {
+      for (let i = 0; i < auditscopeList.length; i++) {
+        if (auditscopeList[i].id + '' === auditscope.id + '') {
+          auditscopeList.splice(i, 1, auditscope)
+          break
+        }
+      }
+    }
+    return {
+      item: auditscope,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const auditscope = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < auditscopeList.length; i++) {
+      if (auditscopeList[i].id + '' === auditscope.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      auditscopeList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/autoaudittype.js b/leave-school-vue/src/mock/autoaudittype.js
new file mode 100644
index 0000000..ab77486
--- /dev/null
+++ b/leave-school-vue/src/mock/autoaudittype.js
@@ -0,0 +1,69 @@
+import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const autoaudittypeList = Mock.mock({
+  'list|50': [{
+    'id': '@increment',
+    'zdshlxmc': '@cword(6, 15)',
+    'zdshlxsxl': '@word(15)'
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { zdshlxmc, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const mockList = autoaudittypeList.filter(item => {
+      if (zdshlxmc && item.zdshlxmc !== zdshlxmc) 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 = autoaudittypeList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const autoaudittype = JSON.parse(config.body)
+    if (!autoaudittype.id) {
+      autoaudittype.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      autoaudittypeList.unshift(autoaudittype)
+    } else {
+      for (let i = 0; i < autoaudittypeList.length; i++) {
+        if (autoaudittypeList[i].id + '' === autoaudittype.id + '') {
+          autoaudittypeList.splice(i, 1, autoaudittype)
+          break
+        }
+      }
+    }
+    return {
+      item: autoaudittype,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const autoaudittype = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < autoaudittypeList.length; i++) {
+      if (autoaudittypeList[i].id + '' === autoaudittype.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      autoaudittypeList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
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
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/department.js b/leave-school-vue/src/mock/department.js
new file mode 100644
index 0000000..ce07f0b
--- /dev/null
+++ b/leave-school-vue/src/mock/department.js
@@ -0,0 +1,86 @@
+import Mock from 'mockjs'
+import { param2Obj, parseTime } from '@/utils'
+
+const deptList = Mock.mock({
+  'list|26': [{
+    'id': '@increment',
+    'dwdm': '000@id',
+    'dwmc': '@cword(6, 15)',
+    'dwjc': '@cword(3, 5)',
+    'dwywmc': '@word(6, 10)',
+    'sfqy|1': ['启用', '未启用'],
+    'sfqycode|1': ['1', '0'],
+    'lbm|1': ['院系', '部门'],
+    'lbmid|1': ['1', '2'],
+    'cjsj': '@Date'
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { dwdm, dwmc, sfqy, lbm, 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
+      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: deptList,
+      code: 200
+    }
+  },
+  getItem: config => {
+    const { id } = param2Obj(config.url)
+    const mockList = deptList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const dept = JSON.parse(config.body)
+    dept.cjsj = parseTime(new Date(), '{y}-{m}-{d}')
+    if (!dept.id) {
+      dept.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      deptList.unshift(dept)
+    } else {
+      for (let i = 0; i < deptList.length; i++) {
+        if (deptList[i].id + '' === dept.id + '') {
+          deptList.splice(i, 1, dept)
+          break
+        }
+      }
+    }
+    return {
+      item: dept,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const dept = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < deptList.length; i++) {
+      if (deptList[i].id + '' === dept.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      deptList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
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
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/dictionary.js b/leave-school-vue/src/mock/dictionary.js
new file mode 100644
index 0000000..fbfb169
--- /dev/null
+++ b/leave-school-vue/src/mock/dictionary.js
@@ -0,0 +1,108 @@
+// import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const deptList = [{
+  'id': '1',
+  'type': 'lbm',
+  'name': '院系'
+},
+{
+  'id': '2',
+  'type': 'lbm',
+  'name': '部门'
+},
+{
+  'id': '3',
+  'type': 'gjzybz',
+  'name': '文学'
+},
+{
+  'id': '4',
+  'type': 'gjzybz',
+  'name': '物理'
+},
+{
+  'id': '5',
+  'type': 'gjzybz',
+  'name': '数学'
+},
+{
+  'id': '6',
+  'type': 'nj',
+  'name': '2017'
+},
+{
+  'id': '7',
+  'type': 'nj',
+  'name': '2018'
+},
+{
+  'id': '8',
+  'type': 'nj',
+  'name': '2019'
+},
+{
+  'id': '9',
+  'type': 'zzmm',
+  'name': '党员'
+},
+{
+  'id': '10',
+  'type': 'zzmm',
+  'name': '群众'
+},
+{
+  'id': '11',
+  'type': 'xb',
+  'name': '男'
+},
+{
+  'id': '12',
+  'type': 'xb',
+  'name': '女'
+},
+{
+  'id': '13',
+  'type': 'xswz',
+  'name': '置顶'
+},
+{
+  'id': '14',
+  'type': 'xswz',
+  'name': '其他'
+},
+{
+  'id': '15',
+  'type': 'gglx',
+  'name': '离校公告'
+},
+{
+  'id': '16',
+  'type': 'jszlx',
+  'name': '所有人'
+},
+{
+  'id': '17',
+  'type': 'jszlx',
+  'name': '所有学生'
+},
+{
+  'id': '18',
+  'type': 'jszlx',
+  'name': '所有教职工'
+}]
+
+export default{
+  getDicList: config => {
+    const { type } = param2Obj(config.url)
+    const mockList = deptList.filter(item => {
+      if (type && item.type !== type) return false
+      return true
+    })
+
+    return {
+      items: mockList,
+      code: 200
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/index.js b/leave-school-vue/src/mock/index.js
new file mode 100644
index 0000000..1e9f075
--- /dev/null
+++ b/leave-school-vue/src/mock/index.js
@@ -0,0 +1,90 @@
+import Mock from 'mockjs'
+import loginApi from './login'
+import departmentApi from './department'
+import menulistApi from './menulist'
+import majorApi from './major'
+import classApi from './class'
+import dicApi from './dictionary'
+import schoolyearApi from './schoolyear'
+import auditscopeApi from './auditscope'
+import autoaudittypeApi from './autoaudittype'
+import rostersyncinterfaceApi from './rostersyncinterface'
+import departmentleaderApi from './departmentleader'
+import instructorApi from './instructor'
+import newspublishApi from './newspublish'
+
+// 登录
+Mock.mock(/\/api\/login\/login/, 'post', loginApi.loginByUsername)
+Mock.mock(/\/api\/system\/user\/info/, 'get', loginApi.getUserInfo)
+Mock.mock(/\/api\/login\/logout-api/, 'post', loginApi.logout)
+
+// 数据字典
+Mock.mock(/\/api\/system\/dictionary\/getdiclist/, 'get', dicApi.getDicList)
+
+// 菜单列表
+Mock.mock(/\/api\/system\/menu\/list/, 'get', menulistApi.getMenuList)
+
+// 院系部门管理
+Mock.mock(/\/api\/system\/department\/list-api/, 'get', departmentApi.getList)
+Mock.mock(/\/api\/system\/department\/all-list/, 'get', departmentApi.getAllList)
+Mock.mock(/\/api\/system\/department\/create-department/, 'post', departmentApi.createData)
+Mock.mock(/\/api\/system\/department\/delete-department/, 'delete', departmentApi.deleteData)
+Mock.mock(/\/api\/system\/department\/get-item/, 'get', departmentApi.getItem)
+
+// 专业管理
+Mock.mock(/\/api\/system\/major\/list-api/, 'get', majorApi.getList)
+Mock.mock(/\/api\/system\/major\/create-major/, 'post', majorApi.createData)
+Mock.mock(/\/api\/system\/major\/delete-major/, 'delete', majorApi.deleteData)
+Mock.mock(/\/api\/system\/major\/get-item/, 'get', majorApi.getItem)
+Mock.mock(/\/api\/system\/major\/list-byyx-api/, 'get', majorApi.getZyListByYx)
+
+// 班级管理
+Mock.mock(/\/api\/system\/class\/list-api/, 'get', classApi.getList)
+Mock.mock(/\/api\/system\/class\/all-list/, 'get', classApi.getAllList)
+Mock.mock(/\/api\/system\/class\/create-class/, 'post', classApi.createData)
+Mock.mock(/\/api\/system\/class\/delete-class/, 'delete', classApi.deleteData)
+Mock.mock(/\/api\/system\/class\/get-item/, 'get', classApi.getItem)
+
+// 学年管理
+Mock.mock(/\/api\/system\/schoolyear\/list-api/, 'get', schoolyearApi.getList)
+Mock.mock(/\/api\/system\/schoolyear\/create-schoolyear/, 'post', schoolyearApi.createData)
+Mock.mock(/\/api\/system\/schoolyear\/delete-schoolyear/, 'delete', schoolyearApi.deleteData)
+Mock.mock(/\/api\/system\/schoolyear\/get-item/, 'get', schoolyearApi.getItem)
+
+// 名单同步接口设置
+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)
+Mock.mock(/\/api\/system\/rostersyncinterface\/get-item/, 'get', rostersyncinterfaceApi.getItem)
+
+// 审核学生范围控制
+Mock.mock(/\/api\/system\/auditscope\/list-api/, 'get', auditscopeApi.getList)
+Mock.mock(/\/api\/system\/auditscope\/create-auditscope/, 'post', auditscopeApi.createData)
+Mock.mock(/\/api\/system\/auditscope\/delete-auditscope/, 'delete', auditscopeApi.deleteData)
+Mock.mock(/\/api\/system\/auditscope\/get-item/, 'get', auditscopeApi.getItem)
+
+// 离校自动审核类型设置
+Mock.mock(/\/api\/system\/autoaudittype\/list-api/, 'get', autoaudittypeApi.getList)
+Mock.mock(/\/api\/system\/autoaudittype\/create-autoaudittype/, 'post', autoaudittypeApi.createData)
+Mock.mock(/\/api\/system\/autoaudittype\/delete-autoaudittype/, 'delete', autoaudittypeApi.deleteData)
+Mock.mock(/\/api\/system\/autoaudittype\/get-item/, 'get', autoaudittypeApi.getItem)
+
+// 学院负责人信息管理
+Mock.mock(/\/api\/workteam\/departmentleader\/list-api/, 'get', departmentleaderApi.getList)
+Mock.mock(/\/api\/workteam\/departmentleader\/create-departmentleader/, 'post', departmentleaderApi.createData)
+Mock.mock(/\/api\/workteam\/departmentleader\/delete-departmentleader/, 'delete', departmentleaderApi.deleteData)
+Mock.mock(/\/api\/workteam\/departmentleader\/get-item/, 'get', departmentleaderApi.getItem)
+
+// 辅导员信息管理
+Mock.mock(/\/api\/workteam\/instructor\/list-api/, 'get', instructorApi.getList)
+Mock.mock(/\/api\/workteam\/instructor\/create-instructor/, 'post', instructorApi.createData)
+Mock.mock(/\/api\/workteam\/instructor\/delete-instructor/, 'delete', instructorApi.deleteData)
+Mock.mock(/\/api\/workteam\/instructor\/get-item/, 'get', instructorApi.getItem)
+
+// 院系部门管理
+Mock.mock(/\/api\/news\/newspublish\/list-api/, 'get', newspublishApi.getList)
+Mock.mock(/\/api\/news\/newspublish\/create-newspublish/, 'post', newspublishApi.createData)
+Mock.mock(/\/api\/news\/newspublish\/delete-newspublish/, 'delete', newspublishApi.deleteData)
+Mock.mock(/\/api\/news\/newspublish\/get-item/, 'get', newspublishApi.getItem)
+
+export default Mock
diff --git a/leave-school-vue/src/mock/instructor.js b/leave-school-vue/src/mock/instructor.js
new file mode 100644
index 0000000..0f48407
--- /dev/null
+++ b/leave-school-vue/src/mock/instructor.js
@@ -0,0 +1,76 @@
+import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const instructorList = Mock.mock({
+  'list|50': [{
+    'gh': '@increment',
+    'xm': '@cword(2, 3)',
+    'sdbj': '@cword(6, 15)',
+    'bjzrs': '@integer(60, 100)',
+    'szyx': '@cword(5,7)',
+    'sfzr|1': ['是', '否']
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { gh, xm, yx, bjzrs, sfzr, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const mockList = instructorList.filter(item => {
+      if (gh && item.gh + '' !== gh + '') return false
+      if (xm && item.xm !== xm) return false
+      if (yx && item.yx !== yx) return false
+      if (bjzrs && item.bjzrs !== bjzrs) return false
+      if (sfzr && item.sfzr !== sfzr) 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 = instructorList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const instructor = JSON.parse(config.body)
+    if (!instructor.id) {
+      instructor.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      instructorList.unshift(instructor)
+    } else {
+      for (let i = 0; i < instructorList.length; i++) {
+        if (instructorList[i].id + '' === instructor.id + '') {
+          instructorList.splice(i, 1, instructor)
+          break
+        }
+      }
+    }
+    return {
+      item: instructor,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const instructor = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < instructorList.length; i++) {
+      if (instructorList[i].id + '' === instructor.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      instructorList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/login.js b/leave-school-vue/src/mock/login.js
new file mode 100644
index 0000000..baa100d
--- /dev/null
+++ b/leave-school-vue/src/mock/login.js
@@ -0,0 +1,33 @@
+import { param2Obj } from '@/utils'
+
+const userMap = {
+  admin: {
+    data: {
+      roles: ['admin'],
+      token: 'admin',
+      introduction: '我是超级管理员',
+      avatar: 'https://cn.vuejs.org/images/logo.png',
+      name: 'Super Admin'
+    },
+    code: 200
+  }
+}
+export default {
+  loginByUsername: config => {
+    const { username } = JSON.parse(config.body)
+    return userMap[username]
+  },
+  getUserInfo: config => {
+    const { token } = param2Obj(config.url)
+    if (userMap[token]) {
+      return userMap[token]
+    } else {
+      return false
+    }
+  },
+  logout: () => {
+    return {
+      code: 200
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/major.js b/leave-school-vue/src/mock/major.js
new file mode 100644
index 0000000..fe9b977
--- /dev/null
+++ b/leave-school-vue/src/mock/major.js
@@ -0,0 +1,86 @@
+import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const majorList = Mock.mock({
+  'list|350': [{
+    'id': '@increment',
+    'zydm': '000@id',
+    'zymc': '@cword(6, 15)',
+    'sfky|1': ['可用', '不可用'],
+    'sfkycode|1': ['1', '0'],
+    'ssyx|1': ['教育学院', '经管学院', '人文学院', '数学学院', '计算机学院', '电子学院', '电气学院', '生命科学院'],
+    'ssyxid|1': ['1', '2', '3', '4', '5', '6', '7', '8'],
+    'sszygb|1': ['计算机', '哲学']
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { zydm, zymc, sfky, ssyx, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const mockList = majorList.filter(item => {
+      if (zydm && item.zydm !== zydm) return false
+      if (zymc && item.zymc !== zymc) return false
+      if (sfky && item.sfkycode !== sfky) return false
+      if (ssyx && item.ssyxid !== ssyx) 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
+    }
+  },
+  getZyListByYx: config => {
+    const { yx } = param2Obj(config.url)
+    const mockList = majorList.filter(item => item.ssyxid === yx)
+
+    return {
+      list: mockList,
+      code: 200
+    }
+  },
+  getItem: config => {
+    const { id } = param2Obj(config.url)
+    const mockList = majorList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const major = JSON.parse(config.body)
+    if (!major.id) {
+      major.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      majorList.unshift(major)
+    } else {
+      for (let i = 0; i < majorList.length; i++) {
+        if (majorList[i].id + '' === major.id + '') {
+          majorList.splice(i, 1, major)
+          break
+        }
+      }
+    }
+    return {
+      item: major,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const major = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < majorList.length; i++) {
+      if (majorList[i].id + '' === major.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      majorList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/menulist.js b/leave-school-vue/src/mock/menulist.js
new file mode 100644
index 0000000..7453cd9
--- /dev/null
+++ b/leave-school-vue/src/mock/menulist.js
@@ -0,0 +1,101 @@
+/* Layout */
+// import Layout from '../views/layout/Layout'
+
+const menuList = [
+  {
+    path: '/dictionary',
+    code: 'dictionary',
+    meta: { title: '数据字典管理', icon: 'dictionary' },
+    children: [
+      {
+        path: 'department',
+        code: 'Department',
+        resource: '/views/systemmanagement/department/index',
+        meta: { title: '院系部门管理', icon: 'department' }
+      },
+      {
+        path: 'major',
+        code: 'Major',
+        resource: '/views/systemmanagement/major/index',
+        meta: { title: '专业管理', icon: 'major' }
+      },
+      {
+        path: 'class',
+        code: 'Class',
+        resource: '/views/systemmanagement/class/index',
+        meta: { title: '班级管理', icon: 'class' }
+      },
+      {
+        path: 'schoolyear',
+        code: 'SchoolYear',
+        resource: '/views/systemmanagement/schoolyear/index',
+        meta: { title: '学年管理', icon: 'schoolyear' }
+      },
+      {
+        path: 'rostersyncinterface',
+        code: 'RosterSyncInterface',
+        resource: '/views/systemmanagement/rostersyncinterface/index',
+        meta: { title: '名单同步接口设置', icon: 'rostersyncinterface' }
+      },
+      {
+        path: 'auditscope',
+        code: 'AuditScope',
+        resource: '/views/systemmanagement/auditscope/index',
+        meta: { title: '审核学生范围控制', icon: 'auditscope' }
+      },
+      {
+        path: 'autoaudittype',
+        code: 'AutoAuditType',
+        resource: '/views/systemmanagement/autoaudittype/index',
+        meta: { title: '离校自动审核类型设置', icon: 'autoaudittype' }
+      }
+    ]
+  },
+  {
+    path: '/workteam',
+    code: 'workteam',
+    meta: { title: '工作队伍管理', icon: 'workteam' },
+    children: [
+      {
+        path: 'departmentleader',
+        code: 'Departmentleader',
+        resource: '/views/workteam/departmentleader/index',
+        meta: { title: '学院负责人信息管理', icon: 'departmentleader' }
+      },
+      {
+        path: 'instructor',
+        code: 'Instructor',
+        resource: '/views/workteam/instructor/index',
+        meta: { title: '辅导员信息管理', icon: 'instructor' }
+      }
+    ]
+  },
+  {
+    path: '/news',
+    code: 'news',
+    meta: { title: '新闻公告管理', icon: 'news' },
+    children: [
+      {
+        path: 'newspublish',
+        code: 'NewsPublish',
+        resource: '/views/news/newspublish/index',
+        meta: { title: '新闻公告发布', icon: 'newspublish' }
+      },
+      {
+        path: 'newview',
+        code: 'NewsView',
+        resource: '/views/news/newview/index',
+        meta: { title: '新闻公告查看', icon: 'newview' }
+      }
+    ]
+  }
+]
+
+export default{
+  getMenuList: config => {
+    return {
+      items: menuList,
+      code: 200
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/newspublish.js b/leave-school-vue/src/mock/newspublish.js
new file mode 100644
index 0000000..2c4d8f3
--- /dev/null
+++ b/leave-school-vue/src/mock/newspublish.js
@@ -0,0 +1,84 @@
+import Mock from 'mockjs'
+import { param2Obj, parseTime } from '@/utils'
+
+const newspublishList = Mock.mock({
+  'list|26': [{
+    'id': '@increment',
+    'ggbt': '@cword(6, 15)',
+    'gglx': '离校公告',
+    'jszlx|1': ['所有学生', '所有人', '所有教职工'],
+    'sfky|1': ['可用', '不可用'],
+    'fbqssj': '2018-06-28',
+    'fbjssj': '2018-06-28',
+    'xswz|1': ['其它', '置顶'],
+    'jlckzt': '需要',
+    'djs': '@integer(60, 100)',
+    'fbr': 'admin',
+    'fbrq': '2018-08-08'
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { ggbt, fbqssj, fbjssj, sfky, xswz, jlckzt, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
+    const mockList = newspublishList.filter(item => {
+      if (ggbt && item.ggbt !== ggbt) return false
+      if (fbqssj && item.fbqssj !== fbqssj) return false
+      if (fbjssj && item.fbjssj !== fbjssj) return false
+      if (sfky && item.sfky !== sfky) return false
+      if (xswz && item.xswz !== xswz) return false
+      if (jlckzt && item.jlckzt !== jlckzt) 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 = newspublishList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const newspublish = JSON.parse(config.body)
+    newspublish.cjsj = parseTime(new Date(), '{y}-{m}-{d}')
+    if (!newspublish.id) {
+      newspublish.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      newspublishList.unshift(newspublish)
+    } else {
+      for (let i = 0; i < newspublishList.length; i++) {
+        if (newspublishList[i].id + '' === newspublish.id + '') {
+          newspublishList.splice(i, 1, newspublish)
+          break
+        }
+      }
+    }
+    return {
+      item: newspublish,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const newspublish = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < newspublishList.length; i++) {
+      if (newspublishList[i].id + '' === newspublish.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      newspublishList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/rostersyncinterface.js b/leave-school-vue/src/mock/rostersyncinterface.js
new file mode 100644
index 0000000..3a7259c
--- /dev/null
+++ b/leave-school-vue/src/mock/rostersyncinterface.js
@@ -0,0 +1,76 @@
+import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const rostersyncinterfaceList = Mock.mock({
+  'list|50': [{
+    'id': '@increment',
+    'dm': '@word(4)',
+    'mc': '@cword(6, 15)',
+    'tj': '@word(15)',
+    'px': '@word(15)',
+    'gglx': '@word(15)'
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { dm, mc, tj, px, gglx, 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
+      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 = rostersyncinterfaceList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const rostersyncinterface = JSON.parse(config.body)
+    if (!rostersyncinterface.id) {
+      rostersyncinterface.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      rostersyncinterfaceList.unshift(rostersyncinterface)
+    } else {
+      for (let i = 0; i < rostersyncinterfaceList.length; i++) {
+        if (rostersyncinterfaceList[i].id + '' === rostersyncinterface.id + '') {
+          rostersyncinterfaceList.splice(i, 1, rostersyncinterface)
+          break
+        }
+      }
+    }
+    return {
+      item: rostersyncinterface,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const rostersyncinterface = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < rostersyncinterfaceList.length; i++) {
+      if (rostersyncinterfaceList[i].id + '' === rostersyncinterface.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      rostersyncinterfaceList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
diff --git a/leave-school-vue/src/mock/schoolyear.js b/leave-school-vue/src/mock/schoolyear.js
new file mode 100644
index 0000000..7e37aa9
--- /dev/null
+++ b/leave-school-vue/src/mock/schoolyear.js
@@ -0,0 +1,70 @@
+import Mock from 'mockjs'
+import { param2Obj } from '@/utils'
+
+const schoolyearList = Mock.mock({
+  'list|26': [{
+    'id': '@increment',
+    'xndm|1': ['2016', '2017', '2018'],
+    'xnmc': '@xndm@cword(6, 15)'
+  }]
+}).list
+
+export default{
+  getList: config => {
+    const { xndm, xnmc, 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
+      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 = schoolyearList.filter(item => item.id + '' === id + '')
+    return {
+      data: mockList.length > 0 ? mockList[0] : null,
+      code: 200
+    }
+  },
+  createData: config => {
+    const schoolyear = JSON.parse(config.body)
+    if (!schoolyear.id) {
+      schoolyear.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
+      schoolyearList.unshift(schoolyear)
+    } else {
+      for (let i = 0; i < schoolyearList.length; i++) {
+        if (schoolyearList[i].id + '' === schoolyear.id + '') {
+          schoolyearList.splice(i, 1, schoolyear)
+          break
+        }
+      }
+    }
+    return {
+      item: schoolyear,
+      code: 200
+    }
+  },
+  deleteData: config => {
+    const schoolyear = JSON.parse(config.body)
+    let index = -1
+    for (let i = 0; i < schoolyearList.length; i++) {
+      if (schoolyearList[i].id + '' === schoolyear.id + '') {
+        index = i
+        break
+      }
+    }
+    if (index > -1) {
+      schoolyearList.splice(index, 1)
+    }
+    return {
+      code: 200
+    }
+  }
+}
