赞
踩
期望目标:实现一个能通过按钮来动态增加表格栏,每次能添加一行,每行末尾有一个删减按钮。
- <el-button type="text" class="primary"
- @click="addMember()">+添加</el-button>
- <el-table
- :data="memberList"
- style="width: 100%"
- :header-cell-style="{
- background: '#fafafa',
- color: '#aaa',
- fontSize: '15px',
- }"
- >
- <el-table-column prop="index" label="序号" width="60">
- <template slot-scope="scope">
- <span>{{ getMemberIndex(scope.$index) }}</span>
- </template>
- </el-table-column>
- <el-table-column prop="facilityName" label="设施名称">
- <template slot-scope="scope">
- <el-select v-model="scope.row.facilityName" placeholder="请选择名称" clearable>
- <el-option v-for="dict in dict.type.data_facilities_name" :label="dict.label" :value="dict.value" />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column prop="facilitySpecificType" label="具体类型">
- <template slot-scope="scope">
- <el-select v-model="scope.row.facilitySpecificType" placeholder="请选择类型" clearable>
- <el-option v-for="dict in dict.type.data_facilities_type" :label="dict.label" :value="dict.value"/>
- </el-select>
- </template>
- </el-table-column>
- <el-table-column prop="facilityLocation" label="设施位置">
- <template slot-scope="scope">
- <el-select v-model="scope.row.facilityLocation" placeholder="请选择位置" clearable>
- <el-option v-for="dict in dict.type.data_equipment_location" :label="dict.label" :value="dict.value"/>
- </el-select>
- </template>
- </el-table-column>
- <el-table-column prop="facilityTp" label="规格">
- <template slot-scope="scope">
- <el-input v-model="scope.row.facilityTp"></el-input>
- </template>
- </el-table-column>
- <el-table-column prop="accountabilityUnit" label="责任单位">
- <template slot-scope="scope">
- <el-input v-model="scope.row.accountabilityUnit"></el-input>
- </template>
- </el-table-column>
- <el-table-column label="操作">
- <template slot-scope="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.$index,'memberList')"
- >删除
- </el-button>
- </template>
- </el-table-column>
- </el-table>
-
- // 添加杆件数据按钮
- addMember() {
- var member = {
- index: this.dataId++,
- facilityNo: '',
- facilityName: '',
- facilitySpecificType: '',
- facilityLocation: '',
- facilityTp: '',
- accountabilityUnit: '',
- };
- this.memberList.push(member);
- },
效果:
遇到的问题一:在删减时,当前所有行的序号需要自动删减,重新计算变更序号
-
- // 删除行数据后序号自动连贯更新
- getMemberIndex(index) {
- return this.memberList.slice(0, index + 1).length ;
- },
- /** 删除按钮操作 */
- handleDelete(index, listName) {
- if (index !== -1 && listName =="memberList") {
- this.memberList.splice(index, 1)
- }
- },
给序号那一栏字段单独重设,动态变更index,<span>{{ getMemberIndex(scope.$index) }}</span>,每次删除一行,调用handleDelete函数,再用getMember重新计算一遍所有序号
如果有数据验证的需求,就需要在table外面再嵌套一层form,因为只有el-form表单猜有数据验证的功能。
<el-form :model="memberForm" :rules="rules" ref="memberForm"></el-form>
问题二:
多个表单同时用一个接口提交,在提交数据表单时,后端要求有特殊的数据结构,需要将获取到的多个表单数据重新按要求整合。新设立一个json字段存储
- /** 提交按钮 */
- async submitForms() {
- // 构建数据结构
- const facilitiesData = {
- pointId: this.pointForm.pointId,
- pointName: this.pointForm.pointName,
- memberList: this.memberList.map(member => ({
- facilityName: member.facilityName,
- facilitySpecificType: member.facilitySpecificType,
- facilityLocation: member.facilityLocation,
- facilityTp: member.facilityTp,
- accountabilityUnit: member.accountabilityUnit,
- })),
- }
- // 发送请求添加设施
- await addFacilities(facilitiesData).then(response => {
- this.$modal.msgSuccess("新增成功");
- this.goBack();
- })
- },
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。