* feat: add close all dialog * feat: add new ui toggle setting * feat: add tree display ui * feat: add search and sort * feat: change model data structure * pref: Optimize model data structure * feat: set sub folder by choose
97 lines
2.6 KiB
Vue
97 lines
2.6 KiB
Vue
<template>
|
|
<ResponseScroll class="h-full">
|
|
<div class="px-8">
|
|
<ModelContent
|
|
v-model:editable="editable"
|
|
:model="modelContent"
|
|
@submit="handleSave"
|
|
@reset="handleCancel"
|
|
>
|
|
<template #action="{ metadata }">
|
|
<template v-if="editable">
|
|
<Button :label="$t('cancel')" type="reset"></Button>
|
|
<Button :label="$t('save')" type="submit"></Button>
|
|
</template>
|
|
<template v-else>
|
|
<Button
|
|
v-show="metadata.modelPage"
|
|
icon="pi pi-eye"
|
|
@click="openModelPage(metadata.modelPage)"
|
|
></Button>
|
|
<Button
|
|
icon="pi pi-plus"
|
|
@click.stop="addModelNode(model)"
|
|
></Button>
|
|
<Button
|
|
icon="pi pi-copy"
|
|
@click.stop="copyModelNode(model)"
|
|
></Button>
|
|
<Button
|
|
v-show="model.preview"
|
|
icon="pi pi-file-import"
|
|
@click.stop="loadPreviewWorkflow(model)"
|
|
></Button>
|
|
<Button
|
|
icon="pi pi-pen-to-square"
|
|
@click="editable = true"
|
|
></Button>
|
|
<Button
|
|
severity="danger"
|
|
icon="pi pi-trash"
|
|
@click="handleDelete"
|
|
></Button>
|
|
</template>
|
|
</template>
|
|
</ModelContent>
|
|
</div>
|
|
</ResponseScroll>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import ModelContent from 'components/ModelContent.vue'
|
|
import ResponseScroll from 'components/ResponseScroll.vue'
|
|
import { genModelUrl, useModelNodeAction, useModels } from 'hooks/model'
|
|
import { useRequest } from 'hooks/request'
|
|
import Button from 'primevue/button'
|
|
import { BaseModel, Model, WithResolved } from 'types/typings'
|
|
import { computed, ref } from 'vue'
|
|
|
|
interface Props {
|
|
model: Model
|
|
}
|
|
const props = defineProps<Props>()
|
|
|
|
const { remove, update } = useModels()
|
|
|
|
const editable = ref(false)
|
|
|
|
const modelDetailUrl = genModelUrl(props.model)
|
|
const { data: extraInfo } = useRequest(modelDetailUrl, {
|
|
method: 'GET',
|
|
})
|
|
|
|
const modelContent = computed(() => {
|
|
return Object.assign({}, props.model, extraInfo.value)
|
|
})
|
|
|
|
const handleCancel = () => {
|
|
editable.value = false
|
|
}
|
|
|
|
const handleSave = async (data: WithResolved<BaseModel>) => {
|
|
await update(modelContent.value, data)
|
|
editable.value = false
|
|
}
|
|
|
|
const handleDelete = async () => {
|
|
await remove(props.model)
|
|
}
|
|
|
|
const openModelPage = (url: string) => {
|
|
window.open(url, '_blank')
|
|
}
|
|
|
|
const { addModelNode, copyModelNode, loadPreviewWorkflow } =
|
|
useModelNodeAction()
|
|
</script>
|