WorkflowEditBlock.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <template>
  2. <div class="px-4 overflow-auto scroll pb-1">
  3. <div class="sticky top-0 z-20 bg-white border-b border-gray-100 pb-4 mb-4">
  4. <button class="mr-2 align-middle" @click="$emit('close')">
  5. <v-remixicon name="riArrowLeftLine" />
  6. </button>
  7. <p class="font-semibold inline-block align-middle">
  8. {{ data.name }}
  9. </p>
  10. </div>
  11. <component
  12. :is="data.editComponent"
  13. v-if="blockData"
  14. v-model:data="blockData"
  15. />
  16. </div>
  17. </template>
  18. <script>
  19. import { computed } from 'vue';
  20. const editComponents = require.context(
  21. './edit',
  22. false,
  23. /^(?:.*\/)?Edit[^/]*\.vue$/
  24. );
  25. const components = editComponents.keys().reduce((acc, key) => {
  26. const name = key.replace(/(.\/)|\.vue$/g, '');
  27. const componentObj = editComponents(key)?.default ?? {};
  28. acc[name] = componentObj;
  29. return acc;
  30. }, {});
  31. export default {
  32. components,
  33. };
  34. </script>
  35. <script setup>
  36. const props = defineProps({
  37. data: {
  38. type: Object,
  39. default: () => ({}),
  40. },
  41. });
  42. const emit = defineEmits(['close', 'update']);
  43. const blockData = computed({
  44. get() {
  45. return props.data.data || {};
  46. },
  47. set(value) {
  48. emit('update', value);
  49. },
  50. });
  51. </script>