目录:
- 效果图
- 思路整理
- 目录结构
一、效果图
二、思路整理
1、管理页功能
- 新增用户
- 搜索用户
- 更新用户
- 删除用户
- 分页展示用户列表
2、分析页面组成
3、考虑组件设计
三、目录结构
3.1、目录结构
... -src -api ... -assets -css -common.css //编写公用的样式 -home.css -... -common -Form.vue //表单组件 -Table.vue //表格组件 -... -mock -users.js //模拟用户登录js -... -index.js -views -... -UserMange UserMange.vue //用户组件 -.... ....
3.2、编写mock数据 user.js

import Mock from 'mockjs' // get请求从config.url获取参数,post从config.body中获取参数 function param2Obj(url) { const search = url.split('?')[1] if (!search) { return {} } return JSON.parse( '{"' + decodeURIComponent(search) .replace(/"/g, '\\"') .replace(/&/g, '","') .replace(/=/g, '":"') + '"}' ) } let List = [] const count = 200 for (let i = 0; i < count; i++) { List.push( Mock.mock({ id: Mock.Random.guid(), name: Mock.Random.cname(), addr: Mock.mock('@county(true)'), 'age|18-60': 1, birth: Mock.Random.date(), sex: Mock.Random.integer(0, 1) }) ) } export default { /** * 获取列表 * 要带参数 name, page, limt; name可以不填, page,limit有默认值。 * @param name, page, limit * @return {{code: number, count: number, data: *[]}} */ getUserList: config => { const { name, page = 1, limit = 20 } = param2Obj(config.url) console.log('name:' + name, 'page:' + page, '分页大小limit:' + limit) const mockList = List.filter(user => { if (name && user.name.indexOf(name) === -1) return false return true }) const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1)) return { code: 20000, count: mockList.length, list: pageList } }, /** * 增加用户 * @param name, addr, age, birth, sex * @return {{code: number, data: {message: string}}} */ createUser: config => { const { name, addr, age, birth, sex } = JSON.parse(config.body) console.log(JSON.parse(config.body)) List.unshift({ id: Mock.Random.guid(), name: name, addr: addr, age: age, birth: birth, sex: sex }) return { code: 20000, data: { message: '添加成功' } } }, /** * 删除用户 * @param id * @return {*} */ deleteUser: config => { const { id } = param2Obj(config.url) if (!id) { return { code: -999, message: '参数不正确' } } else { List = List.filter(u => u.id !== id) return { code: 20000, message: '删除成功' } } }, /** * 批量删除 * @param config * @return {{code: number, data: {message: string}}} */ batchremove: config => { let { ids } = param2Obj(config.url) ids = ids.split(',') List = List.filter(u => !ids.includes(u.id)) return { code: 20000, data: { message: '批量删除成功' } } }, /** * 修改用户 * @param id, name, addr, age, birth, sex * @return {{code: number, data: {message: string}}} */ updateUser: config => { const { id, name, addr, age, birth, sex } = JSON.parse(config.body) const sex_num = parseInt(sex) List.some(u => { if (u.id === id) { u.name = name u.addr = addr u.age = age u.birth = birth u.sex = sex_num return true } }) return { code: 20000, data: { message: '编辑成功' } } } }
在index.js中mock链接
import Mock from 'mockjs' import userApi from './user' // 用户相关 Mock.mock(/\/user\/getUser/, 'get', userApi.getUserList) Mock.mock(/\/user\/del/, 'get', userApi.deleteUser) Mock.mock(/\/user\/batchremove/, 'get', userApi.batchremove) Mock.mock(/\/user\/add/, 'post', userApi.createUser) Mock.mock(/\/user\/edit/, 'post', userApi.updateUser)
3.3、From.vue和Table.vue的模板
<template> <div>表单</div> </template> <script> export default { name: "Form.vue" } </script> <style scoped> </style>
3.4、common.css初始化
/*编写公用的样式*/ .manage { }
3.5、编辑UserMange.Vue
<template> <div class="manage"> <div class="manage-header"> <Form></Form> </div> <div class="manage-content"> <Table></Table> </div> </div> </template> <script> import '../../assets/css/common.css' //导入css import Form from '../../common/Form' //导入 Form表单 import Table from '../../common/Table' //导入Table组件 export default { components: { //注册组件 Form, Table } } </script> <style scoped> </style>