mirror of
https://gitee.com/myxzgzs/boyue-ui-admin-vue3
synced 2025-08-08 08:22:41 +08:00
78 lines
2.0 KiB
Vue
78 lines
2.0 KiB
Vue
<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>
|