WorkflowCard.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <ui-card class="hover:ring-accent hover:ring-2">
  3. <div class="mb-4 flex items-center">
  4. <span class="p-2 rounded-lg bg-box-transparent inline-block">
  5. <v-remixicon name="riGlobalLine" />
  6. </span>
  7. <div class="flex-grow"></div>
  8. <button>
  9. <v-remixicon name="riPlayLine" />
  10. </button>
  11. <ui-popover v-if="showDetails" class="ml-2 h-6">
  12. <template #trigger>
  13. <button>
  14. <v-remixicon name="riMoreLine" />
  15. </button>
  16. </template>
  17. <ui-list class="w-44 space-y-1">
  18. <ui-list-item
  19. v-close-popover
  20. class="cursor-pointer"
  21. @click="$emit('rename', workflow)"
  22. >
  23. <v-remixicon name="riPencilLine" class="mr-2 -ml-1" />
  24. <span>Rename</span>
  25. </ui-list-item>
  26. <ui-list-item
  27. v-close-popover
  28. class="text-red-500 cursor-pointer"
  29. @click="$emit('delete', workflow)"
  30. >
  31. <v-remixicon name="riDeleteBin7Line" class="mr-2 -ml-1" />
  32. <span>Delete</span>
  33. </ui-list-item>
  34. </ui-list>
  35. </ui-popover>
  36. </div>
  37. <router-link :to="`/workflows/${workflow.id}`">
  38. <p class="line-clamp leading-tight font-semibold" :title="workflow.name">
  39. {{ workflow.name }}
  40. </p>
  41. <p class="text-gray-600 dark:text-gray-200 leading-tight text-overflow">
  42. {{ formatDate() }}
  43. </p>
  44. </router-link>
  45. </ui-card>
  46. </template>
  47. <script setup>
  48. /* eslint-disable no-undef */
  49. import dayjs from '@/lib/dayjs';
  50. const props = defineProps({
  51. workflow: {
  52. type: Object,
  53. default: () => ({}),
  54. },
  55. showDetails: {
  56. type: Boolean,
  57. default: true,
  58. },
  59. });
  60. defineEmits(['delete', 'rename']);
  61. const formatDate = () => dayjs(props.workflow.createdAt).fromNow();
  62. </script>