refactor(工作台): 工作台分享收藏等状态变更优化

This commit is contained in:
wangjiahao
2025-04-07 21:47:04 +08:00
committed by 王嘉豪
parent 56132a5a46
commit 399414f399
11 changed files with 114 additions and 54 deletions

View File

@@ -18,6 +18,7 @@ public interface XpackShareExtMapper {
s.id as share_id,
v.id as resource_id,
v.mobile_layout as ext_flag,
v.status as ext_flag1,
v.type,
s.creator,
s.time,

View File

@@ -30,4 +30,6 @@ public class XpackSharePO implements Serializable {
private Integer extFlag;
private Integer extFlag1;
}

View File

@@ -154,7 +154,6 @@ public class XpackShareManage {
Long uid = AuthUtils.getUser().getUserId();
QueryWrapper<Object> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("s.creator", uid);
queryWrapper.ne("v.status", 0);
if (StringUtils.isNotBlank(request.getType())) {
BusiResourceEnum busiResourceEnum = BusiResourceEnum.valueOf(request.getType().toUpperCase());
if (ObjectUtils.isEmpty(busiResourceEnum)) {
@@ -208,7 +207,7 @@ public class XpackShareManage {
return pos.stream().map(po ->
new XpackShareGridVO(
po.getShareId(), po.getResourceId(), po.getName(), po.getCreator().toString(),
po.getTime(), po.getExp(), 9, po.getExtFlag(), po.getType())).toList();
po.getTime(), po.getExp(), 9, po.getExtFlag(),po.getExtFlag1(), po.getType())).toList();
}
private XpackShareManage proxy() {

View File

@@ -19,7 +19,8 @@ public interface CoreStoreExtMapper {
v.update_by as editor,
v.update_time as edit_time,
v.name,
v.mobile_layout as ext_flag
v.mobile_layout as ext_flag,
v.status as ext_flag1
from core_store s
inner join data_visualization_info v on s.resource_id = v.id
${ew.customSqlSegment}

View File

@@ -26,4 +26,6 @@ public class StorePO implements Serializable {
private Integer extFlag;
private Integer extFlag1;
}

View File

@@ -90,7 +90,7 @@ public class VisualizationStoreManage {
new VisualizationStoreVO(
po.getStoreId(), po.getResourceId(), po.getName(),
po.getType(), String.valueOf(po.getCreator()), ObjectUtils.isEmpty(po.getEditor()) ? null : String.valueOf(po.getEditor()),
po.getEditTime(), 9, po.getExtFlag())).toList();
po.getEditTime(), 9, po.getExtFlag(), po.getExtFlag1())).toList();
}
public IPage<StorePO> queryStorePage(int goPage, int pageSize, VisualizationWorkbranchQueryRequest request) {
@@ -112,7 +112,6 @@ public class VisualizationStoreManage {
if (StringUtils.isNotBlank(info)) {
queryWrapper.notExists(String.format(info, "s.resource_id"));
}
queryWrapper.ne("v.status", 0);
queryWrapper.orderBy(true, request.isAsc(), "v.update_time");
Page<StorePO> page = new Page<>(goPage, pageSize);
return coreStoreExtMapper.query(page, queryWrapper);

View File

@@ -13,14 +13,14 @@ import icon_undo_outlined from '@/assets/svg/icon_undo_outlined.svg'
import icon_redo_outlined from '@/assets/svg/icon_redo_outlined.svg'
import dvRecoverOutlined from '@/assets/svg/dv-recover_outlined.svg'
import dvCancelPublish from '@/assets/svg/icon_undo_outlined.svg'
import {ElIcon, ElMessage, ElMessageBox} from 'element-plus-secondary'
import { ElIcon, ElMessage, ElMessageBox } from 'element-plus-secondary'
import eventBus from '@/utils/eventBus'
import {ref, nextTick, computed, toRefs, onBeforeUnmount, onMounted} from 'vue'
import {useEmbedded} from '@/store/modules/embedded'
import {dvMainStoreWithOut} from '@/store/modules/data-visualization/dvMain'
import {snapshotStoreWithOut} from '@/store/modules/data-visualization/snapshot'
import {useAppStoreWithOut} from '@/store/modules/app'
import {storeToRefs} from 'pinia'
import { ref, nextTick, computed, toRefs, onBeforeUnmount, onMounted } from 'vue'
import { useEmbedded } from '@/store/modules/embedded'
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
import { snapshotStoreWithOut } from '@/store/modules/data-visualization/snapshot'
import { useAppStoreWithOut } from '@/store/modules/app'
import { storeToRefs } from 'pinia'
import Icon from '../icon-custom/src/Icon.vue'
import ComponentGroup from '@/components/visualization/ComponentGroup.vue'
import UserViewGroup from '@/custom-component/component-group/UserViewGroup.vue'
@@ -35,10 +35,10 @@ import {
findAllViewsId,
initCanvasData
} from '@/utils/canvasUtils'
import {changeSizeWithScale} from '@/utils/changeComponentsSizeWithScale'
import { changeSizeWithScale } from '@/utils/changeComponentsSizeWithScale'
import MoreComGroup from '@/custom-component/component-group/MoreComGroup.vue'
import {XpackComponent} from '@/components/plugin'
import {useCache} from '@/hooks/web/useCache'
import { XpackComponent } from '@/components/plugin'
import { useCache } from '@/hooks/web/useCache'
import QueryGroup from '@/custom-component/component-group/QueryGroup.vue'
import ComponentButton from '@/components/visualization/ComponentButton.vue'
import OuterParamsSet from '@/components/visualization/OuterParamsSet.vue'
@@ -46,30 +46,30 @@ import MultiplexingCanvas from '@/views/common/MultiplexingCanvas.vue'
import ComponentButtonLabel from '@/components/visualization/ComponentButtonLabel.vue'
import DeFullscreen from '@/components/visualization/common/DeFullscreen.vue'
import DeAppApply from '@/views/common/DeAppApply.vue'
import {useEmitt} from '@/hooks/web/useEmitt'
import {useUserStoreWithOut} from '@/store/modules/user'
import { useEmitt } from '@/hooks/web/useEmitt'
import { useUserStoreWithOut } from '@/store/modules/user'
import TabsGroup from '@/custom-component/component-group/TabsGroup.vue'
import {useI18n} from '@/hooks/web/useI18n'
import {updatePublishStatus} from '@/api/visualization/dataVisualization'
import { useI18n } from '@/hooks/web/useI18n'
import { updatePublishStatus } from '@/api/visualization/dataVisualization'
let nameEdit = ref(false)
let inputName = ref('')
let nameInput = ref(null)
const dvMainStore = dvMainStoreWithOut()
const snapshotStore = snapshotStoreWithOut()
const {styleChangeTimes, snapshotIndex} = storeToRefs(snapshotStore)
const { styleChangeTimes, snapshotIndex } = storeToRefs(snapshotStore)
const resourceGroupOpt = ref(null)
const resourceAppOpt = ref(null)
const dvToolbarMain = ref(null)
const {componentData, canvasStyleData, canvasViewInfo, dvInfo, editMode, appData} =
const { componentData, canvasStyleData, canvasViewInfo, dvInfo, editMode, appData } =
storeToRefs(dvMainStore)
let scaleEdit = 100
const {wsCache} = useCache('localStorage')
const { wsCache } = useCache('localStorage')
const dvModel = 'dataV'
const outerParamsSetRef = ref(null)
const fullScreeRef = ref(null)
const userStore = useUserStoreWithOut()
const {t} = useI18n()
const { t } = useI18n()
const emits = defineEmits(['recoverToPublished'])
const props = defineProps({
@@ -166,12 +166,12 @@ const saveCanvasWithCheck = (withPublish = false, status?) => {
leaf: true,
id: dvInfo.value.pid || '0'
}
resourceGroupOpt.value.optInit('leaf', params, 'newLeaf', true, {withPublish, status})
resourceGroupOpt.value.optInit('leaf', params, 'newLeaf', true, { withPublish, status })
}
return
}
checkCanvasChangePre(() => {
saveResource({withPublish, status})
saveResource({ withPublish, status })
})
}
@@ -194,7 +194,7 @@ const saveResource = (checkParams?) => {
)
}
if (appData.value) {
initCanvasData(dvInfo.value.id, {busiFlag: 'dataV', resourceTable: 'snapshot'}, () => {
initCanvasData(dvInfo.value.id, { busiFlag: 'dataV', resourceTable: 'snapshot' }, () => {
useEmitt().emitter.emit('refresh-dataset-selector')
resourceAppOpt.value.close()
dvMainStore.setAppDataInfo(null)
@@ -213,7 +213,7 @@ const saveResource = (checkParams?) => {
}
const clearCanvas = () => {
dvMainStore.setCurComponent({component: null, index: null})
dvMainStore.setCurComponent({ component: null, index: null })
dvMainStore.setComponentData([])
snapshotStore.recordSnapshotCache('renderChart')
}
@@ -264,7 +264,7 @@ const backHandler = (url: string) => {
openHandler.value.invokeMethod(pm)
return
}
dvMainStore.canvasStateChange({key: 'curPointArea', value: 'base'})
dvMainStore.canvasStateChange({ key: 'curPointArea', value: 'base' })
wsCache.delete('DE-DV-CATCH-' + dvInfo.value.id)
wsCache.set('dv-info-id', dvInfo.value.id)
if (!!history.state.back) {
@@ -340,7 +340,7 @@ const publishStatusChange = status => {
const isIframe = computed(() => appStore.getIsIframe)
const fullScreenPreview = () => {
dvMainStore.canvasStateChange({key: 'curPointArea', value: 'base'})
dvMainStore.canvasStateChange({ key: 'curPointArea', value: 'base' })
fullScreeRef.value.toggleFullscreen()
}
</script>
@@ -358,10 +358,8 @@ const fullScreenPreview = () => {
</template>
<template v-else>
<el-icon class="custom-el-icon back-icon" @click="backToMain()">
<Icon name="icon_left_outlined"
>
<icon_left_outlined class="svg-icon toolbar-icon"
/>
<Icon name="icon_left_outlined">
<icon_left_outlined class="svg-icon toolbar-icon" />
</Icon>
</el-icon>
<div class="left-area">
@@ -376,7 +374,7 @@ const fullScreenPreview = () => {
@click="undo()"
>
<Icon name="icon_undo_outlined">
<icon_undo_outlined class="svg-icon"/>
<icon_undo_outlined class="svg-icon" />
</Icon>
</el-icon>
</el-tooltip>
@@ -389,7 +387,7 @@ const fullScreenPreview = () => {
@click="redo()"
>
<Icon name="icon_redo_outlined">
<icon_redo_outlined class="svg-icon"/>
<icon_redo_outlined class="svg-icon" />
</Icon>
</el-icon>
</el-tooltip>
@@ -514,10 +512,8 @@ const fullScreenPreview = () => {
<el-dropdown-menu>
<el-dropdown-item @click="recoverToPublished" v-if="dvInfo.status === 2">
<el-icon class="handle-icon">
<Icon name="icon_left_outlined"
>
<dv-recover-outlined class="svg-icon toolbar-icon"
/>
<Icon name="icon_left_outlined">
<dv-recover-outlined class="svg-icon toolbar-icon" />
</Icon>
</el-icon>
{{ t('visualization.publish_recover') }}
@@ -527,10 +523,8 @@ const fullScreenPreview = () => {
v-if="[1, 2].includes(dvInfo.status)"
>
<el-icon class="handle-icon">
<Icon name="icon_left_outlined"
>
<dv-cancel-publish class="svg-icon toolbar-icon"
/>
<Icon name="icon_left_outlined">
<dv-cancel-publish class="svg-icon toolbar-icon" />
</Icon>
</el-icon>
{{ t('visualization.cancel_publish') }}
@@ -570,7 +564,7 @@ const fullScreenPreview = () => {
<de-fullscreen ref="fullScreeRef" show-position="dvEdit"></de-fullscreen>
<multiplexing-canvas ref="multiplexingRef"></multiplexing-canvas>
<outer-params-set ref="outerParamsSetRef"></outer-params-set>
<XpackComponent ref="openHandler" jsname="L2NvbXBvbmVudC9lbWJlZGRlZC1pZnJhbWUvT3BlbkhhbmRsZXI="/>
<XpackComponent ref="openHandler" jsname="L2NvbXBvbmVudC9lbWJlZGRlZC1pZnJhbWUvT3BlbkhhbmRsZXI=" />
</template>
<style lang="less" scoped>

View File

@@ -5,6 +5,8 @@ import icon_dashboard_outlined from '@/assets/svg/icon_dashboard_outlined.svg'
import icon_database_outlined from '@/assets/svg/icon_database_outlined.svg'
import icon_operationAnalysis_outlined from '@/assets/svg/icon_operation-analysis_outlined.svg'
import dvDashboardSpineMobile from '@/assets/svg/dv-dashboard-spine-mobile.svg'
import dvDashboardSpineMobileDisabled from '@/assets/svg/dv-dashboard-spine-mobile-disabled.svg'
import dvDashboardSpineDisabled from '@/assets/svg/dv-dashboard-spine-disabled.svg'
import icon_pc_outlined from '@/assets/svg/icon_pc_outlined.svg'
import { useI18n } from '@/hooks/web/useI18n'
import { ref, reactive, watch, computed } from 'vue'
@@ -117,7 +119,7 @@ const getEmptyDesc = (): string => {
}
const handleCellClick = row => {
if (row) {
if (row && row.extFlag1) {
const sourceId = row.resourceId
if (['dashboard', 'panel'].includes(row.type)) {
window.open('#/panel/index?dvId=' + sourceId, '_self')
@@ -131,9 +133,11 @@ const iconMap = {
panel: icon_dashboard_outlined,
panelMobile: dvDashboardSpineMobile,
dashboard: icon_dashboard_outlined,
dashboardDisabled: icon_dashboard_outlined,
dashboardMobile: dvDashboardSpineMobile,
screen: icon_operationAnalysis_outlined,
dataV: icon_operationAnalysis_outlined,
dataVDisabled: icon_operationAnalysis_outlined,
dataset: icon_app_outlined,
datasource: icon_database_outlined
}
@@ -201,16 +205,34 @@ watch(
<template v-slot:default="scope">
<div class="name-content">
<el-icon style="margin-right: 12px; font-size: 18px" v-if="scope.row.extFlag">
<Icon name="dv-dashboard-spine-mobile"
<Icon v-if="scope.row.extFlag1" name="dv-dashboard-spine-mobile"
><dvDashboardSpineMobile class="svg-icon"
/></Icon>
<Icon v-if="!scope.row.extFlag1" name="dv-dashboard-spine-mobile"
><dvDashboardSpineMobileDisabled class="svg-icon"
/></Icon>
</el-icon>
<el-icon v-else :class="`main-color color-${scope.row.type}`">
<Icon><component class="svg-icon" :is="iconMap[scope.row.type]"></component></Icon>
<el-icon
v-else
:class="`main-color color-${scope.row.type} custom-color${
scope.row.extFlag1 ? '' : '-disabled'
}`"
>
<Icon
><component
class="svg-icon"
:is="iconMap[scope.row.type + (scope.row.extFlag1 ? '' : 'Disabled')]"
></component
></Icon>
</el-icon>
<el-tooltip placement="top">
<template #content>{{ scope.row.name }}</template>
<span class="ellipsis" style="max-width: 250px">{{ scope.row.name }}</span>
<span
class="ellipsis"
:class="{ 'color-disabled': !scope.row.extFlag1 }"
style="max-width: 250px"
>{{ scope.row.name }}</span
>
</el-tooltip>
</div>
</template>
@@ -284,6 +306,7 @@ watch(
color: #fff;
background: #3370ff;
}
.name-star {
font-size: 15px;
padding-left: 5px;
@@ -296,4 +319,11 @@ watch(
line-height: 20px !important;
}
}
.color-disabled {
color: #bbbfc4;
}
.custom-color-disabled {
background: #bbbfc4 !important;
}
</style>

View File

@@ -8,7 +8,7 @@ import icon_database_outlined from '@/assets/svg/icon_database_outlined.svg'
import icon_operationAnalysis_outlined from '@/assets/svg/icon_operation-analysis_outlined.svg'
import dvDashboardSpineMobile from '@/assets/svg/dv-dashboard-spine-mobile.svg'
import icon_pc_outlined from '@/assets/svg/icon_pc_outlined.svg'
import icon_cancel_store from '@/assets/svg/icon_cancel_store.svg'
import dvDashboardSpineMobileDisabled from '@/assets/svg/dv-dashboard-spine-mobile-disabled.svg'
import { useI18n } from '@/hooks/web/useI18n'
import { ref, reactive, onMounted, computed, watch } from 'vue'
import type { TabsPaneContext } from 'element-plus-secondary'
@@ -61,6 +61,7 @@ const iconMap = {
panelMobile: dvDashboardSpineMobile,
dashboard: icon_dashboard_outlined,
dashboardMobile: dvDashboardSpineMobile,
dashboardMobileDisabled: dvDashboardSpineMobileDisabled,
screen: icon_operationAnalysis_outlined,
dataV: icon_operationAnalysis_outlined,
dataset: icon_app_outlined,
@@ -198,7 +199,7 @@ const sortChange = param => {
}
const handleCellClick = row => {
if (row) {
if (row && !checkDisabled(row)) {
const sourceId = activeName.value === 'recent' ? row.id : row.resourceId
if (['dashboard', 'panel'].includes(row.type)) {
window.open('#/panel/index?dvId=' + sourceId, '_self')
@@ -238,6 +239,10 @@ const executeStore = rowInfo => {
})
}
const checkDisabled = row => {
return activeName.value === 'store' && !row.extFlag1
}
const executeCancelStore = rowInfo => {
const param = {
id: rowInfo.resourceId,
@@ -352,18 +357,32 @@ const getEmptyDesc = (): string => {
<Icon
><component
class="svg-icon"
:is="iconMap[scope.row.type + 'Mobile']"
:is="
iconMap[
scope.row.type + 'Mobile' + (checkDisabled(scope.row) ? 'Disabled' : '')
]
"
></component
></Icon>
</el-icon>
<el-icon v-else :class="`main-color color-${scope.row.type}`">
<el-icon
v-else
:class="`main-color color-${scope.row.type} custom-color${
checkDisabled(scope.row) ? '-disabled' : ''
}`"
>
<Icon
><component class="svg-icon" :is="iconMap[scope.row.type]"></component
></Icon>
</el-icon>
<el-tooltip placement="top">
<template #content>{{ scope.row.name }}</template>
<span class="ellipsis" style="max-width: 250px">{{ scope.row.name }}</span>
<span
class="ellipsis"
:class="{ 'color-disabled': checkDisabled(scope.row) }"
style="max-width: 250px"
>{{ scope.row.name }}</span
>
</el-tooltip>
<el-icon
v-if="activeName === 'recent' && ['screen', 'panel'].includes(scope.row.type)"
@@ -568,6 +587,14 @@ const getEmptyDesc = (): string => {
.jump-active {
cursor: pointer;
}
.color-disabled {
color: #bbbfc4;
}
.custom-color-disabled {
background: #bbbfc4 !important;
}
</style>
<style lang="less">
.menu-panel-select_popper {

View File

@@ -35,4 +35,7 @@ public class VisualizationStoreVO implements Serializable {
private int weight;
private Integer extFlag;
private Integer extFlag1;
}

View File

@@ -38,6 +38,8 @@ public class XpackShareGridVO implements Serializable {
private Integer extFlag;
private Integer extFlag1;
@Schema(description = "类型")
private String type;