78 lines
2.0 KiB
Vue
Raw Normal View History

2025-03-24 15:39:53 +08:00
<template>
<div style="width: 100%; height: calc(100vh - 160px)">
<Tinyflow
ref="tinyflowRef"
:className="'custom-class'"
:style="{ width: '100%', height: '100%' }"
v-if="initialData"
:data="initialData"
:provider="provider"
/>
</div>
<div class="absolute top-30px right-30px">
<el-button @click="updateWorkflowModel" type="primary" v-hasPermi="['ai:workflow:update']">保存</el-button>
<el-button @click="testWorkflowModel" type="primary" v-hasPermi="['ai:workflow:test']">测试</el-button>
</div>
</template>
<script setup lang="ts">
import Tinyflow from '@/components/Tinyflow/Tinyflow.vue'
import * as WorkflowApi from '@/api/ai/workflow'
import { ApiKeyApi } from '@/api/ai/model/apiKey'
const route = useRoute()
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
const tinyflowRef = ref()
const provider = ref({ llm: () => [], knowledge: () => [], internal: () => [] })
const initialData = ref()
const loadData = async () => {
try {
const [apiKeys, flowData] = await Promise.all([
ApiKeyApi.getApiKeySimpleList(),
WorkflowApi.getWorkflow(route.params.id)
])
// 更新 provider
provider.value = {
llm: () =>
apiKeys.map(({ id, name }) => ({
value: id,
label: name
})),
knowledge: () => [],
internal: () => []
}
// 更新流程图数据
initialData.value = JSON.parse(flowData.model)
} catch {}
}
const updateWorkflowModel = async () => {
try {
const model = tinyflowRef.value.getData()
const data = {
model: JSON.stringify(model),
id: route.params.id
}
await message.confirm('确认保存流程模型?')
await WorkflowApi.updateWorkflowModel(data)
message.success(t('common.updateSuccess'))
await loadData()
} catch {}
}
const testWorkflowModel = () => {
// TODO @lesan 测试
}
watchEffect(() => {
if (route.params.id) {
loadData()
}
})
</script>