From 04f1347ddd0c2f88f6e888efb03370ec5951af1d Mon Sep 17 00:00:00 2001
From: dap <15891557205@163.com>
Date: 星期五, 05 四月 2024 14:09:50 +0800
Subject: [PATCH] update: bpmn设计器夜间模式适配
---
src/components/BpmnDesign/index.vue | 106 ++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 93 insertions(+), 13 deletions(-)
diff --git a/src/components/BpmnDesign/index.vue b/src/components/BpmnDesign/index.vue
index 366f642..cd8f70c 100644
--- a/src/components/BpmnDesign/index.vue
+++ b/src/components/BpmnDesign/index.vue
@@ -1,6 +1,14 @@
<template>
- <div class="containers">
- <div v-loading="loading" class="app-containers">
+ <div class="containers-bpmn">
+ <!-- dark妯″紡涓� 杩炴帴绾跨殑绠ご鏍峰紡 -->
+ <svg width="0" height="0" style="position: absolute">
+ <defs>
+ <marker id="markerArrow-dark-mode" viewBox="0 0 20 20" refX="11" refY="10" markerWidth="10" markerHeight="10" orient="auto">
+ <path d="M 1 5 L 11 10 L 1 15 Z" class="arrow-dark" />
+ </marker>
+ </defs>
+ </svg>
+ <div v-loading="loading" class="app-containers-bpmn">
<el-container class="h-full">
<el-container style="align-items: stretch">
<el-header>
@@ -174,7 +182,7 @@
*/
const fitViewport = () => {
zoom.value = bpmnModeler.value.get<Canvas>('canvas').zoom('fit-viewport');
- const bbox = document.querySelector<SVGGElement>('.app-containers .viewport').getBBox();
+ const bbox = document.querySelector<SVGGElement>('.app-containers-bpmn .viewport').getBBox();
const currentViewBox = bpmnModeler.value.get<Canvas>('canvas').viewbox();
const elementMid = {
x: bbox.x + bbox.width / 2 - 65,
@@ -320,23 +328,95 @@
});
</script>
-<style lang="scss" scoped>
-$bg-image: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+';
+<style lang="scss">
+/** 澶滈棿妯″紡 绾挎潯鐨勯鑹� */
+$stroke-color-dark: white;
+$bpmn-font-size: 12px;
+/** 鏃ラ棿妯″紡 瀛椾綋棰滆壊 */
+$bpmn-font-color-dark: white;
+/** 澶滈棿妯″紡 瀛椾綋棰滆壊 */
+$bpmn-font-color-light: #222;
-/** 浠庡乏渚ф嫋鍔ㄦ椂鐨勮儗鏅浘 */
-:deep(svg.new-parent) {
- background: url($bg-image) !important;
+/* 鑳屾櫙缃戞牸 */
+@mixin djs-container {
+ background-image: linear-gradient(90deg, hsl(0deg 0% 78.4% / 15%) 10%, transparent 0), linear-gradient(hsl(0deg 0% 78.4% / 15%) 10%, transparent 0) !important;
+ background-size: 10px 10px !important;
}
-.containers {
+html[class='light'] {
+ /** 浠庡乏渚ф嫋鍔ㄦ椂鐨勮儗鏅浘 */
+ svg.new-parent {
+ @include djs-container;
+ }
+
+ /** 鍙屽嚮缂栬緫鍏冪礌鏃舵牱寮忎繚鎸佷竴鑷� */
+ div.djs-direct-editing-parent {
+ border-radius: 10px;
+ background-color: transparent !important;
+ color: $bpmn-font-color-light;
+ }
+
+ g.djs-visual {
+ .djs-label {
+ fill: $bpmn-font-color-light !important;
+ font-size: $bpmn-font-size !important;
+ }
+ }
+}
+
+html[class='dark'] {
+ /** dark妯″紡涓� 杩炴帴绾跨殑绠ご鏍峰紡 */
+ .arrow-dark {
+ stroke-width: 1px;
+ stroke-linecap: round;
+ stroke: $stroke-color-dark;
+ fill: $stroke-color-dark;
+ stroke-linejoin: round;
+ }
+
+ /** 浠庡乏渚ф嫋鍔ㄦ椂鐨勮儗鏅浘 */
+ svg.new-parent {
+ background-color: black !important;
+ @include djs-container;
+ }
+
+ /** 鍙屽嚮缂栬緫鍏冪礌鏃舵牱寮忎繚鎸佷竴鑷� */
+ div.djs-direct-editing-parent {
+ border-radius: 10px;
+ background-color: transparent !important;
+ color: $bpmn-font-color-dark;
+ }
+
+ /** 鍏冪礌鐩稿叧璁剧疆 */
+ g.djs-visual {
+ /** 鍏冪礌杈规 闇�瑕佸幓闄ゆ枃瀛�(.djs-label) */
+ & > *:first-child:not(.djs-label) {
+ stroke: $stroke-color-dark !important;
+ }
+
+ /** 瀛椾綋棰滆壊 */
+ .djs-label {
+ fill: $bpmn-font-color-dark !important;
+ font-size: $bpmn-font-size !important;
+ }
+
+ /* 杩炴帴绾挎牱寮� */
+ path[data-corner-radius] {
+ stroke: $stroke-color-dark !important;
+ marker-end: url('#markerArrow-dark-mode') !important;
+ }
+ }
+}
+
+.containers-bpmn {
height: 100%;
- .app-containers {
+ .app-containers-bpmn {
width: 100%;
height: 100%;
.canvas {
width: 100%;
height: 100%;
- background: url($bg-image);
+ @include djs-container;
}
.el-header {
height: 35px;
@@ -379,7 +459,7 @@
max-height: calc(80vh - 32px);
overflow-x: hidden;
overflow-y: auto;
- :deep(.hljs) {
+ .hljs {
word-break: break-word;
white-space: pre-wrap;
padding: 0.5em;
@@ -399,7 +479,7 @@
max-height: 100%;
width: 25%;
height: calc(100vh - 80px);
- :deep(.el-collapse) {
+ .el-collapse {
height: calc(100vh - 162px);
overflow: auto;
}
--
Gitblit v1.9.3