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>
浙公网安备 33010602011771号