Skip to content

ProCodeEditor 代码编辑器

概述

ProCodeEditor 是基于 CodeMirror 6 封装的高级代码编辑器组件,支持多种编程语言、多种主题风格,提供语法高亮、代码折叠、自动补全等功能,适用于代码编辑、配置文件编辑、JSON 数据处理等场景。

基本用法

vue
<script setup lang="ts">
import ProCodeEditor from "@/components/Pro/ProCodeEditor/index.vue";
import { ref } from "vue";

const code = ref(`{
  "name": "antdv-next-admin",
  "version": "1.0.0"
}`);
</script>

<template>
  <ProCodeEditor v-model="code" language="json" :height="300" />
</template>

支持的语言

ProCodeEditor 支持 14 种编程语言:

语言
JSONjson
JavaScriptjavascript
TypeScripttypescript
HTMLhtml
CSScss
Markdownmarkdown
SQLsql
YAMLyaml
XMLxml
Pythonpython
Javajava
PHPphp
Rustrust
Gogo

支持的主题

ProCodeEditor 支持 12 种主题:

主题说明
自动跟随auto跟随系统主题(默认)
亮色light纯亮色主题
暗色dark纯暗色主题
GitHub LightgithubGitHub 风格亮色
GitHub DarkgithubDarkGitHub 风格暗色
DraculadraculaDracula 配色
MaterialmaterialMaterial 亮色
Material DarkmaterialDarkMaterial 暗色
MonokaimonokaiMonokai 经典暗色
NordnordNord 配色
Tokyo NighttokyoNightTokyo Night 暗色
SolarizedsolarizedSolarized 亮色
Solarized DarksolarizedDarkSolarized 暗色

Props

属性类型默认值说明
modelValuestring''绑定值(代码内容)
languageSupportedLanguage'json'编辑器语言类型
themeEditorTheme'auto'编辑器主题
heightnumber | 'auto'300编辑器高度(像素或 'auto')
readonlybooleanfalse是否只读
disabledbooleanfalse是否禁用
placeholderstring''占位文本
lineNumbersbooleantrue是否显示行号
foldGutterbooleantrue是否显示代码折叠按钮
showToolbarbooleanfalse是否显示默认工具栏
showLanguageSelectbooleanfalse是否显示语言选择器
formatOnBlurbooleanfalseJSON 模式下失焦时是否自动格式化

Events

事件类型说明
update:modelValue(value: string) => void代码内容变化时触发
change(value: string) => void代码内容变化时触发
focus() => void编辑器获得焦点时触发
blur() => void编辑器失去焦点时触发
languageChange(language: SupportedLanguage) => void语言切换时触发

Slots

插槽说明
toolbar自定义工具栏内容

使用示例

JSON 编辑器(带工具栏)

vue
<script setup lang="ts">
import ProCodeEditor from "@/components/Pro/ProCodeEditor/index.vue";
import { ref } from "vue";

const jsonData = ref('{\n  "name": "示例"\n}');
</script>

<template>
  <ProCodeEditor
    v-model="jsonData"
    language="json"
    :height="400"
    show-toolbar
  />
</template>

代码预览(只读模式)

vue
<script setup lang="ts">
import ProCodeEditor from "@/components/Pro/ProCodeEditor/index.vue";

const code = `function hello() {
  console.log('Hello, World!')
}`;
</script>

<template>
  <ProCodeEditor
    :model-value="code"
    language="javascript"
    theme="github"
    readonly
    :height="200"
  />
</template>

自定义工具栏

vue
<script setup lang="ts">
import ProCodeEditor from "@/components/Pro/ProCodeEditor/index.vue";
import { ref } from "vue";

const code = ref("SELECT * FROM users WHERE status = 1");
</script>

<template>
  <ProCodeEditor v-model="code" language="sql" :height="250">
    <template #toolbar>
      <a-space>
        <a-button size="small">执行查询</a-button>
        <a-button size="small">格式化</a-button>
      </a-space>
    </template>
  </ProCodeEditor>
</template>

多主题切换

vue
<script setup lang="ts">
import ProCodeEditor from "@/components/Pro/ProCodeEditor/index.vue";
import { ref } from "vue";

const code = ref('const theme = "dracula"');
const theme = ref<"light" | "dark" | "dracula">("dark");
</script>

<template>
  <a-space direction="vertical" style="width: 100%">
    <a-radio-group v-model:value="theme" size="small">
      <a-radio-button value="light">亮色</a-radio-button>
      <a-radio-button value="dark">暗色</a-radio-button>
      <a-radio-button value="dracula">Dracula</a-radio-button>
    </a-radio-group>

    <ProCodeEditor
      v-model="code"
      language="typescript"
      :theme="theme"
      :height="300"
    />
  </a-space>
</template>

自适应高度

vue
<script setup lang="ts">
import ProCodeEditor from "@/components/Pro/ProCodeEditor/index.vue";
import { ref } from "vue";

const content = ref(`# Markdown 文档

这是一段 **Markdown** 内容。

## 特性

- 列表项 1
- 列表项 2
`);
</script>

<template>
  <ProCodeEditor
    v-model="content"
    language="markdown"
    height="auto"
    show-language-select
  />
</template>

特性说明

JSON 格式化与压缩

language="json" 时,工具栏会自动显示「格式化」和「压缩」按钮:

  • 格式化:将 JSON 格式化为缩进 2 空格的美观格式
  • 压缩:移除所有空白字符,压缩为单行

自动主题跟随

theme="auto" 时,编辑器会自动跟随系统主题设置:

  • 系统为亮色模式时使用亮色主题
  • 系统为暗色模式时使用暗色主题

代码校验

JSON 模式下内置语法校验,编辑器会实时检测 JSON 语法错误并高亮显示。

复制功能

工具栏提供「复制」按钮,一键复制编辑器内容到剪贴板。

类型定义

typescript
export type SupportedLanguage =
  | "json"
  | "javascript"
  | "typescript"
  | "html"
  | "css"
  | "markdown"
  | "sql"
  | "yaml"
  | "xml"
  | "python"
  | "java"
  | "php"
  | "rust"
  | "go";

export type EditorTheme =
  | "auto"
  | "light"
  | "dark"
  | "github"
  | "githubDark"
  | "dracula"
  | "material"
  | "materialDark"
  | "monokai"
  | "nord"
  | "tokyoNight"
  | "solarized"
  | "solarizedDark";

相关文档

基于 MIT 许可发布