Skip to content

Commit 93d11b1

Browse files
committed
feat: monaco-editor -> ace-builds
1 parent bb374c4 commit 93d11b1

10 files changed

Lines changed: 246 additions & 363 deletions

File tree

components.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export {}
99
declare module 'vue' {
1010
export interface GlobalComponents {
1111
BusinessComp: typeof import('./src/components/left-comp/business-comp/index.vue')['default']
12+
CodeEditor: typeof import('./src/components/code-editor/index.vue')['default']
1213
ContainerComp: typeof import('./src/components/left-comp/container-comp/index.vue')['default']
1314
DraggableTransition: typeof import('./src/components/common/draggable-transition/index.vue')['default']
1415
ElAside: typeof import('element-plus/es')['ElAside']

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333
"@vitejs/plugin-vue-jsx": "^5.0.1",
3434
"@vueuse/core": "^13.6.0",
3535
"@vueuse/integrations": "^13.6.0",
36+
"ace-builds": "^1.43.2",
3637
"animate.css": "^4.1.1",
3738
"axios": "^1.11.0",
3839
"clsx": "^2.1.1",
3940
"element-plus": "^2.10.4",
4041
"lodash-es": "^4.17.21",
41-
"monaco-editor": "^0.52.2",
4242
"nanoid": "^5.1.5",
4343
"normalize.css": "^8.0.1",
4444
"nprogress": "^0.2.0",

pnpm-lock.yaml

Lines changed: 160 additions & 160 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<template>
2+
<div ref="editorEl" class="ace-editor"></div>
3+
</template>
4+
5+
<script setup>
6+
import { ref, onMounted, watch, onUnmounted } from 'vue';
7+
import ace from 'ace-builds';
8+
import 'ace-builds/src-noconflict/theme-monokai'; // 主题
9+
import 'ace-builds/src-noconflict/mode-javascript'; // 语言模式
10+
11+
const props = defineProps({
12+
modelValue: String, // v-model 绑定
13+
mode: { type: String, default: 'javascript' }, // 语言模式
14+
theme: { type: String, default: 'monokai' }, // 主题
15+
readOnly: { type: Boolean, default: false }, // 只读模式
16+
vid: { type: [String, Number], default: '' }
17+
});
18+
19+
const emit = defineEmits(['update:modelValue']);
20+
const editorEl = ref(null);
21+
let editor = null;
22+
23+
onMounted(() => {
24+
// 初始化编辑器
25+
editor = ace.edit(editorEl.value, {
26+
value: props.modelValue || '',
27+
mode: `ace/mode/${props.mode}`,
28+
theme: `ace/theme/${props.theme}`,
29+
readOnly: props.readOnly,
30+
fontSize: 14,
31+
});
32+
33+
// 监听内容变化
34+
editor.session.on('change', () => {
35+
const value = editor.getValue();
36+
if (value.trim().startsWith('{') || value.trim().startsWith('[')) {
37+
try {
38+
const formatted = JSON.stringify(JSON.parse(value), null, 2);
39+
if (value !== formatted) {
40+
editor.setValue(formatted, 1); // 第二个参数 1 表示不记录历史
41+
}
42+
} catch (e) {
43+
// 忽略非 JSON 内容
44+
}
45+
}
46+
emit('update:modelValue', value);
47+
});
48+
});
49+
50+
// 监听外部值变化
51+
watch(() => props.modelValue, (newVal) => {
52+
if (editor && newVal !== editor.getValue()) {
53+
editor.setValue(newVal);
54+
}
55+
});
56+
57+
// 销毁编辑器
58+
onUnmounted(() => {
59+
editor?.destroy();
60+
});
61+
</script>
62+
63+
<style scoped>
64+
.ace-editor {
65+
width: 100%;
66+
height: 500px;
67+
border: 1px solid #ddd;
68+
}
69+
</style>

src/components/header-button-area/index.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import { localKey, useVisualData } from '@/hooks/useVisualData';
7979
import { useLayoutTypeStore } from '@/stores/layoutType';
8080
import { LayoutTypeEnum } from '@/enums';
8181
import { useModal } from '@/hooks/useModal';
82+
import CodeEditor from '@/components/code-editor/index.vue'
8283
8384
defineOptions({
8485
name: 'HeaderButtonArea',
@@ -127,7 +128,7 @@ const handleCommand = (command: string) => {
127128
footer: null,
128129
content: () => (
129130
<div class= { 'flex justify-center'} >
130-
131+
<CodeEditor />
131132
</div>
132133
),
133134
});

src/components/monaco-editor/index.module.scss

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/components/monaco-editor/index.tsx

Lines changed: 0 additions & 148 deletions
This file was deleted.

src/components/monaco-editor/monaco.ts

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/views/container/simulator-editor/index.vue

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ import { $$dropdown, DropdownOption } from '@/utils/dropdown-service'
6262
import type { VisualEditorBlockData } from '@/utils/visual-editor'
6363
import { ref, watch, watchEffect } from 'vue'
6464
import { useModal } from '@/hooks/useModal'
65-
import MonacoEditor from '@/components/monaco-editor'
65+
// import MonacoEditor from '@/components/monaco-editor'
66+
import CodeEditor from '@/components/code-editor/index.vue'
6667
import CompRender from '@/views/comp-render'
6768
import SlotItem from './slot-item.vue'
6869
import DraggableTransition from '@/components/common/draggable-transition/index.vue'
@@ -206,19 +207,15 @@ const onContextmenuBlock = (
206207
label="查看节点"
207208
icon="el-icon-view"
208209
{...{
209-
onClick: () =>
210+
onClick: () =>
210211
useModal({
211212
title: '节点信息',
212213
footer: null,
213214
props: {
214215
width: 600,
215216
},
216217
content: () => (
217-
<MonacoEditor
218-
code={JSON.stringify(block)}
219-
layout={{ width: 530, height: 600 }}
220-
vid={block._vid}
221-
/>
218+
<CodeEditor modelValue={JSON.stringify(block,null,2)} vid={block._vid}/>
222219
),
223220
}),
224221
}}

vite.config.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import WindiCSS from 'vite-plugin-windicss'
1111
import { resolve } from 'path'
1212
import legacy from '@vitejs/plugin-legacy'
1313

14-
const prefix = `monaco-editor/esm/vs`;
14+
// const prefix = `monaco-editor/esm/vs`;
1515

1616
// https://vite.dev/config/
1717
export default defineConfig({
@@ -71,20 +71,20 @@ export default defineConfig({
7171
preview: resolve(__dirname, 'preview/index.html'),
7272
},
7373
output: {
74-
manualChunks: {
75-
jsonWorker: [`${prefix}/language/json/json.worker`],
76-
cssWorker: [`${prefix}/language/css/css.worker`],
77-
htmlWorker: [`${prefix}/language/html/html.worker`],
78-
tsWorker: [`${prefix}/language/typescript/ts.worker`],
79-
editorWorker: [`${prefix}/editor/editor.worker`],
80-
},
74+
// manualChunks: {
75+
// jsonWorker: [`${prefix}/language/json/json.worker`],
76+
// cssWorker: [`${prefix}/language/css/css.worker`],
77+
// htmlWorker: [`${prefix}/language/html/html.worker`],
78+
// tsWorker: [`${prefix}/language/typescript/ts.worker`],
79+
// editorWorker: [`${prefix}/editor/editor.worker`],
80+
// },
8181
},
8282
},
8383
},
8484
// 强制 Vite 在开发服务器启动时对指定的依赖包进行预编译、代码合并、依赖缓存(结果存储在 node_modules/.vite 目录,后续启动直接复用)
8585
optimizeDeps: {
8686
include: ['@vueuse/core', 'element-plus', 'vant', 'lodash-es', 'vuedraggable'],
87-
exclude: ['monaco-editor']
87+
// exclude: ['monaco-editor']
8888
},
8989
resolve: {
9090
alias: {

0 commit comments

Comments
 (0)