{
.tags-wrapper {
padding-bottom: 4px;
- white-space: nowrap;
- overflow-x: auto;
+ white-space: normal;
+ overflow-x: visible;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 6px;
}
.tag-item {
cursor: default;
- margin-right: 6px;
- margin-bottom: 4px;
+ margin-bottom: 0;
}
.tag-item-character {
diff --git a/src/renderer/src/components/Original/BookTaskDetail/TopMenuButtons.vue b/src/renderer/src/components/Original/BookTaskDetail/TopMenuButtons.vue
index 3f0ed1a..80c8fa5 100644
--- a/src/renderer/src/components/Original/BookTaskDetail/TopMenuButtons.vue
+++ b/src/renderer/src/components/Original/BookTaskDetail/TopMenuButtons.vue
@@ -95,9 +95,11 @@ import JianyingGenerateInformation from './JianyingGenerateInformation.vue'
import WordGroup from '../Copywriter/WordGroup.vue'
import AIGroup from '../Copywriter/AIGroup.vue'
import { t } from '@/i18n'
+import { useMD } from '@/renderer/src/hooks/useMD'
const bookStore = useBookStore()
const softwareStore = useSoftwareStore()
+const { showErrorDialog, showSuccessDialog } = useMD()
const dialog = useDialog()
const router = useRouter()
@@ -174,6 +176,14 @@ const promptOptions = ref([
{
label: '2. ' + t('推理空白分镜提示词'),
key: 'original-get-all-empty-ai-prompt'
+ },
+ {
+ type: 'divider',
+ key: 'd5_1'
+ },
+ {
+ label: '3. ' + t('重置所有提示词'),
+ key: 'reset-all-prompt'
}
])
@@ -530,6 +540,49 @@ async function handleOriginalGetAIPrompt(coverData, content) {
})
}
+// 重置所有提示词
+async function handleResetAllPrompt() {
+ let da = dialog.warning({
+ title: t('操作确认'),
+ content: t(
+ '该操作会将当前批次的所有分镜的提示词全部重置为空,此操作不可撤销,重置的数据不可恢复,是否继续?'
+ ),
+ closable: true,
+ maskClosable: false,
+ positiveText: t('确定'),
+ negativeText: t('取消'),
+ onPositiveClick: async () => {
+ da?.destroy()
+ try {
+ debugger
+ softwareStore.spin.spinning = true
+ softwareStore.spin.tip = t('正在执行重置提示词任务,请稍等...')
+
+ for (let i = 0; i < bookStore.selectBookTaskDetail.length; i++) {
+ const bookTaskDetail = bookStore.selectBookTaskDetail[i]
+
+ let res = await window.book.ModifyBookTaskDetailById(bookTaskDetail.id, {
+ gptPrompt: '',
+ prompt: ''
+ })
+ if (res.code != 1) {
+ showErrorDialog(t('失败'), t('重置提示词失败,{error}', { error: res.message }))
+ return
+ }
+ // 成功后更新本地数据
+ bookStore.selectBookTaskDetail[i].gptPrompt = ''
+ bookStore.selectBookTaskDetail[i].prompt = ''
+ }
+ showSuccessDialog(t('成功'), t('重置提示词成功'))
+ } catch (error) {
+ showErrorDialog(t('失败'), t('重置提示词失败,{error}', { error: error.message }))
+ } finally {
+ softwareStore.spin.spinning = false
+ }
+ }
+ })
+}
+
// 一键推理提示词的操作选择方法
async function handlePromptSelect(key) {
if (key === 'original-get-all-ai-prompt') {
@@ -542,6 +595,8 @@ async function handlePromptSelect(key) {
false,
t('会将当前批次的不存在提示词的分镜进行推理,不会影响已有提示词的分镜,是否继续?')
)
+ } else if (key == 'reset-all-prompt') {
+ await handleResetAllPrompt()
} else {
message.error(t('未知一键推理操作'))
}
diff --git a/src/renderer/src/components/Original/MainHome/OriginalTaskCard.vue b/src/renderer/src/components/Original/MainHome/OriginalTaskCard.vue
index 1684fbc..f608647 100644
--- a/src/renderer/src/components/Original/MainHome/OriginalTaskCard.vue
+++ b/src/renderer/src/components/Original/MainHome/OriginalTaskCard.vue
@@ -222,6 +222,7 @@ import { isEmpty } from 'lodash'
import { OptionKeyName } from '@/define/enum/option'
import { optionSerialization } from '@/main/service/option/optionSerialization'
import { t } from '@/i18n'
+import { TimeDelay } from '@/define/Tools/time'
const router = useRouter()
@@ -300,6 +301,9 @@ async function handleTaskAction(key) {
case 'edit':
editBookTask(props.bookTask)
break
+ case 'open-media-to-video':
+ handleOpenMediaToVideo(props.bookTask)
+ break
case 'export-jianying':
await ExportJianyingDraft()
break
@@ -541,6 +545,83 @@ async function editBookTask(bookTask) {
})
}
+async function handleOpenMediaToVideo(bookTask) {
+ let da = dialog.warning({
+ title: t('操作确认'),
+ content: () =>
+ h(
+ 'div',
+ { style: 'white-space: pre-wrap;' },
+ t(
+ '是否将任务 {bookTaskName} 添加到图文转视频的任务列表中?\n\n添加后会自动跳转到图文转视频界面,若当前任务已经存在于图文转视频任务列表中,则不会重复添加。',
+ {
+ bookTaskName: bookTask.name
+ }
+ )
+ ),
+ positiveText: t('确定'),
+ negativeText: t('取消'),
+ onPositiveClick: async () => {
+ try {
+ da?.destroy()
+ debugger
+ softwareStore.spin.spinning = true
+ softwareStore.spin.tip = t('正在添加任务到图文转视频模块...')
+
+ // 判断当前任务是不是已经开启
+ if (!bookTask.openVideoGenerate) {
+ let res = await window.book.ModifyBookTaskDataById(bookTask.id, {
+ openVideoGenerate: true
+ })
+ if (res.code != 1) {
+ message.error(t('开启图文转视频失败,{error}', { error: res.message }))
+ return
+ }
+ message.success(t('任务已添加到图文转视频模块'))
+ }
+
+ // 判断用户是不是需要要跳转过去
+ let cm = dialog.warning({
+ title: t('操作确认'),
+ content: bookTask.openVideoGenerate
+ ? t('当前批次任务已经开启图转视频,是否直接跳转到图文转视频界面?')
+ : t('是否现在就跳转到图文转视频界面?'),
+ positiveText: t('确定'),
+ negativeText: t('取消'),
+ closable: true,
+ maskClosable: true,
+ onPositiveClick: async () => {
+ try {
+ cm.destroy()
+ message.success(t('正在跳转到图文转视频界面...'))
+ await TimeDelay(1000)
+ bookStore.selectBookTask = bookTask
+ bookStore.selectBook = props.book
+ // 跳转到图转视频任务详情页
+ router.push({
+ name: 'mediaToVideo'
+ })
+ } catch (error) {
+ message.error(t('跳转失败,{error}', { error: error.message }))
+ } finally {
+ softwareStore.spin.spinning = false
+ }
+ },
+ onNegativeClick: () => {
+ message.info(t('已取消跳转,你可以在转视频模块中查看该任务'))
+ }
+ })
+ } catch (error) {
+ message.error(t('开启图文转视频失败,{error}', { error: error.message }))
+ } finally {
+ softwareStore.spin.spinning = false
+ }
+
+ // 成功的话 跳转路由到图转视频界面
+ }
+ })
+}
+
// 导出剪映草稿数据
// 导出剪映草稿
async function ExportJianyingDraft() {
diff --git a/src/renderer/src/components/Preset/AddOrModifyPreset.vue b/src/renderer/src/components/Preset/AddOrModifyPreset.vue
index c876e07..4cf22a0 100644
--- a/src/renderer/src/components/Preset/AddOrModifyPreset.vue
+++ b/src/renderer/src/components/Preset/AddOrModifyPreset.vue
@@ -322,14 +322,12 @@ const handleSave = async () => {
display: flex;
justify-content: center;
padding: 8px;
- background-color: rgba(255, 255, 255, 0.9);
}
/* 上传卡片样式 */
.upload-card {
cursor: pointer;
border: 2px dashed #e0e0e0;
- background-color: #f9f9f9;
height: 168px; /* 与图片项高度保持一致 */
display: flex;
align-items: center;
@@ -339,7 +337,6 @@ const handleSave = async () => {
.upload-card:hover {
border-color: #2080f0;
- background-color: #f0f7ff;
}
.upload-placeholder {
@@ -389,7 +386,6 @@ const handleSave = async () => {
left: 50%;
transform: translateX(-50%);
z-index: 1;
- background-color: rgba(255, 255, 255, 0.8);
border-radius: 50%;
}
diff --git a/src/renderer/src/components/Preset/PresetShowCard.vue b/src/renderer/src/components/Preset/PresetShowCard.vue
index 6de85d5..189fc71 100644
--- a/src/renderer/src/components/Preset/PresetShowCard.vue
+++ b/src/renderer/src/components/Preset/PresetShowCard.vue
@@ -6,6 +6,16 @@
:class="{ 'preset-card-selected': preset.isShow }"
@click="togglePresetSelection(preset)"
>
+
+
+
+
{{ preset.label }}
-
- {{
- getPresetCategoryLabel(preset.type)
- }}
+
+
+ {{ getPresetCategoryLabel(preset.type) }}
+
+ {{ t('显示') }}
+
+
{{ formattedDate(preset.createTime) }}
-
+
- {{ t('显示') }}
{{ t('编辑') }}
{{
t('删除')
@@ -40,7 +49,7 @@