CodeEditor.vue 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <script setup lang="ts">
  2. import ace from 'ace-builds'
  3. import extSearchboxUrl from 'ace-builds/src-noconflict/ext-searchbox?url'
  4. import { VAceEditor } from 'vue3-ace-editor'
  5. import 'ace-builds/src-noconflict/mode-nginx'
  6. import 'ace-builds/src-noconflict/theme-monokai'
  7. const props = defineProps<{
  8. content?: string
  9. defaultHeight?: string
  10. readonly?: boolean
  11. placeholder?: string
  12. }>()
  13. const emit = defineEmits(['update:content'])
  14. const value = computed({
  15. get() {
  16. return props.content ?? ''
  17. },
  18. set(v) {
  19. emit('update:content', v)
  20. },
  21. })
  22. onMounted(() => {
  23. try {
  24. ace.config.setModuleUrl('ace/ext/searchbox', extSearchboxUrl)
  25. }
  26. catch (error) {
  27. console.error('Failed to initialize Ace editor:', error)
  28. }
  29. })
  30. </script>
  31. <template>
  32. <VAceEditor
  33. v-model:value="value"
  34. lang="nginx"
  35. theme="monokai"
  36. :style="{
  37. minHeight: defaultHeight || '100vh',
  38. borderRadius: '5px',
  39. }"
  40. :readonly="readonly"
  41. :placeholder="placeholder"
  42. />
  43. </template>
  44. <style lang="less" scoped>
  45. :deep(.ace_placeholder) {
  46. z-index: 1;
  47. position: relative;
  48. }
  49. </style>