1. (聚合推文)修复原创默认出图方式设置默认值 2. (聚合推文)优化出图显示 3. (聚合推文)添加图片上传功能,包括主图和选图区域 4. (聚合推文)新增图片缓存区,上传缓存图片(主图和选图区的图片),可以直接在当前小说所有的批次中的分镜中调用(下载到主图和选图区) 5. (聚合推文)添加一键修脸开关 6. (聚合推文)原创添加一键锁定 7. (聚合推文)新增小说批次任务显示当前所属小说 8. (聚合推文)小说批次任务状态显示优化 9. (聚合推文)优化后台任务状态显示 10. (聚合推文)原创,反推 一键生图 修复
322 lines
10 KiB
TypeScript
322 lines
10 KiB
TypeScript
import { messageDark, useMessage } from 'naive-ui'
|
||
import { defineStore } from 'pinia'
|
||
import { errorMessage, successMessage } from '../main/Public/generalTools'
|
||
import { BookTaskStatus } from '../define/enum/bookEnum'
|
||
import { Book } from '../model/book/book'
|
||
import { GeneralResponse } from '../model/generalResponse'
|
||
import { PresetModel } from '../model/preset'
|
||
|
||
// 系统相关设置
|
||
export const useReverseManageStore = defineStore('reverseManage', {
|
||
state: () => ({
|
||
bookType: [],
|
||
bookData: [], // 当前显示的所有小说数据
|
||
selectBook: {
|
||
id: null,
|
||
name: null,
|
||
bookFolderPath: null,
|
||
type: null,
|
||
oldVideoPath: null,
|
||
srtPath: null,
|
||
audioPath: null,
|
||
imageFolder: null,
|
||
subtitlePosition: null
|
||
} as Book.SelectBook, // 当前选中的小说
|
||
|
||
bookTaskData: [] as Book.SelectBookTask[], // 当前显示的所有小说任务数据
|
||
|
||
selectBookTask: {
|
||
no: null,
|
||
id: null,
|
||
bookId: null,
|
||
name: null,
|
||
generateVideoPath: null,
|
||
srtPath: null,
|
||
audioPath: null,
|
||
draftSrtStyle: null, // 草稿字幕样式
|
||
backgroundMusic: null, // 背景音乐ID
|
||
friendlyReminder: null, // 友情提示
|
||
imageFolder: null,
|
||
styleList: null,
|
||
prefix: null,
|
||
imageCategory: null,
|
||
status: BookTaskStatus.WAIT,
|
||
errorMsg: null
|
||
} as Book.SelectBookTask// 当前选中的小说任务
|
||
,
|
||
selectBookTaskDetail: [] as Book.SelectBookTaskDetail[] // 当前选中的小说任务的详细数据
|
||
,
|
||
characterTags: [] as PresetModel.PresetList[], // 角色标签
|
||
sceneTags: [] as PresetModel.PresetList[], // 场景标签
|
||
}),
|
||
getters: {
|
||
// 获取小说数据
|
||
GetBookData(state) {
|
||
return (bookId = null) => {
|
||
// 要是返回的数据为空,返回全部数据
|
||
if (bookId == null) return state.bookData
|
||
return state.bookData.find((item) => item.id === bookId)
|
||
}
|
||
}
|
||
},
|
||
actions: {
|
||
|
||
//#region 更新小说批次任务数据
|
||
/** 更新小说批次任务数据 */
|
||
UpdatedBookTaskData(bookTaskId: string | string[], data: Book.SelectBookTask) {
|
||
if (Array.isArray(bookTaskId)) {
|
||
bookTaskId.forEach(item => {
|
||
let findIndex = this.bookTaskData.findIndex((t: Book.SelectBookTask) => t.id === item)
|
||
if (findIndex != -1) {
|
||
for (let key in data) {
|
||
this.bookTaskData[findIndex][key] = data[key]
|
||
}
|
||
}
|
||
})
|
||
} else {
|
||
let findIndex = this.bookTaskData.findIndex((t: Book.SelectBookTask) => t.id === bookTaskId)
|
||
if (findIndex != -1) {
|
||
for (let key in data) {
|
||
this.bookTaskData[findIndex][key] = data[key]
|
||
}
|
||
}
|
||
}
|
||
},
|
||
//#endregion
|
||
|
||
|
||
/**
|
||
* 获取小说的数据
|
||
* @param {*} condition
|
||
*/
|
||
async GetBookDataFromDB(condition) {
|
||
try {
|
||
|
||
//@ts-ignore
|
||
let res = await window.book.GetBookData(condition)
|
||
if (res.code == 0) {
|
||
throw new Error(res.message)
|
||
}
|
||
if (res.data.res_book.length <= 0) {
|
||
throw new Error('没有找到对应的小说数据,请先添加小说')
|
||
}
|
||
this.SetBookData(res.data.res_book)
|
||
this.selectBook = res.data.res_book[0]
|
||
return successMessage(res.data)
|
||
} catch (error) {
|
||
return errorMessage(error.message)
|
||
}
|
||
},
|
||
|
||
// 获取小说任务数据
|
||
async GetBookTaskDataFromDB(condition) {
|
||
try {
|
||
|
||
this.bookTaskData = []
|
||
//@ts-ignore
|
||
let res = await window.book.GetBookTaskData(condition)
|
||
if (res.code == 0) {
|
||
throw new Error(res.message)
|
||
}
|
||
if (res.data.bookTasks.length > 0) {
|
||
this.bookTaskData = res.data.bookTasks
|
||
this.selectBookTask = res.data.bookTasks[0]
|
||
} else {
|
||
this.selectBookTask = {
|
||
no: null,
|
||
id: null,
|
||
bookId: null,
|
||
name: null,
|
||
generateVideoPath: null,
|
||
srtPath: null,
|
||
audioPath: null,
|
||
draftSrtStyle: null, // 草稿字幕样式
|
||
backgroundMusic: null, // 背景音乐ID
|
||
friendlyReminder: null, // 友情提示
|
||
imageFolder: null,
|
||
styleList: null,
|
||
prefix: null,
|
||
status: BookTaskStatus.WAIT,
|
||
errorMsg: null
|
||
} as Book.SelectBookTask
|
||
throw new Error('没有找到对应的子批次数据,请先创建')
|
||
}
|
||
return successMessage(true)
|
||
} catch (error) {
|
||
return errorMessage(error.message)
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 修改小说数据
|
||
* @param value
|
||
*/
|
||
SetBookData(value) {
|
||
try {
|
||
// 判断传入的数据不能为空,为空报错
|
||
if (!value) {
|
||
throw new Error('value不能为空')
|
||
}
|
||
// 如果是函数,则执行函数,如果是BookModel对象,修改对应的行的数据,如果是数组,则直接赋值
|
||
if (typeof value === 'function') {
|
||
this.bookData = value()
|
||
} else if (typeof value === 'object' && Array.isArray(value)) {
|
||
this.bookData = []
|
||
this.bookData = value
|
||
} else if (typeof value === 'object') {
|
||
const index = this.bookData.findIndex((item) => item.id === value.id)
|
||
if (index !== -1) {
|
||
this.bookData[index] = value
|
||
} else {
|
||
throw new Error('未找到对应的数据')
|
||
}
|
||
} else {
|
||
throw new Error('value的类型不正确')
|
||
}
|
||
} catch (error) {
|
||
throw new Error(error.message)
|
||
}
|
||
},
|
||
|
||
// 设置选中的小说
|
||
SetSelectBook(value) {
|
||
this.selectBook = value
|
||
},
|
||
|
||
/**
|
||
* 设置小说类型
|
||
* 判断pinia中的小说类型数组的数据是不是存在,默认存在不修改,要出传入参数为true,会强制修改
|
||
* @param {*} value
|
||
*/
|
||
async SetBookType(value = false) {
|
||
try {
|
||
if (this.bookType.length <= 0 || value) {
|
||
//@ts-ignore
|
||
let _bookType = await book.GetBookType()
|
||
if (_bookType.code == 0) {
|
||
throw new Error(_bookType.message)
|
||
}
|
||
this.bookType = _bookType.data
|
||
}
|
||
return successMessage(true)
|
||
} catch (error) {
|
||
return errorMessage(error.toString())
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 更新选中的小说数据
|
||
* @param {*} obj
|
||
*/
|
||
async UpdateSelectBook(obj) {
|
||
// 直接修改,使用object.assign合并对象中的数据
|
||
this.selectBook = Object.assign(this.selectBook, obj)
|
||
},
|
||
|
||
/**
|
||
* 将但钱选择的数据进行报错
|
||
* @param {*} book 外部传入的修改
|
||
*/
|
||
async SaveSelectBook(book = null) {
|
||
try {
|
||
let save_res = null
|
||
if (book == null) {
|
||
// 保存this.selectBook
|
||
//@ts-ignore
|
||
save_res = await window.book.AddOrModifyBook({ ...this.selectBook })
|
||
} else {
|
||
// 保存传入的数据
|
||
//@ts-ignore
|
||
save_res = await window.book.AddOrModifyBook({ ...book })
|
||
}
|
||
|
||
if (save_res.code == 0) {
|
||
throw new Error(save_res.message)
|
||
}
|
||
if (this.selectBook.id == null || (book && book.id == null)) {
|
||
this.bookData.unshift(save_res.data)
|
||
// 将最后一个删掉
|
||
this.bookData.pop()
|
||
}
|
||
|
||
if (save_res.data) {
|
||
this.selectBook = save_res.data
|
||
}
|
||
return successMessage(save_res.data)
|
||
} catch (error) {
|
||
return errorMessage(error.message)
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 这边对所有的数据进行查询,然后进行修改
|
||
* @param bookTaskId 小说任务ID
|
||
* @param modifyProperty 要修改的属性(这个可以用过更新单独的属性)
|
||
* @returns
|
||
*/
|
||
async GetBookTaskDetail(bookTaskId: string, modifyProperty = null): Promise<GeneralResponse.ErrorItem | GeneralResponse.SuccessItem> {
|
||
try {
|
||
//@ts-ignore
|
||
let detailRes = await window.book.GetBookTaskDetail(bookTaskId)
|
||
let bookTaskDetail = []
|
||
if (detailRes.code == 1) {
|
||
bookTaskDetail = detailRes.data.map(item => {
|
||
return {
|
||
...item,
|
||
outImagePath: item.outImagePath ? item.outImagePath + '?t=' + new Date().getTime() : undefined,
|
||
subImagePath: item.subImagePath ? item.subImagePath.map(item => item + '?t=' + new Date().getTime()) : [],
|
||
oldImage: item.oldImage ? item.oldImage + '?t=' + new Date().getTime() : undefined
|
||
}
|
||
})
|
||
// 这边开始修改数据,
|
||
if (this.selectBookTaskDetail && this.selectBookTaskDetail.length > 0) {
|
||
this.selectBookTaskDetail.splice(0, this.selectBookTaskDetail.length, ...detailRes.data);
|
||
} else {
|
||
this.selectBookTaskDetail = detailRes.data
|
||
}
|
||
} else {
|
||
return errorMessage(detailRes.message)
|
||
}
|
||
return successMessage(bookTaskDetail)
|
||
} catch (error) {
|
||
return errorMessage("获取小说任务详细数据失败,失败信息如下: " + error.toString())
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 重新加载人物预设和场景预设
|
||
*/
|
||
async GetPresetData() {
|
||
// 加载所有的人物和场景标签数据
|
||
let isError = false
|
||
let msg = ''
|
||
//@ts-ignore
|
||
let characterTagsRes = await window.preset.GetCharacterPreset()
|
||
if (characterTagsRes.code == 1) {
|
||
this.characterTags = characterTagsRes.data
|
||
} else {
|
||
isError = true
|
||
msg += characterTagsRes.message + '\n'
|
||
//@ts-ignore
|
||
window.api.showGlobalMessage(characterTagsRes)
|
||
}
|
||
|
||
//@ts-ignore
|
||
let sceneTagsRes = await window.preset.GetScenePreset()
|
||
if (sceneTagsRes.code == 1) {
|
||
this.sceneTags = sceneTagsRes.data
|
||
} else {
|
||
isError = true
|
||
msg += sceneTagsRes.message
|
||
//@ts-ignore
|
||
window.api.showGlobalMessage(sceneTagsRes)
|
||
}
|
||
if (isError) {
|
||
return errorMessage(msg)
|
||
} else {
|
||
return successMessage(true)
|
||
}
|
||
}
|
||
}
|
||
})
|