LaiTool V 3.1.4

This commit is contained in:
lq1405 2024-09-20 09:19:37 +08:00
parent 595cbe8374
commit 92c1d99efd
24 changed files with 202 additions and 115 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "laitool", "name": "laitool",
"version": "3.1.3", "version": "3.1.4",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "laitool", "name": "laitool",
"version": "3.1.3", "version": "3.1.4",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@alicloud/alimt20181012": "^1.2.0", "@alicloud/alimt20181012": "^1.2.0",

View File

@ -1,6 +1,6 @@
{ {
"name": "laitool", "name": "laitool",
"version": "3.1.3", "version": "3.1.4",
"description": "An AI tool for image processing, video processing, and other functions.", "description": "An AI tool for image processing, video processing, and other functions.",
"main": "./out/main/index.js", "main": "./out/main/index.js",
"author": "laitool.cn", "author": "laitool.cn",

Binary file not shown.

View File

@ -67,7 +67,7 @@ export class BookTaskDetailService extends BaseRealmService {
videoPath: JoinPath(define.project_path, item.videoPath), videoPath: JoinPath(define.project_path, item.videoPath),
audioPath: JoinPath(define.project_path, item.audioPath), audioPath: JoinPath(define.project_path, item.audioPath),
oldImage: JoinPath(define.project_path, item.oldImage), oldImage: JoinPath(define.project_path, item.oldImage),
outImagePath: JoinPath(define.project_path, item.outImagePath) , outImagePath: JoinPath(define.project_path, item.outImagePath),
subImagePath: (item.subImagePath as string[])?.map((subImage) => { subImagePath: (item.subImagePath as string[])?.map((subImage) => {
return JoinPath(define.project_path, subImage) return JoinPath(define.project_path, subImage)
}), }),

View File

@ -317,16 +317,45 @@ export const DEFINE_STRING = {
FRAMING: 'FRAMING', FRAMING: 'FRAMING',
//#region 字幕相关
/**
* copywriting
*/
GET_COPYWRITING: 'GET_COPYWRITING', GET_COPYWRITING: 'GET_COPYWRITING',
/**
* copywriting的返回信息
*/
GET_COPYWRITING_RETURN: 'GET_COPYWRITING_RETURN', GET_COPYWRITING_RETURN: 'GET_COPYWRITING_RETURN',
//#endregion
REMOVE_WATERMARK: 'REMOVE_WATERMARK', REMOVE_WATERMARK: 'REMOVE_WATERMARK',
REMOVE_WATERMARK_RETURN: 'REMOVE_WATERMARK_RETURN', REMOVE_WATERMARK_RETURN: 'REMOVE_WATERMARK_RETURN',
SPLI_TAUDIO: 'SPLI_TAUDIO', SPLI_TAUDIO: 'SPLI_TAUDIO',
SPLI_TAUDIO_RETURN: 'SPLI_TAUDIO_RETURN', SPLI_TAUDIO_RETURN: 'SPLI_TAUDIO_RETURN',
//#region 反推相关
/**
*
*/
ADD_REVERSE_PROMPT: 'ADD_REVERSE_PROMPT', ADD_REVERSE_PROMPT: 'ADD_REVERSE_PROMPT',
/**
*
*/
REVERSE_PROMPT_RETURN: 'REVERSE_PROMPT_RETURN',
//#endregion
//#region 翻译相关
/**
*
*/
REVERSE_PROMPT_TRANSLATE_RETURN: 'REVERSE_PROMPT_TRANSLATE_RETURN',
//#endregion
}, },
SYSTEM: { SYSTEM: {
OPEN_FILE: 'OPEN_FILE', OPEN_FILE: 'OPEN_FILE',

View File

@ -19,6 +19,7 @@ import { MJOpt } from '../MJ/mj'
import { TagDefine } from '../../../define/tagDefine' import { TagDefine } from '../../../define/tagDefine'
import { BookServiceBasic } from '../ServiceBasic/bookServiceBasic' import { BookServiceBasic } from '../ServiceBasic/bookServiceBasic'
import { SDOpt } from '../SD/sd' import { SDOpt } from '../SD/sd'
import { isEmpty } from 'lodash'
@ -126,6 +127,16 @@ export class ReverseBook {
async GetBookTaskDetail(bookTaskId: string): Promise<GeneralResponse.ErrorItem | GeneralResponse.SuccessItem> { async GetBookTaskDetail(bookTaskId: string): Promise<GeneralResponse.ErrorItem | GeneralResponse.SuccessItem> {
try { try {
let res = await this.bookServiceBasic.GetBookTaskDetailData({ bookTaskId: bookTaskId }) let res = await this.bookServiceBasic.GetBookTaskDetailData({ bookTaskId: bookTaskId })
// 这边再所有的图片后面添加后缀,这样可以保证图片实时更新
res = res.map(item => {
return {
...item,
outImagePath: isEmpty(item.outImagePath) ? item.outImagePath : item.outImagePath + '?t=' + new Date().getTime(),
subImagePath: item.subImagePath && item.subImagePath.length > 0 ? item.subImagePath.map(it => it + '?t=' + new Date().getTime()) : item.subImagePath
}
})
return successMessage(res, '获取小说任务详情成功', 'ReverseBook_GetBookTaskDetail') return successMessage(res, '获取小说任务详情成功', 'ReverseBook_GetBookTaskDetail')
} catch (error) { } catch (error) {
return errorMessage( return errorMessage(
@ -287,7 +298,7 @@ export class ReverseBook {
throw new Error("暂不支持的推理类型") throw new Error("暂不支持的推理类型")
} }
// 添加后台任务 // 添加后台任务
await this.bookServiceBasic.AddBookBackTask(book.id, task_type, TaskExecuteType.AUTO, bookTaskDetail.bookTaskId, bookTaskDetail.id await this.bookServiceBasic.AddBookBackTask(book.id, task_type, TaskExecuteType.AUTO, bookTaskDetail.bookTaskId, bookTaskDetail.id, DEFINE_STRING.BOOK.REVERSE_PROMPT_RETURN
); );
// 添加返回日志 // 添加返回日志
await this.taskScheduler.AddLogToDB(book.id, book.type, `添加 ${task_type} 反推任务成功`, bookTaskDetail.bookTaskId, LoggerStatus.SUCCESS) await this.taskScheduler.AddLogToDB(book.id, book.type, `添加 ${task_type} 反推任务成功`, bookTaskDetail.bookTaskId, LoggerStatus.SUCCESS)

View File

@ -32,12 +32,14 @@ export class BookGeneral {
let afterGpt = element.afterGpt let afterGpt = element.afterGpt
let subValue = element.subValue let subValue = element.subValue
if (subValue && subValue.length > 0) { if (subValue && subValue.length > 0) {
if (Array.isArray(subValue)) {
subValue = subValue.map(item => { subValue = subValue.map(item => {
return { return {
...item, ...item,
srt_value: item.srt_value.replaceAll(replaceData.before, replaceData.after) srt_value: item.srt_value.replaceAll(replaceData.before, replaceData.after)
} }
}) })
}
let btd = realm.objectForPrimaryKey('BookTaskDetail', element.id) let btd = realm.objectForPrimaryKey('BookTaskDetail', element.id)
btd.subValue = JSON.stringify(subValue); btd.subValue = JSON.stringify(subValue);
result.push({ result.push({
@ -184,6 +186,9 @@ export class BookGeneral {
async ReplaceBookData(bookTaskId: string, replaceData: Book.BookReplaceData): Promise<GeneralResponse.SuccessItem | GeneralResponse.ErrorItem> { async ReplaceBookData(bookTaskId: string, replaceData: Book.BookReplaceData): Promise<GeneralResponse.SuccessItem | GeneralResponse.ErrorItem> {
try { try {
console.log(bookTaskId, replaceData) console.log(bookTaskId, replaceData)
if (isEmpty(replaceData.after)) {
replaceData.after = '' // 默认为空
}
let bookTask = await this.bookServiceBasic.GetBookTaskDataById(bookTaskId) let bookTask = await this.bookServiceBasic.GetBookTaskDataById(bookTaskId)
let bookTaskDetails = await this.bookServiceBasic.GetBookTaskDetailData({ let bookTaskDetails = await this.bookServiceBasic.GetBookTaskDetailData({
bookTaskId: bookTaskId bookTaskId: bookTaskId

View File

@ -255,7 +255,7 @@ export class BookImage {
case BookImageCategory.SD: case BookImageCategory.SD:
throw new Error('暂时不支持SD的生成') throw new Error('暂时不支持SD的生成')
case BookImageCategory.MJ: case BookImageCategory.MJ:
res = await this.mjOpt.AddMJGenerateImageTask(bookTaskId, OperateBookType.BOOKTASK) res = await this.mjOpt.AddMJGenerateImageTask(bookTaskId, OperateBookType.BOOKTASK, DEFINE_STRING.BOOK.MJ_IMAGE_GENERATE_RETURN)
break; break;
case BookImageCategory.D3: case BookImageCategory.D3:
throw new Error('暂时不支持D3的生成') throw new Error('暂时不支持D3的生成')

View File

@ -278,9 +278,9 @@ export class BookTask {
throw new Error("没有找到对应的数小说任务,请检查数据") throw new Error("没有找到对应的数小说任务,请检查数据")
} }
// 获取所有的出图中最少的 // 获取所有的出图中最少的
let bookTaskDetail = (await this.bookServiceBasic.GetBookTaskDetailData({ let bookTaskDetail = await this.bookServiceBasic.GetBookTaskDetailData({
bookTaskId: bookTaskId bookTaskId: bookTaskId
})) as Book.SelectBookTaskDetail[] }) as Book.SelectBookTaskDetail[]
if (bookTaskDetail == null || bookTaskDetail.length <= 0) { if (bookTaskDetail == null || bookTaskDetail.length <= 0) {
throw new Error("没有对应的小说分镜任务,请先添加分镜任务") throw new Error("没有对应的小说分镜任务,请先添加分镜任务")
} }

View File

@ -277,6 +277,7 @@ export class BookServiceBasic {
* @param executeType * @param executeType
* @param bookTaskId ID * @param bookTaskId ID
* @param bookTaskDetailId ID * @param bookTaskDetailId ID
* @param responseMessageName
*/ */
async AddBookBackTask(bookId: string, async AddBookBackTask(bookId: string,
taskType: BookBackTaskType, taskType: BookBackTaskType,

View File

@ -23,6 +23,7 @@ import axios from 'axios'
import { GptService } from '../GPT/gpt' import { GptService } from '../GPT/gpt'
import FormData from 'form-data' import FormData from 'form-data'
import { RetryWithBackoff } from '../../../define/Tools/common' import { RetryWithBackoff } from '../../../define/Tools/common'
import { DEFINE_STRING } from '../../../define/define_string'
const util = require('util') const util = require('util')
const { exec } = require('child_process') const { exec } = require('child_process')
const execAsync = util.promisify(exec) const execAsync = util.promisify(exec)
@ -119,7 +120,7 @@ export class Subtitle {
content: content, content: content,
progress: progress progress: progress
} as GeneralResponse.SubtitleProgressResponse // 返回识别到的文案 } as GeneralResponse.SubtitleProgressResponse // 返回识别到的文案
}) }, DEFINE_STRING.BOOK.GET_COPYWRITING_RETURN)
// 添加日志 // 添加日志
await this.taskScheduler.AddLogToDB( await this.taskScheduler.AddLogToDB(

View File

@ -29,17 +29,17 @@ export class GptSetting extends ServiceBase {
async InitAISetting() { async InitAISetting() {
let defaultData = { let defaultData = {
laiapi: { laiapi: {
gpt_url: 'https://laitool.net/v1/chat/completions', gpt_url: 'https://api.laitool.cc',
api_key: "请输入你的LAI API 的 Key", api_key: "请输入你的LAI API 的 Key",
model: "请输入你的LAI API 的 Model名称" model: "请输入你的LAI API 的 Model名称"
}, },
kimi: { kimi: {
gpt_url: 'https://api.moonshot.cn/v1/chat/completions', gpt_url: 'https://api.moonshot.cn',
api_key: "请输入你的Kimi API 的 Key", api_key: "请输入你的Kimi API 的 Key",
model: "请输入你的Kimi API 的 Model名称" model: "请输入你的Kimi API 的 Model名称"
}, },
doubao: { doubao: {
gpt_url: 'https://ark.cn-beijing.volces.com/api/v3/chat/completions', gpt_url: 'https://ark.cn-beijing.volces.com/api',
api_key: "请输入你的Doubao API 的 Key", api_key: "请输入你的Doubao API 的 Key",
model: "请输入你的Doubao API 的 Model名称" model: "请输入你的Doubao API 的 Model名称"
} }

View File

@ -3,7 +3,7 @@
<template #description> {{ softwareStore.spin.tip }} </template> <template #description> {{ softwareStore.spin.tip }} </template>
<n-config-provider <n-config-provider
:hljs="hljs" :hljs="hljs"
:theme="softwareStore.softWare.theme == 'dark' ? darkTheme : null" :theme="softwareStore.globalSetting.theme == 'dark' ? darkTheme : null"
> >
<n-message-provider> <n-message-provider>
<n-dialog-provider> <n-dialog-provider>
@ -44,6 +44,7 @@ export default defineComponent({
let softwareStore = useSoftwareStore() let softwareStore = useSoftwareStore()
onMounted(async () => { onMounted(async () => {
debugger
softwareStore.SoftColor = SoftColor softwareStore.SoftColor = SoftColor
window.api.getSettingDafultData(async (value) => { window.api.getSettingDafultData(async (value) => {
await window.darkMode.toggle(value.theme) await window.darkMode.toggle(value.theme)
@ -60,6 +61,7 @@ export default defineComponent({
throw new Error('初始化信息错误: 未获取到数据') throw new Error('初始化信息错误: 未获取到数据')
} }
softwareStore.softWare = software.data softwareStore.softWare = software.data
console.log(softwareStore.softWare)
await window.darkMode.toggle(softwareStore.softWare.theme) await window.darkMode.toggle(softwareStore.softWare.theme)
}) })

View File

@ -164,8 +164,10 @@ watch(
watch( watch(
() => props.initData.outImagePath, () => props.initData.outImagePath,
(value) => { (value) => {
if (value) {
outImagePath.value = value + `?t=${new Date().getTime()}` outImagePath.value = value + `?t=${new Date().getTime()}`
} }
}
) )
// props.initData // props.initData
@ -180,7 +182,9 @@ watch(
onMounted(async () => { onMounted(async () => {
setNodeAttribute() setNodeAttribute()
if (!isEmpty(outImagePath.value)) {
outImagePath.value = outImagePath.value + `?t=${new Date().getTime()}` outImagePath.value = outImagePath.value + `?t=${new Date().getTime()}`
}
}) })
async function setNodeAttribute() { async function setNodeAttribute() {
@ -246,11 +250,14 @@ async function imageDragOver(e) {
} }
async function ModifyLock() { async function ModifyLock() {
debugger
if (!data.value.imageLock) {
// //
if (!outImagePath.value) { if (!outImagePath.value) {
message.error('没有生成图片,不能锁定') message.error('没有生成图片,不能锁定')
return return
} }
}
let lock = !data.value.imageLock let lock = !data.value.imageLock
// //
@ -283,6 +290,10 @@ async function DownloadImage() {
message.error('当前图片不是MJ图片不能下载') message.error('当前图片不是MJ图片不能下载')
return return
} }
if (!data.value.mjMessage) {
message.error('没有MJ生图信息不能下载')
return
}
// success error // success error
if (data.value.mjMessage.status == 'error') { if (data.value.mjMessage.status == 'error') {
message.error('失败状态不能采集图片') message.error('失败状态不能采集图片')

View File

@ -36,6 +36,7 @@ import { ContainsChineseOrPunctuation } from '../../../../../define/Tools/common
import ReSelectReversePrompt from '../MJReverse/ReSelectReversePrompt.vue' import ReSelectReversePrompt from '../MJReverse/ReSelectReversePrompt.vue'
import { OperateBookType } from '../../../../../define/enum/bookEnum' import { OperateBookType } from '../../../../../define/enum/bookEnum'
import { isEmpty } from 'lodash' import { isEmpty } from 'lodash'
import { DEFINE_STRING } from '../../../../../define/define_string'
export default defineComponent({ export default defineComponent({
components: { NDropdown, NButton }, components: { NDropdown, NButton },
@ -127,7 +128,8 @@ export default defineComponent({
to: to, to: to,
type: TranslateType.GPT_PROMPT_TRANSLATE, type: TranslateType.GPT_PROMPT_TRANSLATE,
isSplit: false, // true isSplit: false, // true
bookTaskDetailId: data.value.id bookTaskDetailId: data.value.id,
responseMessgeName: DEFINE_STRING.BOOK.REVERSE_PROMPT_TRANSLATE_RETURN
}) })
} else { } else {
let reversePrompt = data.value.reversePrompt let reversePrompt = data.value.reversePrompt
@ -147,7 +149,8 @@ export default defineComponent({
type: TranslateType.REVERSE_PROMPT_TRANSLATE, type: TranslateType.REVERSE_PROMPT_TRANSLATE,
isSplit: false, // true isSplit: false, // true
bookTaskDetailId: data.value.id, bookTaskDetailId: data.value.id,
reversePromptId: item.id reversePromptId: item.id,
responseMessgeName: DEFINE_STRING.BOOK.REVERSE_PROMPT_TRANSLATE_RETURN
} }
translateData.push(temp_obj) translateData.push(temp_obj)
@ -171,7 +174,8 @@ export default defineComponent({
to: to, to: to,
type: TranslateType.GPT_PROMPT_TRANSLATE, type: TranslateType.GPT_PROMPT_TRANSLATE,
isSplit: false, // true isSplit: false, // true
bookTaskDetailId: element.id bookTaskDetailId: element.id,
responseMessgeName: DEFINE_STRING.BOOK.REVERSE_PROMPT_TRANSLATE_RETURN
}) })
} else { } else {
let reversePrompt = element.reversePrompt let reversePrompt = element.reversePrompt
@ -191,7 +195,8 @@ export default defineComponent({
type: TranslateType.REVERSE_PROMPT_TRANSLATE, type: TranslateType.REVERSE_PROMPT_TRANSLATE,
isSplit: false, // true isSplit: false, // true
bookTaskDetailId: element.id, bookTaskDetailId: element.id,
reversePromptId: item.id reversePromptId: item.id,
responseMessgeName: DEFINE_STRING.BOOK.REVERSE_PROMPT_TRANSLATE_RETURN
} }
translateData.push(temp_obj) translateData.push(temp_obj)
}) })

View File

@ -54,6 +54,7 @@ import { OperateBookType } from '../../../../../define/enum/bookEnum'
import { BookImageCategory } from '../../../../../define/enum/bookEnum' import { BookImageCategory } from '../../../../../define/enum/bookEnum'
import { debounce } from 'lodash' import { debounce } from 'lodash'
import InputDialogContent from '../../Original/Components/InputDialogContent.vue' import InputDialogContent from '../../Original/Components/InputDialogContent.vue'
import { DEFINE_STRING } from '../../../../../define/define_string'
export default defineComponent({ export default defineComponent({
components: { NInput, NButton, NDropdown }, components: { NInput, NButton, NDropdown },
@ -104,7 +105,11 @@ export default defineComponent({
async function SingleGenerateImage() { async function SingleGenerateImage() {
let res = undefined let res = undefined
if (reverseManageStore.selectBookTask.imageCategory == BookImageCategory.MJ) { if (reverseManageStore.selectBookTask.imageCategory == BookImageCategory.MJ) {
res = await window.mj.AddMJGenerateImageTask(data.value.id, OperateBookType.BOOKTASKDETAIL) res = await window.mj.AddMJGenerateImageTask(
data.value.id,
OperateBookType.BOOKTASKDETAIL,
DEFINE_STRING.BOOK.MJ_IMAGE_GENERATE_RETURN
)
} else if (reverseManageStore.selectBookTask.imageCategory == BookImageCategory.SD) { } else if (reverseManageStore.selectBookTask.imageCategory == BookImageCategory.SD) {
// res = await window.sd.SingleGenerateImage(data.value.id, OperateBookType.BOOKTASKDETAIL) // res = await window.sd.SingleGenerateImage(data.value.id, OperateBookType.BOOKTASKDETAIL)
message.error('暂不支该出图模式') message.error('暂不支该出图模式')
@ -123,7 +128,11 @@ export default defineComponent({
async function UnderGenerateImage() { async function UnderGenerateImage() {
let res = undefined let res = undefined
if (reverseManageStore.selectBookTask.imageCategory == BookImageCategory.MJ) { if (reverseManageStore.selectBookTask.imageCategory == BookImageCategory.MJ) {
res = await window.mj.AddMJGenerateImageTask(data.value.id, OperateBookType.UNDERBOOKTASK) res = await window.mj.AddMJGenerateImageTask(
data.value.id,
OperateBookType.UNDERBOOKTASK,
DEFINE_STRING.BOOK.MJ_IMAGE_GENERATE_RETURN
)
} else if (reverseManageStore.selectBookTask.imageCategory == BookImageCategory.SD) { } else if (reverseManageStore.selectBookTask.imageCategory == BookImageCategory.SD) {
// res = await window.sd.SingleGenerateImage(data.value.id, OperateBookType.UNDERBOOKTASK) // res = await window.sd.SingleGenerateImage(data.value.id, OperateBookType.UNDERBOOKTASK)
message.error('暂不支该出图模式') message.error('暂不支该出图模式')

View File

@ -2,7 +2,7 @@
<div class="artplayer-app" style="height: 100%"> <div class="artplayer-app" style="height: 100%">
<Artplayer @get-instance="getInstance" :option="option" :style="palyarStyle" /> <Artplayer @get-instance="getInstance" :option="option" :style="palyarStyle" />
<n-log <n-log
style="height: 60%; background-color: #f8f8f8; margin-top: 10px" style="height: 60%; width: 280px; background-color: #f8f8f8; margin-top: 10px"
ref="logInst" ref="logInst"
:log="logger" :log="logger"
:loading="loading" :loading="loading"

View File

@ -157,35 +157,7 @@ export default defineComponent({
let reverseManageStore = useReverseManageStore() let reverseManageStore = useReverseManageStore()
let softwareStore = useSoftwareStore() let softwareStore = useSoftwareStore()
// //
onMounted(async () => { onMounted(async () => {})
window.api.setEventListen([DEFINE_STRING.BOOK.GET_COPYWRITING_RETURN], (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
code.value = code.value + '\n' + value.data
return
}
//
softwareStore.spin.tip = `正在提取文案,当前进度 ${value.data.progress.current} / ${value.data.progress.total} 。。。`
let index = reverseManageStore.selectBookTaskDetail.findIndex((item) => item.id == value.id)
if (index >= 0) {
reverseManageStore.selectBookTaskDetail[index].word = value.data.content
reverseManageStore.selectBookTaskDetail[index].afterGpt = value.data.content
}
})
window.api.setEventListen([DEFINE_STRING.BOOK.REMOVE_WATERMARK_RETURN], (value) => {
if (value.code == 0) {
message.error(value.message)
return
}
let index = reverseManageStore.selectBookTaskDetail.findIndex((item) => item.id == value.id)
if (index >= 0) {
reverseManageStore.selectBookTaskDetail[index].oldImage =
value.data + '?time=' + new Date().getTime()
}
})
})
// //
function RetuenMain() { function RetuenMain() {
@ -696,7 +668,8 @@ export default defineComponent({
to: to, to: to,
type: TranslateType.GPT_PROMPT_TRANSLATE, type: TranslateType.GPT_PROMPT_TRANSLATE,
isSplit: false, // true isSplit: false, // true
bookTaskDetailId: element.id bookTaskDetailId: element.id,
responseMessgeName: DEFINE_STRING.BOOK.REVERSE_PROMPT_TRANSLATE_RETURN
}) })
} else { } else {
let reversePrompt = element.reversePrompt let reversePrompt = element.reversePrompt
@ -715,7 +688,8 @@ export default defineComponent({
type: TranslateType.REVERSE_PROMPT_TRANSLATE, type: TranslateType.REVERSE_PROMPT_TRANSLATE,
isSplit: false, // true isSplit: false, // true
bookTaskDetailId: element.id, bookTaskDetailId: element.id,
reversePromptId: item.id reversePromptId: item.id,
responseMessgeName: DEFINE_STRING.BOOK.REVERSE_PROMPT_TRANSLATE_RETURN
} }
translateData.push(temp_obj) translateData.push(temp_obj)
}) })

View File

@ -86,7 +86,6 @@ let test = ref('error-class')
// //
function ComputePercentage() { function ComputePercentage() {
debugger
if ( if (
reverseManageStore && reverseManageStore &&
reverseManageStore.selectBookTaskDetail && reverseManageStore.selectBookTaskDetail &&

View File

@ -25,6 +25,7 @@ import DatatableHeaderPrompt from '../Components/DatatableHeaderPrompt.vue'
import DatatablePrompt from '../Components/DatatablePrompt.vue' import DatatablePrompt from '../Components/DatatablePrompt.vue'
import DatatableHeaderImage from '../Components/DatatableHeaderImage.vue' import DatatableHeaderImage from '../Components/DatatableHeaderImage.vue'
import DatatableAfterGpt from '../Components/DatatableAfterGpt.vue' import DatatableAfterGpt from '../Components/DatatableAfterGpt.vue'
import DatatableGenerateImage from '../Components/DatatableGenerateImage.vue'
export default defineComponent({ export default defineComponent({
components: { NDataTable, NImage }, components: { NDataTable, NImage },
@ -120,7 +121,7 @@ export default defineComponent({
width: 300, width: 300,
className: 'space-row', className: 'space-row',
render(row, index) { render(row, index) {
return h(DataTableShowGenerateImage, { return h(DatatableGenerateImage, {
image_generate_category: 'mj', image_generate_category: 'mj',
initData: row, initData: row,
index: index, index: index,
@ -157,7 +158,7 @@ export default defineComponent({
debugger debugger
// //
let height = window.innerHeight let height = window.innerHeight
maxHeight.value = height - 100 maxHeight.value = height - 120
} }
return { return {

View File

@ -49,15 +49,70 @@ export default defineComponent({
let reverseManageStore = useReverseManageStore() let reverseManageStore = useReverseManageStore()
let bookType = ref(BookType) let bookType = ref(BookType)
onMounted(async () => { onMounted(async () => {
// //
if (!window['mainReturn']) { window.api.setEventListen([DEFINE_STRING.BOOK.GET_COPYWRITING_RETURN], (value) => {
window.mainReturn = true if (value.code == 0) {
window.api.setEventListen([DEFINE_STRING.BOOK.MAIN_DATA_RETURN], (value) => { message.error(value.message)
// code.value = code.value + '\n' + value.data
if (value.type == ResponseMessageType.HD_IMAGE) {
return return
} }
//
softwareStore.spin.tip = `正在提取文案,当前进度 ${value.data.progress.current} / ${value.data.progress.total} 。。。`
let index = reverseManageStore.selectBookTaskDetail.findIndex((item) => item.id == value.id)
if (index >= 0) {
reverseManageStore.selectBookTaskDetail[index].word = value.data.content
reverseManageStore.selectBookTaskDetail[index].afterGpt = value.data.content
}
})
//
window.api.setEventListen([DEFINE_STRING.BOOK.REMOVE_WATERMARK_RETURN], (value) => {
if (value.code == 0) { if (value.code == 0) {
message.error(value.message)
return
}
let index = reverseManageStore.selectBookTaskDetail.findIndex((item) => item.id == value.id)
if (index >= 0) {
reverseManageStore.selectBookTaskDetail[index].oldImage =
value.data + '?time=' + new Date().getTime()
}
})
//
window.api.setEventListen([DEFINE_STRING.BOOK.REVERSE_PROMPT_RETURN], (value) => {
if (value.code == 0) {
errorResponse(value)
} else {
MJReverseResponse(value)
}
})
// MJ
window.api.setEventListen([DEFINE_STRING.BOOK.MJ_IMAGE_GENERATE_RETURN], (value) => {
if (value.code == 0) {
errorResponse(value)
}
MJImageResponse(value)
})
//
window.api.setEventListen([DEFINE_STRING.BOOK.REVERSE_PROMPT_TRANSLATE_RETURN], (value) => {
if (value.code == 0) {
errorResponse(value)
} else {
if (value.type == ResponseMessageType.REVERSE_PROMPT_TRANSLATE) {
ReversePromptTranslateResponse(value)
} else if (value.type == ResponseMessageType.GPT_PROMPT_TRANSLATE) {
GptPromptTranslateResponse(value)
} else {
message.error('错误的返回数据类型')
return
}
}
})
})
function errorResponse(value) {
switch (value.dialogType) { switch (value.dialogType) {
case DialogType.DIALOG: case DialogType.DIALOG:
window.api.showGlobalMessageDialog(value) window.api.showGlobalMessageDialog(value)
@ -74,28 +129,12 @@ export default defineComponent({
} }
} }
// onUnmounted(() => {
switch (value.type) { window.api.removeEventListen(DEFINE_STRING.BOOK.GET_COPYWRITING_RETURN)
case ResponseMessageType.MJ_REVERSE: // MJ window.api.removeEventListen(DEFINE_STRING.BOOK.REMOVE_WATERMARK_RETURN)
MJReverseResponse(value) window.api.removeEventListen(DEFINE_STRING.BOOK.REVERSE_PROMPT_RETURN)
break window.api.removeEventListen(DEFINE_STRING.BOOK.MJ_IMAGE_GENERATE_RETURN)
case ResponseMessageType.REVERSE_PROMPT_TRANSLATE: // window.api.removeEventListen(DEFINE_STRING.BOOK.REVERSE_PROMPT_TRANSLATE_RETURN)
ReversePromptTranslateResponse(value)
break
case ResponseMessageType.GPT_PROMPT_TRANSLATE: // GPT
GptPromptTranslateResponse(value)
break
case ResponseMessageType.MJ_IMAGE:
MJImageResponse(value)
break
case ResponseMessageType.HD_IMAGE:
break
default:
message.error('未知的返回数据类型')
break
}
})
}
}) })
function MJImageResponse(value) { function MJImageResponse(value) {
@ -105,7 +144,7 @@ export default defineComponent({
(item) => item.id == value.data.id (item) => item.id == value.data.id
) )
if (dataIndex >= 0) { if (dataIndex >= 0) {
reverseManageStore.selectBookTaskDetail[dataIndex].mj_message = value.data reverseManageStore.selectBookTaskDetail[dataIndex].mjMessage = value.data
reverseManageStore.selectBookTaskDetail[dataIndex].outImagePath = value.data.outImagePath reverseManageStore.selectBookTaskDetail[dataIndex].outImagePath = value.data.outImagePath
reverseManageStore.selectBookTaskDetail[dataIndex].subImagePath = value.data.subImagePath reverseManageStore.selectBookTaskDetail[dataIndex].subImagePath = value.data.subImagePath
} }
@ -166,15 +205,15 @@ export default defineComponent({
return return
} }
reverseManageStore.selectBookTaskDetail[index].gptPrompt = value.data.prompt reverseManageStore.selectBookTaskDetail[index].gptPrompt = value.data.prompt
//
softwareStore.spin.tip = `翻译中 ... ${value.data.progress} / ${value.data.total}`
} }
/** /**
* MJ反推返回数据 * MJ反推返回数据
*/ */
function MJReverseResponse(value) { function MJReverseResponse(value) {
console.log('MJReverseResponse', value)
if (value.data && value.data.progress == 100) { if (value.data && value.data.progress == 100) {
debugger
let dataIndex = reverseManageStore.selectBookTaskDetail.findIndex( let dataIndex = reverseManageStore.selectBookTaskDetail.findIndex(
(item) => item.id == value.data.id (item) => item.id == value.data.id
) )

View File

@ -101,7 +101,7 @@ async function TranslateSelect(key) {
const element = reverseManageStore.selectBookTaskDetail[i] const element = reverseManageStore.selectBookTaskDetail[i]
if (i >= props.index) { if (i >= props.index) {
translateData.push({ translateData.push({
text: row.value.gptPrompt, text: element.gptPrompt,
from: 'en', from: 'en',
to: 'zh', to: 'zh',
type: TranslateType.GPT_PROMPT_TRANSLATE, type: TranslateType.GPT_PROMPT_TRANSLATE,
@ -116,7 +116,7 @@ async function TranslateSelect(key) {
const element = reverseManageStore.selectBookTaskDetail[i] const element = reverseManageStore.selectBookTaskDetail[i]
if (i >= props.index) { if (i >= props.index) {
translateData.push({ translateData.push({
text: row.value.gptPrompt, text: element.gptPrompt,
from: 'zh', from: 'zh',
to: 'en', to: 'en',
type: TranslateType.GPT_PROMPT_TRANSLATE, type: TranslateType.GPT_PROMPT_TRANSLATE,

View File

@ -209,7 +209,7 @@ export default defineComponent({
translation_app_id: window.config.translation_app_id, translation_app_id: window.config.translation_app_id,
translation_secret: window.config.translation_secret, translation_secret: window.config.translation_secret,
translation_auto: window.config.translation_auto, translation_auto: window.config.translation_auto,
theme: softwareStore.softWare.theme, theme: softwareStore.globalSetting.theme,
character_select_model: window.config.character_select_model, character_select_model: window.config.character_select_model,
window_wh_bm_remember: window.config.window_wh_bm_remember, window_wh_bm_remember: window.config.window_wh_bm_remember,
laiApiSelect: window.config.laiApiSelect ? window.config.laiApiSelect : LaiAPIType.MAIN laiApiSelect: window.config.laiApiSelect ? window.config.laiApiSelect : LaiAPIType.MAIN