话不多说,直接上代码。想要实现的目的是这样的,想要在表格里单独添加每一个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>