使用El-table/El-form(同理)编辑数据并动态增加编辑框进行提交

本文介绍如何使用El-table组件实现数据的编辑与动态增删功能,通过绑定按钮点击事件,动态修改表格数据,实现行数据的增删。同时提供HTML与JS代码示例。

El-table/El-form同理/编辑数据并动态增加

El-table部分

El-table实现编辑数据并动态增加列,大概样式图如下:
el-table效果图
操作栏为按钮;当然增加也可以改成 + 1 给个CSS看起来应该也不错(图片用Axure画的)

HTML部分

// el-table这里的增加部分为临时手写 删除是临时加的 上面的图片暂时没加
<el-table
	border
	:data='data'
	height='200'>
	<el-table-column label="No" align="center" type="index" />
	<el-table-column label="参数1" prop="para1" width="250" align="center">
		<template slot-scope="scope">
			<el-input v-model="scope.row.para1" placeholder="请输入参数1"></el-input>
		</template>
	</el-table-column>
	<el-table-column label="参数2" prop="para2" width="250" align="center">
		<template slot-scope="scope">
			<el-input v-model="scope.row.para2" placeholder="请输入参数2"></el-input>
		</template>
	</el-table-column>
	<el-table-column label="操作"  width="250" align="center">
		<template slot-scope="scope">
			<el-button @click="addBtn(socpe.$index)" >增加</el-input>
		</template>
		<template slot-scope="scope">
			<el-button @click="deleteBtn(socpe.$index)" >删除</el-input>
		</template>
	</el-table-column>
</el-table>

简单的做一下说明:
   这里的通过为操作栏中的按钮绑定点击事件,然后在JS事件内部动态的改变表格对象中的数据的大小,以此来实现行数据的增删效果;
   

JS部分(JS部分是通用的)

// 这里的index可以在删除的时候用
addBtn(index) {
	this.data.push({
		{
			para1: '',
			para2: ''
		}
	});
}

//再加一个删除方法吧,html里面没加这个删除按钮,传参一样的都是传当前行数据的索引
deleteBtn(index) {
	this.data.splice(index, 1);
}

这里列举的实例仅为El-table的实例,el-form道理是一样的代码几乎都是重复的 所以这里就不再列举了,谢谢!

<el-dialog :title="title" :visible.sync="open" width="1000px" :modal="false" append-to-body> <el-form ref="form" :model="form" :rules="rules" label-width="120px" > <!-- 第一行字段 --> <el-row :gutter="50"> <el-col :span="8"> <el-form-item label="工厂代号" prop="plantNo"> <el-input v-model="form.plantNo" placeholder="请输入工厂代号" @blur="fetchCenterInfo"/> </el-form-item> <el-form-item label="工厂名称" prop="plantName"> <el-input v-model="form.plantName" placeholder="请输入工厂名称" /> </el-form-item> <el-form-item label="产品描述" prop="description"> <el-input v-model="form.description" placeholder="请输入产品描述" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="router版本" prop="routerVersion"> <el-select v-model="form.routerVersion" placeholder="请输入router版本" > <el-option v-for="dict in dict.type.router_version" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="产品料号" prop="partNo"> <el-input v-model="form.partNo" placeholder="请输入产品料号" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="旧型号" prop="oldType"> <el-input v-model="form.oldType" placeholder="请输入工厂名称" /> </el-form-item> <el-form-item label="新型号" prop="newType"> <el-input v-model="form.newType" placeholder="请输入工厂名称" /> </el-form-item> </el-col> </el-row> <!-- 第二行字段 --> <!-- 工序列表动态生成 --> <el-table :data="formList" height="500px" border style="width: 100%"> <!-- 操作 --> <el-table-column label="操作" align="center"> <template slot-scope="scope"> <el-button type="danger" icon="el-icon-delete" circle @click="removeProcess(scope.$index, scope.row)" /> </template> </el-table-column> <!-- 流程卡内容 --> <el-table-column label="router工作中心" align="center" width="120px"> <template slot-scope="scope"> <el-input v-model="scope.row.workCenter" /> </template> </el-table-column> <!-- 工序名称列 --> <el-table-column label="工序名称" align="center" width="150px"> <template slot-scope="scope"> <el-input v-model="scope.row.routerName" placeholder="请输入工序名称" /> </template> </el-table-column> <!-- 英语名称列 --> <el-table-column label="英语名称" align="center" width="200px"> <template slot-scope="scope"> <el-input v-model="scope.row.englishName" placeholder="请输入英语名称"/> </template> </el-table-column> <!-- 流程卡内容 --> <el-table-column label="流程卡内容" align="center" width="150px"> <template slot-scope="scope"> <el-input v-model="scope.row.routercont" type="textarea" :autosize="{ minRows: 1, maxRows: 3}" class="scrollable-textarea" /> </template> </el-table-column> <!-- 时间参数组 --> <el-table-column label="工艺等待时间(h)" align="center" width="120px"> <template slot-scope="scope"> <el-input v-model="scope.row.processWatitime" /> </template> </el-table-column> <!-- 运行(H) --> <el-table-column label="机器运行时间(H)" align="center" width="120px"> <template slot-scope="scope"> <el-input v-model="scope.row.machineRuntime" /> </template> </el-table-column> <!-- set_up --> <el-table-column label="set_up时间" align="center" width="90px"> <template slot-scope="scope"> <el-input v-model="scope.row.setuptime" placeholder="min/pcs" /> </template> </el-table-column> <!-- 人工 --> <el-table-column label="人工时间" align="center"> <template slot-scope="scope"> <el-input v-model="scope.row.labortime" placeholder="min/pcs" /> </template> </el-table-column> <!-- 单位 --> <el-table-column label="单位" align="center"> <template slot-scope="scope"> <el-input v-model="scope.row.routerUnit" /> </template> </el-table-column> <!-- 数量 --> <el-table-column label="数量" align="center"> <template slot-scope="scope"> <el-input v-model="scope.row.quantity" /> </template> </el-table-column> <!-- 状况 --> <el-table-column label="router状况" align="center" width="130px"> <template slot-scope="scope"> <el-select v-model="scope.row.routerStatus" placeholder="状态"> <el-option v-for="dict in dict.type.router_status" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </template> </el-table-column> <!-- 代码 --> <el-table-column label="工序代码" align="center" width="130px"> <template slot-scope="scope"> <el-input v-model="scope.row.processCode" /> </template> </el-table-column> <!-- 流程卡内容 --> <el-table-column label="备注" align="center" width="150px"> <template slot-scope="scope"> <el-input v-model="scope.row.remark" type="textarea" :autosize="{ minRows: 1, maxRows: 3}" class="scrollable-textarea" /> </template> </el-table-column> </el-table> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </el-dialog>submitForm改为每个formlistfrom里的数据
最新发布
09-29
<div v-for="(process, index) in formData.processes" :key="index" class="table-row"> <!-- 名称 --> <div class="col"> <el-form-item :prop="`processes.${index}.processName`" :rules="rules.processName"> <el-input v-model="process.processName" placeholder="工序名称" /> </el-form-item> </div> <!-- 英语名称 --> <div class="col"> <el-form-item :prop="`processes.${index}.englishName`" :rules="rules.englishName"> <el-input v-model="process.englishName" placeholder="English Name" /> </el-form-item> </div> <!-- 流程卡内容 --> <div class="col"> <el-form-item> <el-input v-model="process.cardContent" type="textarea" :autosize="{ minRows: 1, maxRows: 3}" class="scrollable-textarea" /> </el-form-item> </div> <!-- 时间参数组 --> <div class="col"> <el-form-item> <el-input v-model="process.processWatitime" /> </el-form-item> </div> <!-- 运行(H) --> <div class="col"> <el-form-item> <el-input v-model="process.machineRuntime" /> </el-form-item> </div> <!-- set_up --> <div class="col"> <el-form-item> <el-input v-model="process.setuptime" placeholder="min/pcs" /> </el-form-item> </div> <!-- 人工 --> <div class="col"> <el-form-item> <el-input v-model="process.labortime" placeholder="min/pcs" /> </el-form-item> </div> <!-- 单位 --> <div class="col"> <el-form-item> <el-input v-model="process.routerUnit" /> </el-form-item> </div> <!-- 数量 --> <div class="col"> <el-form-item> <el-input v-model="process.quantity" /> </el-form-item> </div> <!-- 状况 --> <div class="col"> <el-form-item> <el-select v-model="process.routerStatus" placeholder="状态"> <el-option v-for="dict in dict.type.router_status" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> </div> <!-- 代码 --> <div class="col"> <el-form-item> <el-input v-model="process.processCode" /> </el-form-item> </div> <!-- 操作 --> <div class="col"> <el-button type="danger" icon="el-icon-delete" circle @click="removeProcess(index)" /> </div> </div> </div> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </el-dialog>显示五条数据
09-28
为什么我更改 权限 手机号 单位 过后不会在列表显示 <div class="common-layout"> <el-container> <el-header> <div class="header-content"> <h1>仓库管理系统</h1> <div class="user-info"> <span>欢迎, {{ loginInfor.usernames }}</span> </div> </div> </el-header> <el-container> <el-aside width="200px"> <el-menu default-active="dashboard" class="sidebar-menu" model="vertical" background-color="#00BFFF" text-color="#ffffff" active-text-color="#ffffff" @select="handleMenuSelect"> <div class="demo-collapse"> <el-collapse v-model="activeNames" @change="handleChange"> <el-collapse-item title="仓库管理" name="1"> <div class="el-icon-download"> <el-menu-item @click="createNewContent" index="inbound">新型装备入库</el-menu-item> </div> <div> <el-menu-item index="inbound" @click="showDatainfor=true,showCKSPinfor=false,showbel=false">查询装备信息</el-menu-item> </div> <div> <el-menu-item index="inbound" @click="showDatainfor=false,showCKSPinfor=true,showbel=false">出库申请单审批</el-menu-item> </div> <div><el-menu-item index="inbound" @click="showDatainfor=false,showCKSPinfor=false,showbel=true">用户管理</el-menu-item></div> </el-collapse-item> </el-collapse> <el-menu-item index="inbound">报表统计</el-menu-item> <el-menu-item index="inbound">系统设置</el-menu-item> </div> </el-menu> </el-aside> <el-main> <div v-if="showDatainfor"><maindata /></div> <div v-if="showCKSPinfor"><CkCheck/></div> <div v-if="showbel"><Usertable/></div> </el-main> </el-container> </el-container> </div> <!-- 增加新装备弹窗 --> <el-dialog v-model="newuser" title="增加新装备" :center="true" width="30%"> <div class="newcountClass"> <el-form ref="registerFormRef" :model="newzhuangbei" :rules="rules" label-width="90px" class="register-form" > <el-form-item label="条形码/二维码" prop="qrcode"> <el-input v-model="newzhuangbei.qrcode" placeholder="请输入条形码/二维码" ></el-input> </el-form-item> <el-form-item label="名称" prop="totalname"> <el-input v-model="newzhuangbei.totalname" placeholder="请输入名称" ></el-input> </el-form-item> <el-form-item label="品牌" prop="brand" > <el-input v-model="newzhuangbei.brand" placeholder="请输入品牌" ></el-input> </el-form-item> <el-form-item label="型号" prop="model" > <el-input v-model="newzhuangbei.model" placeholder="请输入型号" ></el-input> </el-form-item> <el-form-item label="装备识别码" prop="equipmentcode" > <el-input v-model="newzhuangbei.equipmentcode" placeholder="请输入装备识别码" ></el-input> </el-form-item> <el-form-item label="所属单位" prop="roomlocation" > <el-input v-model="newzhuangbei.roomlocation" placeholder="请输入单位信息" ></el-input> </el-form-item> <el-form-item label="入库数量" prop="kcnum" > <el-input-number v-model="newzhuangbei.kcnum" :min="1" :max="10" @change="handleChange" /> </el-form-item> <el-form-item label="备注" prop="remark" > <el-input v-model="newzhuangbei.remark" placeholder="请输入备注信息" ></el-input> </el-form-item> <el-form-item label="登录时间" prop="totaldate" > <el-input v-model="newzhuangbei.totaldate" placeholder="请输入登录时间" ></el-input> </el-form-item> <el-form-item label="登录人员" prop="totaluser" > <el-input v-model="newzhuangbei.totaluser" placeholder="请输入登录人员" ></el-input> </el-form-item> <div class="button-container"> <el-button type="primary" @click="creatuserhandler" class="large-button" >新增成功</el-button> </div> </el-form> </div> </el-dialog> </template> <script setup> import { onMounted,reactive,ref } from &#39;vue&#39;; import { dataUser } from "../Util/apirequest/test.js"; import { ElMessage } from "element-plus"; import maindata from "./maindata.vue"; import CkCheck from &#39;./ckCheck.vue&#39;; import Usertable from &#39;./usertable.vue&#39;; const showDatainfor=ref(true); const showCKSPinfor=ref(false); const showbel=ref(false); const newuser=ref(false) const loginInfor=reactive({ usernames:&#39;&#39;, permits:&#39;&#39; }); onMounted(()=>{ // 默认进入页面执行 loginInfor.usernames = localStorage.getItem(&#39;loginInfor&#39;); loginInfor.permits = localStorage.getItem(&#39;permit&#39;) }); function createNewContent() { if(loginInfor.permits===&#39;\"超级管理员\"&#39;){ newuser.value=true; } else{ ElMessage.error("权限不足"); } } const newzhuangbei=reactive({ qrcode:&#39;&#39;,//二维码或条形码 totalname:&#39;&#39;,//名称 brand:&#39;&#39;,// model:&#39;&#39;, equipmentcode:&#39;&#39;, roomlocation:&#39;&#39;, kcnum:&#39;,&#39;, remark:&#39;&#39;, totaldate:&#39;&#39;, totaluser:&#39;&#39;, }); function creatuserhandler(){ dataUser(newzhuangbei).then((res) => { if(res.trim()=="error:二维码/条形码已存在!") { ElMessage.error("二维码/条形码已被使用!"); } else if(res.trim()=="true") { ElMessage.success("装备入库成功!"); newuser.value = false; // console.log(&#39;装备入库成功!&#39;); } else { console.log(res); } }); } </script> <style lang=&#39;scss&#39; scoped> /* 主内容区域样式已整合到el-main中 */ // 侧边栏样式 .sidebar { width: 200px; background-color: #43dad0; height: 100%; transition: all 0.3s; box-shadow: 2px 0 8px #1c929b; /* 右侧阴影 */ } .sidebar-menu { height: 100%; border-right: none; padding-top: 0px; /* 顶部留白 */ .el-submenu__title, .el-menu-item { height: 50px; line-height: 50px; font-size: 14px; padding-left: 24px !important; /* 增加左内边距 */ transition: all 0.2s; } // 图标样式统一 .el-submenu__title i, .el-menu-item i { width: 20px; text-align: center; margin-right: 10px; font-size: 16px; } // 选中状态优化 .el-menu-item.is-active { background-color: #11dcd8 !important; border-left: 3px solid #4bfff0; /* 左侧高亮条 */ } // hover效果 .el-submenu__title:hover, .el-menu-item:hover { background-color: rgba(71, 214, 230, 0.1) !important; } // 子菜单样式 .el-submenu .el-menu { background-color: #2b7fd8;/* 子菜单深色背景 */ } .el-submenu .el-menu-item { padding-left: 44px !important; /* 子菜单缩进 */ } } // 页面内容区域 .page-content { flex: 1; padding: 20px; overflow-y: auto; background-color: #f5f7fa; transition: all 0.3s; } </style><template> <div class="common-layout"> <el-container> <el-header> <div class="header-content"> <h1>仓库管理系统</h1> <div class="user-info"> <span>欢迎, {{ loginInfor.usernames }}</span> </div> </div> </el-header> <el-container> <el-aside width="200px"> <el-menu default-active="dashboard" class="sidebar-menu" model="vertical" background-color="#00BFFF" text-color="#ffffff" active-text-color="#ffffff" @select="handleMenuSelect"> <div class="demo-collapse"> <el-collapse v-model="activeNames" @change="handleChange"> <el-collapse-item title="仓库管理" name="1"> <div class="el-icon-download"> <el-menu-item @click="createNewContent" index="inbound">新型装备入库</el-menu-item> </div> <div> <el-menu-item index="inbound" @click="showDatainfor=true,showCKSPinfor=false,showbel=false">查询装备信息</el-menu-item> </div> <div> <el-menu-item index="inbound" @click="showDatainfor=false,showCKSPinfor=true,showbel=false">出库申请单审批</el-menu-item> </div> <div><el-menu-item index="inbound" @click="showDatainfor=false,showCKSPinfor=false,showbel=true">用户管理</el-menu-item></div> </el-collapse-item> </el-collapse> <el-menu-item index="inbound">报表统计</el-menu-item> <el-menu-item index="inbound">系统设置</el-menu-item> </div> </el-menu> </el-aside> <el-main> <div v-if="showDatainfor"><maindata /></div> <div v-if="showCKSPinfor"><CkCheck/></div> <div v-if="showbel"><Usertable/></div> </el-main> </el-container> </el-container> </div> <!-- 增加新装备弹窗 --> <el-dialog v-model="newuser" title="增加新装备" :center="true" width="30%"> <div class="newcountClass"> <el-form ref="registerFormRef" :model="newzhuangbei" :rules="rules" label-width="90px" class="register-form" > <el-form-item label="条形码/二维码" prop="qrcode"> <el-input v-model="newzhuangbei.qrcode" placeholder="请输入条形码/二维码" ></el-input> </el-form-item> <el-form-item label="名称" prop="totalname"> <el-input v-model="newzhuangbei.totalname" placeholder="请输入名称" ></el-input> </el-form-item> <el-form-item label="品牌" prop="brand" > <el-input v-model="newzhuangbei.brand" placeholder="请输入品牌" ></el-input> </el-form-item> <el-form-item label="型号" prop="model" > <el-input v-model="newzhuangbei.model" placeholder="请输入型号" ></el-input> </el-form-item> <el-form-item label="装备识别码" prop="equipmentcode" > <el-input v-model="newzhuangbei.equipmentcode" placeholder="请输入装备识别码" ></el-input> </el-form-item> <el-form-item label="所属单位" prop="roomlocation" > <el-input v-model="newzhuangbei.roomlocation" placeholder="请输入单位信息" ></el-input> </el-form-item> <el-form-item label="入库数量" prop="kcnum" > <el-input-number v-model="newzhuangbei.kcnum" :min="1" :max="10" @change="handleChange" /> </el-form-item> <el-form-item label="备注" prop="remark" > <el-input v-model="newzhuangbei.remark" placeholder="请输入备注信息" ></el-input> </el-form-item> <el-form-item label="登录时间" prop="totaldate" > <el-input v-model="newzhuangbei.totaldate" placeholder="请输入登录时间" ></el-input> </el-form-item> <el-form-item label="登录人员" prop="totaluser" > <el-input v-model="newzhuangbei.totaluser" placeholder="请输入登录人员" ></el-input> </el-form-item> <div class="button-container"> <el-button type="primary" @click="creatuserhandler" class="large-button" >新增成功</el-button> </div> </el-form> </div> </el-dialog> </template> <script setup> import { onMounted,reactive,ref } from &#39;vue&#39;; import { dataUser } from "../Util/apirequest/test.js"; import { ElMessage } from "element-plus"; import maindata from "./maindata.vue"; import CkCheck from &#39;./ckCheck.vue&#39;; import Usertable from &#39;./usertable.vue&#39;; const showDatainfor=ref(true); const showCKSPinfor=ref(false); const showbel=ref(false); const newuser=ref(false) const loginInfor=reactive({ usernames:&#39;&#39;, permits:&#39;&#39; }); onMounted(()=>{ // 默认进入页面执行 loginInfor.usernames = localStorage.getItem(&#39;loginInfor&#39;); loginInfor.permits = localStorage.getItem(&#39;permit&#39;) }); function createNewContent() { if(loginInfor.permits===&#39;\"超级管理员\"&#39;){ newuser.value=true; } else{ ElMessage.error("权限不足"); } } const newzhuangbei=reactive({ qrcode:&#39;&#39;,//二维码或条形码 totalname:&#39;&#39;,//名称 brand:&#39;&#39;,// model:&#39;&#39;, equipmentcode:&#39;&#39;, roomlocation:&#39;&#39;, kcnum:&#39;,&#39;, remark:&#39;&#39;, totaldate:&#39;&#39;, totaluser:&#39;&#39;, }); function creatuserhandler(){ dataUser(newzhuangbei).then((res) => { if(res.trim()=="error:二维码/条形码已存在!") { ElMessage.error("二维码/条形码已被使用!"); } else if(res.trim()=="true") { ElMessage.success("装备入库成功!"); newuser.value = false; // console.log(&#39;装备入库成功!&#39;); } else { console.log(res); } }); } </script> <style lang=&#39;scss&#39; scoped> /* 主内容区域样式已整合到el-main中 */ // 侧边栏样式 .sidebar { width: 200px; background-color: #43dad0; height: 100%; transition: all 0.3s; box-shadow: 2px 0 8px #1c929b; /* 右侧阴影 */ } .sidebar-menu { height: 100%; border-right: none; padding-top: 0px; /* 顶部留白 */ .el-submenu__title, .el-menu-item { height: 50px; line-height: 50px; font-size: 14px; padding-left: 24px !important; /* 增加左内边距 */ transition: all 0.2s; } // 图标样式统一 .el-submenu__title i, .el-menu-item i { width: 20px; text-align: center; margin-right: 10px; font-size: 16px; } // 选中状态优化 .el-menu-item.is-active { background-color: #11dcd8 !important; border-left: 3px solid #4bfff0; /* 左侧高亮条 */ } // hover效果 .el-submenu__title:hover, .el-menu-item:hover { background-color: rgba(71, 214, 230, 0.1) !important; } // 子菜单样式 .el-submenu .el-menu { background-color: #2b7fd8;/* 子菜单深色背景 */ } .el-submenu .el-menu-item { padding-left: 44px !important; /* 子菜单缩进 */ } } // 页面内容区域 .page-content { flex: 1; padding: 20px; overflow-y: auto; background-color: #f5f7fa; transition: all 0.3s; } </style>
08-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值