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

```

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 目标:创建班级管理模块(班级和学院、学校关联起来) 一、后台三步骤: 1、在db->models目录下创建clas...
    小甜甜甜甜椒阅读 340评论 0 0
  • 目标:创建学生管理模块(学生和班级、学院、学校关联起来) 一、后台三步骤: 1、在db->models目录下创建s...
    小甜甜甜甜椒阅读 206评论 0 0
  • 实训(实训四) projectName文件,在models目录下创建classs.js文件 const mongo...
    苏芷婷阅读 251评论 0 0
  • 目标:创建班级管理模块(班级和学院、学校关联起来) 一、后台三步骤: 1、打开projectName文件,在mod...
    不留遗憾_dd5b阅读 115评论 0 0
  • ### 1.安装 nodejs ### 2.安装 git ### 3.下载 [vue-element-admin]...
    gogogo_e6cf阅读 354评论 0 0