2023-5-23解决根据表单字符串逗号切割成元素,然后获取元素的其它信息,修改和删除,点击保存保存到表格中
以下为我花了二天写的代码,记录一下
<template> <div> <el-table :data="tableData" style="width: 100%;"> <el-table-column label="操作"> <template slot-scope="scope"> <el-button v-if="scope.row.st === '1'" type="primary" @click="handleEdit(scope.row)">编辑</el-button> <el-button v-else type="success" @click="handleView(scope.row)">查看</el-button> </template> </el-table-column> <el-table-column prop="edit" label="编辑人"></el-table-column> <el-table-column prop="userlist" label="用户列表"></el-table-column> </el-table> <el-dialog title="编辑用户" :visible.sync="editDialogVisible"> <el-table :data="editTableData" style="width: 100%;"> <el-table-column prop="name" label="姓名"> <template slot-scope="scope"> <el-select v-model="scope.row.name" placeholder="请选择" @change="handleNameChange(scope.row)"> <el-option v-for="item in userList" :key="item.label" :label="item.label" :value="item.value"></el-option> </el-select> </template> </el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="permission" label="权限"></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button type="text" size="small" @click="handleDelete(scope.$index)">删除</el-button> </template> </el-table-column> </el-table> <div style="margin-top: 20px;"> <el-button type="primary" @click="handleAdd">新增</el-button> <el-button type="success" @click="handleSave">保存</el-button> </div> </el-dialog> </div> </template> <script> export default { data() { return { tableData: [ { st: '1', edit: '张三', userlist: '张三,李四,王五', createuser: '张三', date: '2023-05-20' }, { st: '2', edit: '李四', userlist: 'aaa,bbb,ccc', createuser: '李四', date: '2023-05-21' }, { st: '1', edit: '王五', userlist: 'ddd,eee,fff', createuser: '王五', date: '2023-05-22' } ], editDialogVisible: false, editTableData: [], userList: [ { label: '张三', value: '张三', age: '25', permission: '管理员' }, { label: '李四', value: '李四', age: '30', permission: '普通员工' }, { label: '王五', value: '王五', age: '28', permission: '普通员工' } ], currentIndex: null } }, methods: { handleEdit(row) { // 打开编辑弹出层 this.editDialogVisible = true // 根据userlist字符串切割生成表格数据 const userList = row.userlist.split(',') this.editTableData = userList.map(name => { const item = this.userList.find(user => user.label === name) return { name: item.label, age: item.age, permission: item.permission } }) // 保存当前编辑的行索引 this.currentIndex = this.tableData.indexOf(row) }, handleView(row) { // 打开查看弹出层 this.editDialogVisible = true // 根据userlist字符串切割生成表格数据 const userList = row.userlist.split(',') this.editTableData = userList.map(name => { const item = this.userList.find(user => user.label === name) return { name: item.label, age: item.age, permission: item.permission } }) // 禁用编辑和删除按钮 this.editTableData.forEach(item => { item.disabled = true }) }, handleNameChange(row) { // 根据选择的姓名更新行数据 const item = this.userList.find(user => user.value === row.name) row.age = item.age row.permission = item.permission }, handleAdd() { // 新增一行数据 this.editTableData.push({ name: '', age: '', permission: '' }) }, handleDelete(index) { // 删除一行数据 this.editTableData.splice(index, 1) }, handleSave() { // 保存修改后的userlist到表格中 const userlist = this.editTableData.map(item => item.name).join(',') this.tableData[this.currentIndex].userlist = userlist this.editDialogVisible = false } } } </script>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)