龙空技术网

十次方专属社交平台前端系统开发 使用ElementUI开发管理后台

IT技术资源共享 5537

前言:

今天姐妹们对“elementui清空select”大概比较重视,咱们都需要分析一些“elementui清空select”的相关资讯。那么小编同时在网摘上汇集了一些有关“elementui清空select””的相关文章,希望兄弟们能喜欢,看官们快快来了解一下吧!

学习目标:

掌握elementUI提供的脚手架搭建管理后台的方法

掌握elementUI的table组件的使用,实现列表功能

掌握elementUI的pagination组件的使用,实现分页功能

掌握elementUI的form相关组件的使用,实现条件查询功能

掌握elementUI的dialog组件和$message的使用,实现弹出窗口和消息提示功能

掌握elementUI的select组件的使用,实现下拉列表功能

实现新增数据和修改数据的功能

掌握confirm的使用,实现询问框,实现删除功能

1管理后台搭建

我们的十次方管理后台就采用ElementUI来进行搭建.

1.1什么是ElementUI

Element 饿了么前端出品的一套 Vue.js 后台组件库官网:

1.2神奇的脚手架

1.2.1快速搭建

官网上提供了非常基础的脚手架,如果我们使用官网的脚手架需要自己写很多代码 比如登陆界面、主界面菜单等内容。 课程已经提供了功能完整的脚手架,我们可以拿过来在此基础上开发,这样可以极大节省我们开发的时间。

(1)解压vueAdmin-template-master

(2)在命令提示符进入该目录,输入命令:

cnpm install

这样下载安装所有的依赖,几分钟后下载完成。

(3)输入命令:

npm run dev

运行后自动弹出浏览器。

1.2.2了解工程结构

以下是主要的目录结构:

1.3项目初始化

1.3.1关闭语法规范性检查

修改config/index.js ,将useEslint的值改为false。

此配置作用: 是否开启语法检查,语法检查是通过ESLint 来实现的。

我们现在科普一下,什么是ESLint : ESLint 是一个语法规则和代码风格的检查工具,可以用来保证写出语法正确、风格统一的代码。如果我们开启了Eslint , 也就意味着要接受它非常苛刻的语法检查,包括空格不能少些或多些,必须单引不能双引,语句后不可以写 分号等等,这些规则其实是可以设置的。我们作为前端的初学者,最好先关闭这种校验,否则会浪费很多精力在语法的规范性上。如果以后做真正的企业级开发,建议开启。

1.3.2国际化设置

打开main.js 找到这句代码

import locale from 'element‐ui/lib/locale/lang/en'

我们将en修改为zn-CN

import locale from 'element‐ui/lib/locale/lang/zh‐CN'

修改后组件都是按照中文的习惯展示

1.3.3与easy-mock对接

(1)修改config下的dev.env.js中的BASE_API为easy-mock的Base URL

....BASE_API: '""',....

(2)easy-mock添加登陆认证模拟数据

地址: /user/login

提交方式:post

内容

{"code": 20000,"data": {"token": "admin"}}

(3)添加返回用户信息url模拟数据

地址:/user/info

提交方式:get

内容:

{"code": 20000,"data": {"roles": ["admin"],"role": ["admin"],"name": "admin","avatar": "‐e4f8‐4870‐b634‐ 56703b4acafe.gif"}}

1.3.4更改标题与菜单

(1)修改index.html里的标题为"十次方后台管理系统",修改后浏览器自动刷新。 这就是脚手架中已经为我们添加了热部署功能。

(2)修改src/router 下的index.js 中constantRouterMap的内容

export const constantRouterMap = [{ path: '/login', component: () => import('@/views/login/index'), hidden: true },{ path: '/404', component: () => import('@/views/404'), hidden: true },{path: '/', component: Layout,redirect: '/dashboard', name: 'Dashboard', hidden: true,children: [{path: 'dashboard',component: () => import('@/views/dashboard/index')}]},{path: '/example', component: Layout, redirect: '/example/table', name: 'Example',meta: { title: '基本信息管理', icon: 'example' },children: [{path: 'table',name: 'Table',component: () => import('@/views/table/index'), meta: { title: '城市管理', icon: 'table' }},{path: 'tree',name: 'Tree',component: () => import('@/views/tree/index'), meta: { title: '标签管理', icon: 'tree' }}]},{path: '/form', component: Layout,name: 'Example2',meta: { title: '活动管理', icon: 'example' },children: [{path: 'index',name: 'Form',component: () => import('@/views/form/index'), meta: { title: '活动管理', icon: 'form' }}]},{ path: '*', redirect: '/404', hidden: true }]
2活动管理-列表

2.1需求分析

实现活动管理的列表页,包括分页,条件查询。

2.2表格组件

我们在这一环节先实现一个简单的列表,如下图所示:

准备工作:我们将swaggerAPI同步到easyMock 然后修改/gathering/gathering (GET方法)的内容

{"code": 20000,"flag": true, "message": "@string", "data|10": [{"id": "@string", "name": "@cword(8,12)","summary": "@cword(20,40)","detail": "@cword(20,40)", "sponsor": "@string", "image": "@image",  "starttime": "@date", "endtime": "@date","address": "@county(true)", "enrolltime": "@date", "state": "@string","city": "@string"}]}

代码实现步骤:

(1)在src/api创建gathering.js

import request from "@/utils/request" export default {getList(){return request({ url:'/gathering/gathering', method:'get'})}}

(2)创建gathering.vue中 ,编写脚本部分

<template></template><script>import gatheringApi from '@/api/gathering' export default {data(){ return {list:[]}},created(){this.fetchData();},methods:{fetchData(){ gatheringApi.getList().then(response => {this.list=response.data});}}}</script>

(3)修改gathering.vue,编写html代码部分

table组件的属性

table-column组件的属性

以上属性为我们代码中使用到的属性,其他属性请查阅官方文档.

2.3分页组件

我们已经通过表格组件完成了列表的展示,接下来需要使用分页组件完成分页功能

准备工作:修改接口/gathering/gathering/search/{page}/{size} method:POST

{"code": 20000,"flag": true, "message": "@string", "data": {"total": "@integer(100,200)", "rows|10": [{"id": "@string", "name": "@cword(8,12)","summary": "@cword(20,40)","detail": "@cword(20,40)", "sponsor": "@string", "image": "@image", "starttime": "@date", "endtime": "@date","address": "@county(true)", "enrolltime": "@date", "state": "1","city": "@string"}]}}

代码实现:

(1)修改src/api/gathering.js,增加方法导出

search(page,size,searchMap) { return request({url: `/gathering/gathering/search/${page}/${size}`, method: 'post',data: searchMap})}

(2)修改src/views/table/gathering.vue,编写脚本部分

import gatheringApi	from '@/api/gathering'export default { data(){return {list:[], total:0,//总记录数currentPage:1,//当前页pageSize:10,//每页大小searchMap: {}//查询表单绑定变量}},created(){this.fetchData()},methods:{fetchData(){gatheringApi.search(this.currentPage,this.pageSize,this.searchMap).then(response =>{this.list=response.data.rows this.total=response.data.total})}}}

(3)修改src/views/table/gathering.vue,增加分页栏

<template><div><el‐table :data="list" border style="width: 100%"><el‐table‐column	prop="id"	label="活动ID"	width="180"></el‐table‐ column><el‐table‐column	prop="name"	label="活动名称"	width="180"></el‐ table‐column><el‐table‐column	prop="sponsor"	label="主办方"	width="180"></el‐ table‐column><el‐table‐column	prop="address"	label="活动地址"	width="180"></el‐ table‐column><el‐table‐column	prop="starttime"	label="开始日期"	width="180"></el‐table‐column><el‐table‐column	prop="endtime"	label="结束日期"	width="180"></el‐table‐column></el‐table><el‐pagination @size‐change="fetchData" @current‐change="fetchData":current‐page="currentPage":page‐sizes="[5, 10, 20]":page‐size="pageSize"layout="total, sizes, prev, pager, next, jumper":total="total"></el‐pagination></div></template>

currentPage为当前页 , total为总记录数

注意:template里面要求必须有唯一的跟节点,我们这里用div将表格和分页控件包起 来。

pagination的常用属性:

pagination的常用事件:

更多属性方法事件请查看官方文档:- CN/component/pagination

2.4条件查询

需求:在分页列表的基础上实现条件查询功能

代码实现:

修改src/views/table/gathering.vue,增加查询表单

<!‐‐查询表单‐‐><el‐form :inline="true" class="demo‐form‐inline"><el‐form‐item label="活动名称"><el‐input v‐model="searchMap.name" placeholder="活动名称"></el‐input></el‐form‐item><el‐form‐item label="活动日期" ><el‐date‐picker	type="date" placeholder="选择开始日期" v‐ model="searchMap.starttime_1" ></el‐date‐picker><el‐date‐picker	type="date" placeholder="选择截止日期" v‐ model="searchMap.starttime_2" ></el‐date‐picker></el‐form‐item><el‐button type="primary" @click="fetchData()">查询</el‐button></el‐form>

form(表单)组件属性详见官方文档:- CN/component/form

input(文本框)组件属性详见官方文档:-

CN/component/input

date-picker(日期框)组件属性详见官方文档:- CN/component/date-picker

3活动管理-增加

3.1需求分析

界面中加入"新增"按钮,点击弹出编辑窗口

点击“修改”按钮,关闭窗口并刷新表格,弹出提示(成功或失败)

3.2弹出窗口

(1)修改src/api/gathering.js,在template中增加对话框组件

<el‐dialog	title="活动编辑" :visible.sync="dialogFormVisible" ></el‐dialog>

属性title为对话框标题, visible为是否显示。

(2)变量dialogFormVisible用于控制对话框的显示。我们在脚本代码中定义

data(){return {.....dialogFormVisible: false //对话框是否显示}}

(3)template中增加按钮,用于打开对话框

<el‐button type="primary" @click="dialogFormVisible = true">新增</el‐ button>

dialog属性详见官方文档:

3.3编辑表单

修改src/views/table/gathering.vue,在弹出窗口添加编辑表单

<el‐dialog title="编辑" :visible.sync="dialogFormVisible"><el‐form label‐width="80px"><el‐form‐item label="活动名称"><el‐input v‐model="pojo.name" placeholder="活动名称"></el‐input></el‐form‐item><el‐form‐item label="基本地址"><el‐input v‐model="pojo.address"	placeholder="基本地址"></el‐input></el‐form‐item><el‐form‐item label="开始日期"><el‐date‐picker type="date"	v‐model="pojo.starttime" placeholder="开始日期"></el‐date‐picker></el‐form‐item><el‐form‐item label="截至日期"><el‐date‐picker type="date" v‐model="pojo.endtime" placeholder="截至日期"></el‐date‐picker></el‐form‐item><el‐form‐item label="报名截止"><el‐date‐picker type="date" v‐model="pojo.enrolltime" placeholder="报名截止"></el‐date‐picker></el‐form‐item><el‐form‐item label="活动详情"><el‐input v‐model="pojo.detail" placeholder="活动详情" type="textarea"	:rows="2"></el‐input></el‐form‐item><el‐form‐item label="是否可见"><el‐switch active‐value="1" inactive‐value="0" v‐ model="pojo.status"></el‐switch></el‐form‐item><el‐form‐item><el‐button type="primary" >保存</el‐button><el‐button @click="dialogFormVisible = false" >关闭</el‐button></el‐form‐item></el‐form></el‐dialog>

这里我们主要要掌握多行文本编辑框与开关组件switch的使用

3.4下拉选择框

需求:在新增窗口实现城市下拉选择框

我们这里需要使用elementUI提供的下拉选择框

准备工作:修改easyMock 中的/base/city (GET)

{"flag": true,"code": 20000, 'message': "查询成功",'data|10': [{"id|+1": 1, "name": "@city","ishot": "1",}]}

代码实现

(1)创建src/api/city.js

import request from '@/utils/request' export default {getList(){return request({ url: '/base/city', method: 'get'})}}

(2)修改src/views/table/gathering.vue的js脚本部分

为data添加属性

cityList: []

引入城市API

import cityApi from '@/api/city'

修改created,增加对城市方法的调用

created() { this.fetchData()cityApi.getList().then(response =>{ this.cityList = response.data})}

(3)修改src/views/table/gathering.vue,增加城市下拉框

<el‐form‐item label="城市"><el‐select v‐model="pojo.city" placeholder="请选择"><el‐optionv‐for="item in cityList":key="item.id":label="item.name":value="item.id"></el‐option></el‐select></el‐form‐item>

3.5表单提交

(1)修改easymock中的/gathering/gathering (增加活动 POST)

{"flag": true,"code": 20000,'message': "执行成功"}

(2)修改src/api/gathering.js,增加方法导出

save(pojo) { return request({url: `/gathering/gathering`, method: 'post',data: pojo})}

(3)修改src/views/table/gathering.vue的js脚本部分 增加方法执行保存

handleSave(){ gatheringApi.save(this.pojo).then(response=>{alert(response.message) if(response.flag){//如果成功this.fetchData()//刷新列表}})this.dialogFormVisible=false//关闭窗口}

(4)修改弹出框中的“保存”按钮,调用保存方法

<el‐button type="primary" @click="handleSave()">保存</el‐button>
4活动管理-修改

4.1需求分析

在表格的操作列增加"修改"按钮,点击修改按钮弹出窗口并显示数据,点击保存按钮保存 修改并刷新表格。

4.2根据ID加载数据

准备工作:修改easymock 接口 /gathering/gathering/{id} (GET)

{"flag": true,"code": 20000, 'message': "查询成功", 'data': {"id": "1","name": "测试活动","sponsor": "主办方","image": "@image", "starttime": "@date", "endtime": "@date","address": "@county(true)", "enrolltime": "@date", "state": "1"}}

代码实现:

(1)修改src/api/gathering.js,增加方法定义

findById(id) { return request({url: `/gathering/gathering/${id}`, method: 'get'})}

(2)修改src/views/table/gathering.vue的js脚本部分

新增handleEdit方法

handleEdit(id){this.dialogFormVisible=true//打开窗口//调用查询gatheringApi.findById(id).then( response=>{ if(response.flag){this.pojo=response.data}})}

(3)在表格table中增加模板列 ,模板列中防止修改按钮,调用handleEdit方法

<el‐table‐columnfixed="right" label="操作" width="100"><template slot‐scope="scope"><el‐button @click="handleEdit(scope.row.id)" type="text" size="small">修改</el‐button></template></el‐table‐column>

fixed="right"的作用是定义此列为右固定列

slot-scope用于指定当前行的上下文。使用scope.row可以获取行对象

4.3新增窗口表单清空

测试:我们在点开修改后,关闭窗口,再次新增打开窗口,会发现表单里依然有数据。 这样显然是不行的。所以我们要在点击新增时清空表单。这个逻辑我们我们在handleEdit方法中实现

handleEdit(id){this.dialogFormVisible=true//打开窗口if(id!=''){//调用查询gatheringApi.findById(id).then( response=>{ if(response.flag){this.pojo=response.data}})}else{this.pojo={}//清空表单}}

修改新增按钮,调用handleEdit方法时传递空字符串

<el‐button type="primary" @click="handleEdit('')">新增</el‐button>

4.4保存修改

准备工作:修改easymock 接口 /gathering/gathering/{id} (PUT)

{"flag": true,"code": 20000,'message': "修改成功"}

代码:

(1)修改src/api/gathering.js,增加方法定义

update(id,pojo) { return request({url: `/gathering/gathering/${id}`, method: 'put',data: pojo})}

(2)修改src/views/table/gathering.vue的js脚本部分

增加属性id

data(){ return {......id:''//当前编辑的ID}}

修改handleEdit,增加

this.id=id

修改方法handleSave

handleSave(){ if(this.id!=''){//修改gatheringApi.update(this.id,this.pojo).then(response=>{ alert(response.message)if(response.flag){//如果成功this.fetchData()//刷新列表}})}else{//新增gatheringApi.save(this.pojo).then(response=>{alert(response.message) if(response.flag){//如果成功this.fetchData()//刷新列表}})}this.dialogFormVisible=false//关闭窗口}

以上代码我们可以做一下优化:

修改src/api/gathering.js

update(id,pojo){if(id == null || id == ''){ return save(pojo)}return request({url: `/gathering/gathering/${id}`, method: 'put',data: pojo})}

修改src/views/table/gathering.vue的handleSave

handleSave(){ gatheringApi.update(this.id,this.pojo).then(response=>{alert(response.message) if(response.flag){//如果成功this.fetchData()//刷新列表}})this.dialogFormVisible=false//关闭窗口}

4.5消息提示框

js原生的alert简直是丑爆了,有没有更漂亮的弹出框呀!当然有,用了elementUI提供了 消息提示框,真是美呆了! alert(response.message)可以替换为以下代码:

this.$message({message: response.message,type: (response.flag?'success':'error')});

$message详见官方文档:

你可以尝试着参照文档做出更丰富的效果哦~

5活动管理-删除

5.1需求分析

在表格的操作列增加”删除“按钮,点击删除按钮弹出提示框,确定后执行删除并刷新表 格。

5.2EasyMock接口

URL:gathering/:id Method: delete

{"flag": true,"code": 20000,'message': "执行成功"}

5.3代码实现

(1)修改src/api/gathering.js,增加方法定义

deleteById(id){ return request({url: `/gathering/gathering/${id}`, method: 'delete'})}

(2)修改src/views/table/gathering.vue的js脚本部分增加方法

handleDelete(id){this.$confirm('确定要删除此纪录吗?', '提示', { confirmButtonText: ' 确 定 ', cancelButtonText: '取消',type: 'warning'}).then(() => { gatheringApi.deleteById(id).then(response=>{this.$message({message: response.message,type: (response.flag?'success':'error')})if(response.flag){ this.fetchData()// 刷新数据}})}).catch(() => {});}

(3)修改src/views/table/gathering.vue ,在操作列增加删除按钮

<el‐button @click="handleDelete(scope.row.id)" type="text" size="small">删除</el‐button>
6代码优化

我们看一下现在的API代码

import request from "@/utils/request" export default {getList(){return request({url:'/gathering/gathering', method:'get'});},search(page,size,searchMap){ return request({url: `/gathering/gathering/search/${page}/${size}`, method: 'post',data: searchMap});},save(pojo){return request({url: `/gathering/gathering`, method: 'post',data: pojo})},findById(id){return request({url: `/gathering/gathering/${id}`, method: 'get'})},update(id,pojo){ if(id==null || id==''){return this.save(pojo)}return request({url: `/gathering/gathering/${id}`, method: 'put',data: pojo})},deleteById(id){ return request({url: `/gathering/gathering/${id}`, method: 'delete'})}}

这里面的url地址都是一样的,如果以后地址发生了变化,需要逐个修改,不利于维护, 所以我们这里把此字符串提取出来定义为常量,运用es6的模板字符串特性来进行拼接即 可。

修改后代码如下:

import request from "@/utils/request" const group_name='gathering'const api_name='gathering' export default {getList(){return request({url:`/${group_name}/${api_name}`, method:'get'});},search(page,size,searchMap){ return request({url: `/${group_name}/${api_name}/search/${page}/${size}`, method: 'post',data: searchMap});},save(pojo){return request({url: `/${group_name}/${api_name}`, method: 'post',data: pojo})},findById(id){return request({url: `/${group_name}/${api_name}/${id}`, method: 'get'})},update(id,pojo){ if(id==null || id==''){return this.save(pojo)}return request({url: `/${group_name}/${api_name}/${id}`,method: 'put',data: pojo})},deleteById(id){ return request({url: `/${group_name}/${api_name}/${id}`, method: 'delete'})}}

标签: #elementui清空select