From 0627109b2bf1dd27adef22a2d92ca9d57254b391 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B8=85=E6=9F=AF?=
<10691891+qing_ke@user.noreply.gitee.com>
Date: Tue, 22 Apr 2025 03:36:26 +0800
Subject: [PATCH 1/8] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=80=9D=E7=BB=B4?=
=?UTF-8?q?=E5=AF=BC=E5=9B=BE=E4=B8=8B=E8=BD=BD=E5=9B=BE=E7=89=87=E7=9A=84?=
=?UTF-8?q?=E6=B8=85=E6=99=B0=E5=BA=A6=E4=BB=A5=E5=8F=8A=E8=A7=A3=E5=86=B3?=
=?UTF-8?q?=E6=8B=96=E5=8A=A8=E3=80=81=E7=BC=A9=E6=94=BE=E6=93=8D=E4=BD=9C?=
=?UTF-8?q?=E5=90=8E=E4=BC=9A=E4=B8=8B=E8=BD=BD=E5=9B=BE=E7=89=87=E4=B8=8D?=
=?UTF-8?q?=E5=85=A8=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
web/src/views/MarkMap.vue | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/web/src/views/MarkMap.vue b/web/src/views/MarkMap.vue
index a9320347..c5f61c21 100644
--- a/web/src/views/MarkMap.vue
+++ b/web/src/views/MarkMap.vue
@@ -263,29 +263,35 @@ const getModelById = (modelId) => {
}
// download SVG to png file
-const downloadImage = () => {
+const downloadImage = async() => {
+ // 先自适应思维导图到可视化区域
+ await markMap.value.fit()
+
const svgElement = document.getElementById('markmap')
- // 将 SVG 渲染到图片对象
const serializer = new XMLSerializer()
const source =
'\r\n' + serializer.serializeToString(svgRef.value)
const image = new Image()
image.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(source)
- // 将图片对象渲染
+ // 分辨率倍数,越高图片越清晰,但文件越大
+ const scale = 4
const canvas = document.createElement('canvas')
- canvas.width = svgElement.offsetWidth
- canvas.height = svgElement.offsetHeight
+ canvas.width = svgElement.offsetWidth * scale
+ canvas.height = svgElement.offsetHeight * scale
+
let context = canvas.getContext('2d')
context.clearRect(0, 0, canvas.width, canvas.height)
context.fillStyle = 'white'
context.fillRect(0, 0, canvas.width, canvas.height)
image.onload = function () {
+ // 关键:缩放 context
+ context.setTransform(scale, 0, 0, scale, 0, 0)
context.drawImage(image, 0, 0)
const a = document.createElement('a')
a.download = 'geek-ai-xmind.png'
- a.href = canvas.toDataURL(`image/png`)
+ a.href = canvas.toDataURL('image/png')
a.click()
}
}
From 51c270fb2999a1691a5e7e2830b7d4128b1f4ad7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B8=85=E6=9F=AF?=
<10691891+qing_ke@user.noreply.gitee.com>
Date: Fri, 25 Apr 2025 03:06:22 +0800
Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A8=A1=E5=9E=8B?=
=?UTF-8?q?=E9=80=89=E6=8B=A9=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=8F=90=E5=8D=87?=
=?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
web/package-lock.json | 65 ++++-
web/src/views/ChatPlus.vue | 432 +++++++++++++++++++++++++++++-
web/src/views/Index.vue | 23 +-
web/src/views/admin/ChatModel.vue | 26 +-
4 files changed, 518 insertions(+), 28 deletions(-)
diff --git a/web/package-lock.json b/web/package-lock.json
index 90514b12..82dd37b7 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -8,8 +8,12 @@
"name": "geekai-web",
"version": "0.1.0",
"dependencies": {
+ "@better-scroll/core": "^2.5.1",
+ "@better-scroll/mouse-wheel": "^2.5.1",
+ "@better-scroll/observe-dom": "^2.5.1",
+ "@better-scroll/pull-up": "^2.5.1",
+ "@better-scroll/scroll-bar": "^2.5.1",
"@element-plus/icons-vue": "^2.3.1",
- "@openai/realtime-api-beta": "github:openai/openai-realtime-api-beta",
"animate.css": "^4.1.1",
"axios": "^0.27.2",
"clipboard": "^2.0.11",
@@ -35,7 +39,6 @@
"qs": "^6.11.1",
"sortablejs": "^1.15.0",
"three": "^0.128.0",
- "v3-waterfall": "^1.3.3",
"vant": "^4.5.0",
"vue": "^3.2.13",
"vue-router": "^4.0.15",
@@ -1728,6 +1731,51 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@better-scroll/core": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmmirror.com/@better-scroll/core/-/core-2.5.1.tgz",
+ "integrity": "sha512-koKOuYA55dQ04FJRIVUpMGDr1hbCfWmfX0MGp1hKagkQSWSRpwblqACiwtggVauoj9aaJRJZ9hDsTM4weaavlg==",
+ "dependencies": {
+ "@better-scroll/shared-utils": "^2.5.1"
+ }
+ },
+ "node_modules/@better-scroll/mouse-wheel": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmmirror.com/@better-scroll/mouse-wheel/-/mouse-wheel-2.5.1.tgz",
+ "integrity": "sha512-DGnrirRMY6zMM7xwgx09D/cA9A//3J1/uDkq8iBVEyE5p0sEr/keQpjEfFHGkBRa505BnbBwdbN6f5lugEDSPw==",
+ "dependencies": {
+ "@better-scroll/core": "^2.5.1"
+ }
+ },
+ "node_modules/@better-scroll/observe-dom": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmmirror.com/@better-scroll/observe-dom/-/observe-dom-2.5.1.tgz",
+ "integrity": "sha512-TCMGFLRfpXBPIwtUV/efliUmfmrhSNI7NXdSyjdWjsLOS7dh3eFkmcom5ERVWMaXVELSmujGXLqobT+dT0C/jg==",
+ "dependencies": {
+ "@better-scroll/core": "^2.5.1"
+ }
+ },
+ "node_modules/@better-scroll/pull-up": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmmirror.com/@better-scroll/pull-up/-/pull-up-2.5.1.tgz",
+ "integrity": "sha512-1hu3xSMxdB8T391KffpNZ7g93lMwZEHjfb1F1Y4KvIkciDt8nXqkGpqrZF+YwR+EJTgYcWqUO8kgmI6XXu7Pkg==",
+ "dependencies": {
+ "@better-scroll/core": "^2.5.1"
+ }
+ },
+ "node_modules/@better-scroll/scroll-bar": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmmirror.com/@better-scroll/scroll-bar/-/scroll-bar-2.5.1.tgz",
+ "integrity": "sha512-i6r60pWG/ztkFK2j5Gj54I0LJb2jGh5TWJNQBoW0gUkp28B+0JvBFTwZn9tF7beZCBorKR7Hvvu4O9A1TJy94Q==",
+ "dependencies": {
+ "@better-scroll/core": "^2.5.1"
+ }
+ },
+ "node_modules/@better-scroll/shared-utils": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmmirror.com/@better-scroll/shared-utils/-/shared-utils-2.5.1.tgz",
+ "integrity": "sha512-AplkfSjXVYP9LZiD6JsKgmgQJ/mG4uuLmBuwLz8W5OsYc7AYTfN8kw6GqZ5OwCGoXkVhBGyd8NeC4xwYItp0aw=="
+ },
"node_modules/@ctrl/tinycolor": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
@@ -2133,13 +2181,6 @@
"node": ">= 8"
}
},
- "node_modules/@openai/realtime-api-beta": {
- "version": "0.0.0",
- "resolved": "git+ssh://git@github.com/openai/openai-realtime-api-beta.git#a5cb94824f625423858ebacb9f769226ca98945f",
- "dependencies": {
- "ws": "^8.18.0"
- }
- },
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -12711,11 +12752,6 @@
"uuid": "dist/bin/uuid"
}
},
- "node_modules/v3-waterfall": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/v3-waterfall/-/v3-waterfall-1.3.3.tgz",
- "integrity": "sha512-jUmp0xpHGkEcUxaYKGRtI5b2NvogxI/UrfoCLmpTi0UbQndDdqjwufxJvWwiJjwZQyOIPpnq9ZOFtkBwxchq3Q=="
- },
"node_modules/v8-compile-cache": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
@@ -13531,6 +13567,7 @@
"version": "8.18.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "dev": true,
"engines": {
"node": ">=10.0.0"
},
diff --git a/web/src/views/ChatPlus.vue b/web/src/views/ChatPlus.vue
index 89df83a4..59b3fa12 100644
--- a/web/src/views/ChatPlus.vue
+++ b/web/src/views/ChatPlus.vue
@@ -85,12 +85,107 @@
-