refactor: 画布样式逻辑调整

This commit is contained in:
wangjiahao 2024-01-11 15:09:17 +08:00
parent 4953bb5d3c
commit 1a0083d285
12 changed files with 147 additions and 21 deletions

View File

@ -117,6 +117,11 @@ public class DataVisualizationServer implements DataVisualizationApi {
DataVisualizationInfo visualizationInfo = new DataVisualizationInfo(); DataVisualizationInfo visualizationInfo = new DataVisualizationInfo();
BeanUtils.copyBean(visualizationInfo, request); BeanUtils.copyBean(visualizationInfo, request);
visualizationInfo.setNodeType(request.getNodeType() == null ? DataVisualizationConstants.NODE_TYPE.LEAF : request.getNodeType()); visualizationInfo.setNodeType(request.getNodeType() == null ? DataVisualizationConstants.NODE_TYPE.LEAF : request.getNodeType());
if(request.getSelfWatermarkStatus() != null && request.getSelfWatermarkStatus()){
visualizationInfo.setSelfWatermarkStatus(1);
}else{
visualizationInfo.setSelfWatermarkStatus(0);
}
Long newDvId = coreVisualizationManage.innerSave(visualizationInfo); Long newDvId = coreVisualizationManage.innerSave(visualizationInfo);
//保存视图信 //保存视图信
chartDataManage.saveChartViewFromVisualization(request.getComponentData(), newDvId, request.getCanvasViewInfo()); chartDataManage.saveChartViewFromVisualization(request.getComponentData(), newDvId, request.getCanvasViewInfo());
@ -132,6 +137,11 @@ public class DataVisualizationServer implements DataVisualizationApi {
} }
DataVisualizationInfo visualizationInfo = new DataVisualizationInfo(); DataVisualizationInfo visualizationInfo = new DataVisualizationInfo();
BeanUtils.copyBean(visualizationInfo, request); BeanUtils.copyBean(visualizationInfo, request);
if(request.getSelfWatermarkStatus() != null && request.getSelfWatermarkStatus()){
visualizationInfo.setSelfWatermarkStatus(1);
}else{
visualizationInfo.setSelfWatermarkStatus(0);
}
if(DataVisualizationConstants.RESOURCE_OPT_TYPE.COPY.equals(request.getOptType())){ if(DataVisualizationConstants.RESOURCE_OPT_TYPE.COPY.equals(request.getOptType())){
// 复制更新 新建权限插入 // 复制更新 新建权限插入
visualizationInfoMapper.deleteById(dvId); visualizationInfoMapper.deleteById(dvId);

View File

@ -15,7 +15,7 @@ import MarkLine from './MarkLine.vue'
import Area from './Area.vue' import Area from './Area.vue'
import eventBus from '@/utils/eventBus' import eventBus from '@/utils/eventBus'
import { changeStyleWithScale } from '@/utils/translate' import { changeStyleWithScale } from '@/utils/translate'
import { ref, onMounted, computed, toRefs, nextTick, onBeforeUnmount } from 'vue' import { ref, onMounted, computed, toRefs, nextTick, onBeforeUnmount, watch } from 'vue'
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain' import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
import { composeStoreWithOut } from '@/store/modules/data-visualization/compose' import { composeStoreWithOut } from '@/store/modules/data-visualization/compose'
import { contextmenuStoreWithOut } from '@/store/modules/data-visualization/contextmenu' import { contextmenuStoreWithOut } from '@/store/modules/data-visualization/contextmenu'
@ -39,6 +39,8 @@ import { adaptCurThemeCommonStyle } from '@/utils/canvasStyle'
import LinkageSet from '@/components/visualization/LinkageSet.vue' import LinkageSet from '@/components/visualization/LinkageSet.vue'
import PointShadow from '@/components/data-visualization/canvas/PointShadow.vue' import PointShadow from '@/components/data-visualization/canvas/PointShadow.vue'
import DragInfo from '@/components/visualization/common/DragInfo.vue' import DragInfo from '@/components/visualization/common/DragInfo.vue'
import { activeWatermark } from '@/components/watermark/watermark'
import { personInfoApi } from '@/api/user'
const snapshotStore = snapshotStoreWithOut() const snapshotStore = snapshotStoreWithOut()
const dvMainStore = dvMainStoreWithOut() const dvMainStore = dvMainStoreWithOut()
const composeStore = composeStoreWithOut() const composeStore = composeStoreWithOut()
@ -155,6 +157,7 @@ const props = defineProps({
default: true default: true
} }
}) })
const userInfo = ref(null)
const { const {
baseWidth, baseWidth,
@ -192,6 +195,51 @@ const linkJumpRef = ref(null)
const linkageRef = ref(null) const linkageRef = ref(null)
const mainDomId = ref('editor-' + canvasId.value) const mainDomId = ref('editor-' + canvasId.value)
watch(
() => dvInfo.value,
() => {
initWatermark()
},
{ deep: true }
)
watch(
() => canvasStyleData.value,
() => {
initWatermark()
},
{ deep: true }
)
const initWatermark = (waterDomId = 'editor-canvas-main') => {
if (dvInfo.value.watermarkInfo && isMainCanvas(canvasId.value)) {
const scale = dashboardActive.value ? 1 : curScale.value
if (userInfo.value) {
activeWatermark(
dvInfo.value.watermarkInfo.settingContent,
userInfo.value,
waterDomId,
canvasId.value,
dvInfo.value.selfWatermarkStatus,
scale
)
} else {
const method = personInfoApi
method().then(res => {
userInfo.value = res.data
activeWatermark(
dvInfo.value.watermarkInfo.settingContent,
userInfo.value,
waterDomId,
canvasId.value,
dvInfo.value.selfWatermarkStatus,
scale
)
})
}
}
}
const dragInfoShow = computed(() => { const dragInfoShow = computed(() => {
return ( return (
dvInfo.value.type === 'dashboard' && dvInfo.value.type === 'dashboard' &&
@ -942,6 +990,9 @@ const cellInit = () => {
} }
const canvasSizeInit = () => { const canvasSizeInit = () => {
if (isMainCanvas(canvasId.value)) {
initWatermark()
}
cellInit() cellInit()
reCalcCellWidth() reCalcCellWidth()
} }
@ -1233,6 +1284,7 @@ const markLineShow = computed(() => isMainCanvas(canvasId.value))
onMounted(() => { onMounted(() => {
if (isMainCanvas(canvasId.value)) { if (isMainCanvas(canvasId.value)) {
initSnapshotTimer() initSnapshotTimer()
initWatermark()
} }
// //
composeStore.getEditor(canvasId.value) composeStore.getEditor(canvasId.value)

View File

@ -188,7 +188,8 @@ const initWatermark = (waterDomId = 'preview-canvas-main') => {
userInfo.value, userInfo.value,
waterDomId, waterDomId,
canvasId.value, canvasId.value,
dvInfo.value.watermarkOpen dvInfo.value.selfWatermarkStatus,
scaleWidth.value / 100
) )
} else { } else {
const method = personInfoApi const method = personInfoApi
@ -199,7 +200,8 @@ const initWatermark = (waterDomId = 'preview-canvas-main') => {
userInfo.value, userInfo.value,
waterDomId, waterDomId,
canvasId.value, canvasId.value,
dvInfo.value.watermarkOpen dvInfo.value.selfWatermarkStatus,
scaleWidth.value / 100
) )
}) })
} }
@ -213,8 +215,8 @@ onMounted(() => {
const erd = elementResizeDetectorMaker() const erd = elementResizeDetectorMaker()
erd.listenTo(document.getElementById(domId), () => { erd.listenTo(document.getElementById(domId), () => {
restore() restore()
initWatermark()
}) })
initWatermark()
}) })
onBeforeUnmount(() => { onBeforeUnmount(() => {

View File

@ -14,6 +14,16 @@
@change="reUpload" @change="reUpload"
/> />
<el-form label-position="top" style="width: 100%; margin-bottom: 16px"> <el-form label-position="top" style="width: 100%; margin-bottom: 16px">
<el-form-item class="form-item" :class="'form-item-' + themes" v-if="showWatermarkSetting">
<el-checkbox
size="small"
:effect="themes"
v-model="dvInfo.selfWatermarkStatus"
@change="onBackgroundChange"
>
水印
</el-checkbox>
</el-form-item>
<el-form-item class="form-item no-margin-bottom" :class="'form-item-' + themes"> <el-form-item class="form-item no-margin-bottom" :class="'form-item-' + themes">
<el-checkbox <el-checkbox
size="small" size="small"
@ -108,7 +118,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { COLOR_PANEL } from '@/views/chart/components/editor/util/chart' import { COLOR_PANEL } from '@/views/chart/components/editor/util/chart'
import { onMounted, reactive, ref, watch } from 'vue' import { computed, onMounted, reactive, ref, watch } from 'vue'
import { imgUrlTrans } from '@/utils/imgUtils' import { imgUrlTrans } from '@/utils/imgUtils'
import { snapshotStoreWithOut } from '@/store/modules/data-visualization/snapshot' import { snapshotStoreWithOut } from '@/store/modules/data-visualization/snapshot'
import { beforeUploadCheck, uploadFileResult } from '@/api/staticResource' import { beforeUploadCheck, uploadFileResult } from '@/api/staticResource'
@ -123,7 +133,7 @@ const files = ref(null)
const maxImageSize = 15000000 const maxImageSize = 15000000
const dvMainStore = dvMainStoreWithOut() const dvMainStore = dvMainStoreWithOut()
const { canvasStyleData } = storeToRefs(dvMainStore) const { canvasStyleData, dvInfo } = storeToRefs(dvMainStore)
withDefaults( withDefaults(
defineProps<{ defineProps<{
@ -145,6 +155,14 @@ const state = reactive({
predefineColors: COLOR_PANEL predefineColors: COLOR_PANEL
}) })
const showWatermarkSetting = computed(() => {
return (
dvInfo.value.watermarkInfo &&
dvInfo.value.watermarkInfo?.settingContent?.enable &&
dvInfo.value.watermarkInfo?.settingContent?.enablePanelCustom
)
})
const goFile = () => { const goFile = () => {
files.value.click() files.value.click()
} }

View File

@ -145,7 +145,14 @@ export function getNow() {
return time return time
} }
export function activeWatermark(watermarkForm, userLoginInfo, domId, canvasId, watermarkOpen) { export function activeWatermark(
watermarkForm,
userLoginInfo,
domId,
canvasId,
selfWatermarkStatus,
scale = 1
) {
// 清理历史水印 // 清理历史水印
const historyWatermarkDom = document.getElementById('de-watermark-server') const historyWatermarkDom = document.getElementById('de-watermark-server')
if (historyWatermarkDom) { if (historyWatermarkDom) {
@ -155,7 +162,7 @@ export function activeWatermark(watermarkForm, userLoginInfo, domId, canvasId, w
!( !(
canvasId === 'canvas-main' && canvasId === 'canvas-main' &&
((watermarkForm.enable && !watermarkForm.enablePanelCustom) || ((watermarkForm.enable && !watermarkForm.enablePanelCustom) ||
(watermarkForm.enable && watermarkOpen)) (watermarkForm.enable && selfWatermarkStatus))
) )
) { ) {
return return
@ -183,11 +190,11 @@ export function activeWatermark(watermarkForm, userLoginInfo, domId, canvasId, w
} }
const settings = { const settings = {
watermark_txt: watermark_txt, watermark_txt: watermark_txt,
watermark_width: watermark_width, watermark_width: watermark_width * scale,
watermark_color: watermarkForm.watermark_color, watermark_color: watermarkForm.watermark_color,
watermark_x_space: watermarkForm.watermark_x_space, watermark_x_space: watermarkForm.watermark_x_space * scale,
watermark_y_space: watermarkForm.watermark_y_space, watermark_y_space: watermarkForm.watermark_y_space * scale,
watermark_fontsize: watermarkForm.watermark_fontsize + 'px' watermark_fontsize: watermarkForm.watermark_fontsize * scale + 'px'
} }
watermark(settings, domId) watermark(settings, domId)
} }

View File

@ -58,6 +58,7 @@ export const dvMainStore = defineStore('dataVisualization', {
pid: null, pid: null,
status: null, status: null,
selfWatermarkStatus: null, selfWatermarkStatus: null,
watermarkInfo: {},
type: null type: null
}, },
// 图表信息 // 图表信息
@ -861,8 +862,8 @@ export const dvMainStore = defineStore('dataVisualization', {
pid: null, pid: null,
status: null, status: null,
selfWatermarkStatus: null, selfWatermarkStatus: null,
type: null, watermarkInfo: {},
watermarkInfo: null type: null
} }
}, },
setViewDataDetails(viewId, dataInfo) { setViewDataDetails(viewId, dataInfo) {
@ -899,7 +900,8 @@ export const dvMainStore = defineStore('dataVisualization', {
pid: pid, pid: pid,
type: dvType, type: dvType,
status: 1, status: 1,
selfWatermarkStatus: 0 selfWatermarkStatus: true,
watermarkInfo: {}
} }
const canvasStyleDataNew = const canvasStyleDataNew =
dvType === 'dashboard' dvType === 'dashboard'
@ -921,6 +923,7 @@ export const dvMainStore = defineStore('dataVisualization', {
pid: null, pid: null,
status: null, status: null,
selfWatermarkStatus: null, selfWatermarkStatus: null,
watermarkInfo: {},
type: null type: null
} }
this.canvasStyleData = { ...deepCopy(DEFAULT_CANVAS_STYLE_DATA_DARK), backgroundColor: null } this.canvasStyleData = { ...deepCopy(DEFAULT_CANVAS_STYLE_DATA_DARK), backgroundColor: null }

View File

@ -90,7 +90,7 @@ export function initCanvasDataPrepare(dvId, busiFlag, callBack) {
name: canvasInfo.name, name: canvasInfo.name,
pid: canvasInfo.pid, pid: canvasInfo.pid,
status: canvasInfo.status, status: canvasInfo.status,
watermarkOpen: canvasInfo.selfWatermarkStatus, selfWatermarkStatus: canvasInfo.selfWatermarkStatus,
type: canvasInfo.type, type: canvasInfo.type,
creatorName: canvasInfo.creatorName, creatorName: canvasInfo.creatorName,
updateName: canvasInfo.updateName, updateName: canvasInfo.updateName,

View File

@ -11,6 +11,8 @@ import { getCanvasStyle, syncShapeItemStyle } from '@/utils/style'
import { adaptCurThemeCommonStyle } from '@/utils/canvasStyle' import { adaptCurThemeCommonStyle } from '@/utils/canvasStyle'
import CanvasCore from '@/components/data-visualization/canvas/CanvasCore.vue' import CanvasCore from '@/components/data-visualization/canvas/CanvasCore.vue'
import { isMainCanvas } from '@/utils/canvasUtils' import { isMainCanvas } from '@/utils/canvasUtils'
import { activeWatermark } from '@/components/watermark/watermark'
import { personInfoApi } from '@/api/user'
// change-begin // change-begin
const props = defineProps({ const props = defineProps({
@ -42,10 +44,11 @@ const domId = ref('de-canvas-' + canvasId.value)
const dvMainStore = dvMainStoreWithOut() const dvMainStore = dvMainStoreWithOut()
const snapshotStore = snapshotStoreWithOut() const snapshotStore = snapshotStoreWithOut()
const { pcMatrixCount, curOriginThemes } = storeToRefs(dvMainStore) const { pcMatrixCount, curOriginThemes, dvInfo } = storeToRefs(dvMainStore)
const canvasOut = ref(null) const canvasOut = ref(null)
const canvasInner = ref(null) const canvasInner = ref(null)
const canvasInitStatus = ref(false) const canvasInitStatus = ref(false)
const userInfo = ref(null)
const state = reactive({ const state = reactive({
screenWidth: 1920, screenWidth: 1920,
@ -59,6 +62,7 @@ const renderState = ref(false) // 仪表板默认
const baseMarginLeft = ref(0) const baseMarginLeft = ref(0)
const baseMarginTop = ref(0) const baseMarginTop = ref(0)
const cyGridster = ref(null) const cyGridster = ref(null)
const editDomId = ref('edit-' + canvasId.value)
const editStyle = computed(() => { const editStyle = computed(() => {
if (canvasStyleData.value && isMainCanvas(canvasId.value)) { if (canvasStyleData.value && isMainCanvas(canvasId.value)) {
@ -187,6 +191,32 @@ const moveOutFromTab = component => {
}, 500) }, 500)
} }
const initWatermark = (waterDomId = 'edit-canvas-main') => {
// if (dvInfo.value.watermarkInfo && isMainCanvas(canvasId.value)) {
// if (userInfo.value) {
// activeWatermark(
// dvInfo.value.watermarkInfo.settingContent,
// userInfo.value,
// waterDomId,
// canvasId.value,
// dvInfo.value.selfWatermarkStatus
// )
// } else {
// const method = personInfoApi
// method().then(res => {
// userInfo.value = res.data
// activeWatermark(
// dvInfo.value.watermarkInfo.settingContent,
// userInfo.value,
// waterDomId,
// canvasId.value,
// dvInfo.value.selfWatermarkStatus
// )
// })
// }
// }
}
// //
onMounted(() => { onMounted(() => {
window.addEventListener('resize', canvasSizeInit) window.addEventListener('resize', canvasSizeInit)
@ -242,7 +272,7 @@ defineExpose({
</script> </script>
<template> <template>
<div ref="canvasOut" class="content" :class="{ 'render-active': renderState }"> <div ref="canvasOut" :id="editDomId" class="content" :class="{ 'render-active': renderState }">
<canvas-opt-bar <canvas-opt-bar
:canvas-style-data="canvasStyleData" :canvas-style-data="canvasStyleData"
:component-data="componentData" :component-data="componentData"

View File

@ -86,7 +86,7 @@ const resourceCreate = (pid, name) => {
pid: pid, pid: pid,
type: curCanvasType.value, type: curCanvasType.value,
status: 1, status: 1,
selfWatermarkStatus: 0 selfWatermarkStatus: true
} }
const canvasStyleDataNew = const canvasStyleDataNew =
curCanvasType.value === 'dashboard' curCanvasType.value === 'dashboard'

View File

@ -14,7 +14,9 @@
<span>${ip}-IP</span><br /> <span>${ip}-IP</span><br />
</div> </div>
</template> </template>
<span><i class="el-icon-warning" /></span> <span
><el-icon><InfoFilled /></el-icon
></span>
</el-tooltip> </el-tooltip>
</div> </div>
</template> </template>
@ -29,5 +31,6 @@ const { t } = useI18n()
position: absolute; position: absolute;
right: 10px; right: 10px;
z-index: 10; z-index: 10;
top: 5px;
} }
</style> </style>

View File

@ -113,6 +113,7 @@ import { ElMessage } from 'element-plus-secondary/es'
import { personInfoApi } from '@/api/user' import { personInfoApi } from '@/api/user'
import { getNow, watermark } from '@/components/watermark/watermark' import { getNow, watermark } from '@/components/watermark/watermark'
import { useI18n } from '@/hooks/web/useI18n' import { useI18n } from '@/hooks/web/useI18n'
import ParamsTips from '@/views/watermark/ParamsTips.vue'
const { t } = useI18n() const { t } = useI18n()
const state = reactive({ const state = reactive({

View File

@ -74,7 +74,7 @@ public class DataVisualizationVO implements Serializable {
/** /**
* 是否单独打开水印 0-关闭 1-开启 * 是否单独打开水印 0-关闭 1-开启
*/ */
private Integer selfWatermarkStatus; private Boolean selfWatermarkStatus;
/** /**
* 排序 * 排序