如果你觉得生活对你做了恶作剧,也许这是让你停下来反省自己的最好时机。
假添加删除摘要
1.前端假添加
// 绑定资源提交2-前端实现假添加- 添加资源账户到tab列表
addToList() {
// 把选中数据添加到已绑定账号后面
console.log(this.resourcePzTableData, "添加前数据");
// 两个数组去重-补集
let diff = this.addItem.filter(
(item) => !this.resourcePzTableData.some((val) => item.id === val.id)
);
console.log(diff, "diff");
// 是否有重复项-消息提示
if (diff.length !== this.addItem.length) {
this.$message.warning("有重复选择项,已过滤。");
}
// 找到数组差集添加到原有数组
this.resourcePzTableData = this.resourcePzTableData.concat(diff);
// 返回上级页面并刷新数据
this.pageindex = 2;
this.page = 0;
// 隐藏侧边栏资源分组树
this.$store.state.treeShow = false;
},
step1:拿到选中的添加资源数组addItem。使用filter过滤函数。计算addItem和resourcePzTableData的补集diff
addItem = [1,2,3,4]
resourcePzTableData = [3,4,6,7,8,9]
diff = [1,2]
step2: 将数组差集diff,使用concat方法,添加到原有数组后面
step3: 返回上级页面、显示列表
2.前端假删除
handleResourcePzDelete(row) {
const resourcePzIds = row.id == undefined ? this.ids : [row.id];
// debugger;
const ids = row.id != undefined ? [row.id] : this.ids;
const vm = this;
this.$modal
.confirm("是否确认删除?")
.then(function () {
// return deleteData({ ids: stuffPzIds });
console.log("删除前", vm.resourcePzTableData);
for (var value of ids) {
vm.resourcePzTableData.splice(
vm.resourcePzTableData.findIndex((item) => item.id == value),
1
);
}
console.log("删除后", vm.resourcePzTableData);
})
.then(() => {
this.getResourcePzList();
this.$message.success("删除成功");
})
.catch(() => {});
},
step1: 根据复选框找到需要删除的id
step2: 使用splice切割数组,删除掉使用findIndex找到的资源行
看懂了就不用看下面的详细功能讲解了。
目录
假添加删除摘要速览
一、前端页面以及功能概述
1.资源配置页
(1)【列表】页面加载已经绑定的资源列表
(2)【添加资源】点击按钮跳转到添加资源页面
(3)【添加资源组】点击按钮跳转到添加资源组页面
(4)【删除】点击按钮删除列表中的一行数据!!前端列表操作删除,不调接口
(5)【保存】点击保存按钮,向后端发送请求,传递资源id数组,实现绑定
2.添加资源页
(1)【查询 重置】正常的页面查询和列表重置功能,不做赘述
(2)【确定】选择资源行数据后点击‘确定’按钮。系统返回资源配置页,并在资源配置页列表中添加选中的行(前端实现,不涉及后端保存)。如果有重复数据,前端剔除,并提示。
3.添加资源组页
(1)【选择资源分组】在左侧资源分组树中选择资源分组
(2)【确定】点击后,请求后端接口,返回数据,同添加资源,在此不做赘述
二、前端假添加功能实现
1.前端页面布局
(1)资源配置页
table涉及的数组为 resourcePzTableData
<el-tab-pane label="资源配置" name="third">
<!-- 资源配置页 -->
<div v-show="pageindex == 2" style="min-height: 500px">
<div class="tableHeaderWrap">
<!-- 按钮部分 -->
<!-- 按钮部分 -->
</div>
<el-row style="padding: 30px 30px 0px 25px;">
<!-- 表格部分 -->
<el-table
:data="resourcePzTableData"
fit
border
stripe
@selection-change="handleSelectionChange"
>
....
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button
type="text"
:style="'padding:none'"
@click="handleResourcePzDelete(scope.row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<div>
<el-button type="primary" size="mini" @click="resourceAddSubmit"
>保 存</el-button>
</div>
</el-row>
</div>
</el-tab-pane>
pzId: undefined, //资源配置选中id
activeName: "first",
pageindex: 2, // 控制显示哪个页面
//资源配置
resourcePzTableData: [
{
id: "1",
name: "运维资源假数据",
},
{
id: "2",
name: "运维资源假数据2",
},
],
resourcePageInfo: {
pageNum: 1,
pageSize: 10,
total: 0,
},
radio: 1,
resourceList: [], //资源列表
(2)添加资源页
添加资源页的数组为resourceList
<el-tab-pane label="资源配置" name="third">
<!-- 资源配置页 -->
<!--上部分代码 -->
<!-- 添加资源页 -->
<el-form :model="queryParams" ref="queryForm" label-width="auto">
<!--查询表单 -->
</el-form>
<el-table
:data="resourceList"
fit
border
stripe
@selection-change="handleSelectionChange1"
>
.....
</el-table>
<el-button type="primary" size="mini" @click="addToList">确 定</el-button>
</el-tab-pane>
2.获取已绑定资源列表和全部资源列表
(1)资源配置页----已绑定资源列表
// 已绑定资源列表列表
getResourcePzList() {
getPzBingdingList({ resourceConfigId: this.pzId }).then((res) => {
this.resourcePzTableData = res.data.list;
});
},
(2)添加资源页-----全部资源列表
// 添加资源按钮
resourceAdd() {
// this.resourceDialog = true;
this.page = 1;
this.pageindex = 0;
this.$store.commit("treeVis");
// 调接口显示可以绑定的资源
this.getAllResourceList();
},
// 已有全部资源列表
getAllResourceList() {
const params = {
...this.queryParams,
};
debugger;
allResourceList(params).then((res) => {
console.log(res);
this.resourceList = res.data.list;
this.total = res.data.totalCount;
});
},
3.前端假添加/删除操作
选中【添加资源页resourceList中的数据行】-------点击确定------添加到【资源配置页resourcePzTableData表后面】
(1)多选框选中数据
addids:[], // 多选框选中的item的id
addItem;[], // 多选框选中的item
// 多选框选中需要添加的数据
handleSelectionChange1(selection) {
this.addids = selection.map((item) => item.id);
this.addItem = selection.map((item) => item);
// this.addsingle = selection.length != 1; // 是否单选
// this.addmultiple = !selection.length; // 是否多选
},
(2) 假添加实现
比较已绑定资源列表,剔除重复数据
// 绑定资源提交2-前端实现假添加- 添加资源账户到tab列表
addToList() {
// 把选中数据添加到已绑定账号后面
console.log(this.resourcePzTableData, "添加前数据");
// 两个数组去重-补集
let diff = this.addItem.filter(
(item) => !this.resourcePzTableData.some((val) => item.id === val.id)
);
console.log(diff, "diff");
// 是否有重复项-消息提示
if (diff.length !== this.addItem.length) {
this.$message.warning("有重复选择项,已过滤。");
}
// 找到数组差集添加到原有数组
this.resourcePzTableData = this.resourcePzTableData.concat(diff);
// 返回上级页面并刷新数据
this.pageindex = 2;
this.page = 0;
// 隐藏侧边栏资源分组树
this.$store.state.treeShow = false;
},
step1:拿到选中的添加资源数组addItem。使用filter过滤函数。计算addItem和resourcePzTableData的补集diff
addItem = [1,2,3,4]
resourcePzTableData = [3,4,6,7,8,9]
diff = [1,2]
step2: 将数组差集diff,使用concat方法,添加到原有数组后面
step3: 返回上级页面、显示列表
(3)假删除实现
handleResourcePzDelete(row) {
// 要删除的id数组或字符
const resourcePzIds = row.id == undefined ? this.ids : [row.id];
// debugger;
const ids = row.id != undefined ? [row.id] : this.ids;
const vm = this;
this.$modal
.confirm("是否确认删除?")
.then(function () {
// return deleteData({ ids: stuffPzIds });
console.log("删除前", vm.resourcePzTableData);
// ===================核心操作================================
for (var value of ids) {
vm.resourcePzTableData.splice(
vm.resourcePzTableData.findIndex((item) => item.id == value),
1
);
}
console.log("删除后", vm.resourcePzTableData);
})
.then(() => {
this.getResourcePzList();
this.$message.success("删除成功");
})
.catch(() => {});
},
step1: 根据复选框找到需要删除的id
step2: 使用splice切割数组,删除掉使用findIndex找到的资源行
三、最终提交绑定
// 资源配置页面确认添加绑定-向后端传数据
resourceAddSubmit() {
this.resourceData;
// const idarray = this.resourceData.map((item) => item.id);
// 提交修改
const params = {
resourceConfigId: this.pzId,
ids: this.resourcePzTableData.map((item) => item.id),
};
debugger;
resourceBinding(params).then((response) => {
if (response.code === 200) {
this.$message.success("保存修改成功");
// this.detailForm = response.data.list;
this.getResourcePzList();
} else {
this.$message.error(response.message);
}
});
},