功能:右侧已下发的拓扑可以取消下发到左侧,相反左侧为下发的拓扑可以通过接口(保存时)添加到右侧。
<!-- 穿梭框-->
<div class="transfer-box">
<div style="text-align: center">
<el-transfer
:titles="['拓扑列表', '选中拓扑']"
style="text-align: left; display: inline-block"
v-model="selectList"
:props="{
key: 'topologyId',
label: 'topologyName'
}"
:data="preData"
>
</el-transfer>
</div>
</div>
data(){
return:{
selectList: [],
cloneSelectList: [],
issuedId: ''
}
},
methods:{
//左侧接口:
getTopology() {
getTopology({ topologyName: this.airData }).then(res => {
if (res.data) {
this.preData = res.data;//左侧数据渲染
}
this.getIssued();
});
},
//右侧接口
getIssued() {
getIssued({ energyManagementId: this.issuedId, topologyName: this.airData }).then(res => {
if (res.data) {
this.cloneSelectList = cloneDeep(res.data);//使用项目中lodash的深拷贝
this.preData = this.preData.concat(res.data);//右侧数据渲染
this.selectList = res.data.map(v => v.topologyId);//element穿梭框v-model只能绑定一个值id,所以map处对象里面的id
}
});
},
}
//保存接口
confirm() {
const needIssuedData = this.selectList.filter(v => !this.cloneSelectList.find(vl => v == vl.topologyId));
let arrNeedIssuedData = [];
this.preData.forEach(v => {
if (needIssuedData.includes(v.topologyId)) {
arrNeedIssuedData.push({
...v,
energyManagementId: this.issuedId
});
}
});
const notNeedIssued = this.cloneSelectList.filter(v => !this.selectList.find(vl => vl == v.topologyId)).map(v => v.topologyId);
let params = {
oacecEnergyIssued: arrNeedIssuedData,//左侧下发右侧的数据格式
topologyId: notNeedIssued//右侧下发左侧的数据的格式
};
energyIssued(params).then(res => {
if (res.success) {
this.$message.success(res.message);
this.close();
} else {
this.$message.warning(res.message);
this.close();
}
});
},