From bec1fe819b7ce20c8a7bca064a293efd0f7f4e96 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A4=9C=E7=AC=99=E6=AD=8C?= <2277317060@qq.com>
Date: Fri, 27 Jun 2025 17:26:56 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9C=8B=E6=9D=BF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/boardGenerate/index.vue | 73 ++++-
.../nodes/board/backgroundBarNode.vue | 275 ++++++++++++++++++
.../boardGenerate/nodes/board/barNode.vue | 2 +-
.../nodes/board/carouselNode.vue | 2 +-
.../boardGenerate/nodes/form/iconNode.vue | 68 +++++
src/views/boardGenerate/tool.js | 4 +
src/views/boardGenerate/view.vue | 8 +
7 files changed, 428 insertions(+), 4 deletions(-)
create mode 100644 src/views/boardGenerate/nodes/board/backgroundBarNode.vue
create mode 100644 src/views/boardGenerate/nodes/form/iconNode.vue
diff --git a/src/views/boardGenerate/index.vue b/src/views/boardGenerate/index.vue
index 4281d2b..e3790fc 100644
--- a/src/views/boardGenerate/index.vue
+++ b/src/views/boardGenerate/index.vue
@@ -44,6 +44,15 @@
柱状图
+
+
+
+
+ 背景柱状图
+
@@ -160,6 +169,14 @@
图片
+
+
+
+
+ 图标
+
@@ -249,6 +266,10 @@
+
+
+
@@ -278,6 +299,10 @@
+
+
+
@@ -445,12 +470,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -785,6 +847,7 @@ import { globalHeaders } from '@/utils/request';
import { useRouter } from 'vue-router';
import { v4 as uuidv4 } from 'uuid';
import { Check, Close, Plus, Setting, StarFilled, Delete } from '@element-plus/icons-vue';
+import * as icon from '@element-plus/icons-vue';
import { MarkerType, useVueFlow, VueFlow } from '@vue-flow/core';
import { Background } from '@vue-flow/background';
import LineNode from './nodes/board/lineNode.vue';
@@ -792,6 +855,7 @@ import MultiLinesNode from './nodes/board/multiLinesNode.vue';
import CurveNode from './nodes/board/curveNode.vue';
import MultiCurvesNode from './nodes/board/multiCurvesNode.vue';
import BarNode from './nodes/board/barNode.vue';
+import BackgroundBarNode from './nodes/board/backgroundBarNode.vue';
import MultiBarsNode from './nodes/board/multiBarsNode.vue';
import StaticDataNode from './nodes/data/staticDataNode.vue';
import CustomBoardNode from './nodes/board/customBoardNode.vue';
@@ -805,6 +869,7 @@ import InputNode from './nodes/form/inputNode.vue';
import TimeNode from './nodes/form/timeNode.vue';
import TextNode from './nodes/form/textNode.vue';
import ImgNode from './nodes/form/imgNode.vue';
+import IconNode from './nodes/form/iconNode.vue';
import VideoNode from './nodes/form/videoNode.vue';
import TimelineNode from './nodes/form/timelineNode.vue';
import AreaNode from './nodes/other/areaNode.vue';
@@ -831,6 +896,8 @@ const baseUrl = import.meta.env.VITE_APP_BASE_API;
const uploadFileUrl = ref(baseUrl + '/resource/oss/upload'); // 上传文件服务器地址
const headers = ref(globalHeaders());
+const icons = ref([]);
+const selectIconInput = ref('');
const loading = ref(false)
const pageSettingVisible = ref(false);
const pageSettingForm = ref({});
@@ -855,6 +922,7 @@ const customData = ref([]);
const customBoard = ref([]);
const boardData = ref({});
onMounted(async () => {
+ icons.value = Object.keys(icon);
loading.value = true
getDataSourceList({
pageNum: 1,
@@ -877,7 +945,7 @@ onMounted(async () => {
.then((res) => {
let data = res.data;
boardData.value = data;
- nodes.value = data.designPagePointList?.length !== 0 ? data.designPagePointList.map(e => {
+ nodes.value = data.designPagePointList?.length !== 0 ? data.designPagePointList.sort((a, b) => a.fieldOne - b.fieldOne).map(e => {
let data = {};
let savaField = ['customData', 'options'];
let dataContent = JSON.parse(e.dataContent) || {};
@@ -1019,7 +1087,7 @@ const save = () => {
editBoardApi({
...boardData.value,
customContent: JSON.stringify(pageSettingForm.value),
- designPagePointList: nodes.value.map(e => {
+ designPagePointList: nodes.value.map((e, index) => {
let data = {};
let savaField = ['customData', 'options'];
Object.keys(e.data).forEach((key) => {
@@ -1040,6 +1108,7 @@ const save = () => {
pageConfigId: boardData.value.pageConfigId,
pagePointId: e.id,
pagePointName: e.name,
+ fieldOne: index,
width: e.dimensions.width,
height: e.dimensions.height,
posX: e.position.x,
diff --git a/src/views/boardGenerate/nodes/board/backgroundBarNode.vue b/src/views/boardGenerate/nodes/board/backgroundBarNode.vue
new file mode 100644
index 0000000..3938fe3
--- /dev/null
+++ b/src/views/boardGenerate/nodes/board/backgroundBarNode.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
diff --git a/src/views/boardGenerate/nodes/board/barNode.vue b/src/views/boardGenerate/nodes/board/barNode.vue
index 89faef6..a65ac90 100644
--- a/src/views/boardGenerate/nodes/board/barNode.vue
+++ b/src/views/boardGenerate/nodes/board/barNode.vue
@@ -221,7 +221,7 @@ const getOption = () => {
item.push(e[i]);
});
yData.forEach(e => {
- item.push(e[i]);
+ item.push(parseFloat(e[i]));
});
source.push(item);
});
diff --git a/src/views/boardGenerate/nodes/board/carouselNode.vue b/src/views/boardGenerate/nodes/board/carouselNode.vue
index 73c9c59..52ae71a 100644
--- a/src/views/boardGenerate/nodes/board/carouselNode.vue
+++ b/src/views/boardGenerate/nodes/board/carouselNode.vue
@@ -10,7 +10,7 @@
- />
+
diff --git a/src/views/boardGenerate/nodes/form/iconNode.vue b/src/views/boardGenerate/nodes/form/iconNode.vue
new file mode 100644
index 0000000..bfaa7f6
--- /dev/null
+++ b/src/views/boardGenerate/nodes/form/iconNode.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
diff --git a/src/views/boardGenerate/tool.js b/src/views/boardGenerate/tool.js
index 765ee3e..fcee145 100644
--- a/src/views/boardGenerate/tool.js
+++ b/src/views/boardGenerate/tool.js
@@ -13,6 +13,8 @@ const getOption = (e) => {
return { title: '', yNames: [], gridTop: 30, gridLeft: 5, gridBottom: 10, gridRight: 10, xName: '', yName: '', tooltip:true, legend:true };
} else if (e === 'bar' || e === 'multiBars') {
return { title: '', yNames: [], gridTop: 30, gridLeft: 5, gridBottom: 10, gridRight: 10, xName: '', yName: '', tooltip:true, legend:true };
+ } else if (e === 'backgroundBar') {
+ return { title: '', yNames: [], gridTop: 30, gridLeft: 5, gridBottom: 10, gridRight: 10, xName: '', yName: '', tooltip:true, legend:true,backgroundColor:'rgba(180, 180, 180, 0.2)' };
} else if (e === 'curve' || e === 'multiCurves') {
return { title: '', yNames: [], gridTop: 30, gridLeft: 5, gridBottom: 10, gridRight: 10, xName: '', yName: '', tooltip:true, legend:true };
} else if (e === 'pie' || e === 'nightingaleRoseDiagram') {
@@ -35,6 +37,8 @@ const getOption = (e) => {
return { text: '文字', align: '', color: '#fff' };
} else if (e === 'img') {
return { imgSrc: '' };
+ } else if (e === 'icon') {
+ return { icon: '', iconSrc: '' };
} else if (e === 'video') {
return { videoSrc: '' };
} else if (e === 'timeline') {
diff --git a/src/views/boardGenerate/view.vue b/src/views/boardGenerate/view.vue
index 88318ad..4738ab9 100644
--- a/src/views/boardGenerate/view.vue
+++ b/src/views/boardGenerate/view.vue
@@ -27,6 +27,9 @@
+
+
+
@@ -48,6 +51,9 @@
+
+
+
@@ -84,6 +90,7 @@ import MultiLinesNode from './nodes/board/multiLinesNode.vue';
import CurveNode from './nodes/board/curveNode.vue';
import MultiCurvesNode from './nodes/board/multiCurvesNode.vue';
import BarNode from './nodes/board/barNode.vue';
+import BackgroundBarNode from './nodes/board/backgroundBarNode.vue';
import MultiBarsNode from './nodes/board/multiBarsNode.vue';
import InputNode from './nodes/form/inputNode.vue';
import MapNode from './nodes/form/mapNode.vue';
@@ -91,6 +98,7 @@ import CustomBoardNode from './nodes/board/customBoardNode.vue';
import CustomDataNode from './nodes/data/customDataNode.vue';
import TextNode from './nodes/form/textNode.vue';
import ImgNode from './nodes/form/imgNode.vue';
+import IconNode from './nodes/form/iconNode.vue';
import VideoNode from './nodes/form/videoNode.vue';
import TimelineNode from './nodes/form/timelineNode.vue';
import PieNode from '@/views/boardGenerate/nodes/board/pieNode.vue';