通用删除(comDelete) —— 两次删除的解决方案
一、背景与简介
删除的三个通用问题 —— 详情请看「猪齿鱼“可分页表格”的四个通用问题以及解决方案」
- 通用删除(@common/utils/ciecUtils中的commonDelete)的不稳定(依赖于dataSet.totalCount),不能保证在所有场景下均稳定执行成功删除后执行的代码,比如合同锁货反写货物行 货物行的删除,引用预合同新建合同场景等 —— 不再基于dataSet.totalCount,而是基于两次删除
- 勾选已保存的数据和新增的数据,一起删除时,dataSet.delete先删除新增的数据(一定成功),再删除已保存的数据(可能失败),导致删除的后续方法没有执行 —— 先删除已保存数据,再删除新增的数据
- 新增行数大于当前分页的大小时,再删除已保存的数据,会导致表格只会剩余<=10条的数据 —— 使用axios.delete + dataSet.remove来模拟dataSet.delete
一、勾选已保存的数据和新增的数据,一起删除时,dataSet.delete先删除新增的数据(一定成功),再删除已保存的数据(可能失败),导致删除的后续方法没有执行
前提:该表格有分页,且使用了dataSet.delete方法进行立即删除(后端删除);
1、问题描述 —— hzrl-0001-9894【销售合同】销售合同复制货物行未保存 删除复制的货物行价格构成行未同步删除
- 勾选新增的行和已保存的行,进行后端删除,会使用dataSet.delete(selectedRecords)进行删除;
- 但是这个猪齿鱼的方法,会先删除新增的行,删除成功后,再调用接口删除已保存的行,当删除失败后,会自动弹窗,并抛出异常,除非用catch捕获,后续联动代码不会执行;
2、解决方案
- 用catch来捕获报错,并同时进行后续的联动操作 —— 改动最小,但是还是会有下面的”问题四“;
- 基于两次删除来解决这个问题 —— 先删除已保存的数据,删除成功后再删除新增的数据,但是还是会有“问题四”;
3、注意事项
使用最新的comDelete,基于两次删除,同时也兼容了”问题四“;
二、新增行数大于当前分页的大小时,再删除已保存的数据,会导致表格只会剩余<=10条的数据
前提:该表格有分页,且使用了dataSet.delete方法进行立即删除(后端删除);
1、问题描述 —— hzrl-0001-10935【采购合同】采购合同导入后删除点击保存系统提示:明细行对应的uuid无效 —— 猪齿鱼组件问题
- 当前表格存在已保存的数据,新增行,使得行数大于每页行数(10条),比如说12条;
- 删除一条已经保存的数据,删除成功后,发现本应该剩余11条数据的表格,仅剩余10条数据;
- 既不符合预期,也会导致表格联动有问题;
2、解决方案
使用axios.delete + dataSet.remove来模拟dataSet.delete
二、基本用法
import {
comDelete } from '@common/utils/comMethod';
{
type: 'delete',
permissionList: {
code: `${
permissionCode}.button.delete1`,
type: 'button',
meaning: '按钮定义-删除',
},
condition: () => {
/** 存在勾选数据为开单完成 */
return !goodsInfoDS.selected.some((res: Record) => isCompleted(res) || isInitFlag(res));
},