fix: 修复场景提示词

This commit is contained in:
kongweigen
2026-01-18 22:50:07 +08:00
parent f2b8bfaa25
commit 7e1220091b
7 changed files with 92 additions and 14 deletions

View File

@@ -108,8 +108,12 @@ export const dramaAPI = {
return request.put(`/scenes/${sceneId}`, data)
},
generateSceneImage(data: { scene_id: string; prompt?: string; model?: string }) {
return request.post('/scenes/generate-image', data)
generateSceneImage(data: { scene_id: number; prompt?: string; model?: string }) {
return request.post<{ image_generation: { id: number } }>('/scenes/generate-image', data)
},
updateScenePrompt(sceneId: string, prompt: string) {
return request.put(`/scenes/${sceneId}/prompt`, { prompt })
},
deleteScene(sceneId: string) {

View File

@@ -68,7 +68,9 @@ export default {
tip: '提示',
status: '状态',
createdAt: '创建时间',
updatedAt: '更新时间'
updatedAt: '更新时间',
name: '名称',
description: '描述'
},
settings: {
title: '设置',

View File

@@ -241,10 +241,10 @@
<el-dialog v-model="addSceneDialogVisible" :title="$t('common.add')" width="600px">
<el-form :model="newScene" label-width="100px">
<el-form-item :label="$t('common.name')">
<el-input v-model="newScene.name" :placeholder="$t('common.name')" />
<el-input v-model="newScene.location" :placeholder="$t('common.name')" />
</el-form-item>
<el-form-item :label="$t('common.description')">
<el-input v-model="newScene.description" type="textarea" :rows="4" :placeholder="$t('common.description')" />
<el-input v-model="newScene.prompt" type="textarea" :rows="4" :placeholder="$t('common.description')" />
</el-form-item>
</el-form>
<template #footer>
@@ -285,8 +285,8 @@ const newCharacter = ref({
})
const newScene = ref({
name: '',
description: ''
location: '',
prompt: ''
})
const episodesCount = computed(() => drama.value?.episodes?.length || 0)
@@ -494,14 +494,14 @@ const deleteCharacter = async (character: any) => {
const openAddSceneDialog = () => {
newScene.value = {
name: '',
description: ''
location: '',
prompt: ''
}
addSceneDialogVisible.value = true
}
const addScene = async () => {
if (!newScene.value.name.trim()) {
if (!newScene.value.location.trim()) {
ElMessage.warning('请输入场景名称')
return
}
@@ -517,7 +517,11 @@ const addScene = async () => {
}
const editScene = (scene: any) => {
ElMessage.info('编辑功能开发中')
newScene.value = {
location: scene.location || scene.name || '',
prompt: scene.prompt || scene.description || ''
}
addSceneDialogVisible.value = true
}
const deleteScene = async (scene: any) => {

View File

@@ -1601,8 +1601,9 @@ const saveShotEdit = async () => {
// 对话框相关方法
const openPromptDialog = (item: any, type: 'character' | 'scene') => {
currentEditItem.value = item
currentEditItem.value.name = item.name || item.location
currentEditType.value = type
editPrompt.value = item.appearance || item.description || ''
editPrompt.value = item.prompt || item.appearance || item.description || ''
promptDialogVisible.value = true
}
@@ -1614,10 +1615,32 @@ const savePrompt = async () => {
})
await generateCharacterImage(currentEditItem.value.id)
} else {
await dramaAPI.generateSceneImage({
// 1. 先保存场景提示词
await dramaAPI.updateScenePrompt(currentEditItem.value.id.toString(), editPrompt.value)
// 2. 生成场景图片
const model = selectedImageModel.value || undefined
const response = await dramaAPI.generateSceneImage({
scene_id: parseInt(currentEditItem.value.id),
prompt: editPrompt.value
prompt: editPrompt.value,
model
})
const imageGenId = response.image_generation?.id
// 3. 轮询图片生成状态
if (imageGenId) {
ElMessage.info('场景图片生成中,请稍候...')
generatingSceneImages.value[currentEditItem.value.id] = true
pollImageStatus(imageGenId, async () => {
await loadDramaData()
ElMessage.success('场景图片生成完成!')
}).finally(() => {
generatingSceneImages.value[currentEditItem.value.id] = false
})
} else {
ElMessage.success('场景图片生成已启动')
await loadDramaData()
}
}
promptDialogVisible.value = false
} catch (error: any) {