mirror of
https://gitee.com/hoslay/ddei-editor.git
synced 2025-12-08 10:08:43 +08:00
实现了简易的tooltip
This commit is contained in:
parent
1250fcf10f
commit
675e20cc5f
@ -41,4 +41,6 @@ class DDeiExtQuickStyle extends DDeiPluginBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export {DDeiExtQuickStyle}
|
export {DDeiExtQuickStyle}
|
||||||
|
export * from "./canvasquickdialog"
|
||||||
|
export * from "./quickstyle-lifecycle"
|
||||||
export default DDeiExtQuickStyle;
|
export default DDeiExtQuickStyle;
|
||||||
@ -66,4 +66,8 @@ class DDeiExtSearch extends DDeiPluginBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export {DDeiExtSearch}
|
export {DDeiExtSearch}
|
||||||
|
export * from "./searchdialog"
|
||||||
|
export * from "./searchpanel"
|
||||||
|
export * from "./hotkeys"
|
||||||
|
export * from "./search-lifecycle"
|
||||||
export default DDeiExtSearch;
|
export default DDeiExtSearch;
|
||||||
134
plugins/tooltip/TooltipDialog.vue
Normal file
134
plugins/tooltip/TooltipDialog.vue
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
<template>
|
||||||
|
<div :id="editor?.id + '_' + dialogId" v-if="forceRefresh" class='ddei-ext-dialog-tooltip fade-in'>
|
||||||
|
<div class="ddei-ext-dialog-tooltip-row">
|
||||||
|
<div class="ddei-ext-dialog-tooltip-row-title" v-if="model?.id">
|
||||||
|
ID
|
||||||
|
</div>
|
||||||
|
<div class="ddei-ext-dialog-tooltip-row-data" v-if="model?.id">
|
||||||
|
{{ model?.id }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ddei-ext-dialog-tooltip-row" v-if="model?.code">
|
||||||
|
<div class="ddei-ext-dialog-tooltip-row-title">
|
||||||
|
CODE
|
||||||
|
</div>
|
||||||
|
<div class="ddei-ext-dialog-tooltip-row-data">
|
||||||
|
{{ model?.code }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ddei-ext-dialog-tooltip-row" v-if="model?.text">
|
||||||
|
<div class="ddei-ext-dialog-tooltip-row-title">
|
||||||
|
文本
|
||||||
|
</div>
|
||||||
|
<div class="ddei-ext-dialog-tooltip-row-data">
|
||||||
|
{{ model?.text }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { DDeiEditor } from "ddei-framework";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'ddei-ext-dialog-tooltip',
|
||||||
|
extends: null,
|
||||||
|
props: {
|
||||||
|
//外部传入的插件扩展参数
|
||||||
|
options: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
editor: {
|
||||||
|
type: DDeiEditor,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dialogId: 'ddei-ext-dialog-tooltip',
|
||||||
|
//当前控件
|
||||||
|
model: null,
|
||||||
|
forceRefresh: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {},
|
||||||
|
components: {},
|
||||||
|
watch: {
|
||||||
|
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.editor.dialogs[this.dialogId].viewer = this
|
||||||
|
this.refreshData()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
forceRefreshView: function () {
|
||||||
|
this.forceRefresh = false
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.forceRefresh = true;
|
||||||
|
if (this.refreshData) {
|
||||||
|
this.refreshData();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
refreshData(){
|
||||||
|
if (this.editor.tempPopData && this.editor.tempPopData['ddei-ext-dialog-tooltip']){
|
||||||
|
this.model = this.editor.tempPopData['ddei-ext-dialog-tooltip'].model
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
/**以下是快捷样式编辑的弹出框 */
|
||||||
|
.ddei-ext-dialog-tooltip {
|
||||||
|
|
||||||
|
border: 1px solid var(--panel-border);//darken(var(--panel-header), 13%);
|
||||||
|
box-shadow: 0px 2px 24px 0px hsl(0deg 0% 0% /0.25);//darken(var(--panel-header), 10%);
|
||||||
|
border-radius: 6px;
|
||||||
|
display: none;
|
||||||
|
overflow: hidden;
|
||||||
|
position: absolute;
|
||||||
|
background-color: var(--panel-background);
|
||||||
|
z-index: 2999;
|
||||||
|
user-select: none;
|
||||||
|
color: var(--panel-title);
|
||||||
|
&-row{
|
||||||
|
width:160px;
|
||||||
|
min-height:30px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
&-title {
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-data {
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fade-in {
|
||||||
|
animation: fadeIn 0.5s ease-in-out forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
46
plugins/tooltip/index.ts
Normal file
46
plugins/tooltip/index.ts
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import { DDeiPluginBase } from "ddei-framework";
|
||||||
|
import DDeiCoreTooltipDialog from "./tooltipdialog"
|
||||||
|
import DDeiExtTooltipLifeCycle from "./tooltip-lifecycle"
|
||||||
|
|
||||||
|
class DDeiExtTooltip extends DDeiPluginBase {
|
||||||
|
type: string = "package"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缺省实例
|
||||||
|
*/
|
||||||
|
static defaultIns: DDeiExtTooltip = new DDeiExtTooltip(null);
|
||||||
|
|
||||||
|
dialogs: object = DDeiCoreTooltipDialog;
|
||||||
|
|
||||||
|
lifecyclies: object = DDeiExtTooltipLifeCycle;
|
||||||
|
|
||||||
|
getDialogs(editor) {
|
||||||
|
if (DDeiPluginBase.isSubclass(this.dialogs, DDeiPluginBase)) {
|
||||||
|
return this.dialogs.defaultIns.getDialogs(editor);
|
||||||
|
} else if (this.dialogs instanceof DDeiPluginBase) {
|
||||||
|
return this.dialogs.getDialogs(editor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getLifeCyclies(editor) {
|
||||||
|
if (DDeiPluginBase.isSubclass(this.lifecyclies, DDeiPluginBase)) {
|
||||||
|
return this.lifecyclies.defaultIns.getLifeCyclies(editor);
|
||||||
|
} else if (this.lifecyclies instanceof DDeiPluginBase) {
|
||||||
|
return this.lifecyclies.getLifeCyclies(editor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static configuration(options) {
|
||||||
|
let core = new DDeiExtTooltip(options);
|
||||||
|
core.dialogs = core.dialogs.configuration(options, true)
|
||||||
|
core.lifecyclies = core.lifecyclies.configuration(options, true)
|
||||||
|
return core;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { DDeiExtTooltip }
|
||||||
|
export * from "./tooltipdialog"
|
||||||
|
export * from "./tooltip-lifecycle"
|
||||||
|
export default DDeiExtTooltip;
|
||||||
87
plugins/tooltip/tooltip-lifecycle.ts
Normal file
87
plugins/tooltip/tooltip-lifecycle.ts
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
import { DDeiLifeCycle, DDeiFuncData, DDeiEditorUtil, DDeiUtil, DDeiFuncCallResult, DDeiEditorState } from "ddei-framework";
|
||||||
|
import { debounce } from "lodash";
|
||||||
|
|
||||||
|
class DDeiExtTooltipLifeCycle extends DDeiLifeCycle {
|
||||||
|
|
||||||
|
name:string = "ddei-ext-tooltip-lifecycle"
|
||||||
|
/**
|
||||||
|
* 缺省实例
|
||||||
|
*/
|
||||||
|
static defaultIns: DDeiExtTooltipLifeCycle = new DDeiExtTooltipLifeCycle({
|
||||||
|
time:400
|
||||||
|
});
|
||||||
|
|
||||||
|
EVENT_MOUSE_IN_AREA: DDeiFuncData | null = new DDeiFuncData("tooltip-show", 1, (operateType, data, ddInstance, evt)=>{
|
||||||
|
this.showTooltip(operateType, data, ddInstance, evt)
|
||||||
|
});
|
||||||
|
|
||||||
|
showTooltip(operateType, data, ddInstance, evt): DDeiFuncCallResult {
|
||||||
|
|
||||||
|
let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance);
|
||||||
|
//如果悬停时间大于400,显示tooltip
|
||||||
|
if (data.models?.length > 0 && data.models[0]){
|
||||||
|
|
||||||
|
if (editor.tempHoverModel != data.models[0]){
|
||||||
|
|
||||||
|
if (!editor.tempHoverX || !editor.tempHoverY || Math.abs(editor.tempHoverX - data.x) > 10 || Math.abs(editor.tempHoverY - data.y) > 10){
|
||||||
|
console.log(editor.id+"---1")
|
||||||
|
//隐藏弹出框
|
||||||
|
if (editor.tempPopData && editor.tempPopData['ddei-ext-dialog-tooltip']) {
|
||||||
|
DDeiEditorUtil.closeDialog(editor, 'ddei-ext-dialog-tooltip', true)
|
||||||
|
}
|
||||||
|
editor.tempHoverModel = data.models[0]
|
||||||
|
editor.tempHoverX = data.x
|
||||||
|
editor.tempHoverY = data.y
|
||||||
|
editor.tempHoverTime = new Date().getTime()
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
console.log(editor.tempHoverTime)
|
||||||
|
if(new Date().getTime() - editor.tempHoverTime >= this.options.time){
|
||||||
|
data.model = editor.tempHoverModel
|
||||||
|
|
||||||
|
this.showTooltipDialog(operateType, data, ddInstance, evt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//关闭tooltip
|
||||||
|
else{
|
||||||
|
|
||||||
|
//隐藏弹出框
|
||||||
|
if (editor.tempPopData && editor.tempPopData['ddei-ext-dialog-tooltip']) {
|
||||||
|
DDeiEditorUtil.closeDialog(editor, 'ddei-ext-dialog-tooltip', true)
|
||||||
|
}
|
||||||
|
delete editor.tempHoverModel
|
||||||
|
delete editor.tempHoverTime
|
||||||
|
delete editor.tempHoverX
|
||||||
|
delete editor.tempHoverY
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 鼠标进入控件
|
||||||
|
*/
|
||||||
|
showTooltipDialog(operateType, data, ddInstance, evt,options): DDeiFuncCallResult {
|
||||||
|
let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance);
|
||||||
|
if (!editor.tempPopData || !editor.tempPopData['ddei-ext-dialog-tooltip'] || editor.tempPopData['ddei-ext-dialog-tooltip'].model != data.model) {
|
||||||
|
//隐藏弹出框
|
||||||
|
DDeiEditorUtil.closeDialog(editor, 'ddei-ext-dialog-tooltip', true)
|
||||||
|
//显示弹出框
|
||||||
|
let editorEle = document.getElementById(editor.id);
|
||||||
|
let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle);
|
||||||
|
let modelPos = DDeiUtil.getModelsDomAbsPosition([data.model])
|
||||||
|
debugger
|
||||||
|
let left = modelPos.left - editorDomPos.left+modelPos.width+10
|
||||||
|
let top = modelPos.top - editorDomPos.top - 10
|
||||||
|
DDeiEditorUtil.showDialog(editor, 'ddei-ext-dialog-tooltip', {
|
||||||
|
group: "canvas-pop-tooltip",
|
||||||
|
model: data.model
|
||||||
|
}, { type: 99, left: left, top: top, hiddenMask: true }, null, true, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DDeiExtTooltipLifeCycle
|
||||||
43
plugins/tooltip/tooltipdialog.ts
Normal file
43
plugins/tooltip/tooltipdialog.ts
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import { DDeiPluginBase } from "ddei-framework";
|
||||||
|
import TooltipDialog from './TooltipDialog.vue';
|
||||||
|
|
||||||
|
class DDeiCoreTooltipDialog extends DDeiPluginBase {
|
||||||
|
|
||||||
|
name: string = TooltipDialog.name
|
||||||
|
/**
|
||||||
|
* 缺省实例
|
||||||
|
*/
|
||||||
|
static defaultIns: DDeiCoreTooltipDialog = new DDeiCoreTooltipDialog(null);
|
||||||
|
|
||||||
|
|
||||||
|
plugins: object[] = [TooltipDialog]
|
||||||
|
|
||||||
|
getDialogs(editor) {
|
||||||
|
return this.plugins;
|
||||||
|
}
|
||||||
|
|
||||||
|
static configuration(options, fullConfig: boolean = false) {
|
||||||
|
//解析options,只使用自己相关的
|
||||||
|
if (options) {
|
||||||
|
let newOptions = {}
|
||||||
|
if (fullConfig) {
|
||||||
|
if (fullConfig) {
|
||||||
|
if (options[TooltipDialog.name]) {
|
||||||
|
for (let i in options[TooltipDialog.name]) {
|
||||||
|
newOptions[i] = options[TooltipDialog.name][i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newOptions = options
|
||||||
|
}
|
||||||
|
if (newOptions && Object.keys(newOptions).length !== 0) {
|
||||||
|
let panels = new DDeiCoreTooltipDialog(newOptions);
|
||||||
|
return panels;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return DDeiCoreTooltipDialog;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DDeiCoreTooltipDialog
|
||||||
@ -5,6 +5,7 @@ import { DDeiExtUML } from "@ddei/uml"
|
|||||||
import { DDeiExtSearch } from "@ddei/search"
|
import { DDeiExtSearch } from "@ddei/search"
|
||||||
import { DDeiFuncCallResult } from "ddei-framework";
|
import { DDeiFuncCallResult } from "ddei-framework";
|
||||||
import DDeiExtQuickStyle from "@ddei/quickstyle"
|
import DDeiExtQuickStyle from "@ddei/quickstyle"
|
||||||
|
import DDeiExtTooltip from "@ddei/tooltip"
|
||||||
import { DDeiExtQuickControl, QuickChooseControlDialog } from "@ddei/quickcontrol"
|
import { DDeiExtQuickControl, QuickChooseControlDialog } from "@ddei/quickcontrol"
|
||||||
import { defineComponent, markRaw } from "vue";
|
import { defineComponent, markRaw } from "vue";
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
@ -32,7 +33,8 @@ export default defineComponent({
|
|||||||
DDeiExtSearch,
|
DDeiExtSearch,
|
||||||
DDeiExtQuickStyle,
|
DDeiExtQuickStyle,
|
||||||
DDeiExtQuickControl,
|
DDeiExtQuickControl,
|
||||||
QuickChooseControlDialog.configuration({ customGroups: ['101', '102'] })
|
QuickChooseControlDialog.configuration({ customGroups: ['101', '102'] }),
|
||||||
|
DDeiExtTooltip
|
||||||
// QuickChooseControlDialog.configuration({ customControls: ['100001', '100002','100003']})
|
// QuickChooseControlDialog.configuration({ customControls: ['100001', '100002','100003']})
|
||||||
// DDeiCoreThemeBlack.configuration({
|
// DDeiCoreThemeBlack.configuration({
|
||||||
// default: true
|
// default: true
|
||||||
@ -87,6 +89,7 @@ export default defineComponent({
|
|||||||
DDeiExtSearch,
|
DDeiExtSearch,
|
||||||
DDeiExtQuickStyle,
|
DDeiExtQuickStyle,
|
||||||
DDeiExtQuickControl,
|
DDeiExtQuickControl,
|
||||||
|
DDeiExtTooltip
|
||||||
|
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user