赞
踩
实现效果:
<template> <!-- 演示地址 --> <div class="dem-add"> <!-- Search start --> <div class="dem-title"> <p>演示地址</p> <el-input class="query-input" v-model="tableForm.name" placeholder="请输入姓名搜索" @keyup.enter="handleQueryName" > <template #prefix> <el-icon class="el-input__icon"><search /></el-icon> </template> </el-input> <el-button type="primary" :icon="Plus" @click="handleAdd" circle /> </div> <!-- Search end --> <!-- Table start --> <div class="bs-page-table"> <el-table :data="tableData" ref="multipleTableRef"> <el-table-column prop="name" label="演示端" width="200" /> <el-table-column prop="address" label="地址" width="200" /> <el-table-column prop="notes" label="特殊说明" width="200" /> <el-table-column fixed="right" label="操作" width="150"> <template #default="scope"> <el-button type="danger" :icon="Delete" @click="handleRowDel(scope.$index)" circle /> <el-button type="primary" :icon="Edit" @click="handleEdit(scope.row, scope.$index)" circle /> </template> </el-table-column> </el-table> <el-dialog v-model="dialogFormVisible" :title="dialogType.name === 'add' ? '新增' : '编辑'" width="500" > <el-form :model="tableForm"> <el-form-item label="演示端" :label-width="80"> <el-input v-model="tableForm.name" autocomplete="off" /> </el-form-item> <el-form-item label="地址" :label-width="80"> <el-input v-model="tableForm.address" autocomplete="off" /> </el-form-item> <el-form-item label="特殊说明" :label-width="80"> <el-input v-model="tableForm.notes" autocomplete="off" /> </el-form-item> </el-form> <template #footer> <div class="dialog-footer"> <el-button @click="dialogFormVisible = false"> 取消 </el-button> <el-button type="primary" @click="dialogConfirm"> 确认 </el-button> </div> </template> </el-dialog> </div> <!-- Table end --> </div> </template> <script setup lang="ts"> import { reactive, ref } from "vue"; // import { get, post, del, put } from "../../utils/request"; import { Search } from "@element-plus/icons-vue"; import { Plus } from "@element-plus/icons-vue"; import { Delete } from "@element-plus/icons-vue"; import { Edit } from "@element-plus/icons-vue"; // 演示地址 // 默认对话框关闭状态 const dialogFormVisible = ref(false); let tableForm = reactive({ name: "", address: "", notes: "", }); // 定义对话框标题 const dialogType = ref({ name: "add" }); // 定义表单变量 let tableData = ref([ { name: "Jarry", address: "No. 189, Grove St, Los Angeles", notes: "暂无", }, { name: "Tom", address: "No. 189, Grove St, Los Angeles", notes: "暂无", }, ]); //全局保存编辑的行号 const globalIndex = ref(-1); // 搜索(通过name值查找)//存在bug!!! const handleQueryName = async () => { const result = tableData.value.filter( (item: any) => item.name === tableForm.name ); tableData.value = result; }; // 新增 const handleAdd = async () => { // 打开新增对话框 dialogFormVisible.value = true; dialogType.value.name = "add"; // 设置新的空的绑值对象 tableForm = reactive({ name: "", address: "", notes: "" }); }; // 删除一条数据(但是现在是删除全部对象) const handleRowDel = async (index: any) => { // 从index位置开始,删除一行即可 tableData.value.splice(index, 1); }; // 编辑 const handleEdit = (row: any, index: any) => { // Object.assign拷贝赋值到表单 const newobj = Object.assign({}, row); tableForm = reactive(newobj); //把当前编辑的行号赋值给全局保存的行号 globalIndex.value = index; console.log(globalIndex.value); // 打开编辑对话框 dialogFormVisible.value = true; dialogType.value.name = "edit"; }; // 确认 const dialogConfirm = () => { // 判断是新增还是编辑 if (dialogType.value.name === "edit") { tableData.value[globalIndex.value] = tableForm; } else { //新增 tableData.value.push(tableForm); } dialogFormVisible.value = false; }; </script> <style scoped lang="scss"> // 演示地址 .dem-add { width: 800px; margin: 20px 600px; background-color: rgba(255, 255, 255, 0.333); box-shadow: 0 8px 16px #0005; border-radius: 16px; overflow: hidden; // 标签 .dem-title { display: flex; justify-content: space-between; align-items: center; background-color: rgba(207, 204, 204, 0.267); padding: 0 20px; p { float: left; width: 150px; color: #000; } // 搜索 ::v-deep .el-input__wrapper { border-radius: 100px; } .query-input { width: 240px; height: 35px; margin: 10px auto; margin-left: 330px; background-color: transparent; transition: 0.2s; } ::v-deep .el-input__wrapper:hover { background-color: #fff8; box-shadow: 0 5px 40px #0002; } // 增加按钮 .el-button { float: left; margin-top: 3px; margin-left: 10px; } } // 表格 .bs-page-table { .el-table { width: 100%; border: 1px solid rgb(219, 219, 219); padding: 10px; .el-table-column { border-collapse: collapse; text-align: left; } } } // 分页 .demo-pagination-block { padding: 9px 20px; } } </style>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。