V 2.2.9 自动匹配,手动排序

This commit is contained in:
2024-06-13 00:37:31 +08:00
parent 3774e9fe55
commit 79a1929e79
76 changed files with 2499 additions and 1042 deletions
+1 -1
View File
@@ -43,7 +43,7 @@ export default defineComponent({
javascript,
hljs,
darkTheme,
themeData,
themeData
}
}
})
@@ -167,7 +167,7 @@ export default defineComponent({
* 另存图片的方法
*/
async function SaveImage() {
debugger
if (isEmpty(save_setting.value.save_folder)) {
message.error("请选择手动保存的文件夹")
return
@@ -265,7 +265,7 @@ export default defineComponent({
// 初始化加载项目下面的分镜好的文案
// 并判断是不是有洗稿后的文件。一并加载
await window.api.GetProjectWord((value) => {
debugger
data.value = value.data
})
@@ -358,7 +358,7 @@ export default defineComponent({
let itemIndex = row.subValue.findIndex((item) => item.id == itemId)
let thisIndex = data.value.findIndex((item) => item.id == row.id)
if (itemIndex < 0 && isM) {
debugger
message.error('数据错误')
return
} else {
@@ -175,7 +175,7 @@ export default defineComponent({
*/
async function GetVideoFile() {
await window.api.SelectFile(['mp4'], (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -193,7 +193,7 @@ export default defineComponent({
message.error('选择分镜的视频地址')
return
}
debugger
if (
toRaw(frameValue.value)
.video_path.split('.')
@@ -244,14 +244,14 @@ export default defineComponent({
// 获取初始化数据(队列任务-这边不能添加)
await window.api.GetGenerateTaskList((value) => {
debugger
console.log(value)
data.value = value.data.task_list
})
// 监听状态刷新事件
window.api.setEventListen([DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH], (value) => {
debugger
console.log(value)
let index = data.value.findIndex((item) => item.id == value.id)
if (index < 0) {
@@ -272,7 +272,7 @@ export default defineComponent({
async function AutoConditionCheck(e) {
e.preventDefault()
configRef.value?.validate(async (errors) => {
debugger
if (errors) {
message.error('请检查必填字段')
return
@@ -301,7 +301,7 @@ export default defineComponent({
async function ActionTask(e) {
e.preventDefault()
configRef.value?.validate(async (errors) => {
debugger
console.log(selectRowKeysRef.value)
if (selectRowKeysRef.value.length <= 0) {
message.error('请选择要操作的任务')
@@ -84,7 +84,7 @@ export default defineComponent({
*/
async function DeleteBadPrompt() {
await window.api.DeleteBadPrompt((value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -128,7 +128,7 @@ export default defineComponent({
{
trigger: 'hover',
disabled: (() => {
debugger
if (row.status == 'error') {
return false
} else {
@@ -246,7 +246,7 @@ export default defineComponent({
)
}
await window.api.GetConfigJson(JSON.stringify(['image_style', []]), async (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -266,7 +266,7 @@ export default defineComponent({
// 修改一个
window.api.setEventListen([DEFINE_STRING.IMAGE_TASK_STATUS_REFRESH], (value) => {
debugger
console.log(value)
// 修改当前状态
let index = task_list_data.value.findIndex((item) => item.out_folder == value.out_folder)
@@ -295,7 +295,7 @@ export default defineComponent({
}
formValue.value.image_style_list = tmp_arr
await window.api.AddImageTask(toRaw(formValue.value), (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -364,7 +364,7 @@ export default defineComponent({
* 生成全部
*/
async function GenerateAllImage() {
debugger
// 生成 对应的json 文件
await window.api.AddWebuiJson(async (value) => {
console.log(value)
@@ -407,7 +407,7 @@ export default defineComponent({
maskClosable: false,
onClose: async () => {
// 重新加载数据
debugger
console.log(selectStyle.value)
let tmp_arr = []
for (let i = 0; i < selectStyle.value.length; i++) {
@@ -446,7 +446,7 @@ export default defineComponent({
async function RemoveImageTask(row) {
//`${task_list.out_folder}_${images[0]}`, batch, task_list.out_folder
// 停止当前行的生图任务
debugger
console.log(row)
await getInitData()
// 判断该当前状态
@@ -578,7 +578,7 @@ export default defineComponent({
//
window.api.setEventListen([DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH], (value) => {
debugger;
console.log(value)
//
let index = data.value.findIndex(item => item.folder == value.out_folder);
@@ -26,7 +26,7 @@ export default defineComponent({
onMounted(() => {
window.api.setEventListen([DEFINE_STRING.GET_FRAME_RETUN], (value) => {
debugger;
code.value = code.value + "\n" + value.data;
})
})
@@ -77,7 +77,7 @@ export default defineComponent({
message.error("请输入分镜内容");
return;
}
debugger;
//
let text_value = inputValue.value.split("\n")
// 稿
@@ -0,0 +1,158 @@
<template>
<div style="margin-top: 20px">
<n-dynamic-tags
:type="tagType"
:color="tagColor"
v-model:value="showTags"
:max="max"
@update:value="TagUpdate"
>
<template #input="{ submit, deactivate }">
<n-select
size="small"
style="width: 100px"
v-model:value="selectedValue"
:options="show_options"
:placeholder="placeholder"
>
</n-select>
<n-button size="small" type="info" @click="AddDynamicTag(deactivate)"> 添加 </n-button>
</template>
<template #trigger="{ activate, disabled }">
<n-button
v-if="showTags.length != max"
size="small"
type="primary"
dashed
:disabled="disabled"
@click="activate()"
>
<template #icon>
<n-icon>
<Add />
</n-icon>
</template>
添加
</n-button>
<n-button v-if="showTags.length == max" type="info" size="small" @click="SaveMerge"
>保存</n-button
>
</template>
</n-dynamic-tags>
</div>
</template>
<script>
import { ref, onMounted, defineComponent, onUnmounted, toRaw, watch, toRefs } from 'vue'
import { useMessage, NDynamicTags, NButton, NIcon, NSelect, useDialog } from 'naive-ui'
import Add from '@vicons/ionicons5/Add'
export default defineComponent({
components: {
NDynamicTags,
NButton,
NIcon,
NSelect,
Add,
NButton
},
props: ['options', 'tagType', 'tagColor', 'initData', 'placeholder', 'SaveFunction', 'max'],
setup(props) {
let { options, tagType, tagColor, initData, placeholder, max } = toRefs(props)
let dialog = useDialog()
let message = useMessage()
let selectedValue = ref(null)
let tags = ref(initData.value ? initData.value : [])
let showTags = ref([])
let show_options = ref([])
onMounted(async () => {
tags.value.forEach((element) => {
showTags.value.push(element.label)
})
options.value.forEach((element) => {
show_options.value.push(element)
})
})
/**
* 添加选中的数据
*/
function AddDynamicTag(deactivate) {
//
if (selectedValue.value == null || selectedValue.value == '') {
message.error('请选择需要添加的标签')
deactivate()
return
}
//
console.log(selectedValue.value)
// options
let index = options.value.findIndex((item) => item.value == selectedValue.value)
if (index == -1) {
message.error('传入的数据中没有找到对应的数据')
return
}
tags.value.push(options.value[index])
showTags.value.push(options.value[index].label)
//
let show_index = show_options.value.findIndex((item) => item.value == selectedValue.value)
if (show_index == -1) {
message.error('传入的数据中没有找到对应的数据')
return
}
show_options.value.splice(show_index, 1)
//
selectedValue.value = null
if (tags.value.length == max.value) {
deactivate()
}
}
/**
* 在删除的时候更新数据
* @param value
*/
function TagUpdate(value) {
console.log(value)
show_options.value = []
tags.value = []
// show_options
options.value.forEach((item) => {
if (!showTags.value.includes(item.label)) {
show_options.value.push(item)
} else {
tags.value.push(item)
}
})
}
/**
* 保存合并提示词的排序顺序
*/
async function SaveMerge() {
//
await props.SaveFunction(toRaw(tags.value), toRaw(options.value))
}
return {
options,
tagType,
tagColor,
initData,
selectedValue,
AddDynamicTag,
tags,
showTags,
placeholder,
show_options,
TagUpdate,
SaveMerge,
max
}
}
})
</script>
@@ -158,7 +158,7 @@ export default defineComponent({
},
setup(props) {
let message = useMessage();
debugger;
let images = ref(
window.ImageInitData.filter((item) => item.id == window.currentImageId)[0]
.output_list
@@ -232,7 +232,7 @@ export default defineComponent({
window.api.setEventListen(
[DEFINE_STRING.REGENERATE_IMAGE_RETUN, window.id],
(value) => {
debugger
if (value.type != 1) {
return;
}
@@ -267,7 +267,7 @@ export default defineComponent({
* 重绘图片
*/
async function ReGenerateImage(data) {
debugger;
console.log(data);
let obj = {
id: data.id,
@@ -305,7 +305,7 @@ export default defineComponent({
* 获取上一组
*/
function GetLast() {
debugger;
let index = window.ImageInitData.findIndex(
(item) => item.id == window.currentImageId
);
@@ -322,7 +322,7 @@ export default defineComponent({
* 获取下一组
*/
function GetNext() {
debugger;
let index = window.ImageInitData.findIndex(
(item) => item.id === window.currentImageId
);
@@ -63,7 +63,7 @@ export default defineComponent({
* 删除
*/
async function handleClose(tag) {
debugger;
//
tags.value = tags.value.filter(item => item != tag);
show_tags.value = show_tags.value.filter(item => item != tag);
@@ -94,7 +94,7 @@ export default defineComponent({
* 删除所选的tag全部
*/
async function DeleteTags() {
debugger
let d_l = toRaw(show_tags.value);
for (let i = 0; i < d_l.length; i++) {
const element = d_l[i];
@@ -79,7 +79,7 @@ export default defineComponent({
if (translateMode.value) {
//
await window.api.TranslateReturnNow([tags, 'zh', 'en', true], (value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message);
@@ -115,7 +115,7 @@ export default defineComponent({
* @param {要删除的tag} tag
*/
async function handleClose(tag) {
debugger
//
data.value.chinese_prompt = data.value.chinese_prompt.filter(item => item.src != tag.src);
ModifyPrompt();
@@ -176,7 +176,7 @@ export default defineComponent({
)
setLayoutHeight('layout_height')
await window.api.GetImageStyleMenu((value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -197,7 +197,7 @@ export default defineComponent({
* 菜单选中事件
*/
async function SelectMenu(key, item) {
debugger
current_menu = key
await getStyleImageSubList()
}
@@ -214,7 +214,7 @@ export default defineComponent({
style_image_list.value = tags.value.style_tags
} else {
await window.api.getStyleImageSubList(current_menu, (value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -232,7 +232,7 @@ export default defineComponent({
}
async function closeTag(image) {
debugger
let index = selectStyle.value.findIndex((item) => item.id == image.id)
if (index != -1) {
selectStyle.value.splice(index, 1)
@@ -268,7 +268,7 @@ export default defineComponent({
handleSelect(key) {
showDropdownRef.value = false
if (key == 'selectStyle') {
debugger
//
if (current_img.value) {
selectStyle.value.push(current_img.value)
@@ -56,7 +56,7 @@ export default defineComponent({
onMounted(async () => {})
async function closeTag(image) {
debugger
let index = selectStyle.value.findIndex((item) => item.id == image.id)
if (index != -1) {
selectStyle.value.splice(index, 1)
+13 -4
View File
@@ -108,13 +108,10 @@ export default defineComponent({
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
maskClosable: false,
onClose: async () => {
debugger
//
let password = toRaw(key_down_ref.value.data)
console.log(password)
// md5
let md5_password = MD5(password + DEFINE_STRING.OPEN_DEV_TOOLS).toString()
console.log(md5_password)
window.api.OpenDevToolsPassword(md5_password, (value) => {
if (value.code == 0) {
message.error(value.message)
@@ -168,6 +165,19 @@ export default defineComponent({
})
})
window.api.setEventListen([DEFINE_STRING.SHOW_GLOABAL_MESSAGE], (value) => {
let mess = value.message
let type = 'success'
let title = '成功'
if (value.code == 0) {
type = 'error'
title = '成功但失败'
} else if (value.code == 2) {
;(type = 'warning'), (title = '警告')
}
message[type](mess, title)
})
//
dialog.create({
showIcon: false,
@@ -186,7 +196,6 @@ export default defineComponent({
return false
},
onPositiveClick: async () => {
debugger
await new Promise(async (resolve, reject) => {
await window.api.CheckMachineId(toRaw(machineRef.value.machineId), (value) => {
if (value.code == 0) {
@@ -165,7 +165,7 @@ export default defineComponent({
item.loading = false
item.timedata = new Date().getTime()
})
debugger
data.value = value.value
})
}
@@ -436,7 +436,7 @@ export default defineComponent({
await window.api.TranslatePrompt(
[JSON.stringify([row]), 'en', 'zh', window.id, false],
(value) => {
debugger
console.log(value)
}
)
@@ -559,12 +559,12 @@ export default defineComponent({
})
window.api.setEventListen([DEFINE_STRING.TRANSLATE_RETURN_REFRESH, window.id], (value) => {
debugger
if (value.code == 0) {
message.error('返回数据错误')
return
}
debugger
//
let index = data.value.findIndex((item) => item.id == value.rowId)
@@ -620,7 +620,7 @@ export default defineComponent({
async function TranslatePrompt(translateData, from, to) {
console.log(translateData)
await window.api.TranslatePrompt([translateData, from, to, window.id, true], (value) => {
debugger
console.log(value)
})
}
@@ -629,7 +629,7 @@ export default defineComponent({
* 翻译中文到提示词
*/
async function TranslateChineseToPrompt() {
debugger
// promptChinese_promptsrc
let fileterData = []
for (let i = 0; i < data.value.length; i++) {
@@ -650,7 +650,7 @@ export default defineComponent({
let tmp_str = JSON.stringify(fileterData)
//
await window.api.TranslatePrompt([tmp_str, 'zh', 'en', window.id, true], (value) => {
debugger
console.log(value)
})
}
@@ -780,7 +780,7 @@ export default defineComponent({
//
//
await window.api.TranslateReturnNow([tmp_s, 'en', 'zh', true], (value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -3,7 +3,10 @@
<div style="width: 500px; position: relative">
<n-form ref="formRef" label-placement="top" :model="characterData" :rules="rules">
<n-form-item label="人物名称" path="label">
<n-input v-model:value="characterData.label" placeholder="请输入人物名称" />
<n-input style="width: 400px;" v-model:value="characterData.label" placeholder="请输入人物名称" />
<n-checkbox style="margin-left: 20px" v-model:checked="characterData.isShow"
>显示</n-checkbox
>
<n-image
style="position: absolute; left: 520px; top: 0"
width="120"
@@ -106,7 +109,8 @@ import {
NFormItem,
NDynamicTags,
NInputNumber,
NSelect
NSelect,
NCheckbox
} from 'naive-ui'
import { v4 as uuidv4 } from 'uuid'
import { isEmpty } from 'lodash'
@@ -120,7 +124,8 @@ export default defineComponent({
NFormItem,
NDynamicTags,
NInputNumber,
NSelect
NSelect,
NCheckbox
},
props: ['currentCharacter', 'initFunc', 'currentTags', 'lora_options'],
setup(props) {
@@ -183,7 +188,7 @@ export default defineComponent({
await window.mj.SaveTagPropertyData(
[JSON.stringify(characterData.value), 'character_tags'],
(value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -275,7 +280,7 @@ export default defineComponent({
}
imageLoading.value = true
await window.sd.txt2img(JSON.stringify([d]), async (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
imageLoading.value = false
@@ -55,7 +55,7 @@ export default defineComponent({
//
prefixData.value['type'] = "prefix_main";
await window.mj.SaveTagPropertyData([JSON.stringify(prefixData.value), "prefix_tags"], (value) => {
debugger;
console.log(value);
if (value.code == 0) {
message.error(value.message);
@@ -1,18 +1,41 @@
<template>
<div style="width: 500px;">
<n-form label-placement="top" ref="formRef" :rules="rules" :model="sceneData">
<n-form-item label="场景名称" path="label">
<n-input v-model:value="sceneData.label" placeholder="请输入场景名称" />
</n-form-item>
<n-form-item label="场景提示词描述(中文)">
<n-input type="textarea" :rows="3" v-model:value="sceneData.chinese_prompt" placeholder="请输入场景提示词描述" />
<n-button type="info" size="small" style="margin-left: 20px;" @click="TranslatePrompt"
:loading="loading">翻译提示词</n-button>
</n-form-item>
<n-form-item label="场景提示词描述(英文)" path="prompt">
<n-input type="textarea" :rows="3" v-model:value="sceneData.prompt" placeholder="请输入场景提示词描述" />
</n-form-item>
<!-- <n-form-item label="MJ:风格垫图链接(sref">
<div style="width: 500px">
<n-form label-placement="top" ref="formRef" :rules="rules" :model="sceneData">
<n-form-item label="场景名称" path="label">
<n-input
style="width: 400px"
v-model:value="sceneData.label"
placeholder="请输入场景名称"
/>
<n-checkbox style="margin-left: 20px" v-model:checked="sceneData.isShow"
>显示</n-checkbox
>
</n-form-item>
<n-form-item label="场景提示词描述(中文)">
<n-input
type="textarea"
:rows="3"
v-model:value="sceneData.chinese_prompt"
placeholder="请输入场景提示词描述"
/>
<n-button
type="info"
size="small"
style="margin-left: 20px"
@click="TranslatePrompt"
:loading="loading"
>翻译提示词</n-button
>
</n-form-item>
<n-form-item label="场景提示词描述(英文)" path="prompt">
<n-input
type="textarea"
:rows="3"
v-model:value="sceneData.prompt"
placeholder="请输入场景提示词描述"
/>
</n-form-item>
<!-- <n-form-item label="MJ:风格垫图链接(sref">
<n-input v-model:value="sceneData.image_url" placeholder="请输入风格垫图链接" style="margin-right: 20px;" />
<n-image v-if="sceneData.image_url" :src="sceneData.image_url" style="width: 80px; height: 80px" />
</n-form-item>
@@ -24,118 +47,145 @@
<n-input v-model:value="sceneData.lora" placeholder="请输入风格Lora" />
<n-button color="#e18a3b" style="margin-left: 20px;">选择</n-button>
</n-form-item> -->
</n-form>
</n-form>
<div style="text-align: right;">
<n-button type="success" @click="SaveSceneTag">保存</n-button>
</div>
<div style="text-align: right">
<n-button type="success" @click="SaveSceneTag">保存</n-button>
</div>
</div>
</template>
<script>
import { ref, h, onMounted, defineComponent, toRaw, watch } from "vue"
import { NImage, useMessage, NButton, useDialog, NInput, NForm, NFormItem, NDynamicTags, NInputNumber } from "naive-ui";
import { v4 as uuidv4 } from "uuid";
import { ref, h, onMounted, defineComponent, toRaw, watch } from 'vue'
import {
NImage,
useMessage,
NButton,
useDialog,
NInput,
NForm,
NFormItem,
NDynamicTags,
NInputNumber,
NCheckbox
} from 'naive-ui'
import { v4 as uuidv4 } from 'uuid'
export default defineComponent({
components: {
NImage, NButton, NInput, NForm, NFormItem, NDynamicTags, NInputNumber
},
props: ["currentScene", "initFunc"],
setup(props) {
let message = useMessage();
let sceneData = ref(props.currentScene);
let loading = ref(false);
let formRef = ref(null)
components: {
NImage,
NButton,
NInput,
NForm,
NFormItem,
NDynamicTags,
NInputNumber,
NCheckbox
},
props: ['currentScene', 'initFunc'],
setup(props) {
let message = useMessage()
let sceneData = ref(props.currentScene)
let loading = ref(false)
let formRef = ref(null)
//
watch(() => props.currentScene, (value) => {
sceneData.value = value;
}, { deep: true })
//
watch(
() => props.currentScene,
(value) => {
sceneData.value = value
},
{ deep: true }
)
onMounted(async () => {
onMounted(async () => {})
})
//
async function SaveSceneTag(e) {
e.preventDefault();
formRef.value?.validate(async (errors) => {
if (errors) {
message.error("请检查必填字段");
return
}
//
//
sceneData.value['type'] = "scene_main";
await window.mj.SaveTagPropertyData([JSON.stringify(sceneData.value), "scene_tags"], (value) => {
debugger;
console.log(value);
if (value.code == 0) {
message.error(value.message);
return;
}
message.success(value.message);
//initFunc
props.initFunc();
//
sceneData.value = {
label: null,
key: null,
type: "scene_main",
prompt: null,
// image_url: null,
// cref_cw: 20,
// lora: null,
};
})
});
//
async function SaveSceneTag(e) {
e.preventDefault()
formRef.value?.validate(async (errors) => {
if (errors) {
message.error('请检查必填字段')
return
}
//
async function TranslatePrompt() {
loading.value = true;
if (sceneData.value.chinese_prompt == "" || sceneData.value.chinese_prompt == null) {
message.error("请输入中文提示词");
loading.value = false;
return;
//
//
sceneData.value['type'] = 'scene_main'
await window.mj.SaveTagPropertyData(
[JSON.stringify(sceneData.value), 'scene_tags'],
(value) => {
console.log(value)
if (value.code == 0) {
message.error(value.message)
return
}
await window.api.TranslateReturnNow([sceneData.value.chinese_prompt, 'zh', 'en', false], (value) => {
if (value.code == 0) {
message.error(value.message);
return;
}
//
console.log(value.data);
sceneData.value.prompt = value.data[0].src;
})
loading.value = false;
}
let ruleObj = (errorMessage) => {
return [{
required: true,
validator(rule, value) {
if (value == null || value == "")
return new Error(errorMessage);
return true;
},
trigger: ["input", "blur", "change"]
}]
}
let rules = {
label: ruleObj("必填人物名称"),
prompt: ruleObj("必填英文提示词")
};
return {
sceneData,
SaveSceneTag,
loading,
TranslatePrompt,
rules,
formRef
}
message.success(value.message)
//initFunc
props.initFunc()
//
sceneData.value = {
label: null,
key: null,
type: 'scene_main',
prompt: null
// image_url: null,
// cref_cw: 20,
// lora: null,
}
}
)
})
}
//
async function TranslatePrompt() {
loading.value = true
if (sceneData.value.chinese_prompt == '' || sceneData.value.chinese_prompt == null) {
message.error('请输入中文提示词')
loading.value = false
return
}
await window.api.TranslateReturnNow(
[sceneData.value.chinese_prompt, 'zh', 'en', false],
(value) => {
if (value.code == 0) {
message.error(value.message)
return
}
//
console.log(value.data)
sceneData.value.prompt = value.data[0].src
}
)
loading.value = false
}
let ruleObj = (errorMessage) => {
return [
{
required: true,
validator(rule, value) {
if (value == null || value == '') return new Error(errorMessage)
return true
},
trigger: ['input', 'blur', 'change']
}
]
}
let rules = {
label: ruleObj('必填人物名称'),
prompt: ruleObj('必填英文提示词')
}
return {
sceneData,
SaveSceneTag,
loading,
TranslatePrompt,
rules,
formRef
}
}
})
</script>
</script>
@@ -154,7 +154,7 @@ export default defineComponent({
await window.mj.SaveTagPropertyData(
[JSON.stringify(styleData.value), 'style_tags'],
(value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -246,7 +246,7 @@ export default defineComponent({
}
imageLoading.value = true
await window.sd.txt2img(JSON.stringify([d]), async (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
imageLoading.value = false
@@ -55,7 +55,7 @@ export default defineComponent({
//
suffixData.value['type'] = "suffix_main";
await window.mj.SaveTagPropertyData([JSON.stringify(suffixData.value), "suffix_tags"], (value) => {
debugger;
console.log(value);
if (value.code == 0) {
message.error(value.message);
@@ -90,7 +90,7 @@ export default defineComponent({
loading.value = true;
await window.api.AutoAnalyzeCharacter(toRaw(word.value), (value) => {
debugger
loading.value = false;
if (value.code == 0) {
message.error(value.message);
@@ -275,7 +275,7 @@ export default defineComponent({
//
function SetAutoHeight() {
debugger
let div = document.getElementById('tree_define_content')
div.style.height = props.height - 180 + 'px'
}
@@ -318,7 +318,8 @@ export default defineComponent({
show_image: window.config.space_image,
cref_cw: 50,
lora: '无',
lora_weight: 1
lora_weight: 1,
isShow: false
}
currentTags.value = []
currentType.value = 'character_main'
@@ -335,7 +336,8 @@ export default defineComponent({
label: null,
key: uuidv4(),
type: 'scene_main',
prompt: null
prompt: null,
isShow: false
}
currentType.value = 'scene_main'
}
@@ -395,7 +397,7 @@ export default defineComponent({
function nodeProps({ option }) {
return {
onClick() {
debugger
//
if (option.type == 'style') {
currentType.value = 'style'
@@ -421,13 +423,16 @@ export default defineComponent({
} else if (option.type == 'min') {
message.error('别名节点不允许操作')
} else {
debugger
console.log(option)
currentType.value = option.type
//
if (currentType.value.startsWith('character')) {
// tags
currentCharacter.value = option
if(!currentCharacter.value.hasOwnProperty("isShow")){
currentCharacter.value.isShow = false
}
currentTags.value = option.children.map((item) => {
return item.label
})
@@ -9,15 +9,42 @@
v-model:value="title_character_select_model"
placeholder="选择模式"
></n-select>
<n-button size="tiny" color="#e18a3b" style="margin-left: 5px" @click="RefreshTagData">
<n-icon>
<reload />
</n-icon>
</n-button>
<n-popover trigger="hover">
<template #trigger>
<n-button
text
color="#e18a3b"
style="margin-left: 5px; font-size: 24px"
@click="RefreshTagData"
>
<n-icon>
<ReloadCircle />
</n-icon>
</n-button>
</template>
<span>刷新任务标签数据</span>
</n-popover>
<n-popover trigger="hover">
<template #trigger>
<n-button
size="tiny"
color="#c0d695"
style="margin-left: 5px; font-size: 24px"
text
@click="MatchUser"
>
<n-icon>
<ExtensionPuzzle />
</n-icon>
</n-button>
</template>
<span>自动匹配人物</span>
</n-popover>
</div>
<div v-else-if="type == 'data'">
<div v-if="title_character_select_model == 'tag'">
<div style="min-height: 65px; overflow-y: auto; width: 190px">
<div style="min-height: 65px; overflow-y: auto; width: 200px">
<span>人物</span>
<n-tag
v-for="(character, index) in character_tags"
@@ -79,10 +106,21 @@
<script>
import { ref, h, onMounted, defineComponent, toRaw, watch } from 'vue'
import { NImage, useMessage, NButton, useDialog, NInput, NTag, NSelect, NIcon } from 'naive-ui'
import {
NImage,
useMessage,
NButton,
useDialog,
NInput,
NTag,
NSelect,
NIcon,
NPopover
} from 'naive-ui'
import { DEFINE_STRING } from '../../../../../define/define_string'
import { cloneDeep, debounce, get, once } from 'lodash'
import { Refresh, Reload } from '@vicons/ionicons5'
import { Refresh, ReloadCircle, ExtensionPuzzle } from '@vicons/ionicons5'
import ProgressDialog from '../../Components/ProgressDialog.vue'
export default defineComponent({
components: {
@@ -92,7 +130,9 @@ export default defineComponent({
NTag,
NSelect,
NIcon,
Reload
ReloadCircle,
ExtensionPuzzle,
NPopover
},
props: ['type', 'row', 'characterSelectModel', 'tags', 'func'],
setup(props) {
@@ -103,6 +143,7 @@ export default defineComponent({
let character_tags = ref([])
let scene_tags = ref([])
let tags = ref(props.tags)
let dialog = useDialog()
let characterData = ref([])
@@ -114,7 +155,6 @@ export default defineComponent({
watch(
() => props.characterSelectModel,
(value) => {
debugger
// InitData(value);
if (value.value == 'drop') {
select_character_tags.value = []
@@ -149,7 +189,7 @@ export default defineComponent({
)
onMounted(async () => {
// debugger
//
// await InitCharacterAndSceneData()
await window.mj.GetTagSelectModel((value) => {
characterSelectMoedlOptions.value = value.data
@@ -220,14 +260,24 @@ export default defineComponent({
* @param {*} tags
*/
async function InitCharacterAndSceneData() {
debugger
// if (!tags) return
character_tags.value = cloneDeep(tags.value.character_tags)
character_tags.value.forEach((item) => {
item.children = null
})
for (let i = 0; i < character_tags.value.length; i++) {
let item = character_tags.value[i]
character_tags.value[i].children = null
if (!item.hasOwnProperty('isShow') || item.isShow == false) {
character_tags.value.splice(i, 1)
i--
}
}
scene_tags.value = cloneDeep(tags.value.scene_tags)
for (let i = 0; i < scene_tags.value.length; i++) {
let item = scene_tags.value[i]
if (!item.hasOwnProperty('isShow') || item.isShow == false) {
scene_tags.value.splice(i, 1)
i--
}
}
select_character_tags.value = []
select_scene_tags.value = []
// true
@@ -304,6 +354,47 @@ export default defineComponent({
}
}
let dp = null
/**
* 开始人物匹配
*/
async function MatchUser() {
//
window.api.setEventListen([DEFINE_STRING.MJ.MACTH_USER_RETURN], (value) => {
//
//
let temp_data = props.func.getData(null)
//
props.func.modifyData(() => {
console.log(temp_data)
// IDdata
let index = temp_data.findIndex((x) => x.id == value.id)
if (index >= 0) {
temp_data[index].character_tags = value.match_character
}
return temp_data
})
})
//
let da = props.func.getData(null)
//
await window.mj.AutoMatchUser(JSON.stringify(da), async (value) => {
setTimeout(() => {
if (dp) {
dp.destroy()
}
}, 1000)
await RefreshTagData()
if (value.code == 0) {
message.error(value.message)
window.api.showGlobalMessageDialog(value)
return
}
window.api.showGlobalMessageDialog(value)
})
}
return {
characterData,
row,
@@ -321,7 +412,8 @@ export default defineComponent({
title_character_select_model,
RefreshTagData,
UpdateCharacterSelect,
UpdateSceneSelect
UpdateSceneSelect,
MatchUser
}
}
})
@@ -142,7 +142,7 @@ export default defineComponent({
message.error('当前翻译的数据里面没有中文')
}
} else if (key == 'chinese') {
debugger
let t = [[toRaw(row.value)], 'en', 'zh', false, false]
await window.mj.TranslateReturnNowTask(JSON.stringify(t), (value) => {
if (value.code == 0) {
@@ -66,7 +66,7 @@ export default defineComponent({
});
async function onUpdateChecked(v) {
debugger;
row.adetailer = v;
}
@@ -1,10 +1,23 @@
<template>
<div v-if="type == 'title'">
<div v-if="type == 'title'" style="display: flex">
<span style="margin-right: 5px">提示词命令</span>
<n-popover trigger="hover">
<template #trigger>
<n-button color="#7c461e" @click="SetMergeModel" text style="font-size: 24px">
<n-icon>
<Construct />
</n-icon>
</n-button>
</template>
<span>设置合并排序模式</span>
</n-popover>
<n-dropdown trigger="hover" :options="MergePromptOptions" @select="MergePromptSelect">
<n-button size="tiny" @click="MergePrompt" color="#7c461e">合并命令</n-button>
<n-button size="tiny" style="margin-left: 5px" @click="MergePrompt(null)" color="#e18a3b"
>合并命令</n-button
>
</n-dropdown>
<n-button color="#e18a3b" size="tiny" style="margin-left: 5px" @click="MJBadPromptCheck"
<n-button color="#c0d695" size="tiny" style="margin-left: 5px" @click="MJBadPromptCheck"
>敏感词检查</n-button
>
</div>
@@ -24,6 +37,10 @@
<span>粘贴MJ里面的图片链接自动下载到对应的行并分割</span>
</n-popover>
<n-button size="tiny" color="#ee7959" style="margin-right: 5px" @click="SingleMergePrompt"
>单句合并</n-button
>
<n-input
:status="input_status"
size="tiny"
@@ -37,16 +54,22 @@
<script>
import { ref, h, onMounted, defineComponent, toRaw, watch } from 'vue'
import { NButton, NInput, NPopover, useMessage, useDialog, NDropdown } from 'naive-ui'
import { NButton, NInput, NPopover, useMessage, useDialog, NDropdown, NIcon } from 'naive-ui'
import { DEFINE_STRING } from '../../../../../define/define_string'
import InputDialogContent from './InputDialogContent.vue'
import { Construct } from '@vicons/ionicons5'
import DynamicTagsSelect from '../../Components/DynamicTagsSelect.vue'
import { usePromptStore } from '../../../../../stores/prompt'
export default defineComponent({
components: {
NButton,
NInput,
NPopover,
NDropdown
NDropdown,
NIcon,
Construct,
NPopover
},
props: ['type', 'row', 'index', 'func'],
setup(props) {
@@ -56,10 +79,7 @@ export default defineComponent({
let row = ref(props.row)
let input_status = ref('default')
let image_url_ref = ref(null)
// let input_image_
//
let promptStore = usePromptStore()
//
watch(
@@ -140,10 +160,15 @@ export default defineComponent({
}
/**
* 合并提示词
* 合并命令
* @param {*} key
*/
async function MergePrompt() {
props.func.mergePrompt(null)
async function MergePrompt(key) {
if (row.value.id) {
props.func.mergePrompt(row.value.id, key)
} else {
props.func.mergePrompt(null, key)
}
}
/**
@@ -167,7 +192,6 @@ export default defineComponent({
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
maskClosable: false,
onClose: async () => {
debugger
let row_image_url = image_url_ref.value.data
//
@@ -196,7 +220,62 @@ export default defineComponent({
* @param key
*/
async function MergePromptSelect(key) {
props.func.mergePrompt(key)
MergePrompt(key)
}
async function SaveFunction(value, options) {
//
// options
if (value.length != options.length) {
message.error('要保存的数据量和下拉选择的的数据量不一致')
return
}
promptStore.InitPromptSort(value)
//
await window.pmpt.SavePromptSort(value, (value) => {
if (value.code == 0) {
message.error(value.message)
reutrn
}
message.success(value.message)
// store
})
}
/**
* 设置合并的模式
*/
async function SetMergeModel() {
//
await window.pmpt.GetPromptSortOptions((value) => {
let options = value.data
dialog.create({
name: 'setMergeModel',
title: '设置合并排序模式',
content: () =>
h(DynamicTagsSelect, {
options: options,
tagType: 'success',
placeholder: '选择当前的prompt排序方式',
SaveFunction: SaveFunction,
initData: promptStore.GetPromptSort,
max: 4
}),
style: `width : 500px; `,
maskClosable: false,
onPositiveClick: async () => {}
})
})
}
/**
* 单句合并
*/
async function SingleMergePrompt() {
MergePrompt(null)
}
return {
@@ -213,7 +292,9 @@ export default defineComponent({
MergePromptOptions: [
{ label: 'SD模式合并', key: 'sd_merge' },
{ label: 'MJ模式合并', key: 'mj_merge' }
]
],
SetMergeModel,
SingleMergePrompt
}
}
})
@@ -104,6 +104,8 @@ import {
NPopover,
NTag
} from 'naive-ui'
import { usePromptStore } from '../../../../../stores/prompt'
import { useImageStore } from '../../../../../stores/image'
export default defineComponent({
components: {
@@ -117,6 +119,8 @@ export default defineComponent({
},
props: ['initData', 'type', 'image_generate_category', 'func'],
setup(props) {
let imageStore = useImageStore()
let promptStore = usePromptStore()
let message = useMessage()
let data = ref(props.initData)
let type = ref(props.type)
@@ -167,7 +171,7 @@ export default defineComponent({
onMounted(async () => {
await window.api.InitSDConfig((value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -210,23 +214,24 @@ export default defineComponent({
e.dataTransfer.effectAllowed = 'move'
console.log('move', e.target)
dragTarget = e.target
imageStore.SetDragTarget(e.target)
}
//
async function imageDragDrop(e) {
debugger
console.log('end', e.target, dragTarget)
//
if (dragTarget == null) {
message.error('只能拖拽到当前行的图片上')
return
}
// if (dragTarget == null) {
// message.error('')
// return
// }
//
if (e.target.getAttribute('mainImage') != '1') {
message.error('图片只能拖拽到主图片上')
return
}
let source_img = dragTarget.src
let source_img = imageStore.GetDragTarget.src
.split('?')[0]
.replace(/^file:\/\/\//, '')
.replace(/^\//, '')
@@ -253,6 +258,7 @@ export default defineComponent({
async function UpdateImageGenerateCategory(value, option) {
//
window.config.image_generate_category = value
promptStore.UpdateImageGenerateCategory(value)
//
await window.api.ModifySampleSetting(
JSON.stringify({
@@ -16,7 +16,7 @@
<n-popover trigger="hover">
<template #trigger>
<n-input-number
style="margin-left: 10px; width: 130px"
style="margin-left: 10px; width: 100px"
size="small"
placeholder="输入合并的行数"
:max="10000"
@@ -58,6 +58,9 @@
<n-button color="#80a492" size="small" style="margin-left: 10px" @click="mergeWord"
>合并</n-button
>
<n-button color="#f3a694" size="small" style="margin-left: 10px" @click="CopyWord"
>一键复制内容</n-button
>
</div>
<n-input
style="margin-top: 5px"
@@ -86,7 +89,7 @@ import {
NInputNumber
} from 'naive-ui'
import { DEFINE_STRING } from '../../../../../define/define_string'
import { AddCircleOutline } from '@vicons/ionicons5'
import { AddCircleOutline, Copy } from '@vicons/ionicons5'
import InputDialogContent from './InputDialogContent.vue'
import { max } from 'lodash'
@@ -176,13 +179,11 @@ export default defineComponent({
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
maskClosable: false,
onClose: async () => {
debugger
write_setting.value.split_char = split_ref.value.data
//
await window.api.SaveDefineConfigJsonByProperty(
JSON.stringify(['clip_setting', 'write_setting', toRaw(write_setting.value), false]),
(value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -208,7 +209,6 @@ export default defineComponent({
await window.api.SaveDefineConfigJsonByProperty(
JSON.stringify(['clip_setting', 'write_setting', toRaw(write_setting.value), false]),
(value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -224,7 +224,6 @@ export default defineComponent({
* 一键格式化
*/
async function formateWrite() {
debugger
let split_arr = Array.from(write_setting.value.split_char)
split_arr.forEach((item) => {
let specialCharacters = [
@@ -274,6 +273,19 @@ export default defineComponent({
ChangeWordInput()
}
/**
* 复制数据到剪贴板
*/
async function CopyWord() {
// word
try {
await navigator.clipboard.writeText(word.value)
message.success('复制成功')
} catch (error) {
message.error('复制失败')
}
}
return {
data,
rowCount,
@@ -285,7 +297,8 @@ export default defineComponent({
write_setting,
mergeCountChange,
formateWrite,
mergeWord
mergeWord,
CopyWord
}
}
})
@@ -158,7 +158,7 @@ export default defineComponent({
//
function setHeight() {
debugger
let div = document.getElementById('import_word_and_srt')
div.style.height = hh + 'px'
}
@@ -423,7 +423,7 @@ export default defineComponent({
})
return
} else {
debugger
// config
await window.api.OriginalAddWebuiJson(JSON.stringify(data.value), async (value) => {
if (value.code == 0) {
@@ -466,7 +466,7 @@ export default defineComponent({
})
await window.api.ImportSrtAndGetTime([toRaw(data.value), srt_path], (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -252,7 +252,6 @@ export default defineComponent({
await window.api.GetDefineConfigJsonByProperty(
JSON.stringify(['img_base', 'mj_config', false, null]),
(value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -363,7 +362,6 @@ export default defineComponent({
message.success('保存成功')
} catch (error) {
debugger
message.error('保存失败 ' + error.message)
}
}
@@ -386,7 +384,6 @@ export default defineComponent({
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
maskClosable: false,
onClose: async () => {
debugger
let mj_bad_prompt = bad_prompt_ref.value.data
if (mj_bad_prompt == null || mj_bad_prompt == '') {
+294 -215
View File
@@ -24,7 +24,9 @@ import {
watch,
toRaw,
render,
onBeforeUnmount
onBeforeUnmount,
provide,
nextTick
} from 'vue'
import {
NDataTable,
@@ -36,7 +38,6 @@ import {
NPopover,
useDialog,
NCheckbox,
NSelect,
NIcon
} from 'naive-ui'
import { DEFINE_STRING } from '../../../../define/define_string'
@@ -51,11 +52,14 @@ import DataTableGptPromptRow from './Components/DataTableGptPromptRow.vue'
import DataTableParameterRow from './Components/DataTableParameterRow.vue'
import { Reload } from '@vicons/ionicons5'
import {
checkStringValueDeletePrefix,
checkStringValueAddPrefix,
checkStringValueAddSuffix,
checkStringValueDeletePrefix
checkStringValueDeleteSuffix
} from '../../../../main/generalTools'
import { usePromptStore } from '../../../../stores/prompt'
export default defineComponent({
components: {
NImage,
@@ -70,9 +74,9 @@ export default defineComponent({
Reload,
NIcon
},
props: ['initData', 'prefix_prompt', 'suffix_prompt', 'tags', 'InitTags'],
props: ['initData', 'tags', 'InitTags'],
setup(props) {
console.log('输出文件夹位置', props.initData)
let promptStore = usePromptStore()
let data = ref(props.initData)
let tags = ref(props.tags)
let message = useMessage()
@@ -80,8 +84,6 @@ export default defineComponent({
let selectKey = ref([])
let promptChineseRef = ref(null)
let maxHeight = ref(null)
let prefix_prompt = ref(props.prefix_prompt)
let suffix_prompt = ref(props.suffix_prompt)
let titleCharacterAndSceneRef = ref(null)
let dataCharacterAndSceneRef = ref(null)
@@ -96,6 +98,9 @@ export default defineComponent({
let AutoSaveDataJsonDebounced = debounce(AutoSaveDataJson, 3000)
let SaveDataJsonDebounced = debounce(AutoSaveDataJson, 1000)
promptStore.UpdateImageGenerateCategory(
window.config.image_generate_category ? window.config.image_generate_category : 'sd'
)
let image_generate_category = ref(
window.config.image_generate_category ? window.config.image_generate_category : 'sd'
)
@@ -125,22 +130,9 @@ export default defineComponent({
selectStyle.value[i] = tags.value.style_tags[index]
}
}
},
{ deep: true }
)
watch(
() => props.prefix_prompt,
(newVal) => {
prefix_prompt.value = newVal
},
{ deep: true }
)
watch(
() => props.suffix_prompt,
(newVal) => {
suffix_prompt.value = newVal
// store
promptStore.UpdateSelectStyleSort(toRaw(selectStyle.value))
},
{ deep: true }
)
@@ -210,20 +202,25 @@ export default defineComponent({
} catch (error) {
message.error('人物角色刷新失败,请重试' + error.toString())
}
}
},
getData: GetData,
modifyData: ModifyData
}
})
},
className: 'prompt_row',
key: 'character',
width: '200',
width: '210',
render(row, index) {
return h(DataTableCharacterAndScene, {
ref: dataCharacterAndSceneRef,
type: 'data',
row: row,
tags: tags,
characterSelectModel: characterSelectModel
characterSelectModel: characterSelectModel,
func: {
getData: GetData
}
})
}
},
@@ -268,6 +265,8 @@ export default defineComponent({
index: index,
func: {
mJBadPromptCheck: MJBadPromptCheck,
modifyData: ModifyData,
getData: GetData,
mergePrompt: MergePrompt
}
})
@@ -281,7 +280,10 @@ export default defineComponent({
row: row,
index: index,
func: {
nextGenerateImage: NextGenerateImage
nextGenerateImage: NextGenerateImage,
modifyData: ModifyData,
getData: GetData,
mergePrompt: MergePrompt
}
})
}
@@ -292,15 +294,14 @@ export default defineComponent({
return h(DataTableParameterRow, {
type: 'title',
row: row,
index: index,
image_generate_category: image_generate_category
index: index
})
},
key: 'parameter',
width: '130',
render(row, index) {
return h(DataTableParameterRow, {
type: `data_${image_generate_category.value}`,
type: `data_${promptStore.GetImageGenerateCategory}`,
row: row,
index: index
})
@@ -352,7 +353,6 @@ export default defineComponent({
onMounted(async () => {
// cinfig
await window.api.GetConfigJson(JSON.stringify([null, {}]), async (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -374,6 +374,7 @@ export default defineComponent({
type: 'style_main'
})
}
promptStore.UpdateSelectStyleSort(toRaw(selectStyle.value))
})
// datachinese text
@@ -396,7 +397,6 @@ export default defineComponent({
window.api.setEventListen(
[DEFINE_STRING.SD_ORIGINAL_GENERATE_IMAGE_RETURN, window.id],
(value) => {
debugger
if (value.code == 0) {
message.error('生成图片错误,错误信息如下:' + value.message)
return
@@ -437,6 +437,9 @@ export default defineComponent({
onBeforeUnmount(async () => {
await AutoSaveDataJson()
window.api.removeEventListen(DEFINE_STRING.DISCORD.MAIN_DISCORD_MESSAGE_CHANGE)
window.api.removeEventListen(DEFINE_STRING.SD_ORIGINAL_GENERATE_IMAGE_RETURN)
window.api.removeEventListen(DEFINE_STRING.TRANSLATE_RETURN_REFRESH)
})
// Discord
@@ -456,7 +459,6 @@ export default defineComponent({
//
if (value.type == 'created') {
debugger
console.log('接收Discord的创建消息', value)
// IDdata
@@ -554,7 +556,6 @@ export default defineComponent({
async function TranslatePrompt(translateData, from, to) {
console.log(translateData)
await window.api.TranslatePrompt([translateData, from, to, window.id, true], (value) => {
debugger
console.log(value)
})
}
@@ -583,13 +584,14 @@ export default defineComponent({
content: () =>
h(InputDialogContent, {
ref: prefix_prompt_ref,
initData: prefix_prompt.value,
initData: promptStore.GetPrefix,
placeholder: '请输入前缀'
}),
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
maskClosable: false,
onClose: async () => {
prefix_prompt.value = prefix_prompt_ref.value.data
let prefix = prefix_prompt_ref.value.data
promptStore.UpdatePrefix(prefix)
//
await window.api.SaveCopywritingInformation(
[prefix_prompt_ref.value.data, 'prefix_prompt', false],
@@ -608,7 +610,6 @@ export default defineComponent({
* 选择生成图片的风格
*/
async function SelectGenerateImagesStyle() {
debugger
//
//
let dialogWidth = window.innerWidth * 0.8
@@ -632,7 +633,6 @@ export default defineComponent({
let cus_arr = []
for (let i = 0; i < selectStyle.value.length; i++) {
debugger
const element = selectStyle.value[i]
//
if (element.type == 'style_main') {
@@ -680,13 +680,14 @@ export default defineComponent({
content: () =>
h(InputDialogContent, {
ref: suffix_prompt_ref,
initData: suffix_prompt.value,
initData: promptStore.GetSuffix,
placeholder: '请输入后缀'
}),
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
maskClosable: false,
onClose: async () => {
suffix_prompt.value = suffix_prompt_ref.value.data
let suffix = suffix_prompt_ref.value.data
promptStore.UpdateSuffix(suffix)
await window.api.SaveCopywritingInformation(
[suffix_prompt_ref.value.data, 'suffix_prompt', false],
(value) => {
@@ -709,7 +710,7 @@ export default defineComponent({
message.error(value.message)
return
}
debugger
// false
for (let i = 0; i < data.value.length; i++) {
data.value[i].mj_message = data.value[i].mj_message ? data.value[i].mj_message : {}
@@ -838,7 +839,6 @@ export default defineComponent({
* @param {*} key 翻译的类型
*/
async function TranslateAll(key) {
debugger
//
if (key == 'english') {
let tmp_d = []
@@ -859,7 +859,6 @@ export default defineComponent({
message.success('添加翻译任务成功')
})
} else if (key == 'chinese') {
debugger
let t = [[...toRaw(data.value)], 'en', 'zh', false, false]
await window.mj.TranslateReturnNowTask(JSON.stringify(t), (value) => {
if (value.code == 0) {
@@ -871,175 +870,6 @@ export default defineComponent({
}
}
/**
* SD 模式合并名并
* @param character_string
* @param scene_string
* @param gpt_prompt
*/
function SDMergePrompt(element) {
let character_string = ''
element.character_tags?.forEach((item) => {
character_string += ', ' + item.prompt
if (item.lora && item.lora != '无' && item.lora_weight) {
character_string += `, <lora:${item.lora}:${item.lora_weight}>`
}
})
// character_string
character_string = checkStringValueDeletePrefix(character_string, ',')
//
let scene_string = ''
element.scene_tags?.forEach((item) => {
scene_string += ', ' + item.prompt
})
let style_string = ''
selectStyle.value.forEach((item) => {
if (item.type && item.type == 'style_main') {
style_string += ', ' + item.prompt
}
})
// scene_string
scene_string = checkStringValueDeletePrefix(scene_string, ',')
style_string = checkStringValueDeletePrefix(style_string, ',')
style_string = checkStringValueAddSuffix(style_string, ',')
return `${style_string} ${checkStringValueAddSuffix(
character_string,
', '
)}${checkStringValueAddSuffix(scene_string, ', ')}${checkStringValueAddSuffix(
element.gpt_prompt,
', '
)}`
}
/**
* 将所有的数据进行拼接
* @param prefix 前缀
* @param character_string 人物提示词
* @param scene_string 场景提示词
* @param gpt_prompt GPT提示词
* @param suffix 后缀
*/
function MJMergePrompt(prefix, element, suffix) {
debugger
let character_string = ''
let cref_url = ''
element.character_tags?.forEach((item) => {
character_string += ', ' + item.prompt
if (item.image_url && item.image_url != '' && item.cref_cw) {
cref_url += ` ${item.image_url} `
}
})
// cref_url --cref
cref_url = checkStringValueAddPrefix(cref_url, ' --cref ')
if (element.character_tags && element.character_tags.length > 0) {
cref_url = checkStringValueAddSuffix(
cref_url,
` --cw ${element.character_tags[0].cref_cw} `
)
}
// character_string
character_string = checkStringValueDeletePrefix(character_string, ',')
//
let scene_string = ''
element.scene_tags?.forEach((item) => {
scene_string += ', ' + item.prompt
})
// scene_string
scene_string = checkStringValueDeletePrefix(scene_string, ',')
//
let style_string = ''
let style_url = ''
let sw = 0
selectStyle.value.forEach((item) => {
if (item.type && item.type == 'style_main') {
style_string += ', ' + item.prompt
if (sw == 0) {
sw = item.sref_sw
}
if (!isEmpty(item.image_url)) {
let url = item.image_url ? item.image_url : ''
style_url += ' ' + url
}
}
})
style_url = checkStringValueAddPrefix(style_url, '--sref ')
style_url = checkStringValueAddSuffix(style_url, ` --sw ${sw}`)
style_string = checkStringValueDeletePrefix(style_string, ',')
style_string = checkStringValueAddSuffix(style_string, ', ')
return ` ${style_string} ${checkStringValueAddSuffix(
prefix,
', '
)}${checkStringValueAddSuffix(character_string, ', ')}${checkStringValueAddSuffix(
scene_string,
', '
)}${checkStringValueAddSuffix(element.gpt_prompt, ', ')} ${checkStringValueAddSuffix(
suffix,
' '
)} ${cref_url} ${style_url}`
}
/**
* 生成提示词
*/
async function MergePrompt(key) {
try {
debugger
//
// ID
let style_str = ''
for (let i = 0; i < selectStyle.value.length; i++) {
const element = selectStyle.value[i]
style_str += element.english_style + ','
}
//
let prefix = prefix_prompt.value ? prefix_prompt.value : ''
let suffix = suffix_prompt.value ? suffix_prompt.value : ''
for (let i = 0; i < data.value.length; i++) {
const element = data.value[i]
let end_prompt = ''
if (key == null) {
//
if (image_generate_category.value == 'sd') {
end_prompt = SDMergePrompt(element)
} else if (image_generate_category.value == 'mj') {
end_prompt = MJMergePrompt(prefix, element, suffix)
} else if (image_generate_category.value == 'd3') {
message.error('该分类暂时不可用')
return
} else {
message.error('合并提示词错误:未知的合并提示词类型')
return
}
} else if (key == 'mj_merge') {
end_prompt = MJMergePrompt(prefix, element, suffix)
} else if (key == 'sd_merge') {
end_prompt = SDMergePrompt(element)
} else {
message.error('合并提示词错误:未知的合并提示词类型')
return
}
// + + + + +
data.value[i].prompt = end_prompt
}
} catch (error) {
message.error('生成提示词错误,错误信息如下:' + error.message)
}
}
/**
* 采集图片
*/
@@ -1102,7 +932,6 @@ export default defineComponent({
* 一拆四
*/
async function OneSplitFour() {
debugger
// data
let min
let pra = []
@@ -1138,7 +967,6 @@ export default defineComponent({
//
await window.img.OneSplitFour(JSON.stringify([pra, min]), (value) => {
debugger
if (value.code == 0) {
message.error('一拆四失败,错误信息如下:' + value.message)
return
@@ -1146,6 +974,257 @@ export default defineComponent({
})
}
/**
* SD 模式合并名并
* @param character_string
* @param scene_string
* @param gpt_prompt
*/
function SDMergePrompt(element) {
//
let character_string = ''
element.character_tags?.forEach((item) => {
character_string += ', ' + item.prompt
if (item.lora && item.lora != '无' && item.lora_weight) {
character_string += `, <lora:${item.lora}:${item.lora_weight}>`
}
})
// character_string
character_string = checkStringValueDeletePrefix(character_string, ',')
character_string = checkStringValueAddSuffix(character_string, ', ')
//
let scene_string = ''
element.scene_tags?.forEach((item) => {
scene_string += ', ' + item.prompt
})
// scene_string
scene_string = checkStringValueDeletePrefix(scene_string, ',')
scene_string = checkStringValueAddSuffix(scene_string, ', ')
let style_string = ''
for (let i = 0; i < promptStore.GetSelectStyle.length; i++) {
const element = promptStore.GetSelectStyle[i]
if (element.type == 'style_main') {
style_string += element.prompt + ', '
if (element.lora && element.lora != '无' && element.lora_weight) {
style_string += `<lora:${element.lora}:${element.lora_weight}>, `
}
} else {
style_string += element.english_style
}
}
let prompt_str = `${checkStringValueAddSuffix(promptStore.GetPrefix, ',')}`
for (let i = 0; i < promptStore.GetPromptSort.length; i++) {
const element = promptStore.GetPromptSort[i]
prompt_str += `${'${' + element.value + '}'} `
}
console.log(prompt_str)
prompt_str = prompt_str.replace('${style}', style_string)
prompt_str = prompt_str.replace('${character}', character_string)
prompt_str = prompt_str.replace('${scene}', scene_string)
prompt_str = prompt_str.replace(
'${prompt}',
checkStringValueAddSuffix(element.gpt_prompt, ',')
)
prompt_str += ` ${promptStore.GetSuffix ? promptStore.GetSuffix : ''}`
return prompt_str
}
/**
* 将所有的数据进行拼接
* @param prefix 前缀
* @param character_string 人物提示词
* @param scene_string 场景提示词
* @param gpt_prompt GPT提示词
* @param suffix 后缀
*/
function MJMergePrompt(prefix, element, suffix, style_str) {
let character_string = ''
let cref_url = ''
element.character_tags?.forEach((item) => {
character_string += ', ' + item.prompt
if (item.image_url && item.image_url != '' && item.cref_cw) {
cref_url += ` ${item.image_url} `
}
})
// cref_url --cref
cref_url = checkStringValueAddPrefix(cref_url, ' --cref ')
if (element.character_tags && element.character_tags.length > 0) {
cref_url = checkStringValueAddSuffix(
cref_url,
` --cw ${element.character_tags[0].cref_cw} `
)
}
// character_string
character_string = checkStringValueDeletePrefix(character_string, ',')
character_string = checkStringValueAddSuffix(character_string, ', ')
//
let scene_string = ''
element.scene_tags?.forEach((item) => {
scene_string += ', ' + item.prompt
})
// scene_string
scene_string = checkStringValueDeletePrefix(scene_string, ',')
scene_string = checkStringValueAddSuffix(scene_string, ', ')
//
let style_url = ''
let sw = 0
promptStore.GetSelectStyle.forEach((item) => {
if (item.type && item.type == 'style_main') {
if (sw == 0) {
sw = item.sref_sw
}
if (!isEmpty(item.image_url)) {
let url = item.image_url ? item.image_url : ''
style_url += ' ' + url
}
}
})
style_url = checkStringValueAddPrefix(style_url, '--sref ')
style_url = checkStringValueAddSuffix(style_url, ` --sw ${sw}`)
//
if (promptStore.GetPromptSort.length != 4) {
message.error('获取设置的提示词排序错误')
return
}
prefix = checkStringValueAddSuffix(prefix, ', ')
suffix = checkStringValueAddPrefix(suffix, ' ')
let prompt_str = ` ${prefix}`
for (let i = 0; i < promptStore.GetPromptSort.length; i++) {
const element = promptStore.GetPromptSort[i]
prompt_str += `${'${' + element.value + '}'}`
}
console.log(prompt_str)
prompt_str = prompt_str.replace('${style}', style_str)
prompt_str = prompt_str.replace('${character}', character_string)
prompt_str = prompt_str.replace('${scene}', scene_string)
prompt_str = prompt_str.replace(
'${prompt}',
checkStringValueAddSuffix(element.gpt_prompt, ',')
)
prompt_str += ` ${suffix}${cref_url} ${style_url}`
return prompt_str
}
/**
* 合并提示词
*/
function MergePrompt(id, key) {
try {
// idIDID
//
console.log(promptStore.GetSelectStyle)
let style_str = ''
for (let i = 0; i < promptStore.GetSelectStyle.length; i++) {
const element = promptStore.GetSelectStyle[i]
if (element.type == 'style_main') {
style_str += element.prompt + ', '
} else {
style_str += element.english_style + ', '
}
}
style_str = checkStringValueDeleteSuffix(style_str, ', ')
style_str = checkStringValueAddSuffix(style_str, ', ')
//
let temp_data = []
if (id) {
//
temp_data = [toRaw(data.value.find((item) => item.id == id))]
} else {
//
temp_data = toRaw(data.value)
}
//
if (key == null) {
//
if (image_generate_category.value == 'sd') {
key = 'sd_merge'
} else if (image_generate_category.value == 'mj') {
key = 'mj_merge'
} else if (image_generate_category.value == 'd3') {
message.error('该分类暂时不可用')
return
} else {
message.error('合并提示词错误:未知的合并提示词类型')
return
}
}
// TODO
for (let i = 0; i < temp_data.length; i++) {
const element = temp_data[i]
let end_prompt = ''
if (key == 'mj_merge') {
end_prompt = MJMergePrompt(
promptStore.GetPrefix,
element,
promptStore.GetSuffix,
style_str
)
} else if (key == 'sd_merge') {
end_prompt = SDMergePrompt(element)
} else if ((key = 'd3_merge')) {
// D3
message.error('该分类暂时不可用')
return
} else {
message.error('合并提示词错误:未知的合并提示词类型')
return
}
// temp_data[i].prompt = end_prompt
// Iddata
let index = data.value.findIndex((it) => it.id == element.id)
if (index == -1) {
message.error('拼接完成,没有找到对应的ID')
return
}
data.value[index].prompt = end_prompt
}
} catch (error) {
message.error('生成提示词错误,错误信息如下:' + error.message)
}
}
/**
* 获取当前的data
*/
function GetData(id) {
if (id) {
//
let index = data.value.findIndex((item) => item.id == id)
if (index == -1) {
message.error('指定ID的行没有找到')
return
}
return data.value[index]
}
return toRaw(data.value)
}
/**
* 修改data数据
* @param callback
*/
function ModifyData(callback) {
if (callback) {
data.value = callback()
}
}
return {
data,
columns: createColumns({}),
@@ -1161,9 +1240,9 @@ export default defineComponent({
prefix_prompt_ref,
suffix_prompt_ref,
characterSelectModel,
image_generate_category,
titleCharacterAndSceneRef,
dataCharacterAndSceneRef
dataCharacterAndSceneRef,
image_generate_category
}
}
})
@@ -9,13 +9,7 @@
</MenuButton>
</div>
<div id="data-table" style="margin-top: 10px">
<DataTable
:tags="tags"
:initData="data"
:suffix_prompt="suffix_prompt"
:prefix_prompt="prefix_prompt"
:InitTags="InitTags"
></DataTable>
<DataTable :tags="tags" :initData="data" :InitTags="InitTags"></DataTable>
</div>
</template>
@@ -25,6 +19,7 @@ import { NImage, useMessage } from 'naive-ui'
import { DEFINE_STRING } from '../../../../define/define_string'
import MenuButton from './MenuButton.vue'
import DataTable from './DataTable.vue'
import { usePromptStore } from '../../../../stores/prompt'
export default defineComponent({
components: {
@@ -33,16 +28,16 @@ export default defineComponent({
MenuButton
},
setup() {
let promptStore = usePromptStore()
let message = useMessage()
let data = ref([])
let tags = ref({})
let AnalyzeCharacter = ref('')
let TagTreeData = ref([])
let suffix_prompt = ref(null)
let prefix_prompt = ref(null)
let promptError = true
async function InitData() {
//
//
// 稿
@@ -65,20 +60,18 @@ export default defineComponent({
//
await window.api.GetConfigJson(JSON.stringify([null, {}]), async (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
}
suffix_prompt.value = value.data.suffix_prompt
prefix_prompt.value = value.data.prefix_prompt
promptStore.UpdateSuffix(value.data.suffix_prompt)
promptStore.UpdatePrefix(value.data.prefix_prompt)
})
// dataprompt
for (let i = 0; i < data.value.length; i++) {
const item = data.value[i]
await window.api.GetPromptJson(item.name, (value) => {
debugger
console.log(value)
if (value.code == 0 && promptError) {
message.error(value.message)
@@ -98,7 +91,7 @@ export default defineComponent({
message.error(value.message)
return
}
debugger
tags.value = value.data
// datatag
console.log(data, tags)
@@ -112,7 +105,9 @@ export default defineComponent({
// character_tagskeytags.character_tags,
for (let j = element.character_tags.length - 1; j >= 0; j--) {
const item = element.character_tags[j]
let index = tags.value.character_tags.findIndex((tag) => tag.key == item.key)
let index = tags.value.character_tags.findIndex(
(tag) => tag.key == item.key && tag.isShow == true
)
if (index != -1) {
element.character_tags[j] = tags.value.character_tags[index]
} else {
@@ -126,17 +121,30 @@ export default defineComponent({
})
}
/**
* 初始化数据
*/
async function InItPromptSort() {
await window.pmpt.GetPromptSort((value) => {
if (value.code == 0) {
message.error(value.message)
return
}
promptStore.InitPromptSort(value.data)
})
}
onMounted(async () => {
await InitData()
await InitTags()
await InItPromptSort()
})
return {
data,
AnalyzeCharacter,
TagTreeData,
prefix_prompt,
suffix_prompt,
InitData,
InitTags,
tags
@@ -324,7 +324,7 @@ export default defineComponent({
)
} else if (value == 'resetPrompt') {
//
debugger
console.log(data)
await ResetPrompt()
} else if (value == 'resetImage') {
@@ -349,7 +349,7 @@ export default defineComponent({
auto_save,
railStyle,
AutoSaveUpdate: (value) => {
debugger
auto_save.value = value
window.config.auto_save = value
},
@@ -191,7 +191,7 @@ export default defineComponent({
* 获取温馨提示列表右上角
*/
async function getFriendlyReminderList() {
debugger;
friendlyReminderData.value = [];
await window.api.getFriendlyReminderList((value) => {
friendlyReminderData.value = value.value.filter(item => item.id != "0" && item.id != "1")
@@ -203,7 +203,7 @@ export default defineComponent({
*/
async function GetFriendlyReminder() {
let friendlyReminderSelectDraft_name = friendlyReminderSelectDraft.value.draf_name;
debugger;
console.log(friendlyReminderSelectDraft_name);
if (friendlyReminderTextName.value == "" || friendlyReminderTextName.value == null || friendlyReminderSelectDraft_name == "" || friendlyReminderSelectDraft_name == null) {
message.error("请选择草稿地址和名称");
@@ -120,7 +120,7 @@ export default defineComponent({
return;
}
await window.api.GenerateGptExampleOut(JSON.stringify(toRaw(prompt_data.value)), (value) => {
debugger;
console.log(value);
if (value.code == 0) {
message.error(value.message);
@@ -134,7 +134,7 @@ export default defineComponent({
* 添加提示词案例输出数据
*/
async function AddExamplePrompt() {
debugger;
let last_data = prompt_data.value.prompt_example[prompt_data.value.prompt_example.length - 1];
if (last_data != null) {
if (isEmpty(last_data.user_content)) {
@@ -156,7 +156,7 @@ export default defineComponent({
//
async function DeleteExampleOut(example, index) {
debugger;
if (index > prompt_data.value.prompt_example.length - 1) {
message.error("删除的案例不存在");
return;
@@ -241,7 +241,7 @@ export default defineComponent({
let mj_api_options = ref([])
let image_suffix = computed(() => {
debugger
let text = image_model_options.value.findIndex((item) => {
return item.value == mjSetting.value.image_model
})
@@ -262,7 +262,7 @@ export default defineComponent({
await window.api.GetDefineConfigJsonByProperty(
JSON.stringify(['img_base', 'mj_config', false, null]),
(value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -393,7 +393,7 @@ export default defineComponent({
)
.then((response) => response.json())
.then((data) => {
debugger
// (nijimj)
// mjniji
if (data.applications && data.application_commands) {
@@ -447,7 +447,7 @@ export default defineComponent({
await window.api.SaveDefineConfigJsonByProperty(
JSON.stringify(['img_base', 'mj_config', toRaw(mjSetting.value), false]),
(value) => {
debugger
console.log(value)
if (value.code == 0) {
message.error(value.message)
@@ -520,7 +520,7 @@ export default defineComponent({
* 打开购买GPT的地址
*/
async function openGptBuyUrl() {
debugger
let tmp_gb = mj_api_options.value.filter((item) => item.value == mjSetting.value.mj_api_url)
if (tmp_gb.length == 0) {
message.error('当前选择的服务商没有购买地址!')
@@ -167,7 +167,7 @@ export default defineComponent({
onMounted(async () => {
await window.api.InitSDConfig((value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -231,7 +231,7 @@ export default defineComponent({
*/
async function LoadSDServiceData() {
await window.sd.LoadSDServiceData(toRaw(formValue.value).webui_api_url, (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -245,7 +245,7 @@ export default defineComponent({
* 加载GPT的配置信息
*/
async function InitGptOptions() {
debugger
await window.api.getGptBusinessOption('all', (value) => {
if (value.code == 0) {
message.error(value.message)
@@ -368,7 +368,7 @@ export default defineComponent({
* 打开购买GPT的地址
*/
async function openGptBuyUrl() {
debugger
let tmp_gb = gpt_options.value.filter((item) => item.value == formValue.value.gpt_business)
if (tmp_gb.length == 0) {
message.error('当前选择的服务商没有购买地址!')
@@ -387,7 +387,7 @@ export default defineComponent({
* @param {*} value 主题名称
*/
async function ChangeMode(value) {
debugger
console.log(value)
const isDarkMode = await window.darkMode.toggle(value)
}
File diff suppressed because it is too large Load Diff
@@ -174,7 +174,7 @@ export default defineComponent({
* @param image
*/
function getCurrentWidthHeight(image) {
debugger
let image_width = 512
let image_height = 512
//
@@ -212,7 +212,7 @@ export default defineComponent({
* 停止画
*/
function stopDrawing() {
debugger
isDrawing = false
canvasHistory.push(imageCanvas.value.toDataURL('image/png'))
console.log(canvasHistory)
@@ -294,7 +294,7 @@ export default defineComponent({
* 回撤
*/
async function undo() {
debugger
if (step <= 0) {
//
imageContext.value.clearRect(
@@ -388,7 +388,7 @@ export default defineComponent({
message.error(value.message)
return
}
debugger
const arrayBuffer = value.data
const blob = new Blob([arrayBuffer], { type: 'image/png' })
const reader = new FileReader()
@@ -406,7 +406,7 @@ export default defineComponent({
}
async function SaveMask() {
debugger
//
if (canvasHistory.length <= 1) {
message.error('请先绘制蒙板')
@@ -418,7 +418,7 @@ export default defineComponent({
await window.img.Base64ToFile(
JSON.stringify([base64, `data/mask/mask_${new Date().getTime()}.png`]),
async (value) => {
debugger
if (value.code == 0) {
message.error(value.message)
return
@@ -486,7 +486,7 @@ export default defineComponent({
})
// PNG
await window.img.BatchProcessImage('tmp/input_crop', (value) => {
debugger
//
setTimeout(() => {
if (dp) {
@@ -496,6 +496,7 @@ export default defineComponent({
if (value.code == 0) {
message.error(value.message)
window.api.showGlobalMessageDialog(value)
return
}
window.api.showGlobalMessageDialog(value)
+3
View File
@@ -3,6 +3,8 @@ import { createRouter, createWebHashHistory } from 'vue-router';
import App from './App.vue'
import { Home } from '@vicons/ionicons5';
const app = createApp(App);
import { createPinia } from 'pinia'
const pinia = createPinia()
const routes = [
{
@@ -33,5 +35,6 @@ const router = createRouter({
routes
})
app.use(router);
app.use(pinia)
app.mount('#app')