DirectiveEditor.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <script setup lang="ts">
  2. import type { NgxDirective } from '@/api/ngx'
  3. import Draggable from 'vuedraggable'
  4. import DirectiveAdd from './DirectiveAdd.vue'
  5. import DirectiveEditorItem from './DirectiveEditorItem.vue'
  6. import { useDirectiveStore } from './store'
  7. defineProps<{
  8. readonly?: boolean
  9. context?: string
  10. }>()
  11. const directiveStore = useDirectiveStore()
  12. const { curIdx } = storeToRefs(directiveStore)
  13. const ngxDirectives = defineModel<NgxDirective[]>('directives', {
  14. default: reactive([]),
  15. })
  16. onMounted(() => {
  17. directiveStore.getNginxDirectivesDocsMap()
  18. })
  19. function addDirective(directive: NgxDirective) {
  20. ngxDirectives.value.push({ ...directive })
  21. }
  22. function removeDirective(index: number) {
  23. ngxDirectives.value.splice(index, 1)
  24. }
  25. </script>
  26. <template>
  27. <div>
  28. <h3>{{ $gettext('Directives') }}</h3>
  29. <Draggable
  30. v-model:list="ngxDirectives"
  31. item-key="name"
  32. class="list-group"
  33. ghost-class="ghost"
  34. handle=".anticon-holder"
  35. >
  36. <template #item="{ index }">
  37. <DirectiveEditorItem
  38. v-model:directive="ngxDirectives[index]"
  39. v-auto-animate
  40. :index="index"
  41. :readonly="readonly"
  42. :context="context"
  43. @click="curIdx = index"
  44. @remove="removeDirective(index)"
  45. >
  46. <template
  47. v-if="$slots.directiveSuffix"
  48. #suffix="{ directive }"
  49. >
  50. <slot
  51. name="directiveSuffix"
  52. :directive="directive"
  53. />
  54. </template>
  55. </DirectiveEditorItem>
  56. </template>
  57. </Draggable>
  58. <DirectiveAdd
  59. v-if="!readonly"
  60. v-auto-animate
  61. @save="addDirective"
  62. />
  63. </div>
  64. </template>
  65. <style lang="less" scoped>
  66. </style>