nodejs vue-admin-template-master(实训234)

#学校管理篇


#一、后台三步骤:

##1、在models目录下添加school.js:

projectName/db/models/school.js:

```

const mongoose = require('mongoose')

const feld={

   name: String,

   //人物标签

   where:String,

   leixing: String

}

//自动添加更新时间创建时间:

let personSchema = new mongoose.Schema(feld,{timestamps: {createdAt: 'created', updatedAt: 'updated'}})

module.exports=mongoose.model('School',personSchema)

```

##2、在routes目录下添加school.js:

projectName/routes/school.js:

```

const router = require('koa-router')()

//建立模块,require(“../db/models/文件名”)

let Model =require("../db/models/school");

router.prefix('/school')


router.get('/', function (ctx, next) {

   ctx.body = 'this is a users response!'

})


//数据库增删改查

router.post('/add', async function (ctx,next) {

   console.log(ctx.request.body)

   let model = new Model(ctx.request.body);

   model = await model.save();

   console.log('user',model)

   ctx.body = model

})


router.post('/find', async function (ctx,next) {

   let models = await Model.

   find({})

   ctx.body = models

})


router.post('/get', async function (ctx,next) {

   // let users = await User.

   // find({})

   console.log(ctx.request.body)

   let model = await Model.find(ctx.request.body)

   console.log(model)

   ctx.body = model

})


router.post('/update', async function (ctx,next) {

   console.log(ctx.request.body)

   let pbj = await Model.update({ _id: ctx.request.body._id },ctx.request.body);

   ctx.body = pbj

})

router.post('/delete', async function (ctx,next) {

   console.log(ctx.request.body)

   await Model.remove({ _id: ctx.request.body._id });

   ctx.body = 'shibai '

})

module.exports = router

```

##3、在app.js中加上school模块的路由改为以下代码:

```

const Koa = require('koa')

const app = new Koa()

const views = require('koa-views')

const json = require('koa-json')

const onerror = require('koa-onerror')

const bodyparser =require('koa-bodyparser')

const logger = require('koa-logger')



const mongoose = require('mongoose')

const dbconfig = require('./db/config')

mongoose.connect(dbconfig.dbs,{useNewUrlParser:true,useUnifiedTopology: true})

const db = mongoose.connection

db.on('error',console.error.bind(console,'connectionerror:'));

db.once('open',function () {

 console.log('mongoose连接成功')

});

// error handler

onerror(app)


// middlewares

app.use(bodyparser({

 enableTypes:['json', 'form', 'text']

}))

app.use(json())

app.use(logger())

app.use(require('koa-static')(__dirname +'/public'))


app.use(views(__dirname + '/views', {

 extension: 'pug'

}))


// logger

app.use(async (ctx, next) => {

 const start = new Date()

 await next()

 const ms = new Date() - start

 console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)

})




const index = require('./routes/index')

app.use(index.routes(),index.allowedMethods())

const users = require('./routes/users')

app.use(users.routes(),users.allowedMethods())

const school = require('./routes/school')

app.use(school.routes(),school.allowedMethods())

// error-handling


// routes



app.on('error', (err, ctx) => {

 console.error('server error', err, ctx)

});


module.exports = app

```

#二、前台三步骤:

##在src/views目录下添加school目录(模块),如下:


![前端布局的school模块](https://upload-images.jianshu.io/upload_images/23950256-bfa0fdf0cda1d707.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


##1、在school目录下添加editor.vue:(editor.vue为编辑文件,用于创建学校记录)


vue-admin-template/src/views/school/editor.vue:

```













       立即创建

       取消






 import { mapGetters } from 'vuex'


 export default {

   name: 'school',

   computed: {

     ...mapGetters([

       'name'

     ])

   },

   data(){

     return{

       apiModel:'school',

       form:{}

     }

   },

   methods:{

     onSubmit(){

       console.log('222:', 222)

       if(this.form._id){

         this.$http.post(`/api/${this.apiModel}/update`,this.form).then(res =>{

           console.log('bar:', res)

           this.$router.push({path:this.apiModel})

           this.form={}

         })

       }else

       {

         this.$http.post('/api/'+this.apiModel+'/add',this.form).then(res => {

           console.log('bar:', res)

           this.$router.push({path:this.apiModel})

           this.form={}

         })

       }

     }

   },

   mounted() {

     if(this.$route.query._id){

       this.$http.post('/api/'+this.apiModel+'/get',{_id:this.$route.query._id}).then(res=> {

         if(res&&res.length>0){

           this.form = res[0]

         }

       })

     }

    }

  }


 .dashboard {

   &-container {

     margin: 30px;

    }

   &-text {

     font-size: 30px;

     line-height: 46px;

    }

  }

```



##2、在school目录下添加index.vue:(index.vue为目录文件,用于显示结果)

vue-admin-template/src/views/school/index.vue:

```



     :data="users"

     style="width: 100%"

     :row-class-name="tableRowClassName">







       prop="name"

       label="学校名称"

       width="180">



       prop="where"

       label="位置"

       width="180">



       prop="leixing"

       label="类型">





           size="mini"

           @click="handleEdit(scope.$index, scope.row)">编辑



           size="mini"

           type="danger"

           @click="handleDelete(scope.$index, scope.row)">删除







 import { mapGetters } from 'vuex'


 export default {

   name: 'school',

   computed: {

     ...mapGetters([

       'name'

     ])

   },

   data() {

     return {

       apiModel:'school',

       users: {}

     }

   },

   methods: {

     onSubmit() {

       console.log(123434)

     },

     handleEdit(index, item) {

       this.$router.push({ path: '/'+this.apiModel+'/editor', query:{_id:item._id} })

     },

     handleDelete(index, item) {

       this.$http.post('/api/'+this.apiModel+'/delete', item).then(res => {

         console.log('res:', res)

         this.findUser()

       })


     },

     findUser(){

       this.$http.post('/api/'+this.apiModel+'/find', this.user).then(res =>{

         console.log('res:', res)

         this.users = res

       })

     }

   },

   mounted() {

     this.findUser()

    }

  }


  .dashboard{

   &-container {

     margin: 30px;

    }


   &-text {

     font-size: 30px;

     line-height: 46px;

    }

  }

```

##3、在router下的index.js中添加school模块的路由:

vue-admin-template/src/router/index.js:

```

import Vue from 'vue'

import Router from 'vue-router'


Vue.use(Router)


/* Layout */

import Layout from '@/layout'


/**

 *Note: sub-menu only appear when route children.length >= 1

 *Detail see:https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html

 *

 *hidden: true                   if settrue, item will not show in the sidebar(default is false)

 *alwaysShow: true               if settrue, will always show the root menu

 *                                if not setalwaysShow, when item has more than one children route,

 *                                it will becomesnested mode, otherwise not show the root menu

 *redirect: noRedirect           if setnoRedirect will no redirect in the breadcrumb

 *name:'router-name'             the nameis used by (must set!!!)

 *meta : {

   roles: ['admin','editor']   control the page roles (you can set multiple roles)

   title: 'title'               thename show in sidebar and breadcrumb (recommend set)

   icon: 'svg-name'             the icon show in the sidebar

   breadcrumb: false            ifset false, the item will hidden in breadcrumb(default is true)

   activeMenu: '/example/list'  ifset path, the sidebar will highlight the path you set

  }

 */


/**

 *constantRoutes

 * abase page that does not have permission requirements

 *all roles can be accessed

 */

export const constantRoutes = [

  {

   path: '/login',

   component: () => import('@/views/login/index'),

   hidden: true

  },


  {

   path: '/school',

   component: Layout,

   meta: { title: '学校管理', icon: 'example' },

   redirect: 'school',

   children: [{

     path: 'school',

     name: 'school',

     component: () => import('@/views/school'),

     meta: { title: '学校管理', icon: 'school' }

   },

     {

        path: 'editor',

       name: 'editor',

       component: () => import('@/views/school/editor'),

       meta: { title: '添加学校', icon: 'school' }

     }]

  },


  {

   path: '/404',

   component: () => import('@/views/404'),

   hidden: true

  },


  {

   path: '/',

   component: Layout,

   redirect: '/dashboard',

   children: [{

     path: 'dashboard',

     name: 'Dashboard',

     component: () => import('@/views/dashboard/index'),

     meta: { title: 'Dashboard', icon: 'dashboard' }

   }]

  },

  //404 page must be placed at the end !!!

  {path: '*', redirect: '/404', hidden: true }

]


const createRouter = () => new Router({

  //mode: 'history', // require service support

 scrollBehavior: () => ({ y: 0 }),

 routes: constantRoutes

})


const router = createRouter()


// Detail see:https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465

export function resetRouter() {

 const newRouter = createRouter()

 router.matcher = newRouter.matcher // reset router

}


export default router

```

#实训3

#学院管理篇(可将学校与学院关联起来)

#一、从后端(projectName)添加学院模块

##1、在models目录下添加academy.js:

projectName/db/models/academy.js:

```

const mongoose = require('mongoose')

const Schema= mongoose.Schema

const feld={

   name: String,

   //人物标签

   major:String,

   renshu: Number,

   school : { type: Schema.Types.ObjectId, ref: 'School' }

}

//自动添加更新时间创建时间:

let schema = new Schema(feld, {timestamps:{createdAt: 'created', updatedAt: 'updated'}})

module.exports=mongoose.model('Academy',schema)

```

##2、在routes目录下添加academy.js:

projectName/routes/academy.js:

```

const router = require('koa-router')()

let Model = require("../db/models/academy");

router.prefix('/academy')


router.get('/', function (ctx, next) {

   ctx.body = 'this is a users response!'

})


router.post('/add', async function (ctx,next) {

   console.log(ctx.request.body)

   let model = new Model(ctx.request.body);

   model = await model.save();

   console.log('user',model)

   ctx.body = model

})


router.post('/find', async function (ctx,next) {

   let models = await Model.

   find({}).populate('school')

   ctx.body = models

})


router.post('/get', async function (ctx,next) {

   // let users = await User.

   // find({})

   console.log(ctx.request.body)

   let model = await Model.find(ctx.request.body)

   console.log(model)

   ctx.body = model

})


router.post('/update', async function (ctx,next) {

   console.log(ctx.request.body)

   let pbj = await Model.update({ _id: ctx.request.body._id },ctx.request.body);

   ctx.body = pbj

})

router.post('/delete', async function (ctx,next) {

   console.log(ctx.request.body)

   await Model.remove({ _id: ctx.request.body._id });

   ctx.body = 'shibai '

})

module.exports = router

```

##3、在app.js中加上academy模块的路由改为如下:

projectName/app.js:

```

const Koa = require('koa')

const app = new Koa()

const views = require('koa-views')

const json = require('koa-json')

const onerror = require('koa-onerror')

const bodyparser =require('koa-bodyparser')

const logger = require('koa-logger')



const mongoose = require('mongoose')

const dbconfig = require('./db/config')

mongoose.connect(dbconfig.dbs,{useNewUrlParser:true,useUnifiedTopology: true})

const db = mongoose.connection

db.on('error',console.error.bind(console,'connectionerror:'));

db.once('open',function () {

 console.log('mongoose连接成功')

});

// error handler

onerror(app)


// middlewares

app.use(bodyparser({

 enableTypes:['json', 'form', 'text']

}))

app.use(json())

app.use(logger())

app.use(require('koa-static')(__dirname +'/public'))


app.use(views(__dirname + '/views', {

 extension: 'pug'

}))


// logger

app.use(async (ctx, next) => {

 const start = new Date()

 await next()

 const ms = new Date() - start

 console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)

})



// routes

const index = require('./routes/index')

app.use(index.routes(), index.allowedMethods())

const users = require('./routes/users')

app.use(users.routes(),users.allowedMethods())

const school = require('./routes/school')

app.use(school.routes(),school.allowedMethods())

const academy = require('./routes/academy')

app.use(academy.routes(),academy.allowedMethods())

// error-handling





app.on('error', (err, ctx) => {

 console.error('server error', err, ctx)

});


module.exports = app

```

#二、从前端(vue-admin-template)添加学院模块

##1、在src/views目录下添加academy目录(模块)

![添加目录](https://upload-images.jianshu.io/upload_images/23950256-4257226514ad4629.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


在academy目录下添加editor.vue:


vue-admin-template/src/views/academy/editor.vue:

```
















           v-for="item in options"

           :key="item._id"

           :label="item.name"

           :value="item._id">







       立即创建

       取消






 import { mapGetters } from 'vuex'


 export default {

   name: 'academy',

   computed: {

     ...mapGetters([

       'name'

     ])

   },

   data(){

     return{

       options: [


       ],

       apiModel:'academy',

       form:{}

     }

   },

   methods:{

     onSubmit(){

       console.log('222:', 222)

       if(this.form._id){

         this.$http.post(`/api/${this.apiModel}/update`,this.form).then(res =>{

           console.log('bar:', res)

           this.$router.push({path:this.apiModel})

           this.form={}

         })

       }else

       {

         this.$http.post('/api/'+this.apiModel+'/add',this.form).then(res => {

           console.log('bar:', res)

           this.$router.push({path:this.apiModel})

           this.form={}

         })

       }

     }

   },

   mounted() {

     if(this.$route.query._id){

       this.$http.post('/api/'+this.apiModel+'/get',{_id:this.$route.query._id}).then(res=> {

         if(res&&res.length>0){

           this.form = res[0]

         }

       })

     }


     this.$http.post('/api/school/find').then(res => {

       if(res&&res.length>0){

         this.options = res

         console.log('res:', res)

       }

     })

    }

  }


 .dashboard {

   &-container {

     margin: 30px;

    }

   &-text {

     font-size: 30px;

     line-height: 46px;

    }

  }

```

在academy目录下添加index.vue:


vue-admin-template/src/views/academy/index.vue:

```



     :data="users"

     style="width: 100%"

     :row-class-name="tableRowClassName">



       prop="_id"

       label="学院_id"

       width="180">



       prop="name"

       label="学院名称"

       width="180">



       prop="major"

       label="专业"

       width="180">



       prop="renshu"

       label="人数">




       prop="school"

       label="学校名称"

       width="180">




              :type="scope.row.school.name=== '深信' ? 'primary' : 'success'"

             disable-transitions>{{scope.row.school.name}}








           size="mini"

           @click="handleEdit(scope.$index, scope.row)">编辑



           size="mini"

           type="danger"

           @click="handleDelete(scope.$index, scope.row)">删除







 import { mapGetters } from 'vuex'


 export default {

   name: 'academy',

   computed: {

     ...mapGetters([

       'name'

     ])

   },

   data() {

     return {

       apiModel:'academy',

       users: {}

     }

   },

   methods: {

     onSubmit() {

       console.log(123434)

     },

     handleEdit(index, item) {

       this.$router.push({ path: '/'+this.apiModel+'/editor', query:{_id:item._id} })

     },

     handleDelete(index, item) {

       this.$http.post('/api/'+this.apiModel+'/delete', item).then(res => {

         console.log('res:', res)

         this.findUser()

       })


     },

     findUser(){

       this.$http.post('/api/'+this.apiModel+'/find', this.user).then(res =>{

         console.log('res:', res)

         this.users = res

       })

     }

   },

   mounted() {

     this.findUser()

    }

  }


 .dashboard {

   &-container {

     margin: 30px;

    }


   &-text {

     font-size: 30px;

     line-height: 46px;

    }

  }

```

#2、在router下的index.js中添加academy模块的路由修改为:

vue-admin-template/src/router/index.js:

```

import Vue from 'vue'

import Router from 'vue-router'


Vue.use(Router)


/* Layout */

import Layout from '@/layout'


/**

 *Note: sub-menu only appear when route children.length >= 1

 *Detail see:https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html

 *

 *hidden: true                   if settrue, item will not show in the sidebar(default is false)

 *alwaysShow: true               if settrue, will always show the root menu

 *                                if not setalwaysShow, when item has more than one children route,

 *                                it will becomesnested mode, otherwise not show the root menu

 *redirect: noRedirect           if setnoRedirect will no redirect in the breadcrumb

 *name:'router-name'             the nameis used by (must set!!!)

 *meta : {

   roles: ['admin','editor']   control the page roles (you can set multiple roles)

   title: 'title'               thename show in sidebar and breadcrumb (recommend set)

   icon: 'svg-name'             theicon show in the sidebar

   breadcrumb: false            ifset false, the item will hidden in breadcrumb(default is true)

   activeMenu: '/example/list'  ifset path, the sidebar will highlight the path you set

  }

 */


/**

 *constantRoutes

 * abase page that does not have permission requirements

 *all roles can be accessed

 */

export const constantRoutes = [

  {

   path: '/login',

   component: () => import('@/views/login/index'),

   hidden: true

  },


  {

   path: '/school',

   component: Layout,

   meta: { title: '学校管理', icon: 'example' },

   redirect: 'school',

   children: [{

     path: 'school',

     name: 'school',

     component: () => import('@/views/school'),

     meta: { title: '学校管理', icon: 'school' }

   },

     {

       path: 'editor',

       name: 'editor',

       component: () => import('@/views/school/editor'),

       meta: { title: '添加学校', icon: 'school' }

     }]

  },


  {

   path: '/academy',

   component: Layout,

   meta: { title: '学院管理', icon: 'example' },

   redirect: 'academy',

   children: [{

     path: 'academy',

     name: 'academy',

     component: () => import('@/views/academy'),

     meta: { title: '学院管理', icon: 'academy' }

   },

     {

       path: 'editor',

       name: 'editor',

       component: () => import('@/views/academy/editor'),

       meta: { title: '添加学院', icon: 'academy' }

     }]

  },


  {

   path: '/404',

   component: () => import('@/views/404'),

   hidden: true

  },


  {

   path: '/',

   component: Layout,

   redirect: '/dashboard',

   children: [{

     path: 'dashboard',

     name: 'Dashboard',

     component: () => import('@/views/dashboard/index'),

     meta: { title: 'Dashboard', icon: 'dashboard' }

    }]

  },

  //404 page must be placed at the end !!!

  {path: '*', redirect: '/404', hidden: true }

]


const createRouter = () => new Router({

  //mode: 'history', // require service support

 scrollBehavior: () => ({ y: 0 }),

 routes: constantRoutes

})


const router = createRouter()


// Detail see:https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465

export function resetRouter() {

 const newRouter = createRouter()

 router.matcher = newRouter.matcher // reset router

}


export default router

```

#实训4

#班级管理篇(可将学校、学院与班级关联起来)

#一、从后端(projectName)添加班级模块

##1、在models目录下添加classs.js:

projectName/db/models/classs.js:

```

const mongoose = require('mongoose')

const Schema= mongoose.Schema

const feld={

   name: String,

   //人物标签

   major:String,

   renshu: Number,

   school : { type: Schema.Types.ObjectId, ref: 'School' },

   academy : { type: Schema.Types.ObjectId, ref: 'Academy' }

}

//自动添加更新时间创建时间:

let personSchema = newmongoose.Schema(feld, {timestamps: {createdAt: 'created', updatedAt:'updated'}})

module.exports=mongoose.model('Classs',personSchema)

```

##2、在routes目录下添加classs.js:

projectName/routes/classs.js:

```

const router = require('koa-router')()

let Model =require("../db/models/classs");

router.prefix('/classs')


router.get('/', function (ctx, next) {

   ctx.body = 'this is a users response!'

})


router.post('/add', async function (ctx,next) {

   console.log(ctx.request.body)

   let model = new Model(ctx.request.body);

   model = await model.save();

   console.log('user',model)

   ctx.body = model

})


router.post('/find', async function (ctx,next) {

    letmodels = await Model.

   find({}).populate('academy').populate('school')

   ctx.body = models

})


router.post('/get', async function (ctx,next) {

   // let users = await User.

   // find({})

   console.log(ctx.request.body)

   let model = await Model.find(ctx.request.body)

   console.log(model)

   ctx.body = model

})


router.post('/update', async function (ctx,next) {

   console.log(ctx.request.body)

   let pbj = await Model.update({ _id: ctx.request.body._id },ctx.request.body);

   ctx.body = pbj

})

router.post('/delete', async function (ctx,next) {

   console.log(ctx.request.body)

   await Model.remove({ _id: ctx.request.body._id });

   ctx.body = 'shibai '

})

module.exports = router

```

##3在app.js中加上classs模块的路由:

projectName/app.js:

```

const Koa = require('koa')

const app = new Koa()

const views = require('koa-views')

const json = require('koa-json')

const onerror = require('koa-onerror')

const bodyparser = require('koa-bodyparser')

const logger = require('koa-logger')



const mongoose = require('mongoose')

const dbconfig = require('./db/config')

mongoose.connect(dbconfig.dbs,{useNewUrlParser:true,useUnifiedTopology: true})

const db = mongoose.connection

db.on('error',console.error.bind(console,'connectionerror:'));

db.once('open',function () {

 console.log('mongoose连接成功')

});

// error handler

onerror(app)


// middlewares

app.use(bodyparser({

 enableTypes:['json', 'form', 'text']

}))

app.use(json())

app.use(logger())

app.use(require('koa-static')(__dirname +'/public'))


app.use(views(__dirname + '/views', {

 extension: 'pug'

}))


// logger

app.use(async (ctx, next) => {

 const start = new Date()

 await next()

 const ms = new Date() - start

 console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)

})



// routes

const index = require('./routes/index')

app.use(index.routes(),index.allowedMethods())

const users = require('./routes/users')

app.use(users.routes(), users.allowedMethods())

const school = require('./routes/school')

app.use(school.routes(),school.allowedMethods())

const academy = require('./routes/academy')

app.use(academy.routes(),academy.allowedMethods())

const classs = require('./routes/classs')

app.use(classs.routes(),classs.allowedMethods())

// error-handling





app.on('error', (err, ctx) => {

 console.error('server error', err, ctx)

});


module.exports = app

```

#二、从前端(vue-admin-template)添加班级模块

##1、在src/views目录下添加classs目录(模块),


![添加](https://upload-images.jianshu.io/upload_images/23950256-d919a58d65a8d4a3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


在classs目录下添加editor.vue:


vue-admin-template/src/views/classs/editor.vue:

```






           v-for="item in schools"

           :key="item._id"

           :label="item.name"

           :value="item._id">








           v-for="item in academys"

           :key="item._id"

           :label="item.name"

           :value="item._id">














       立即创建

       取消





 import { mapGetters } from 'vuex'


 export default {

   name: 'classs',

   computed: {

     ...mapGetters([

       'name'

     ])

   },

   data(){

     return{

       schools:[],

       academys:[],

       //列表内容

       options: [

       ],

       apiModel:'classs',

       form:{}

     }

   },

   methods:{

     onSubmit(){

       if(this.form._id){

         this.$http.post(`/api/${this.apiModel}/update`,this.form).then(res =>{

           console.log('bar:', res)

           this.$router.push({path:this.apiModel})

           this.form={}

         })

       }else

       {

         this.$http.post('/api/'+this.apiModel+'/add',this.form).then(res => {

           console.log('bar:', res)

           this.$router.push({path:this.apiModel})

           this.form={}

         })

       }

     },

     schoolChange(val1){

       //显示学院选择栏目

       this.$http.post('/api/academy/get',{school:val1}).then(res => {

         if(res&&res.length>0){

           this.academys = res

           console.log('res:', res)

         }

       })

     }

   },

   mounted() {

     if(this.$route.query._id){

       this.$http.post('/api/'+this.apiModel+'/get',{_id:this.$route.query._id}).then(res=> {

         if(res&&res.length>0){

           this.form = res[0]

           this.schoolChange(this.form.school)

         }

       })

     }


     //显示学校选择栏目

     this.$http.post('/api/school/find').then(res => {

       if(res&&res.length>0){

         this.schools = res

         console.log('res:', res)

       }

     })

    }

  }


 .dashboard {

   &-container {

     margin: 30px;

    }

   &-text {

     font-size: 30px;

     line-height: 46px;

    }

  }

```

在classs目录下添加index.vue:


vue-admin-template/src/views/classs/index.vue:

```



     :data="users"

     style="width: 100%"

     :row-class-name="tableRowClassName">


       prop="name"

       label="班级名称"

       width="180">



       prop="level"

       label="专业"

       width="180">



       prop="renshu"

       label="人数">



     -->


       prop="school"

        label="学校名称"

       width="180">




              :type="scope.row.school.name=== '深圳信息职业技术学院' ? 'primary' : 'success'"

              disable-transitions>{{scope.row.school.name}}





       prop="academy"

       label="学院名称"

       width="180">




             :type="scope.row.academy.name === '软件学院' ?'primary' : 'success'"

             disable-transitions>{{scope.row.academy.name}}








           size="mini"

           @click="handleEdit(scope.$index, scope.row)">编辑



            size="mini"

           type="danger"

           @click="handleDelete(scope.$index, scope.row)">删除







 import { mapGetters } from 'vuex'


 export default {

   name: 'classs',

   computed: {

     ...mapGetters([

       'name'

     ])

   },

   data() {

     return {

       apiModel:'classs',

       users: {}

     }

   },

   methods: {

     onSubmit() {

       console.log(123434)

     },

     handleEdit(index, item) {

       this.$router.push({ path: '/'+this.apiModel+'/editor', query:{_id:item._id} })

     },

     handleDelete(index, item) {

       this.$http.post('/api/'+this.apiModel+'/delete', item).then(res => {

         console.log('res:', res)

         this.findUser()

       })


     },

     findUser(){

       this.$http.post('/api/'+this.apiModel+'/find', this.user).then(res =>{

         console.log('res:', res)

         this.users = res

       })

     }

   },

   mounted() {

     this.findUser()

    }

  }


 .dashboard {

   &-container {

     margin: 30px;

    }


   &-text {

     font-size: 30px;

     line-height: 46px;

    }

  }

```

#2、在router下的index.js中添加classs模块的路由:

vue-admin-template/src/router/index.js:

```

import Vue from 'vue'

import Router from 'vue-router'


Vue.use(Router)


/* Layout */

import Layout from '@/layout'


/**

 *Note: sub-menu only appear when route children.length >= 1

 *Detail see:https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html

 *

 *hidden: true                   if settrue, item will not show in the sidebar(default is false)

 *alwaysShow: true               if settrue, will always show the root menu

 *                                if not setalwaysShow, when item has more than one children route,

 *                                it will becomesnested mode, otherwise not show the root menu

 *redirect: noRedirect           if setnoRedirect will no redirect in the breadcrumb

 *name:'router-name'             the nameis used by (must set!!!)

 *meta : {

   roles: ['admin','editor']   control the page roles (you can set multiple roles)

   title: 'title'               thename show in sidebar and breadcrumb (recommend set)

   icon: 'svg-name'             theicon show in the sidebar

   breadcrumb: false            ifset false, the item will hidden in breadcrumb(default is true)

   activeMenu: '/example/list'  ifset path, the sidebar will highlight the path you set

  }

 */


/**

 *constantRoutes

 * abase page that does not have permission requirements

 *all roles can be accessed

 */

export const constantRoutes = [

  {

   path: '/login',

   component: () => import('@/views/login/index'),

   hidden: true

  },


  {

   path: '/school',

   component: Layout,

   meta: { title: '学校管理', icon: 'example' },

   redirect: 'school',

   children: [{

     path: 'school',

     name: 'school',

     component: () => import('@/views/school'),

     meta: { title: '学校管理', icon: 'school' }

   },

     {

       path: 'editor',

       name: 'editor',

       component: () => import('@/views/school/editor'),

       meta: { title: '添加学校', icon: 'school' }

     }]

  },


  {

   path: '/academy',

   component: Layout,

   meta: { title: '学院管理', icon: 'example' },

   redirect: 'academy',

   children: [{

     path: 'academy',

     name: 'academy',

     component: () => import('@/views/academy'),

     meta: { title: '学院管理', icon: 'academy' }

   },

     {

       path: 'editor',

       name: 'editor',

       component: () => import('@/views/academy/editor'),

       meta: { title: '添加学院', icon: 'academy' }

     }]

  },


  {

   path: '/classs',

   component: Layout,

   meta: { title: '班级管理', icon: 'example' },

   redirect: 'classs',

   children: [{

     path: 'classs',

     name: 'classs',

      component: () => import('@/views/classs'),

     meta: { title: '班级管理', icon: 'classs' }

   },

     {

       path: 'editor',

       name: 'editor',

       component: () => import('@/views/classs/editor'),

       meta: { title: '添加班级', icon: 'classs' }

     }]

  },


  {

   path: '/404',

   component: () => import('@/views/404'),

   hidden: true

  },


  {

   path: '/',

   component: Layout,

    redirect:'/dashboard',

   children: [{

     path: 'dashboard',

     name: 'Dashboard',

     component: () => import('@/views/dashboard/index'),

     meta: { title: 'Dashboard', icon: 'dashboard' }

   }]

  },

  //404 page must be placed at the end !!!

  {path: '*', redirect: '/404', hidden: true }

]


const createRouter = () => new Router({

  //mode: 'history', // require service support

 scrollBehavior: () => ({ y: 0 }),

 routes: constantRoutes

})


const router = createRouter()


// Detail see:https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465

export function resetRouter() {

 const newRouter = createRouter()

 router.matcher = newRouter.matcher // reset router

}


export default router

```

你可能感兴趣的:(nodejs vue-admin-template-master(实训234))