From fc45e2a528ad95e9a1def1023271f19cf4d9e244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A1=97=E8=A7=92=E5=B0=8F=E6=9E=97?= <1013335014@qq.com> Date: Tue, 12 Dec 2023 09:55:33 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=E6=94=AF=E6=8C=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=BD=93=E8=8A=82=E7=82=B9=E5=9B=BE=E7=89=87=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E5=A4=B1=E8=B4=A5=E6=97=B6=E6=98=BE=E7=A4=BA=E7=9A=84?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/constants/defaultOptions.js | 4 ++- .../core/render/node/nodeCreateContents.js | 27 +++++++++++++++---- web/src/assets/img/图片加载失败.svg | 1 + web/src/pages/Edit/components/Edit.vue | 1 + 4 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 web/src/assets/img/图片加载失败.svg diff --git a/simple-mind-map/src/constants/defaultOptions.js b/simple-mind-map/src/constants/defaultOptions.js index 67c8298e..33711154 100644 --- a/simple-mind-map/src/constants/defaultOptions.js +++ b/simple-mind-map/src/constants/defaultOptions.js @@ -236,5 +236,7 @@ export const defaultOpt = { NOT_ACTIVE : 不激活新创建的节点 ACTIVE_ONLY : 只激活新创建的节点,不进入编辑模式 */ - createNewNodeBehavior: CONSTANTS.CREATE_NEW_NODE_BEHAVIOR.DEFAULT + createNewNodeBehavior: CONSTANTS.CREATE_NEW_NODE_BEHAVIOR.DEFAULT, + // 当节点图片加载失败时显示的默认图片 + defaultNodeImage: '' } diff --git a/simple-mind-map/src/core/render/node/nodeCreateContents.js b/simple-mind-map/src/core/render/node/nodeCreateContents.js index 1052ea55..d6528a5f 100644 --- a/simple-mind-map/src/core/render/node/nodeCreateContents.js +++ b/simple-mind-map/src/core/render/node/nodeCreateContents.js @@ -6,18 +6,35 @@ import { checkIsRichText, isUndef } from '../../../utils' -import { Image, SVG, A, G, Rect, Text, ForeignObject } from '@svgdotjs/svg.js' +import { + Image as SVGImage, + SVG, + A, + G, + Rect, + Text, + ForeignObject +} from '@svgdotjs/svg.js' import iconsSvg from '../../../svg/icons' import { CONSTANTS, commonCaches } from '../../../constants/constant' // 创建图片节点 function createImgNode() { - let img = this.getData('image') + const img = this.getData('image') if (!img) { return } - let imgSize = this.getImgShowSize() - let node = new Image().load(img).size(...imgSize) + const imgSize = this.getImgShowSize() + const node = new SVGImage().load(img).size(...imgSize) + // 如果指定了加载失败显示的图片,那么加载一下图片检测是否失败 + const { defaultNodeImage } = this.mindMap.opt + if (defaultNodeImage) { + const imgEl = new Image() + imgEl.onerror = () => { + node.load(defaultNodeImage) + } + imgEl.src = img + } if (this.getData('imageTitle')) { node.attr('title', this.getData('imageTitle')) } @@ -71,7 +88,7 @@ function createIconNode() { node = SVG(src) } else { // 图片图标 - node = new Image().load(src) + node = new SVGImage().load(src) } node.size(iconSize, iconSize) node.on('click', e => { diff --git a/web/src/assets/img/图片加载失败.svg b/web/src/assets/img/图片加载失败.svg new file mode 100644 index 00000000..1b0f7d8a --- /dev/null +++ b/web/src/assets/img/图片加载失败.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/pages/Edit/components/Edit.vue b/web/src/pages/Edit/components/Edit.vue index 20e3805c..f5018434 100644 --- a/web/src/pages/Edit/components/Edit.vue +++ b/web/src/pages/Edit/components/Edit.vue @@ -308,6 +308,7 @@ export default { customInnerElsAppendTo: null, enableAutoEnterTextEditWhenKeydown: true, customHandleClipboardText: handleClipboardText, + defaultNodeImage: require('../../../assets/img/图片加载失败.svg'), handleIsSplitByWrapOnPasteCreateNewNode: () => { return this.$confirm( this.$t('edit.splitByWrap'),