refactor(仪表板、数据大屏): 优化编辑保存冲突时的提示逻辑

This commit is contained in:
wangjiahao 2024-11-18 19:02:41 +08:00
parent 3ae5936563
commit 01db3f028b
5 changed files with 32 additions and 48 deletions

View File

@ -431,20 +431,17 @@ public class DataVisualizationServer implements DataVisualizationApi {
@Override
public String checkCanvasChange(DataVisualizationBaseRequest request) {
Long dvId = request.getId();
Boolean checkHistory = request.getCheckHistory();
if (dvId == null) {
DEException.throwException("ID can not be null");
}
// 内容ID校验
if(checkHistory !=null && checkHistory){
QueryWrapper<DataVisualizationInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("content_id", request.getContentId());
queryWrapper.eq("id", dvId);
if (visualizationInfoMapper.exists(queryWrapper)) {
return "Repeat";
}
QueryWrapper<DataVisualizationInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("content_id", request.getContentId());
queryWrapper.eq("id", dvId);
if (!visualizationInfoMapper.exists(queryWrapper)) {
return "Repeat";
}
return null;
return "Success";
}
@DeLog(id = "#p0.id", ot = LogOT.MODIFY, stExp = "#p0.type")

View File

@ -36,7 +36,7 @@ import MultiplexingCanvas from '@/views/common/MultiplexingCanvas.vue'
import { useI18n } from '@/hooks/web/useI18n'
import { getPanelAllLinkageInfo, saveLinkage } from '@/api/visualization/linkage'
import { queryVisualizationJumpInfo } from '@/api/visualization/linkJump'
import { canvasSave, initCanvasData } from '@/utils/canvasUtils'
import { canvasSave, checkCanvasChangePre, initCanvasData } from '@/utils/canvasUtils'
import { useEmitt } from '@/hooks/web/useEmitt'
import { copyStoreWithOut } from '@/store/modules/data-visualization/copy'
import TabsGroup from '@/custom-component/component-group/TabsGroup.vue'
@ -205,7 +205,9 @@ const saveCanvasWithCheck = () => {
return
}
}
saveResource()
checkCanvasChangePre(() => {
saveResource()
})
}
const saveResource = () => {

View File

@ -26,13 +26,7 @@ import MediaGroup from '@/custom-component/component-group/MediaGroup.vue'
import TextGroup from '@/custom-component/component-group/TextGroup.vue'
import CommonGroup from '@/custom-component/component-group/CommonGroup.vue'
import DeResourceGroupOpt from '@/views/common/DeResourceGroupOpt.vue'
import {
canvasSave,
checkCanvasChangePre,
checkCanvasHistory,
confirmUpdateCanvas,
initCanvasData
} from '@/utils/canvasUtils'
import { canvasSave, checkCanvasChangePre, initCanvasData } from '@/utils/canvasUtils'
import { changeSizeWithScale } from '@/utils/changeComponentsSizeWithScale'
import MoreComGroup from '@/custom-component/component-group/MoreComGroup.vue'
import { XpackComponent } from '@/components/plugin'

View File

@ -13,7 +13,6 @@ import {
appCanvasNameCheck,
checkCanvasChange,
decompression,
deleteLogic,
dvNameCheck,
findById,
findCopyResource,
@ -32,16 +31,11 @@ import { deepCopy } from '@/utils/utils'
import { ElMessage, ElMessageBox } from 'element-plus-secondary'
import { guid } from '@/views/visualized/data/dataset/form/util'
const dvMainStore = dvMainStoreWithOut()
const {
inMobile,
curBatchOptComponents,
dvInfo,
canvasStyleData,
componentData,
canvasViewInfo,
appData
} = storeToRefs(dvMainStore)
const { inMobile, dvInfo, canvasStyleData, componentData, canvasViewInfo, appData } =
storeToRefs(dvMainStore)
const snapshotStore = snapshotStoreWithOut()
import { useI18n } from '@/hooks/web/useI18n'
const { t } = useI18n()
export function chartTransStr2Object(targetIn, copy) {
const target = copy === 'Y' ? cloneDeep(targetIn) : targetIn
@ -517,31 +511,27 @@ export function initCanvasDataMobile(dvId, busiFlag, callBack) {
)
}
export function checkIsBatchOptView(viewId) {
return curBatchOptComponents.value.includes(viewId)
}
export function checkCanvasHistory(callBack) {
ElMessageBox.confirm('当前存在变更是否覆盖', {
confirmButtonType: 'danger',
type: 'warning',
tip: '确认覆盖',
autofocus: false,
showClose: false
}).then(() => {
callBack()
})
}
export function checkCanvasChangePre(callBack) {
// do pre
const isUpdate = dvInfo.value.id && dvInfo.value.optType !== 'copy'
if (isUpdate) {
checkCanvasChange(dvInfo.value).then(rsp => {
if (rsp.data === 'Repeat') {
checkCanvasHistory(() => {
const params = { ...dvInfo.value, watermarkInfo: null }
const tips =
(dvInfo.value.type === 'dashboard'
? t('work_branch.dashboard')
: t('work_branch.big_data_screen')) + '已被他人更新是否覆盖保存'
checkCanvasChange(params).then(rsp => {
if (rsp && rsp.data === 'Repeat') {
ElMessageBox.confirm(tips, {
confirmButtonType: 'danger',
type: 'warning',
autofocus: false,
showClose: false
}).then(() => {
callBack()
})
} else {
callBack()
}
})
} else {
@ -602,7 +592,7 @@ export async function canvasSave(callBack) {
})
}
method(canvasInfo).then(res => {
dvMainStore.updateDvInfoId(res.data)
dvMainStore.updateDvInfoId(res.data, newContentId)
snapshotStore.resetStyleChangeTimes()
callBack(res)
})

View File

@ -148,6 +148,7 @@ public class DataVisualizationVO implements Serializable {
/**
* 内容标识
*/
@JsonSerialize(using = ToStringSerializer.class)
private String contentId;
/**