Showing
3 changed files
with
58 additions
and
79 deletions
... | ... | @@ -11,6 +11,7 @@ import camera from '../examples/camera.app.json?url' |
11 | 11 | import particles from '../examples/particles.app.json?url' |
12 | 12 | import pong from '../examples/pong.app.json?url' |
13 | 13 | import shaders from '../examples/shaders.app.json?url' |
14 | +import { useSave } from './libs/hook/useSave.js' | |
14 | 15 | |
15 | 16 | function MenubarFile(editor) { |
16 | 17 | const strings = editor.strings |
... | ... | @@ -148,45 +149,12 @@ function MenubarFile(editor) { |
148 | 149 | * THINGS_KIT 修改 |
149 | 150 | */ |
150 | 151 | |
152 | + const { save } = useSave(editor) | |
151 | 153 | option = new UIRow() |
152 | 154 | .addClass('option') |
153 | 155 | .setTextContent(strings.getKey('menubar/file/save')) |
154 | 156 | .onClick(async function () { |
155 | - // 获取缩略图片 | |
156 | - const range = document.querySelector('#viewport').children[3] | |
157 | - const { spin, stop } = useSpin() | |
158 | - const { success, error } = useMessage() | |
159 | - try { | |
160 | - spin() | |
161 | - // 生成图片 | |
162 | - const canvasImage = await html2canvas(range, { | |
163 | - backgroundColor: null, | |
164 | - allowTaint: true, | |
165 | - useCORS: true, | |
166 | - logging: false | |
167 | - }) | |
168 | - // 上传预览图 | |
169 | - const uploadParams = new FormData() | |
170 | - uploadParams.append( | |
171 | - 'file', | |
172 | - base64toFile(canvasImage.toDataURL(), `${fetchRouteParamsLocation()}_index_preview.png`) | |
173 | - ) | |
174 | - const uploadRes = await uploadFile(uploadParams) | |
175 | - const file_json = editor.toJSON() | |
176 | - const paramsStr = window.location.search | |
177 | - const params = new URLSearchParams(paramsStr) | |
178 | - const file_uuid = params.get('three_file_uuid') | |
179 | - await saveOrUpdateThreeJsModel({ | |
180 | - id: file_uuid, | |
181 | - imageUrl: uploadRes?.fileDownloadUri, | |
182 | - data: file_json | |
183 | - }) | |
184 | - success('保存成功') | |
185 | - } catch (e) { | |
186 | - error(e?.message || e?.msg || '网络错误') | |
187 | - } finally { | |
188 | - stop() | |
189 | - } | |
157 | + save() | |
190 | 158 | }) |
191 | 159 | options.add(option) |
192 | 160 | ... | ... |
1 | 1 | import { UIPanel, UIButton } from './libs/ui.js'; |
2 | -import html2canvas from 'html2canvas' | |
3 | -import useMessage from './MessageDialog.js' | |
4 | -import { saveOrUpdateThreeJsModel } from './libs/http/api.js' | |
5 | -import { fetchRouteParamsLocation } from '@/utils' | |
6 | -import { uploadFile } from '@/api/external/contentSave/content' | |
7 | -import { base64toFile } from '../utils/Base64ToFile.js' | |
8 | -import { useSpin } from '../js/libs/spin/useSpin.js' | |
2 | +import { useSave } from './libs/hook/useSave.js'; | |
9 | 3 | |
10 | 4 | function MenubarSave(editor) { |
11 | 5 | const strings = editor.strings |
... | ... | @@ -18,44 +12,9 @@ function MenubarSave(editor) { |
18 | 12 | const saveButton = new UIButton(strings.getKey('menubar/file/save')) |
19 | 13 | container.add(saveButton) |
20 | 14 | |
15 | + const { save } = useSave(editor) | |
21 | 16 | saveButton.onClick(async function () { |
22 | - | |
23 | - // 获取缩略图片 | |
24 | - const range = document.querySelector('#viewport').children[3] | |
25 | - const { spin, stop } = useSpin() | |
26 | - const { success, error } = useMessage() | |
27 | - try { | |
28 | - spin() | |
29 | - // 生成图片 | |
30 | - const canvasImage = await html2canvas(range, { | |
31 | - backgroundColor: null, | |
32 | - allowTaint: true, | |
33 | - useCORS: true, | |
34 | - logging: false | |
35 | - }) | |
36 | - // 上传预览图 | |
37 | - const uploadParams = new FormData() | |
38 | - uploadParams.append( | |
39 | - 'file', | |
40 | - base64toFile(canvasImage.toDataURL(), `${fetchRouteParamsLocation()}_index_preview.png`) | |
41 | - ) | |
42 | - const uploadRes = await uploadFile(uploadParams) | |
43 | - const file_json = editor.toJSON() | |
44 | - const paramsStr = window.location.search | |
45 | - const params = new URLSearchParams(paramsStr) | |
46 | - const file_uuid = params.get('three_file_uuid') | |
47 | - await saveOrUpdateThreeJsModel({ | |
48 | - id: file_uuid, | |
49 | - imageUrl: uploadRes?.fileDownloadUri, | |
50 | - data: file_json | |
51 | - }) | |
52 | - success('保存成功') | |
53 | - } catch (e) { | |
54 | - error(e?.message || e?.msg || '网络错误') | |
55 | - } finally { | |
56 | - stop() | |
57 | - } | |
58 | - | |
17 | + save() | |
59 | 18 | }) |
60 | 19 | |
61 | 20 | return container; | ... | ... |
editor/js/libs/hook/useSave.js
0 → 100644
1 | +import html2canvas from 'html2canvas' | |
2 | +import useMessage from '../../MessageDialog.js' | |
3 | +import { saveOrUpdateThreeJsModel } from '../http/api.js' | |
4 | +import { fetchRouteParamsLocation } from '@/utils' | |
5 | +import { uploadFile } from '@/api/external/contentSave/content' | |
6 | +import { base64toFile } from '../../../utils/Base64ToFile.js' | |
7 | +import { useSpin } from '../spin/useSpin' | |
8 | + | |
9 | +export function useSave(editor) { | |
10 | + | |
11 | + async function save() { | |
12 | + // 获取缩略图片 | |
13 | + const range = document.querySelector('#viewport').children[3] | |
14 | + const { spin, stop } = useSpin() | |
15 | + const { success, error } = useMessage() | |
16 | + try { | |
17 | + spin() | |
18 | + // 生成图片 | |
19 | + const canvasImage = await html2canvas(range, { | |
20 | + backgroundColor: null, | |
21 | + allowTaint: true, | |
22 | + useCORS: true, | |
23 | + logging: false | |
24 | + }) | |
25 | + // 上传预览图 | |
26 | + const uploadParams = new FormData() | |
27 | + uploadParams.append( | |
28 | + 'file', | |
29 | + base64toFile(canvasImage.toDataURL(), `${fetchRouteParamsLocation()}_index_preview.png`) | |
30 | + ) | |
31 | + const uploadRes = await uploadFile(uploadParams) | |
32 | + const file_json = editor.toJSON() | |
33 | + const paramsStr = window.location.search | |
34 | + const params = new URLSearchParams(paramsStr) | |
35 | + const file_uuid = params.get('three_file_uuid') | |
36 | + await saveOrUpdateThreeJsModel({ | |
37 | + id: file_uuid, | |
38 | + imageUrl: uploadRes?.fileStaticUri, | |
39 | + data: file_json | |
40 | + }) | |
41 | + success('保存成功') | |
42 | + } catch (e) { | |
43 | + error(e?.message || e?.msg || '网络错误') | |
44 | + } finally { | |
45 | + stop() | |
46 | + } | |
47 | + } | |
48 | + | |
49 | + return { | |
50 | + save | |
51 | + } | |
52 | +} | ... | ... |