DirectiveAdd.vue 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <script setup lang="ts">
  2. import CodeEditor from '@/components/CodeEditor'
  3. import {reactive, ref} from 'vue'
  4. import {useGettext} from 'vue3-gettext'
  5. import {DeleteOutlined} from '@ant-design/icons-vue'
  6. const {$gettext} = useGettext()
  7. const emit = defineEmits(['save'])
  8. const props = defineProps(['ngx_directives', 'idx'])
  9. const directive = reactive({directive: '', params: ''})
  10. const adding = ref(false)
  11. const mode = ref('default')
  12. function add() {
  13. adding.value = true
  14. directive.directive = ''
  15. directive.params = ''
  16. }
  17. function save() {
  18. adding.value = false
  19. if (mode.value === 'multi-line') {
  20. directive.directive = ''
  21. }
  22. if (props.idx) {
  23. props.ngx_directives.splice(props.idx + 1, 0, {directive: directive.directive, params: directive.params})
  24. } else {
  25. props.ngx_directives.push({directive: directive.directive, params: directive.params})
  26. }
  27. emit('save', props.idx)
  28. }
  29. </script>
  30. <template>
  31. <div>
  32. <div class="add-directive-temp" v-if="adding">
  33. <a-form-item>
  34. <a-select v-model:value="mode" default-value="default" style="width: 180px">
  35. <a-select-option value="default">
  36. {{ $gettext('Single Directive') }}
  37. </a-select-option>
  38. <a-select-option value="multi-line">
  39. {{ $gettext('Multi-line Directive') }}
  40. </a-select-option>
  41. </a-select>
  42. </a-form-item>
  43. <a-form-item>
  44. <div class="input-wrapper">
  45. <code-editor v-if="mode==='multi-line'" default-height="100px" style="width: 100%;"
  46. v-model:content="directive.params"/>
  47. <a-input-group v-else compact>
  48. <a-input style="width: 30%" :placeholder="$gettext('Directive')"
  49. v-model:value="directive.directive"/>
  50. <a-input style="width: 70%" :placeholder="$gettext('Params')" v-model:value="directive.params"/>
  51. </a-input-group>
  52. <a-button @click="adding=false">
  53. <template #icon>
  54. <DeleteOutlined style="font-size: 14px;"/>
  55. </template>
  56. </a-button>
  57. </div>
  58. </a-form-item>
  59. </div>
  60. <a-button block v-if="!adding" @click="add">{{ $gettext('Add Directive Below') }}</a-button>
  61. <a-button type="primary" v-else block @click="save"
  62. :disabled="(mode==='default'&&(!directive.directive||!directive.params))
  63. ||(!directive.params&&mode==='multi-line')">
  64. {{ $gettext('Save Directive') }}
  65. </a-button>
  66. </div>
  67. </template>
  68. <style lang="less" scoped>
  69. .input-wrapper {
  70. display: flex;
  71. gap: 10px;
  72. align-items: center;
  73. }
  74. </style>