关于elementUI如何在表格循环列表里分别新增Tag的设计使用
话不多说,直接上代码。想要实现的目的是这样的,想要在表格里单独添加每一个tag
那么,需要解决的问题就是如何定义这每一个插槽里的输入框,把每个输入框以及里面插入的数据区分开。
研究了很久,最后选择了对象数组。下面上代码
<template>
<div>
<!-- 面包屑导航区域 -->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>招标管理</el-breadcrumb-item>
<el-breadcrumb-item>一键评标</el-breadcrumb-item>
</el-breadcrumb>
<!-- 卡片视图区域 -->
<el-card>
<!-- 添加角色按钮 -->
<el-row>
<el-col
><el-button type="primary" @click="addDialogVisible = true"
>添加资质</el-button
></el-col
>
</el-row>
<!-- 角色列表区域 -->
<el-table :data="roleList" style="width: 100%" border stripe>
<el-table-column type="index"></el-table-column>
<el-table-column label="资质名称" prop="certiName"></el-table-column>
<el-table-column label="等级" prop="level">
<template slot-scope="scope">
<el-tag
v-for="item in scope.row.levels"
:key="item.certiLevelId"
closable
:disable-transitions="false"
@close="handleClose(item)"
>
{{ item.certiLevelName }}
</el-tag>
<el-input
class="input-new-tag"
v-if="inputParams[scope.$index].visible"
v-model="inputParams[scope.$index].value"
ref="saveTagInput"
size="small"
@keyup.enter.native="handleInputConfirm(scope.$index)"
@blur="handleInputConfirm(scope.$index)"
>
</el-input>
<el-button
v-else
class="button-new-tag"
size="small"
@click="showInput(scope.$index)"
>添加资质</el-button
>
</template>
</el-table-column>
<el-table-column label="操作" width="250px">
<template slot-scope="scope">
<el-button
size="mini"
type="warning"
icon="el-icon-setting"
@click="showEditDialog(scope.row.bidId)"
>编辑名称</el-button
>
<el-button size="mini" type="danger" icon="el-icon-delete"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<!-- 分页区域 -->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="queryInfo.currentPage"
:page-sizes="[1, 2, 5, 10]"
:page-size="queryInfo.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
>
</el-pagination>
</el-card>
<!-- 添加角色列表对话框 -->
<el-dialog
title="添加项目"
:visible.sync="addDialogVisible"
width="50%"
@close="addRoleDialogClosed"
>
<el-form
ref="addRoleFormRef"
:model="addRoleForm"
:rules="addRoleFormRoles"
width="50%"
>
<el-form-item label="资质名称" prop="bidName">
<el-input v-model="addRoleForm.bidName"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addRole">确 定</el-button>
</span>
</el-dialog>
<!-- 修改资质的对话框 -->
<el-dialog
title="修改资质名称"
:visible.sync="editDialogVisible"
width="50%"
@close="editDialogclosed"
>
<el-form
ref="editFormRef"
:model="editForm"
:rules="editFormRoles"
width="50%"
>
<el-form-item label="资质名称" prop="bidName">
<el-input v-model="editRoleForm.bidName"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false">取 消</el-button>
<el-button type="primary">确 定</el-button>
</span>
</el-dialog>
<!-- 修改等级的对话框 -->
<el-dialog
title="修改资质等级"
:visible.sync="levelDialogVisible"
width="50%"
@close="levelDialogclosed"
>
<span slot="footer" class="dialog-footer">
<el-button @click="levelDialogVisible = false">取 消</el-button>
<el-button type="primary">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
levelDialogVisible: false,
editDialogVisible: false,
addDialogVisible: false,
total: 1,
queryInfo: {
currentPage: 1,
pageSize: 10
},
inputVisible: {},
editData: {},
// 所有权限数据
scoreList: [],
roleList: [
{
certiName: '资质名称',
levels: [
{
certiLevelId: 1,
certiLevelName: '111'
}
]
},
{
certiName: '资质名称1',
levels: [
{
certiLevelId: 1,
certiLevelName: '111'
}
]
}
],
roleForm: {},
bidId: '',
addRoleForm: {
bidName: '',
crtUserId: 1
// roleDesc: ''
},
editRoleForm: {
bidName: '',
crtUserId: 1
},
levelRoleForm: {
bidName: '',
crtUserId: 1
},
editForm: {},
levelForm: {},
addRoleFormRoles: {
bidName: [
// 验证项目名称是否合法
{ required: true, message: '请输入项目名称', trigger: 'blur' }
]
// roleDesc: [
// // 验证创建人是否合法
// { required: true, message: '请输入创建人', trigger: 'blur' }
// ]
},
editFormRoles: {
bidName: [
// 验证项目名称是否合法
{ required: true, message: '请输入项目名称', trigger: 'blur' }
]
},
levelFormRoles: {
bidName: [
// 验证项目名称是否合法
{ required: true, message: '请输入项目等级', trigger: 'blur' }
]
},
// input
inputParams: [
{
value: '',
visible: false
},
{
value: '',
visible: false
}
]
}
},
created() {
// this.getRoleList()
},
methods: {
handleClose(item) {
// item.certiLevelName.splice(
// item.certiLevelName.indexOf(item.index),
// 1
// )
},
showInput(index) {
this.inputParams[index].visible = true
// console.log(
// 'this.inputVisible',
// this.inputVisible['visible' + row.index],
// row.index
// )
// this.inputVisible = true
// this.$nextTick(_ => {
// // this.$refs.saveTagInput.$refs.input.focus()
// this.$refs.saveTagInput.focus()
// })
},
handleInputConfirm(index) {
console.log(this.inputParams[index].value)
this.roleList[index].levels.push({
certiLevelId: Date.parse(new Date()) + '',
certiLevelName: this.inputParams[index].value
})
this.inputParams[index].value = ''
this.inputParams[index].visible = false
// console.log('hhh', this.editData['input' + row.index])
// let inputValue = this.editData['input' + row.index]
// if (inputValue) {
// row.levels.push(inputValue)
// }
// this.editData['input' + row.index] = ''
// this.inputVisible['visible' + row.index] = false
},
showLevelDialog() {
this.levelDialogVisible = true
},
editDialogclosed() {
this.$refs.editFormRef.resetFields()
},
addRoleDialogClosed() {
this.$refs.addRoleFormRef.resetFields()
},
levelDialogclosed() {
this.$refs.levelFormRef.resetFields()
},
async showEditDialog(bidId) {
// const { data: res } = await this.$http.get(`users/${id}`)
// // const { data: res } = await this.$http.get('users/' + id)
// if (res.meta.status !== 200) {
// return this.$message.error('查询用户资料失败')
// }
// console.log(res.data)
// this.editForm = res.data
this.editDialogVisible = true
},
addRole() {
this.$refs.addRoleFormRef.validate(async valid => {
if (!valid) return
const res = await this.$http.post('/bid', this.addRoleForm)
console.log('增加', res)
// 隐藏对话框
this.addDialogVisible = false
// 刷新列表
this.getRoleList()
})
},
handleSizeChange(newSize) {
// console.log(newSize)
this.queryInfo.pageSize = newSize
this.getRoleList()
},
// 监听当前页改变的事件
handleCurrentChange(newPage) {
console.log(newPage)
this.getUserList()
},
goBack() {
this.$router.go(-1)
},
// 查询
async getRoleList() {
const { data: res } = await this.$http.get('/certi', {
params: this.queryInfo
})
if (res.code !== 200) {
return this.$message.console.error('查询资质失败')
}
console.log('查询资质', res)
this.roleList = res.data.records
this.roleList.forEach((item, index) => {
item.index = index
console.log('item.index,', item.index)
this.editData['input' + item.index] = ''
this.inputVisible['visible' + item.index] = false
})
this.total = res.data.total
console.log(this.roleList)
}
}
}
</script>
<style lang="scss" scoped>
.el-tag {
margin: 7px;
}
.bd_top {
border-top: 1px solid #eee;
}
.bd_buttom {
border-bottom: 1px solid #eee;
}
.vcenter {
display: flex;
align-items: center;
}
// .distributeDialog {
// // height: 700px;
// }
</style>
关于elementUI如何在表格循环列表里分别新增Tag的设计使用的更多相关文章
- 在循环列表的富文本里摘出每个item的img标签内容(适合vue渲染)
昨天在做公司项目的社区动态内容.后台接口返回的数据是数组套对象,对象里有富文本,然后需要摘出富文本里的img标签在列表里分开渲染(即图片九宫格样式).最终效果如图: 这个是后盾接口返回的json数据 ...
- Cocos2d-x3.0下实现循环列表
本文的实现是參照我之前在做iOS时实现的一个能够循环的列表这里用C++重写一遍. 效果: 原文地址:http://blog.csdn.net/qqmcy/article/details/2739301 ...
- 微信小程序循环列表点击每一个单独添加动画
首先,咱们看一下微信小程序动画怎么实现,我首先想到的是anime.js,但是引入之后用不了,微信小程序内的css也无法做到循环的动态,我就去找官方文档看看有没有相应的方法,哎,还真有 点击这里查看 微 ...
- Unity-UGUI-无限循环列表
前言:项目准备新增一个竞技场排行榜,策划规定只显示0-400名的玩家.我一想,生成四百个游戏物体,怕不是得把手机给卡死?回想原来在GitHub上看到过一个实现思路就是无限循环列表,所以就想自己试试.公 ...
- 第 18 章 CSS 表格与列表
学习要点: 1.表格样式 2.列表样式 3.其他功能 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS 表格和列表,通过表格和列表的样式设置,让表格和列表显示更加多元化. 一.表格样式 表格有五 ...
- 循环列表的Java实现,解决约瑟夫环问题
import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { ...
- 第七十五节,CSS表格与列表
CSS表格与列表 学习要点: 1.表格样式 2.列表样式 3.其他功能 一.表格样式 表格有五种独有样式,样式表如下: 属性 值 ...
- 微信小程序实现给循环列表点击添加类(单项和多项)
在微信小程序里面没有DOM对象, 不能操作DOM. 所有的操作通过数据来实现,下面主要实现了给循环列表点击添加类的操作 一.单项 目标需求:实现下图,给点击的view增加类,每次只能选择一个. 主要思 ...
- 页面中php传值后循环列表js获取点击的id
页面中php传值后循环列表js获取点击的id值进行js操作 <script type="text/javascript" src="__PUBLIC__/js/jq ...
随机推荐
- C# lambda 表达式 和=>的含义
函数式编程 函数式编程(英語:functional programming)或称函数程序设计.泛函编程,是一种编程范式,它将电脑运算视为函数运算,并且避免使用程式状态以及易变物件.其中,λ演算为该语言 ...
- LayUI使用注意
# layui获取.修改checkbox的值 <input type="checkbox" name="MySwitch" value="x&q ...
- Jenkins——为什么使用持续集成?
一.开发模型 1.瀑布开发模型:过程线性不可逆的开发模型 优势: 1)简单易懂 2)当前阶段完成后只需要关注后续阶段 3)为项目提供了按阶段划分的检查节点 劣势: 1)各个阶段的划分完全固定,阶段之间 ...
- QT:QT Creator下载安装
学习自: QtCreator5.12.6安装图文教程 - 知乎 (7条消息) Qt Creator下载安装_芒种.的博客-CSDN博客 (7条消息) QT5.11下载与安装教程_杨书航的博客-CSDN ...
- 面试官:我们来聊一聊Redis吧,你了解多少就答多少
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,建议收藏关注 一.前言 作为一名Java程 ...
- 谈谈对mvc 的认识?
由模型(model),视图(view),控制器(controller)完成的应用程序由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;MVC 是一个设计模式,它强制性的使应用程序的输入.处 ...
- vue 组件间的几种通信方式
Props配置 原理:通过props配置,进行父子组件间的通信,跨父子通信需要其他组件进行过渡. 使用: 传递方在标签中添加传递内容 <Son :newName="name" ...
- 问题排查利器:Linux 原生跟踪工具 Ftrace 必知必会
本文地址:https://www.ebpf.top/post/ftrace_tools TLDR,建议收藏,需要时查阅. 如果你只是需要快速使用工具来进行问题排查,包括但不限于函数调用栈跟踪.函数调用 ...
- LGP4590题解
这题好像比较牛逼,好像又不是怎么样. 考虑两个串是如何计算 LCS 的. 这还不简单?\(dp[n][m]=\max(\max(dp[n-1][m],dp[n][m-1]),[s[n]==t[m]]d ...
- AT1219题解
题意 设 \(a\) 的价值为 \(a \times cnt_a\)(\(cnt_a\) 为 \(a\) 在区间中出现的次数),求区间种某种元素,使得这种元素的价值最大. 因为设计出现元素的次数,所以 ...