CodeEditor.vue 1020 B

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