Files
ComfyUI-Model-Manager/src/components/DialogModelDetail.vue
Hayden 86c11e5343 [New Feature] sub directories support (#135)
* 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
2025-02-18 16:03:07 +08:00

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>