优化工作流卡片和对话框中的事件类型显示逻辑

This commit is contained in:
jxxghp
2025-07-23 15:33:43 +08:00
parent 1bde3492da
commit ac7c330e2f
5 changed files with 60 additions and 4 deletions

View File

@@ -6,6 +6,10 @@ import ForkWorkflowDialog from '../dialog/ForkWorkflowDialog.vue'
// 输入参数
const props = defineProps({
workflow: Object as PropType<WorkflowShare>,
eventTypes: {
type: Array as PropType<Array<{ title: string; value: string }>>,
default: () => [],
},
})
// 定义删除事件
@@ -135,6 +139,7 @@ function doDelete() {
v-if="forkWorkflowDialog"
v-model="forkWorkflowDialog"
:workflow="props.workflow"
:event-types="props.eventTypes"
@close="forkWorkflowDialog = false"
@fork="finishForkWorkflow"
@delete="doDelete"

View File

@@ -16,6 +16,10 @@ const props = defineProps({
required: true,
type: Object as PropType<Workflow>,
},
eventTypes: {
type: Array as PropType<Array<{ title: string; value: string }>>,
default: () => [],
},
})
// 定义事件
@@ -39,6 +43,12 @@ const shareDialog = ref(false)
// 加载中
const loading = ref(false)
// 根据事件类型值获取显示文本
const getEventTypeText = (eventTypeValue: string) => {
const eventType = props.eventTypes.find(item => item.value === eventTypeValue)
return eventType ? eventType.title : eventTypeValue
}
// 编辑任务
function handleEdit(item: Workflow) {
editDialog.value = true
@@ -305,7 +315,7 @@ const resolveProgress = (item: Workflow) => {
</span>
<span v-else-if="workflow?.trigger_type === 'event'">
<VIcon icon="mdi-calendar-check" size="small" class="me-1" />
{{ workflow?.event_type }}
{{ getEventTypeText(workflow?.event_type || '') }}
</span>
<span v-else-if="workflow?.trigger_type === 'manual'">
<VIcon icon="mdi-hand-pointing-up" size="small" class="me-1" />

View File

@@ -13,6 +13,10 @@ const { t } = useI18n()
// 输入参数
const props = defineProps({
workflow: Object as PropType<WorkflowShare>,
eventTypes: {
type: Array as PropType<Array<{ title: string; value: string }>>,
default: () => [],
},
})
// 定义事件
@@ -32,6 +36,12 @@ const processing = ref(false)
// 删除中
const deleting = ref(false)
// 根据事件类型值获取显示文本
const getEventTypeText = (eventTypeValue: string) => {
const eventType = props.eventTypes.find(item => item.value === eventTypeValue)
return eventType ? eventType.title : eventTypeValue
}
// 流程图相关
const { nodes, edges } = useVueFlow()
@@ -200,7 +210,7 @@ async function doDelete() {
</span>
<span v-else-if="props.workflow?.trigger_type === 'event'">
<VIcon icon="mdi-calendar-check" size="small" class="me-1" />
{{ props.workflow?.event_type }}
{{ getEventTypeText(props.workflow?.event_type || '') }}
</span>
<span v-else-if="props.workflow?.trigger_type === 'manual'">
<VIcon icon="mdi-hand-pointing-up" size="small" class="me-1" />

View File

@@ -26,6 +26,18 @@ const addDialog = ref(false)
// 所有任务
const workflowList = ref<Workflow[]>([])
// 事件类型列表
const eventTypes = ref<Array<{ title: string; value: string }>>([])
// 加载事件类型列表
async function loadEventTypes() {
try {
eventTypes.value = await api.get('workflow/event_types')
} catch (error) {
console.error('Failed to load event types:', error)
}
}
// 加载数据
async function fetchData() {
try {
@@ -51,6 +63,7 @@ useDynamicButton({
})
onMounted(() => {
loadEventTypes()
fetchData()
})
@@ -62,7 +75,7 @@ onActivated(() => {
<div>
<LoadingBanner v-if="!isRefreshed" class="mt-12" />
<div v-if="workflowList.length > 0 && isRefreshed" class="grid gap-4 grid-workflow-card px-2">
<WorkflowTaskCard v-for="item in workflowList" :key="item.id" :workflow="item" @refresh="fetchData" />
<WorkflowTaskCard v-for="item in workflowList" :key="item.id" :workflow="item" :event-types="eventTypes" @refresh="fetchData" />
</div>
<NoDataFound
v-if="workflowList.length === 0 && isRefreshed"

View File

@@ -41,6 +41,18 @@ const isRefreshed = ref(false)
const dataList = ref<WorkflowShare[]>([])
const currData = ref<WorkflowShare[]>([])
// 事件类型列表
const eventTypes = ref<Array<{ title: string; value: string }>>([])
// 加载事件类型列表
async function loadEventTypes() {
try {
eventTypes.value = await api.get('workflow/event_types')
} catch (error) {
console.error('Failed to load event types:', error)
}
}
// 拼装参数
function getParams() {
let params = {
@@ -121,6 +133,7 @@ function removeData(id: string) {
}
onActivated(() => {
loadEventTypes()
fetchData({ done: () => {} })
})
</script>
@@ -133,7 +146,12 @@ onActivated(() => {
<template #empty />
<div v-if="dataList.length > 0" class="grid gap-4 grid-workflow-share-card" tabindex="0">
<div v-for="data in dataList" :key="data.id">
<WorkflowShareCard :workflow="data" @delete="removeData(data.id || '')" @update="emit('update')" />
<WorkflowShareCard
:workflow="data"
:event-types="eventTypes"
@delete="removeData(data.id || '')"
@update="emit('update')"
/>
</div>
</div>
<NoDataFound