OJ在线评测系统 前端开发整合开源组件 Monaco Editor 并且开发创建题目页面

server/2024/12/22 20:54:06/

前端开发整合Monaco Editor

微软官方的

npm install monaco-editor

下载兼容版本

npm install monaco-editor@latest

 代码编辑器

先把编辑器本身安装好monaco-editor

安装插件

npm install monaco-editor-webpack-plugin

这个插件的作用是把我们的代码编译器和webpack打包在一起

便于我们去加载

查看一下官方文档

vue项目整合monaco-editor

webpack项目

现在vue.config.js中配置webpack插件

const { defineConfig } = require("@vue/cli-service");
const MonacoWebpackPlugin = require("monaco-editor-webpack-plugin");module.exports = defineConfig({transpileDependencies: true,chainWebpack(config) {config.plugin("monaco").use(new MonacoWebpackPlugin());},
});

如何使用呢

查看示例教程

我们跟刚才的文本编译器一样

写一个组件

<template><divid="code-editor"ref="codeEditorRef"style="min-height: 400px; height: 60vh"/><!--  <a-button @click="fillValue">填充值</a-button>-->
</template><script setup lang="ts">
import * as monaco from "monaco-editor";
import { onMounted, ref, toRaw, withDefaults, defineProps, watch } from "vue";/*** 定义组件属性类型*/
interface Props {value: string;language?: string;handleChange: (v: string) => void;
}/*** 给组件指定初始值*/
const props = withDefaults(defineProps<Props>(), {value: () => "",language: () => "java",handleChange: (v: string) => {console.log(v);},
});const codeEditorRef = ref();
const codeEditor = ref();// const fillValue = () => {
//   if (!codeEditor.value) {
//     return;
//   }
//   // 改变值
//   toRaw(codeEditor.value).setValue("新的值");
// };watch(() => props.language,() => {if (codeEditor.value) {monaco.editor.setModelLanguage(toRaw(codeEditor.value).getModel(),props.language);}}
);onMounted(() => {if (!codeEditorRef.value) {return;}// Hover on each property to see its docs!codeEditor.value = monaco.editor.create(codeEditorRef.value, {value: props.value,language: props.language,automaticLayout: true,colorDecorators: true,minimap: {enabled: true,},readOnly: false,theme: "vs-dark",// lineNumbers: "off",// roundedSelection: false,// scrollBeyondLastLine: false,});// 编辑 监听内容变化codeEditor.value.onDidChangeModelContent(() => {props.handleChange(toRaw(codeEditor.value).getValue());});
});
</script><style scoped></style>

在我们的主页中去引入

<template><div class="home"><MdEditor :value="value" :handle-change="onChange" /><img alt="Vue logo" src="../assets/logo.png" /><CodeEditor /></div>
</template><script setup lang="ts">
import { defineComponent, ref } from "vue";
import MdEditor from "@/components/MdEditor.vue";
import CodeEditor from "@/components/CodeEditor.vue";const value = ref();
const onChange = (v: string) => {value.value = v;
};
</script>

和md编辑器一样

也要接受父组件的传值

把显示的输入

实时得到的结果交给父组件去控制

实时得到代码

开发创建题目页面

我们用插件自动根据后端生成代码

我们还是使用openAPI

终端指令

openapi --input http://localhost:8121/api/v2/api-docs --output ./generated --client axios

接下来我们开发页面

{"answer": "","content": "","judgeCase": [{"input": "","output": ""}],"judgeConfig": [{"memoryLimit": 0,"stackLimit": 0,"timeLimit": 0}],"tags": [],"title": ""
}

vue文件

<template><div id="文件名的小写"></div>
</template><script setup lang="ts"></script><style scoped></style>

在JetBrains系列编辑器中打开设置

搜索live Tempaltes

先创建一个自定义模版组

在组下创建代码模版

输入缩写 即可生成模版代码


http://www.ppmy.cn/server/124931.html

相关文章

HTML5 Video标签的属性、方法和事件汇总,以及常用视频插件推荐

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

IMX6UL开发板中断实验(三)

在上一节我们编写完成了中断驱动文件和中断驱动头文件&#xff0c;那么这一讲我们将继续中断实验 下面就是GPIO的中断设置&#xff0c;第一步要设置中断GPIO的触发方式&#xff0c;首先我们先看到寄存器&#xff0c;一共有GPIOx_ICR1和ICR2&#xff0c; 图如上&#xff0c;ICR1…

Spark_UDF处理缺失值或空值

在Apache Spark中&#xff0c;处理空值&#xff08;null&#xff09;是一个常见的需求&#xff0c;尤其是在使用用户定义的函数&#xff08;UDF&#xff09;时。 在UDF内部检查空值&#xff1a;在UDF中&#xff0c;你应该检查输入值是否为空&#xff0c;并相应地处理。例如&am…

图解C#高级教程(二):事件

在现实生活当中&#xff0c;有一些事情发生时&#xff0c;会连带另一些事情的发生。例如&#xff0c;当某国的总统发生换届时&#xff0c;不同党派会表现出不同的行为。两者构成了“因果”关系&#xff0c;因为发生了A&#xff0c;所以发生了B。在编程语言当中&#xff0c;具有…

贪心+构造,CF 761D - Dasha and Very Difficult Problem

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 761D - Dasha and Very Difficult Problem 二、解题报告 1、思路分析 如…

C#里使用最简单的线程调用界面更新的方法

在C#的界面应用里&#xff0c;经常会遇到线程里计算得到的数据&#xff0c;要更新到界面上。 但是线程与界面线程一般不是同一个线程&#xff0c;不能直接调用更新&#xff0c;需要采用委托的方式来更新。 意思就是说&#xff0c;要线程把数据定义更新的方法之后&#xff0c;…

第18届全国热管会议举办,积鼎科技分享「环路热管相变传热仿真」前沿实践

第18届全国热管会议于9月20日至22日在海滨城市日照举行&#xff0c;该会议由中国工程热物理学会热管专业组主办&#xff0c;山东大学和日照市科学技术协会联合承办&#xff0c;汇聚了全国热管技术领域的专家学者及企业代表。在该会议上&#xff0c;积鼎科技在热管仿真方面的成果…

数据结构 ——— C语言实现无哨兵位单向不循环链表

目录 前言 动态顺序表的缺陷 单链表的概念 单链表中节点的结构 单链表逻辑结构示意图​编辑 实现单链表前的准备工作 实现单链表 1. 定义节点的指针 2. 创建节点 3. 打印单链表中的所有数据 4. 在单链表头部插入数据 5. 在单链表尾部插入数据 6. 在单链表头部删除数…